一、final:最终的
1、修饰类
特点:被final修饰的类不能被继承
格式:
public final class 类名
2、修饰方法
特点:被final修饰的方法不能被重写
格式:
修饰符 final 返回值类型 方法名(参数){
方法体
返回值
}
3、修饰局部变量
-
普通变量:不能被二次赋值
格式:
final 数据类型 变量名 = 值
-
对象:地址值不能改变,但是内容可以改变!
格式:
final 类型 对象名 = new 类名();
4、修饰成员变量
- 格式:
final 数据类型 变量名
-
特点:
被final修饰的成员变量不能被二次赋值 -
注意事项
1.要不就手动赋值
2.要不就利用所有的构造方法初始化
例子:
public class Student {
// 必须手动赋值,不然没有意义
final String name;
// 也可以在空参构造里赋值
public Student() {
name = "蔡徐坤";
}
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
// 这里不能二次赋值
/* public void setName(String name) {
this.name = name;
}*/
}
二、static:静态的
1、特点:
a. static修饰的成员变量可以作为共享数据(根据这个static所在的类创建出来的对象都可以共享这个static成员)
b. static修饰的成员,属于类,不属于对象,我们在调用static修饰的成员时候,就不用new对象,直接类名调用
c. static修饰的成员在进入内存的时候会优先对象存在
2、使用
修饰成员变量
格式:
static 数据类型 变量名
使用:建议类名直接调用
修饰方法
格式:
public static 返回值类型 方法名(参数){
方法体
返回值
}
使用:建议类名直接调用
访问特点
访问静态方法的特点
- 静态的不能直接访问非静态的,静态的属于类,非静态的属于对象 --> 类一旦被加载,静态的就会跟着类直接进内存,是优先于对象存在的
-
打个比方:秦始皇不知道乾隆,乾隆知道秦始皇
-
使用:创建对象,再调用非静态的方法
-
静态的能访问静态
同类:直接调用、创建对象调用、类名调用
不同类:创建对象、类名直接调用 -
非静态的能直接访问静态
同类:直接调用、创建对象调用、类名直接调用
不同类:创建对象、类名调用
总结:
1.只要是静态的要访问非静态的:new对象调用
2.只要是访问静态的:直接类名调用(通用)
静态代码
格式
static{
....
}
特点
优于构造方法执行,并且运行一次