final: 终态的意思 不可变
可以修饰成员变量、成员方法
修饰类:
格式:
public final class 类名{
}
例子:public final class string
被final修饰的类,不能被继承,但是该类可以继承别的类
修饰方法:
格式:
修饰符 final 返回值类型 方法名(参数类型 参数名,..){
}
被final修饰的方法不能被重写
修饰变量:
- 局部变量:被final修饰的变量会变成一个常量,只能赋值一次
格式:- final 数据类型 变量名 = 值;
- final 数据类型 变量名;变量名 = 值;
- 成员变量:被final修饰的成员变量会变成一个常量,只能赋值一次
- 显示赋值:final 数据类型 变量名 = 值;
- 构造方法赋值:必须保证所有构造方法都会给该常量赋值
- 常量规范:一般常量名都是全部大写
权限修饰符:
- public:公共的(整个项目)
- protected:受保护的(本类和子类)
- default:默认的(同一个包)
- private:私有的 (本类)
publIc > protected > default > private
public 具有最大权限,private则是最小权限
编写代码时,如果没有特殊考虑,建议这样使用权限:
- 成员变量使用private,隐藏细节
- 构造方法使用public,方便创建对象
- 成员方法使用public,方便调用方法
- 不加权限修饰符,其访问能力与default修饰符相同
内部类:
概述:类A中包含B 类A就是外部类 类B就是内部类
成员内部类:定义在类中方法外的类
格式:
public class 外部类名{
public class 内部类名{
}
}
访问特点:
- 内部类可以直接访问外部类的成员,包括私有成员
- 外部类要访问内部类的成员,必须要建立内部类的对象
创建内部类对象的格式:
- 外部类名.内部类名 对象名 = new 外部类名().new 内部类名()
- 内部类访问外部类中的成员变量
- 外部类名.this.变量名
内部类仍是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和&符合
比如:Person$Heart.class
匿名内部类(重点)
本质:继承了一个类的子类(实现了一个接口的实现类) 的匿名对象
继承了一个类的匿名子类的对象
匿名内部类必须继承一个父类或者实现一个父接口。
匿名内部类可以作为抽象类的匿名对象,也可以作为接口的匿名对象
格式:
new 类名\接口名(){
实现抽象方法
};
例如:new Animal(){
@Override
public void eat(){
System.out.println("匿名内部类的eat方法");
}
};
引用类型用法的总结:
数组作为方法的参数
数组作为方法的返回值
数组作为类的成员变量
类作为方法的参数
类作为方法的返回值
类作为类的成员变量
接口作为方法的参数 可以接收该接口的所有实现类的对象
接口作为方法的返回值 可以返回改接口的所有实现类的值
接口作为类的成员变量
String[] arr;//成员变量 数组作为类的成员变量
String name;//类作为类的成员变量
A a;//接口作为类的成员变量
public static void main(String[] args){
}
枚举:enumeration
概述:枚举也是一种引用数据类型
作用:其实就是用来储存固定的值
格式:
public enum 枚举名{
枚举值1,
枚举值2,
枚举值3,
...
}
使用:枚举名.枚举值