final关键字

final关键字

 * final  : 最终的
 * final 可以用来修饰的结构: 类, 方法, 变量
 *
 * final 修饰一个类
 *      > 这个类就是最终的类 不可以被其他类所继承
 *            eg : String 类 System类 StringBuffer类
 *
 *
 * final 修饰一个方法: 表明此方法不可以被重写
 *
 *
 * final 修饰变量: 表明此"变量"就称为常量
 *        final修饰一个属性: 可以考虑赋值的位置有:显示初始化, 代码块初始化, 构造器初始化

final修饰的变量 初始化 位置:

eg

:

public class FinalTest {
   // final int winth;  // 错误, 不可以使用这种方法
    final int WIDTH = 9;
    final int LEFFT;
    final String name;

    { // 代码块中赋值
        LEFFT = 14;
    }

    public   FinalTest(){
        name = "老王";
    }

    public  FinalTest(String n){
        name = n;
    }

    public static void main(String[] args) {
        FinalTest finalTest = new FinalTest();
        System.out.println(finalTest.name);

    }
    
}

final修饰局部变量

       尤其是使用final修饰形参时,表明此形参是个常量.当我们调用此方法时,给常量形参赋值一个实参,

        一旦赋值以后, 就只能在方体内使用此形参不能重新赋值

    public void  show(){
        int num = 10;
    }

    // final 修饰局部变量  这个局部变量只在某个特定的方法的局域或者某一块中生效
    public void show(final int num){
        System.out.println(num);
    }

static final 修饰一个属性: 全局常量 , 全局内只有这一个变量,全局就是static来修饰的 随着类的加载而加载 

面试题

排错

1

public class Something {
    public int addOne(final int x) {
    return ++x;
// return x + 1; } }

2

public class Something {
    public static void main(String[] args) {
    Other o = new Other();
    new Something().addOne(o);
}
public void addOne(final Other o) { // o = new Other(); o.i++; }
}


class Other {
public int i; }

解答:

1, 报错 final不可修改  注释的写法是可以的


2, 可以  因为final之后的对象不可修改 ,但是修改对象内部的是可以的
原文地址:https://www.cnblogs.com/zhaoyunlong/p/11649808.html