类和对象
C - 面向过程的编程语言
Java/C++ - 面向对象的编程语言
1. 类与对象的初步认知
- 类: 类就是一类对象的统称
- 对象: 对象就是这一类具体化的一个实例。
- 人类: 彭于晏 和 我都是人类, 参数不同
- 总的来说:类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象。
2. 类和类的实例化
- 注意事项:
- 类的命名使用有意义的大驼峰单词命名法
- 从第一个单词开始首字母就大写, 多个单词都是首字母大写
- 类中定义的成员变量都有默认值
- 默认值就是变量所在类的默认值
- 类的命名使用有意义的大驼峰单词命名法
2.1 创建类
// 创建类
class <class_name>{
field; //成员属性
method; //成员方法
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5lupM1R-1649984981642)(https://pic-log-1310504119.cos.ap-hongkong.myqcloud.com/Picgo/20220412225059.png)]
2.2 类的实例化
// 实例化对象
<class_name> <对象名> = new <class_name>();
- new 关键字用于创建一个对象的实例.
- 使用 . 来访问对象中的属性和方法.
- 同一个类可以创建对个实例
3. 类的成员
3.1 字段/属性/成员变量
- 成员变量可以在类的定义时,
3.2 方法
3.3 static关键字
- 看见static本能反应和对象无关: 静态,表示共有
- static修饰内容
- 修饰方法:类方法,工具方法
- 修饰代码块:静态代码块
- 修饰内部类:静态内部类
3.3.1 修饰属性
- 修饰属性:类属性,类变量,所有对象共享
- 当一个实例变量被static关键字修饰, 他就表示类的属性,该类的所有对象共享这个属性,所有对象的属性值大家都一样.
- static修饰的属性在JVM方法区中存储(不在堆栈存储),所有该类对象共享此属性.
-
- static修饰的属性直接通过类名称就可以访问,无需通过对象访问.
Person.country
- static修饰的属性直接通过类名称就可以访问,无需通过对象访问.
- 总结:
- static变量称为类属性, 在方法区中存储, 该类的所有对象共享此变量
- 若在类中定义了常量,一般我们使用static和final共同修饰,全局常量
- 要使用类属性, 我们通常直接通过
类名称.属性名称
不推荐使用对象名称.属性名称
3.3.2 修饰方法
- 类方法,工具方法: 在任何方法上应用static关键字,此方法称为静态方法
- 直接通过类名称访问,没有对象就能访问.
- 例如: main方法就是静态方法
4. 封装
- 什么是封装? 保护性和易用性
4.1 private实现封装
- private实现属性和方法的封装只是封装的一种.
- Java中有四大访问修饰符: private < default < protected < public
- public: 公有的, 在当前程序(项目)中都是可见的.
- private:私有的, 被修饰的属性和方法只在类的内部可见, 出了类的{}就对外部隐藏了.
4.2 getter和setter方法
- getter方法, 表示获取这个成员的值
- setter方法, 表示设置这个成员的值
5. 构造方法
- 构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作
- 构造方法的作用就是产生对象
- 使用new关键字产生一个对象时,分为两步
- 为对象在堆中分配空间
- 调用对象的构造方法为对象成员变量赋值
5.1 基本语法
- 方法名称必须与类名称相同
- 构造方法没有返回值类型声明
- 每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
- 无参构造: public Person() {}
- 有参构造: public Person(String name,int age,String sex) {}
- 构造方法可以重载:重载只可能是参数数量不同.
this关键字
- this表示当前对象的引用
- this关键字修饰内容
- 调用当前对象的成员变量
- 调用当前对象的成员方法
- 调用普通成员方法
- 构造方法的互相调用
- this调用其它的构造方法必须放在当前构造方法的首行
- this调用方法不能成环(死循环)
- 表示当前对象的引用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IWGG8xAG-1649984981643)(https://pic-log-1310504119.cos.ap-hongkong.myqcloud.com/Mweb/2022/04/14/16498491655225.jpg)]
6. 代码块
- 代码块:指的就是使用{}括起来的一段代码称为代码块.
- 根据定义的代码块的位置以及关键字的不同分为以下代码块
6.1 普通代码块
- 定义在方法中,使用{}括起来的代码块.
6.2 构造代码块
- 直接定义在类中,使用{}括起来的代码块. 一般用于初始化实例成员变量.
- 优先于构造方法执行,有几个对象产生就调用几次构造块.
6.3 静态代码块
- 定义在类中,使用static定义的代码块.
- 最先执行,且只执行一次
7. 补充说明
7.1 匿名对象
- new出来的对象,没有引用指向,使用一次后就销毁.
new Person()