面向对象【上】
一.类
1.类:指一类事物,不能具体指哪种事物的一个抽象概念
2.类的定义格式:
class 类名 {
属性(变量);
行为(方法);
}
(class 是关键字,小写,用来定义类)
(命名规则:类名只能是字母,数字,下划线及$;不能以数字开头
命名约定:类名每个单词首字母大写【驼峰式】,变量名全部小写字母)
(尽量使用有意义的英文单词,实在不行用拼音,不要用中文)
3.属性:也叫成员变量,组成类的一部分,主要用于描述类的状态
方法:也叫成员方法,主要用于描述类的动作
Person 是类名,age 是成员变量,speak()是成员方法。在成员方法 speak()中可以直 接访问成员变量 age。
4.对象:对象是具体事物,是实实在在的
对象的创建与使用:
Java 程序中可以使用 new 关键字来创建对象
格式:类名 对象名【对象名实际上是变量名 】= new 类名();
例如:Person p = new Person();
通过对象调用方法,使用.(例:p通过.调用speak)
年龄为0岁的原因:
引用数据类型的变量都是存地址值的
5.当对象被实例化后,在程序中可以通过对象的引用变量来访问该对象的成员,但当没有任何变量引用这个对象时,它将成为垃圾对象,不能再被使用,会被系统自动回收。
列子:若不想引用,可让p指向空指针null,则0x0031会被回收
6.类和对象的关系
➢ 对象是类的实例,类是对象的模板。
➢ 类是抽象的,对象是具体的。
颜色,乘坐人数这些属性是在模板上定义好的,细化到对象后,又在这些属性上有了差异
二.封装
1.定义:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
(方法(函数)本身就是一种封装表现形式;类本身也是一种封装的表现形式。)
2.封装好处:
➢ 将变化隔离;
➢ 便于使用;
➢ 提高重用性;
➢ 提高安全性。
3.封装原则:
➢ 将不需要对外提供的内容都隐藏起来;
➢ 把属性都隐藏,提供公共方法对其访问。
4.例子:
当调用者进行了错误的赋值可以怎样解决:
为了不让调用者对变量随便赋值,定义Person类的时候把age属性对外隐藏起来(用到了访问修饰符),如下图
这样就可以使属性age在类的外面不能被访问
这时,test01里age出现了报错,(不能直接访问age了)
这时要想给属性age进行赋值,可以提供公共的访问方法对其访问
[方法一]:设置age的值
在Person.java里:
在PersonTest01.java里:用下面方法即可调用age
这里的20是调用setAge方法时调用的实际参数,20传给了Person.java的变量a
以上依然可以赋值非法字符,如果想要解决这个问题可以这样做:
这样就可以排除非法字符了
!如何获取age的值:
上面方法可以获取age的值
(2)在Person.java里,空白处点击右键
重点:this关键字
this开头的指的是成员变量的属性,后面的age是局部变量(即为列子里的20)
三.访问修饰符
四.构造方法
构造方法:构建创造对象时调用的方法(函数)
(1)特点:
➢ 方法名与类名相同,一模一样
➢ 不用定义返回值类型,不是无返回值类型 void,而是根本没有返回值
➢ 不可以使用 return 语句返回一个值,但是可以单独写 return 语句来作为方法的结束
(2)作用 可以给对象进行初始化。
(3)注意 :
➢ 默认构造方法的特点(注意)
➢ 多个构造方法是以重载(一个类里面有多个同名的方法)的形式存在的
【重载方法间的区别:(1)参数列表不同
(2)多个构造方法也可以重载:
】
注意:一个类没有定义构造方法时,java虚拟机会自动的添加一个无参数的构造方法,这个方法没有参数,方法体里也没有任何代码;如果定义了构造方法则系统不会再自动添加构造方法
这个方法里面可以用return,但不能加其他任何东西
对象一建立就会调用与之对应的构造方法,用来给对象进行初始化
private 访问修饰符,构造方法私有化,则在其他类中没法使用new+构造方法的形式来构造对象了,无参的构造方法不能初始化对象的属性
一旦定义了一个构造方法(不管有参无参),系统就不会再自动给你添加无参数 的构造方法了,即使你没定义无参数的构造方法。
(4)构造方法和一般方法的区别:
➢ 写法上不同:一般方法标识符首字母小写,构造方法和类名一模一样,首字母大写;
构造方法不要返回值,定义构造方法是前面不要有任何返回值类型,也不要无返回值类型(void);
➢ 运行上的不同:构造方法是在对象一建立就会运行,用于给对象初试化;而一般方法是对象调用才执行, 是给对象添加具备的功能。
一个对象建立,构造方法只运行一次;而一般方法可以被该对象多次调用。
(5).构造方法和 set 方法的区别:
我们之前为了保护 age 属性,我们把他们定义成 private 的,然后设计了 set/get 方法对外 提供访问,构造方法可以给 age 设置初始值,setAge()方法也可以给 age 设置值,setXXX()方法是一般方法,可以被对象多次调用,可以多次修改 age 属性,而构造 方法是在对象创建时调用,对于一个对象只能调用一次,多次调用构造方法就说明创建了多个对 象。
6.构造方法注意事项:
在构造方法前面加上 void
void Person() { }
可以加void ,语法编译没有错误,但是这时Person()方法不再是构造方法,已变为一般方法。因为构造方法没有返回值,不用定义返回值类型。
五.关键字
(一)this关键字
如果不用this时,上图红框位置就会有冲突,等号后面的age是形参(局部变量),优先级高于全局变量所以可以覆盖全局变量
所以要在全局变量前加上this.
哪个对象调用this所在的方法,this就代表哪个对象
谁调用这个例子里的setAge(this所在方法),this就代表哪个对象
这个例子里的this就是代指的p,因为不知道未来是什么名字的变量,所以用this代替
2.this的应用
(1)年龄比较:(this代表本类对象)
运用上面定义的方法比较p1和p3的年龄:p1调用方法和p3比较(此处含有this的方法被p1调用,所以this代表p1)
(2)this在构造方法间的调用
1 this在一个构造方法里调用另一个构造方法,一定要在这个构造方法的开头(第一行)进行调用
2 小括号里写哪个方法名就调用哪个构造方法
3 构造方法间不能互相调用(你调用我,我调用你),也不能自己调用自己
(二)static关键字
1.当每个对象某个属性值都相同时,前面加上static,这个属性就变成了静态,不会在每个对象内存区域内单独保存,java虚拟机会统一保存一个
2.static 是什么意思?具有什么意义?
静态,用来修饰成员(变量、方法)。被 static 修饰的成员独立于该类的任何对象。也就是 说,它不依赖类特定的实例,被类的所有实例共享。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人