美文网首页
进阶:final

进阶:final

作者: 雪上霜 | 来源:发表于2020-04-24 20:47 被阅读0次
    • final关键字

      • 表示最终的,不可变的。
      • 可以修饰变量,方法,类等。
      • final修饰的类无法继承。
      • final修饰的方法不能被覆盖。
      • final修饰的局部变量不能重新赋值。final修饰的变量只能赋值一次。
      • final修饰的引用只能指向一个对象,只能永远指向该对象。并且在该方法执行过程中,该引用指向改对象之后,该对象不会被垃圾回收器回收, 直到当前方法结束,才会被释放。对象内的数据可改。
    • final修饰的实例变量,系统不管赋默认值,必须程序员手动赋值。在构造方法中赋值和在属性后直接赋值都可。

    • final修饰实例变量一般添加static修饰。

    • static final联合修饰的变量称为常量,建议大写,每个单词之间采用下划线衔接。

    • 常量和静态变量都存储在方法区,并且都是在类加载时初始化。常量一般都是公开的。

    • public class FinalTest{
        public static void main(String[] args){
            final int i = 100;
            
        }
      }
      
      final class A{
      
      }
      //B类继承A类,对A进行扩展,加个final则A就不能被继承。
      class B extends A{
      
      }
      
      //String 不能被继承。
      class MyString extends String{
      
      }
      
      class C{
        public final void doSome(){
        
        }
      }
      
      //D中doSome不能覆盖C中的
      class D extends C{
        public void doSome(){
        
        }
      }
      
    • public class FinalTest{
        public static void main(String[] args){
            Person p1 = new Person(20);
            System.out.println(p1.age);
            
            final Person p = new Person(20);
            p = new Person(30); //错误,无法给p分配值。
            
                  p.age = 30;  //可以
            
        }
      }
      
      class Person{
        int age;
        public Person{
        
        }
        public Person(int age){
            this.age = age;
        }
      }
      
    image.png
    public class FinalTest{
        public static void main(String[] args){
            
        }
    }
    
    class User{
        final int age;  //实例变量 ,错误。
        final int age = 10; //可以    
        
        final double weight;
        
        public User(){
            this.weight = 80;   //只要在系统赋默认值之前赋值即可。可以
        }
    }
    
    public class FinalTest{
        public static void main(String[] args){
            
        }
    }
    
    class User{
        String idCard;
        String name;
        public static final String country = "中国";//实例变量在堆中,一个变量一份。实例变量使用final修饰,说明该实例变量不会随对象的变化而变化。
        
        
    }
    

    相关文章

      网友评论

          本文标题:进阶:final

          本文链接:https://www.haomeiwen.com/subject/phcqwhtx.html