java中final关键字可用于修饰属性、方法、类
1.final修饰属性
a. final修饰基本类型属性: 当类中基本类型属性前使用final修饰时则表示该属性为常量, 一点初始后就不可更改, 如果视图更改将会报错。
b. final修饰引用类型属性: 当final修饰引用类型属性是, 则表示如果该引用使用一旦初始化后就不可修改(该引用所指向的内存地址不可更改,如果试图对将final修饰的属性指向一个新的引用, 将会报错)
package com.mjlf.myBatis.accessControl.user;
/**
* Created by a123 on 16/12/10.
*/
public class FinalT {
private final int num1 = 0;
public final static int NUM = 1;
private final String str = "";
public void changeNum1(){
// num1 = 1; //final修饰基本类型一旦初始化后就不能更改, 否则编译出错
}
public void changStr(){
// str = new String ();//编译报错,
}
public static void main(String[] args){
}
}
2.final修饰方法
使用final关键字修饰方法表示该方法不允许重写,这个是针对继承而言, 同时使用private关键字修饰的方法jvm也会默认为使用final修饰
package com.mjlf.myBatis.accessControl.user;
/**
* Created by a123 on 16/12/10.
*/
public class FinalT {
public final void test(){
}
}
package com.mjlf.myBatis.accessControl.user;
/**
* Created by a123 on 16/12/10.
*/
public class FinalT2 extends FinalT {
public void test(){
}
public static void main(String[] args){
}
}
Error:(7, 17) java: com.mjlf.myBatis.accessControl.user.FinalT2中的test()无法覆盖com.mjlf.myBatis.accessControl.user.FinalT中的test()
被覆盖的方法为final
3.final修饰类
final修饰类表示该类不能被继承
package com.mjlf.myBatis.accessControl.user;
/**
* Created by a123 on 16/12/10.
*/
public final class FinalT {
}
package com.mjlf.myBatis.accessControl.user;
/**
* Created by a123 on 16/12/10.
*/
public class FinalT2 extends FinalT {
public static void main(String[] args){
}
}
Error:(6, 30) java: 无法从最终com.mjlf.myBatis.accessControl.user.FinalT进行继承
4.final用在参数
final用在参数上表示参数是在方法执行过程中是不可更改的, 其意思可修饰属性大致相同,基本类型其值不允许被更改, 引用类型其指向地址不能被更改
package com.mjlf.myBatis.accessControl.user;
/**
* Created by a123 on 16/12/10.
*/
public class FinalT {
private final int num1 = 0;
public final static int NUM = 1;
private final String str = "";
public void changeNum1(){
// num1 = 1;
}
public void changStr(){
// str = new String ();
}
public final void test(){
System.out.println("father test funtion");
}
public final void funText (final int x, final String name){
int y = x;
x ++;
name = new String ();
}
}
Error:(25, 9) java: 不能分配最终参数x
Error:(26, 9) java: 不能分配最终参数name