final关键字的作用

莱莱  金牌会员 | 2023-12-18 17:40:29 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 902|帖子 902|积分 2706

目录

1.修饰类时

1.只能是公共的(public)就算不写也是public
2.被final修饰的类不可以被继承
  1. //前面默认有个public 写不写都行
  2. final class A{
  3.    
  4. }
复制代码
2.修饰方法时

1.方法不能不能覆盖
2.被final修饰的方法,JVM会尝试将其内联,以提高运行效率
3.修饰属性和局部变量时

3.1修饰局部变量时

1.要赋值
2.不能被改变
  1. public class Test01 {
  2.     public static void main(String[] args) {
  3.         go();
  4.     }
  5.     public static void go(){
  6. //        方式一:初始化的时候赋值
  7. //        final int age = 10;
  8.         
  9. //        方式二:先初始化后赋值
  10.         final int age;
  11.         age = 10;
  12.         System.out.println(age);
  13.     }
  14. }
复制代码
3.2修饰成员变量时

1.必须在系统赋默认值之前赋值
2.不可更改
  1. public class Test01 {
  2. //    1.写法一报错未在创建时声明对象
  3. //    final int a;
  4. //    a =10;
  5. //    2.写法二正确
  6. //    final int a = 10;
  7. //    3.写法三正确
  8.     final int a;
  9. //    赶在系统赋默认值之前赋值就行,系统赋默认值在构造方法执行的时候
  10.     public Test01() {
  11.         this.a =0;
  12.     }
  13. }
复制代码
  1. final String name = "qy";
  2. //报错
  3. name = "ym";
  4. final Object obj = new Object();
  5. //报错
  6. obj = new Object();
复制代码
3.3修饰类变量时

1.与static结合使用修饰的变量是常量
2.常量要符合命名规范,全部大写,可以用下划线连接
3.被final修饰的常量,在编译阶段会存入常量池中
  1. public class Main {
  2. //    final 放前放后都一样
  3. //    final static double PI = 3.1415926;
  4.     static final double PI = 3.1415926;
  5. }
复制代码
4.final与普通变量的区别
  1. public class Test1 {
  2.     public static void main(String[] args)  {
  3.         String a = "hello2";
  4.         final String b = "hello";
  5.         String d = "hello";
  6.         String c = b + 2;
  7.         String e = d + 2;
  8.         System.out.println((a == c));
  9.         System.out.println((a == e));
  10.     }
  11. }
  12. //结果
  13. //true
  14. //false
复制代码
  1. public class Test2 {
  2.     public static void main(String[] args)  {
  3.         String a = "hello2";
  4.         final String b = getHello();
  5.         String c = b + 2;
  6.         System.out.println((a == c));
  7.     }
  8.      
  9.     public static String getHello() {
  10.         return "hello";
  11.     }
  12. }
  13. //结果
  14. //false
复制代码
通过上面两个例子,我们可以发现在Test1中被final修饰的变量在进行字符串串接的时候,地址没变,但是在Test2中通过方法调用后就变了,也就是说间接的赋值会改变地址。
5.final用于引用

如果修饰引用,那么表示引用不可变,引用指向的内容可变。
  1. public class Test02 {
  2.     public static void main(String[] args) {
  3.         final Student stu = new Student("小芊",18);
  4.         //可以修改里面的值
  5.         stu.setName("芊嵛");
  6. //        不能再new
  7. //        stu = new Student("ff",5);
  8.     }
  9. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表