Final的用法及注意事项
Final 的注意事项
- 可用来修饰一个类
- 可以用来修饰一个方法
- 可以用来修饰一个局部变量
- 可以用来修饰一个成员变量
当修饰一个类的时候
格式:
// final修饰的类不能作为子类的父类。
public final class Myclass extends object (){
public void main(){
System.out.println("这是一个main方法")
}
}
当修饰一个方法的时候,这个方法不能被覆盖重写
package Day8;/*
*@author wanghongyuan
*@Create 2020/12/13 19:57
*/
public abstract class Fu {
public final void Mymethod(){
//方法体
System.out.println("方法被执行");
}
/*fnail 和abstract 不能同时存在,两个自相矛盾
* 因为fnail是不能被覆盖重写的
* 而abstract又是一定要被覆盖重写的
* */
public abstract /*fnail*/ void methodAbs();
}
当修饰一个局部变量的时候,这个局部变量就不能被修改。局部变量就是在方法体中定义的变量
package Day8;/*
*@author wanghongyuan
*@Create 2020/12/13 20:12
*/
public class DemoFinal {
public static void main(String[] args) {
int num = 10;
System.out.println(num);// 这个是10
num = 20;
System.out.println(num);// 这个是20
// 如果用fnail修饰这个局部变量的话这个变量不可改变
final int num2= 22;
/* num2 = 223;*/
//错误写法 报错了,fnail这个修饰了的局部变量不能被修改
// 对于一个基本类型来说,这个不可变说的是变量当中数据不可改变
// 对于一个引用类型来说,这个不可变说的是变量当中的地址值不可改变,内容可以改变
Student stu1 = new Student(name:"赵丽颖");
System.out.println(stu1.getName()); //赵丽颖
stu1 = new Student(name:"赵又廷");
System.out.println(stu1.getName()}; // 赵又廷
stu1.setName("赵丽颖嘤嘤")
}
修饰成员变量时,这个成员变量也是不能改变
1.由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了。
2.对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一。
3.必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。
package Day8;/*
*@author wanghongyuan
*@Create 2020/12/13 20:30
*/
public class Person {
// 用final修饰了以后要么直接赋值,要么在构造方法中赋值。
// 如果在构造方法中赋值了就不用set方法了,给他注释就好了。
public final String name;
public Person() {
name="关晓彤";
}
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
// public void setName(String name) {
// this.name = name;
// }
}