Loading... # 内容摘要 * 面向对象思想,面向过程思想 面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。 面向过程:强调的是功能行为。代表语言:C语言。 面向对象:将功能封装进对象,强调具备了功能的对象。代表语言:Java、C++、C#。 * 类 * 属性:成员变量 * 行为:成员函数 * 构造函数 * 成员变量和局部变量的区别 * 对象内存结构 * 匿名对象 * 静态变量,静态函数 * 静态代码块,构造代码块 * 抽象类,接口 * 内部类,匿名内部类 * 面向对象三大特征:封装、继承、多态 * this、super关键字 * 修饰符 * public、private、protect * static、final、abstract * 异常 # 类的定义 - 对象是类的实例,类是对象的抽象 - 类可被认为是一种**自定义的数据类型**,可以使用类来定义变量 - 类中的成员:字段(成员变量)、构造器、方法、初始化块、内部类(包括接口、枚举) - **外部类**只能有两种访问控制级别:public 和 缺省 - 定义类的语法格式 ```java [修饰符] class 类名 { 0-N 成员变量(字段) // 描述类具有的特性,对象的状态 0-N 构造器定义 0-N 方法 // 描述类具有的功能,对象的行为 } ``` # 对象的创建和操作 - 对象实例化过程: - 根据**类及其父类**的字段在堆中为该对象的所有**实例变量**分配内存; - 对这些实例变量执行**初始化**,其初始化顺序是:先执行**初始化块或声明实例变量时指定的初始值**(它们的执行顺序与它们在源代码中的排列顺序相同),再根据传入的实参列表执行**对应构造器里指定的初始值**; - 由 new 运算符返回对象的引用地址 给 该对象的引用变量(**栈内存**)。 - 类或实例访问成员变量或方法的语法:类.类变量|方法 或者 实例.实例变量|方法 ```java // 定义一个 Person 类 class Person { String name; void coding() {} // 测试类 class PersonDemo { public static void main(String[] args) { Person p = new Person(); // 创建一个对象 p p.name = "Admin"; p.coding(); } } ``` # static 修饰符 - `static`修饰的成员(类成员:类变量、类方法、静态初始化块、静态内部类) - **随着所在类的加载而加载**,优先于该类对象存在(当字节码被加载进 JVM 时类成员就存在了,而对象是后来 new 出来的) - 被该类所有对象所共享 - 可以直接用类名调用 - 无`static` 修饰的成员(**实例成员**:实例变量、实例方法、普通初始化块、实例内部类) - static 修饰的成员(属于类)及**构造器**不能直接访问没有 static 修饰的成员(属于对象) - 局部变量不属于任何类或实例,不能使用 static 修饰;不能修饰构造器 - static 修饰的方法中**不能使用** this 或 super 引用(static 强调的是类,this 和 super 强调的是对象) # this 关键字 当一个对象创建之后,JVM 会分配一个引用自身的引用:this ## 存在位置 - **构造方法**中,代表正在初始化的**对象** - **实例方法**中,代表调用此方法的**对象** ## 使用 this - 构造器重载时的互调 `this([参数]);` (必须作为构造方法中的第一条语句),一般地,是少参数的构造器调用多参数的构造器(将功能都写在多参数的构造器中) - 解决**实例方法**中成员变量和参数(局部变量)之间的二义性,必须使用 - 同类中**实例方法**间互调(调用者是 this,不建议省略) - **实例方法**将 this 作为参数传递给另一个方法 - 将 this 作为方法的返回值(链式方法编程) # 构造器 ## 作用 - 创建对象(**必须和 new 一起使用**,通过 new 关键字来**调用**某个类的构造器) - 完成对象字段(实例变量)的初始化(手动赋值) ## 特点 - 构造器名与类名相同(首字母大写) - **不用定义返回值类型**(缺省的返回值类型是当前类) - 构造器体中不需要 return 语句(缺省的返回值是当前创建对象的引用) ## 默认构造器 编译器在编译源文件的时候产生的缺省的构造器 - 符合构造器体特点 - **没有形参** - 没有构造器体 - **访问权限修饰符**与所在类的访问权限修饰符**相同** - **显式定义了构造器之后,默认的构造器就没有了** ## 构造器的重载 ```java public class Person { private String name; private int age; /* 默认构造器(编译器产生的) public Person() {} */ // 创建对象,初始化 name public Person(String name) { this(name, 0); } // 创建对象,初始化 name 和 age public Person(String name, int age) { this.name = name; this.age = age; } // 此处省略 name 和 age 的 setter 和 getter 方法 } class PersonDemo { public static void main(String[] args) { Person p = new Person("Admin", 28); // 创建对象 p,并初始化 } } ``` 最后修改:2022 年 08 月 02 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏