-
三大思想
- OOA面向对象分析
- OOD面向对象设计
- OOP面向对象编程
-
三大特征
- 封装性:内容外部不可见
- 继承性:将父类的功能继承下来继续发展
- 多态性:同一事物多种形态(一个接口,多种实现)
-
对象创建的内存过程
- 栈:Java中一个线程一个栈区,每一个栈中的元素都是私有的,不能被其他栈访问。先进后出,栈中数据的大小和生命周期都是确定的,缺乏灵活性,但是存储速度快(栈指针),仅次于CPU寄存器。存储的内容为:基本数据类型以及引用数据类型的引用
- 堆:存放的是类的对象
- 当对象没有任何引用指向的时候会被GC回收
-
static静态修饰符
- 静态修饰的属性为类的属性,不依赖于对象的创建而存在,在方法区中单独存在。在加载类的时候就会被创建。
- 无论有多少个对象,静态属性在内存中永远只有一份
- 在访问时,静态不能访问非静态,非静态可以访问静态
-
包
- 把功能相似的类和接口放在同一个包中,方便查找或使用
- 包类似于文件夹,不同包内可以放相同名字的文件
- 限定了访问权限
- 定义:com.公司名.项目名.模块名(所有单词都小写)
-
权限修饰符
修饰符 类 包 子类 其他包 public ✅ ✅ ✅ ✅ protected ✅ ✅ ✅ default ✅ ✅ Private ✅ -
代码块
- 构造代码块
- 构造代码块随着对象的每次创建。执行一次,且执行在构造方法之前。区别于构造方法的是,无论用户调用哪一个构造方法,构造代码块都必然执行。
- 静态代码块
- 静态代码块随着类的加载(第一次使用,先于构造代码块的执行),静态代码块执行。因为类只加载一次,所以静态代码块只执行一次。(准备唯一资源的时候使用)
- 构造代码块
-
super:
- 通过super,可以访问父类的构造方法
- 调用super构造方法的代码,必须写在子类构造方法的第一行
- 通过super,可以访问父类的属性
- 通过super,可以访问父类的方法
- 通过super,可以访问父类的构造方法
-
重写(override)规则:
- 参数列表必须完全与被复写方法相同
- 返回值类型相同
- 访问权限不能比父类的方法更低
- 父类的成员方法只能被它的子类重写
- 声明为static和private的方法不能被重写
-
Java中重写(override)与重载(overload)的区别:
- 发生的位置
- 重载:一个类中
- 重写:子父类中
- 参数列表限制
- 重载:必须不同
- 重写:必须相同
- 返回值类型
- 重载:与返回值类型无关
- 重写:返回值类型必须一致
- 访问权限
- 重载:与访问权限无关
- 重写:子方法权限必须小于父方法的权限
- 异常处理
- 重载:与异常无关
- 重写:异常范围可以更小,但是不能抛出新的异常
- 发生的位置
-
抽象类
- 抽象类不能使用final声明
- 抽象类可以有构造方法
- 抽象类必须使用public或protected修饰,默认是public
- 抽象类的子类必须实现抽象类的全部抽象方法,如果有未实现的那么子类也将成为抽象类
-
接口
- 定义方法
interface 接口名称{ public static final int a = 10;//全局常量; void say();//抽象方法; }
- 面向接口编程思想
- 接口是定义(规范、约束)与实现的分离
- 优点:
- 降低程序的耦合性
- 易于程序的扩展
- 有利于程序的维护
-
多态
- 父类引用指向子类对象
-
内部类:
-
成员内部类——可以访问到外部类的所有成员属性和方法。
Outer o = new Outer(); Outer.Inner i = o.new.Inner();
局部内部类——定义在方法内的类
-
匿名内部类
- 只能访问final类型的局部变量(局部内部类会单独生成一个字节码文件其中会对访问的局部变量进行备份,如果局部变量发生变化就会发生前后不一致的逻辑错误。)
静态内部类——不能访问外部类非静态的成员变量和方法
-
-
可变参数
//可变参数当作数组来使用 public static int sum(int...nums){ int n = 0; for(int i=i;i<nums.length;i++){ n+=nums[i] } return n }
- 可变参数只能写在参数列表的最后