10.static和final关键字详解
休对故人思故国,且将新火试新茶。诗酒趁年华。
——苏轼《望江南》
## 1. static关键字
- static关键字
- 关于
static
关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员属于类的,而不是单单是属于某个对象。也就是说,既然属于类,就可以不靠创建对象来调用了。- 如果使用static修饰成员方法,那么这个方法就变成了静态方法
- 静态属性和静态方法(类加载器加载字节码文件的时候 全局委托机制)优先于非静态的属性和方法。
- 非静态的属性和方法—–知道有哪些静态的属性和方法,所以他能够访问静态的属性和方法
- 但是因为静态属性和方法加载的时候,这时候还没有对象,没有对象就没有成员变量和成员方法。
所以静态的方法中无法调用非静态的属性和方法。- 静态方法中,不能使用this关键字。
- static修饰的属性和方法是属于类的属性和方法,所以在调用的时候,推荐是用
类名.属性名 类名.方法名();
- 静态代码块 > 非静态代码块 > 构造器。Static{} {} public 类名(){}
- 静态代码块只执行一次,非静态代码块,每次进入到当前类的时候都会执行一次。
2. final关键字
代表的是最终的,不可改变的
2.1 常见的四种用法
- final 关键字可以用来修饰一个 ****类* *** 被修饰的类,不能被继承。
- final 关键字可以用来修饰一个 *方法* 被修饰的方法,不能被重写。
- final 关键字可以用来修饰一个 *成员变量* 被修饰的变量,不能被重新赋值。
- final 关键字可以用来修饰一个 *局部变量* 被修饰的变量,不能被重新赋值。
2.1.1 final修饰局部变量
- 一旦使用final来修饰局部变量,那么这个变量不能进行修改。一次赋值,终生不变。
- 引用数据类型,修改对象的属性是不会报错,如果重新new 对象的时候,新开辟了一块内存地址。将新的地址赋值给student引用报错。final修饰的引用数据类型,不能改变引用的地址能改变其属性值。
2.1.2 final修饰成员变量
- 局部变量使用final修饰的时候,不赋值不报错(但在调用之前需要赋值)。 局部变量没有默认值。
- 成员变量使用final修饰的时候,不赋值报错。 成员变量有默认值,所以必须手动赋值。(假设:如果不给final修饰的变量赋值,那么这个变量使用默认值。)
- 使用final修饰成员变量。只要是在创建对象之前给属性赋值就可以了。
1 | /** |
2.1.3 final修饰方法
- 当关键字final修饰一个方法的时候,这个方法就是最终方法,也就是说当前的方法不能重写。
2.1.4 final修饰类
- 如果使用了final关键字修饰一个类那么这个使用final修饰的类不能有任何的子类但是可以拥有父类
- final 不能和abstract同时修饰一个类,因为final修饰的类不能被继承(所以所有的方法都不能被重写)但是abstract修饰的类是抽象类,抽象类里面的抽象方法必须被继承重写。所以final和abstract产生了冲突,这两个关键字不能一起使用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jilfoyle!