final关键字代表最终的、不可改变决定 常见四种用法: 1) 修饰一个类 2) 修饰一个方法 3) 修饰一个局部变量 4) 修饰一个成员变量
格式:
public final class 类名称{ …… }含义:当前这个类**不能有任何子类。**其中的所有成员方法都无法进行覆盖重写
格式:
修饰符 final 返回值类型 方法名称(参数列表){ 方法体 }注意事项: 对于类、方法来说,abstract关键字和final关键字不能同时使用
格式:
final 数据类型 变量名 = 数值;只能赋值一次,数值无法改变。可以先创建再赋值。 对于基本数据类型,变量数值大小不变 对于引用数据类型,变量地址值不变
成员变量具有默认值,所以用了final关键字之后必须手动赋值,不会再给默认值。要么使用直接赋值,要么通过构造方法赋值。
必须保证类当中的所有重载的构造方法都会对final修饰的成员变量赋值
汽车和发动机、人和心脏
分类: 1、 成员内部类 2、 局部内部类(包括局部内部类)
格式:
修饰符 class 外部类名称{ 修饰符 class 内部类名称{ } }注意: 内用外,随意访问;外用内,需要内部类对象
使用方法: 1) 间接方式:在外部类的方法中,调用内部类的方法,然后再main中只调用外部类的方法 2) 直接方式:外部类名称.内部类名称 对象名 =new 外部类名称().内部类名称()
内部类的同名变量访问
需要访问的变量访问方式局部变量num内部类变量this.num外部类变量outer.this.num如果一个类是定义在一个方法内部的,那么就是一个局部内部类。只有当前所属的方法才能使用
定义格式:
修饰符 class 外部类名称{ 修饰符 返回值类型 外部类方法名称(参数列表){ class 局部内部类名称{ //…… } } }定义一个类的时候,权限修饰符规则: 1) 外部类:public/(default) 2) 成员内部类:public/protected/(default)/private 3) 局部内部类:什么都不能写
如果希望访问所在方法的局部变量,那么这个局部变量必须是有效final的(Java 8+) 原因: 1) new出来的对象在堆内存中 2) 局部变量跟这方法走,在栈内存中 3) 方法运行结束之后立刻出栈,局部变量就会消失 4) new出来的对象在队中持续存在,指导垃圾回收消失
如果接口的实现类,或者是父类的子类,那么这种情况下就可以省略该类的定义,而改为使用匿名内部类 定义格式:
接口名称 对象名 = new 接口名称(){ //覆盖重写所有抽象方法 }格式解析: 1) new代表创建对象的动作 2) 接口名称就是出匿名内部类需要实现哪个接口 3) {…} 才是匿名内部类的内容
1) 匿名内部类,在创建对象的时候只能使用唯一一次 2) 匿名内部类和匿名对象不是一回事