Java面向对象编程基础方法
Java是一种面向对象的编程语言。面向对象编程Object-Oriented Programming简称 OOP。与面向对象编程相对的是面向过程编程。面向过程编程是把模型分解成一步一步的过程编写一个todo list然后按照步骤一步一步来。而面向对象编程顾名思义首先要有一个对象。然后就可以进行互动//比如养了一只猫MyCatmcnewMayCat();mc.name鸡翅;mc.send(猫条);因此面向对象编程是一种通过处理对象的方式将现实世界映射到计算机模型的方法。现实世界中我们定义了“人”这种抽象概念而具体的人则是“小明”、“小红”、“小军”等一个个具体的人。所以“人”可以定义为一个类class而具体的人则是实例instance现实世界计算机模型Java代码人类 / classclass Person { }小明实例 / mingPerson ming new Person()小红实例 / hongPerson hong new Person()小军实例 / junPerson jun new Person()同样的“书”也是一种抽象的概念所以它是类而《Java核心技术》、《Java编程思想》、《Java学习笔记》则是实例现实世界计算机模型Java代码书类 / classclass Book { }Java核心技术实例 / book1Book book1 new Book()Java编程思想实例 / book2Book book2 new Book()Java学习笔记实例 / book3Book book3 new Book()1.1 class 和 instance所以只要理解了class和instance的概念就基本明白了什么是面向对象编程。class是一种对象模板它定义了如何创建实例因此 class 本身就是一种数据类型。instance是对象实例是根据 class 创建的。可以创建多个 instance每个 instance 类型相同但各自的属性值可能不同。1.1.1 定义 class在 Java 中创建一个类就是定义一个class。例如定义一个名为Person的类classPerson{publicStringname;publicintage;}1.1.2 创建实例定义了 class只是定义了对象模板而要根据对象模板创建出真正的对象实例必须用new操作符然后需要定义一个引用类型的变量来指向这个实例PersonmingnewPerson();上述代码创建了一个Person类型的实例并通过变量ming指向它。Person ming是定义Person类型的变量ming,而new Person()是创建Person实例。有了指向这个实例的变量我们可以通过这个变量来操作实例访问实例变量可以用 变量.字段 例如ming.nameXiao Ming;//对字段name赋值ming.age12;//对字段age赋值System.out.println(ming.name);Person.hongnewPerson();hong.nameXiao Hong;hong.age11;上述两个变量分别指向两个不同的实例它们在内存中的结构如下------------------ ming ----|Person instance||nameXiao Ming||age12|------------------ ------------------ hong ----|Person instance||nameXiao Hong||age15|------------------两个instance拥有class定义的name和age字段且各自都有一份独立的数据互不干扰。一个Java源文件可以包含多个类的定义但只能定义一个public类且public类名必须与文件名一致。如果要定义多个public类必须拆到多个Java源文件中。1.2 练习请定义一个City类该class具有如下字段:name: 名称String类型latitude: 纬度double类型longitude: 经度double类型实例化几个City并赋值然后打印。publicclassMain{publicstaticvoidmain(String[]args){classCity{publicStringname;publicdoublelatitude;publicdoublelongitude;}CitybjnewCity();bj.nameBeijing;bj.latitude39.903;bj.longitude116.401;System.out.println(bj.name bj.latitude bj.longitude);}}方法一个class可以包含多个filed例如下面示例就给Person类定义了两个filedclassPerson{publicStringname;publicintage;}但是直接把filed用public暴露给外部可能会破坏封装性。比如代码可以这样写classPerson{privateStringname;privateintage;}把field从public改成private外部代码不能访问这些field那我们定义这些field有什么用怎么才能给它赋值怎么才能读取它的值所以我们需要使用方法method来让外部代码可以间接修改field// private fieldpublicclassMain{publicstaticvoidmain(String[]args){PersonmingnewPerson();ming.setName(Xiao Ming);// 设置nameming.setAge(12);// 设置ageSystem.out.println(ming.getName(), ming.getAge());}}classPerson{privateStringname;privateintage;publicStringgetName(){returnthis.name;}// 公共方法用于获取 name 字段的值/* ---------- Setter 方法 ---------- 公共方法用于设置 name 字段的值 void表示不返回任何值 setName方法名遵循 setXxx 规范 (String name)参数列表接收一个 String 类型的参数参数名也是 name 注意这里的参数名 name 与成员变量 name 同名所以要用 this 区分 */publicvoidsetName(Stringname){this.namename;// 将传入的参数值赋给当前对象的 name 字段}publicintgetAge(){returnthis.age;}// 公共方法用于获取 age 的值publicvoidsetAge(intage){if(age0||age100){thrownewIllegalArgumentException(invalid age value);}this.ageage;// 将传入的参数值赋给当前对象的 age}}定义方法从上面的代码可以看出定义方法的语法为修饰符 方法返回类型 方法名方法参数列表{若干方法语句;return方法返回值;}例publicvoidsetAge(intage){if(age0||age100){thrownewIllegalArgumentException(invalid age value);}this.ageage;}方法返回值通过return语句实现如果没有返回值返回类型设置为void可以省略return。private方法有public方法也有private方法。和private字段一样private方法不允许外部调用那定义private方法的作用是定义private方法的理由是内部方法是可以调用private方法的。例如//private methodimportjava.time.Year;publicclassMain{publicstaticvoidmain(String[]args){PersonmingnewPerson();ming.setBirth(2008);System.out.println(ming.getAge());}}classPerson{privateStringname;privateintbirth;publicvoidsetBirth(intbirth){this.birthbirth;}publicintgetAge(){intcurrentYearYear.now().getValue();//now() 是 Year 类自带的静态方法//因为 now() 返回的不是纯数字而是一个“年份包裹”。getValue()// 就是把这个包裹拆开取出里面的 int 整数比如 2026returncalcAge(currentYear);}/* ---------- 私有方法核心知识点 ---------- private 修饰这个方法只能在本类Person内部使用对外部Main完全隐藏 它的作用根据传入的当前年份和对象的出生年份计算出年龄 */privateintcalcAge(intcurrentYear){returncurrentYear-this.birth;}}calcAge()是一个private方法外部代码无法调用但是内部方法getAge()可以调用它。这个Person类只定义了birth字段没有定义age字段获取age时通过方法getAge()返回的是一个实时计算的值并非存储在某个字段的值。这说明方法可以封装一个类的对外接口调用方不需要知道也不关心Person实例在内部到底有没有age字段。this变量在方法内部可以使用一个隐含的变量this。他始终指向当前的实例。因此通过this.field就可以访问当前实例的字段如果没有命名冲突则可以省略thisclassPerson{privateStringname;publicStringgetName(){returnname;//相当于this.name}}如果有局部变量和字段重名那么局部变量优先级更高就必须加上thisclassPerson{privateStringname;publicStringgetName(Stringname){// 前面的this不可少少了就变成局部变量name了this.namename;}}声明本文内容为本人基于 廖雪峰 Java 教程 进行实操学习后的个人笔记与代码实践记录。文中所有知识点、代码示例及讲解均源自上述网站著作权归原作者廖雪峰及其团队所有。本文仅用于个人学习总结与知识分享不涉及任何商业用途。如涉及侵权请联系删除。

相关新闻

Jenkins自动化部署

Jenkins自动化部署

一、介绍 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、…

2026/8/12 18:04:19 阅读更多 →
从泰凌微笔试题看嵌入式工程师核心内功:C语言、RTOS与无线通信

从泰凌微笔试题看嵌入式工程师核心内功:C语言、RTOS与无线通信

1. 从一道笔试题看嵌入式软件工程师的“内功” 最近在整理资料时,翻到一份2023年泰凌微电子的笔试题。泰凌微在物联网无线连接芯片领域,尤其是蓝牙和Zigbee方面,是国内的头部玩家。他们的笔试题,某种程度上可以看作是这个细分领域…

2026/8/13 18:57:01 阅读更多 →
IntelliJ IDEA反编译JAR包并集成到Spring Boot项目的工程实践

IntelliJ IDEA反编译JAR包并集成到Spring Boot项目的工程实践

1. 项目概述:为什么我们需要反编译并导入JAR包?在Java开发,特别是基于Spring Boot或Spring Cloud的微服务生态中,我们经常会遇到一个既现实又有点“灰色”的需求:手头只有一个编译好的JAR包,没有源码&#…

2026/8/13 18:25:03 阅读更多 →

最新新闻

Unitful.jl常见问题解答:从入门到精通的避坑指南

Unitful.jl常见问题解答:从入门到精通的避坑指南

Unitful.jl常见问题解答:从入门到精通的避坑指南 【免费下载链接】Unitful.jl Physical quantities with arbitrary units 项目地址: https://gitcode.com/gh_mirrors/un/Unitful.jl Unitful.jl是一个用于处理物理量和单位的强大Julia包,它允许你…

2026/8/13 20:24:05 阅读更多 →
如何在浏览器中快速运行LÖVE游戏?终极Love.js完整指南

如何在浏览器中快速运行LÖVE游戏?终极Love.js完整指南

如何在浏览器中快速运行LVE游戏?终极Love.js完整指南 【免费下载链接】love.js LVE ported to the web using Emscripten 项目地址: https://gitcode.com/gh_mirrors/lov/love.js 想让你用LVE框架开发的2D游戏也能在网页上运行吗?今天我要为你介绍…

2026/8/13 20:24:05 阅读更多 →
SPARTA与Rust:构建安全可靠静态分析工具的最佳实践

SPARTA与Rust:构建安全可靠静态分析工具的最佳实践

SPARTA与Rust:构建安全可靠静态分析工具的最佳实践 【免费下载链接】SPARTA SPARTA is a library of software components specially designed for building high-performance static analyzers based on the theory of Abstract Interpretation. 项目地址: https…

2026/8/13 20:24:05 阅读更多 →
HackRF-Treasure-Chest揭秘:5分钟了解这个宝藏项目的核心功能

HackRF-Treasure-Chest揭秘:5分钟了解这个宝藏项目的核心功能

HackRF-Treasure-Chest揭秘:5分钟了解这个宝藏项目的核心功能 【免费下载链接】HackRF-Treasure-Chest HackRF software and captures by everyone and for everyone. Argh matey. 项目地址: https://gitcode.com/gh_mirrors/ha/HackRF-Treasure-Chest HackR…

2026/8/13 20:24:05 阅读更多 →
2024年高端网站教建设避坑指南:从设计到源码交付的全链路解析

2024年高端网站教建设避坑指南:从设计到源码交付的全链路解析

在如今的互联网商业环境中,网站早已不再仅仅是一个展示企业形象的“线上名片”,它是品牌资产的核心载体,是流量转化的第一现场,更是连接用户信任与商业价值的数字化枢纽。然而,当我们谈论“高端网站”时,很多老板和项目负责人往往陷入一种误区:认为花了大价钱、用了炫酷…

2026/8/13 20:24:05 阅读更多 →
ComfyUI-WanVideoWrapper:一站式AI视频生成完整解决方案指南

ComfyUI-WanVideoWrapper:一站式AI视频生成完整解决方案指南

ComfyUI-WanVideoWrapper:一站式AI视频生成完整解决方案指南 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想要在ComfyUI中轻松创作专业级AI视频吗?ComfyUI-WanVideoWr…

2026/8/13 20:23:05 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →