java之final关键字
在java中,final含义在不同场合下有细微的差别,但总体上来说,他指的是“这是不可变的”。
-
修饰数据:这时候,数据变成常量。
-
必须初始化值。
-
被final修饰的成员变量赋值,有两种方式。第一种,直接赋值。第二种,全部在构造方法中赋值。
-
第一种
public class FinalTest { private final int age=10; private final int sex=1; }
-
第二种
public class FinalTest { private final int age; private final int sex; public FinalTest(int age, int sex) { this.age = age; this.sex = sex; } }
-
-
如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
-
如果修饰的成员变量是一个引用类型(String),则是说这个引用地址的值不能改变,但是这个引用所指向对象里面的内容还是可以改变的。
public class FinalTest { private final int age=10; private final int sex=1; private final String name; public FinalTest(String name) { this.name = name; } }
-
如果修饰的成员变量是一个对象,则必须直接复制,并不能在构造函数中赋值,会报语法错误。但是其对象的属性值可以通过内部方法修改设定比如get方法。
-
必须
private final Cat c =new Cat();
所谓对象的内容是指对象的属性值等
//user变量的引用是不能够改变的,否则的话,编译会报错 // user=new User(); //user变量的值是能够修改的,但所指向的引用是不能够改变的 user.setUserName("小王");
-
-
-
修饰方法参数
-
修饰的是基本类型,那么在这个方法的内部,基本类型的值是不能够改变的.
-
如果修饰的是引用类型的变量,那么就需要注意了,引用类型变量所指的引用是不能够改变的,但是引用类型变量的值是可以改变的。
package com.jd.test; import com.jd.domain.User; /** * * final修饰参数的测试例子 * * @author zhanghao10@jd.com * @since 2015-10-8 */ public class Test{ public static void main(String hh[]){ User user=new User(); user.setId(1); user.setUserName("校长"); user.setPassword("123456"); checkInt(user); } /** * 对于基本类型,基本类型的值在方法内部是不能够改变的 * @param i */ public static void checkInt(final User user) { //user变量的引用是不能够改变的,否则的话,编译会报错 // user=new User(); //user变量的值是能够修改的,但所指向的引用是不能够改变的 user.setUserName("小王"); } }
-
-
修饰方法
- 被final修改的方法不能被重写。
- 一个类的private【方法】会被自动指定为final方法,不能重写。
-
修饰类:表示这个类不能被继承。
-
总结