JAVA关键字:final

有些类不想被继承,有些方法不想被重写,有些变量不想被重新赋值,就引入了final。

final是个修饰符,它可以用来修饰类、类的属性和方法,以及局部变量,但类的构造方法不能用final来修饰。

一旦被final修饰,相当于最终定稿了,不可以再变了。

1.final修饰的类,不能被继承。但用法是一样的,可以new对象等。

public final class Fu{

}

我们经常用的字符串类String类,就是final类

2. final修饰的方法,不可以被子类重写

public class Fu{

 //最终方法 

 public final void show(){

    System.out.println("这是父类的最终方法");

  }

  //一般方法

  public void function(){

    System.out.println("一般方法");

  }

  

}

//子类继承,但不能重写最终方法

public class Zi extends Fu{

  public void function(){

    System.out.println("重写父类一般方法");

  }

}

//可以随意调用final方法

new zi().show();

new zi().function();

3. final修饰的局部变量只能被赋值一次,且终身不变。

被final修饰的变量,又被称之为常量

可以正常参与运算等。

final int i =10;

4. final修饰引用变量,其指向的内存地址不变,但其指向的值可以改变。

public class Demo{

  String name;

}

//main方法中

final Demo d = new Demo(); //指向的内存地址被固定

d.name = "adam" //指向的内容的值可以改变

5. final修饰的成员变量(属性)

final 修饰的属性一定要赋值

public class Demo{

  final String name = "adam"; //必须赋值,否则会报错

}

但是final修饰一般性的变量,可以不赋值,但如果要使用它,必须要初始化赋值。如在main方法中

final int i; //可以定义

System.out.println(i); //但这样会报错,因为要使用i,必须要定义的时候赋值。

其实不用final修饰的一般变量,不赋值也是只可定义不能使用,只有类的属性不赋值才有默认值。

int i;

System.out.println(i); //报错,需要初始化。

6. 类的属性,如果被final修饰,可以手动赋值,也可以能这过构造器赋值

public class Demo{

  final String name = "adam";

}

//通过构造器赋值

public class Demo{

  final String name;

  public  Demo(String name){

    this.name = name;

  }

}

但不能通过setName来赋值,为什么?因为必须在创建对象前赋值,构造器是创建对象的时候就赋值了。set方法是创建对象之后的事了。

 

posted on 2018-06-06 02:34  adamal  阅读(123)  评论(0)    收藏  举报