面向对象编程的优势:
面向对象是将事物高度抽象化。
面向过程是一种自顶向下的编程
面向对象必须先建立抽象模型,之后直接使用模型
类:类(class)是具有相同属性和服务的一组实体(entity)的集合。它为属于该类的所有对象提供了统一的抽象描述
定义属性:访问修饰符 类型 属性名;
定义行为:访问修饰符 返回值类型 方法名(参数列表){方法体};
对象:对象就是类的一个实例,一个具象存在。
得到对象的方式:
实例化
语法:类名 对象名 = new 类名();
类反射
语法:类名对象名 = Class.forName(“完全限定名”).newInstance();
类名对象名 = 类名.class.newInstance();
克隆
反序列化
类与对象的关系:类是对象的抽象模板,对象是类的具象实现
当类成为对象:
[if !supportLists]1) [endif]装载:把类的.class文件读入内存
[if !supportLists]2) [endif]验证:把类的.class文件读入内存
[if !supportLists]3) [endif]准备:JVM为静态变量分配内存,并设置默认值
[if !supportLists]4) [endif]解析: 把类的.class文件读入内存
[if !supportLists]5) [endif]初始化:将静态变量的值进行初始化赋值
JAVA为值传递,不是址传递.
每一个类有默认的构造类
父类:具有相同属性与行为的类
失血模型:失血模型就是一个类,只有私有属性以及属性的getter/setter的纯数据类
封装:狭义---失血模型
广义---隐藏对象的属性和实现的细节,仅对外提供公共访问方式
封装的好处:
1.使用者只需要了解如何通过类的接口使用类,而不用关心类的内部数据结构和数据组织方法
2.高内聚,低耦合一直是我们所追求的,用好封装恰恰可以减少耦合
3.只要对外接口不改变,可以任意修改内部实现,这个可以很好的应对变化
4.类具有了简洁清晰的对外接口,降低了使用者的学习过程
开闭原则:
1. 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
2. 打开应用接口,关闭细节的实现
重载:
1. 在同类中,有两个或两个以上方法有相同的方法名,不同的参数列表(参数的个数,类型,类型的顺序只要有一个不同),则该组方法形成重载,重载与返回值无关
2. 重载是java面向对象的特征多态的体现,体现了静态多态性
构造函数:构造方法又称为构造函数,用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.
注意事项:
A.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)
B.每个类可以有一个以上的构造器
C.构造器可以有0个、1个或1个以上的参数
D.构造器没有返回值类型
E.构造器总是伴随着new操作一起调用
任何一个类都必须含有构造方法.
Static
[if !supportLists]1. [endif]被static修饰的成员变量和成员方法独立于该类的任何对象
[if !supportLists]2. [endif]用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量
[if !supportLists]3. [endif]static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用,但是不能在其他类中通过类名来直接引用
静态代码块在程序运行主方法前被加载,且只加载一次,每次实例化对象不会重置内存;非静态代码块在程序运行主方法前被加载,且每次实例化都被加载.