目录
1.修饰类时
1.只能是公共的(public)就算不写也是public
2.被final修饰的类不可以被继承
- //前面默认有个public 写不写都行
- final class A{
-
- }
复制代码 2.修饰方法时
1.方法不能不能覆盖
2.被final修饰的方法,JVM会尝试将其内联,以提高运行效率
3.修饰属性和局部变量时
3.1修饰局部变量时
1.要赋值
2.不能被改变
- public class Test01 {
- public static void main(String[] args) {
- go();
- }
- public static void go(){
- // 方式一:初始化的时候赋值
- // final int age = 10;
-
- // 方式二:先初始化后赋值
- final int age;
- age = 10;
- System.out.println(age);
- }
- }
复制代码 3.2修饰成员变量时
1.必须在系统赋默认值之前赋值
2.不可更改
- public class Test01 {
- // 1.写法一报错未在创建时声明对象
- // final int a;
- // a =10;
- // 2.写法二正确
- // final int a = 10;
- // 3.写法三正确
- final int a;
- // 赶在系统赋默认值之前赋值就行,系统赋默认值在构造方法执行的时候
- public Test01() {
- this.a =0;
- }
- }
复制代码- final String name = "qy";
- //报错
- name = "ym";
- final Object obj = new Object();
- //报错
- obj = new Object();
复制代码 3.3修饰类变量时
1.与static结合使用修饰的变量是常量
2.常量要符合命名规范,全部大写,可以用下划线连接
3.被final修饰的常量,在编译阶段会存入常量池中
- public class Main {
- // final 放前放后都一样
- // final static double PI = 3.1415926;
- static final double PI = 3.1415926;
- }
复制代码 4.final与普通变量的区别
- public class Test1 {
- public static void main(String[] args) {
- String a = "hello2";
- final String b = "hello";
- String d = "hello";
- String c = b + 2;
- String e = d + 2;
- System.out.println((a == c));
- System.out.println((a == e));
- }
- }
- //结果
- //true
- //false
复制代码- public class Test2 {
- public static void main(String[] args) {
- String a = "hello2";
- final String b = getHello();
- String c = b + 2;
- System.out.println((a == c));
-
- }
-
- public static String getHello() {
- return "hello";
- }
- }
- //结果
- //false
复制代码通过上面两个例子,我们可以发现在Test1中被final修饰的变量在进行字符串串接的时候,地址没变,但是在Test2中通过方法调用后就变了,也就是说间接的赋值会改变地址。
5.final用于引用
如果修饰引用,那么表示引用不可变,引用指向的内容可变。
- public class Test02 {
- public static void main(String[] args) {
- final Student stu = new Student("小芊",18);
- //可以修改里面的值
- stu.setName("芊嵛");
- // 不能再new
- // stu = new Student("ff",5);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |