Java教程

Java 面向对象 final关键字

本文主要是介绍Java 面向对象 final关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java 面向对象之 final

final关键字可以用来修饰属性,方法,局部变量,形参

final修饰

final class Person {
    
}

final修饰的类,不能被继承,可以实例化

public class Test {
    public static void main(String[] args) {
		
    }
}

final class Person {

}

class Student extends Person{

}

上面的代码,会运行异常:java: 无法从最终Person进行继承

final修饰方法,不能修饰构造方法

class Person {
    final public String work() {
        return "工作";
    }
}

final修饰的方法,无法被子类重写(override),可以被继承

class Person {
    final public String work() {
        return "工作";
    }
}

class Student extends Person{
    public String work() {
        return "学习";
    }
}

上面的代码,会运行异常:java: Student中的work()无法覆盖Person中的work() 被覆盖的方法为final

final修饰属性

final修饰的属性又称为常量,一般用XX_XX_XX来进行命名

  • final修饰的普通属性在定义时,必须赋予初始值

    • 直接赋值

      class Person {
          final public double PI = 3.14;
      }
      
    • 构造器

      class Person {
          final public double PI;
          
          public Person(double pi) {
              this.PI = pi;
          }
      }
      
    • 代码块

      class Person {
          final public double PI;
          
          {
              PI = 3.14;
          }
      }
      
  • final修饰的静态属性在定义时,必须赋予初始值

    • 直接赋值

      class Person {
          final static public double PI = 3.14;
      }
      
    • 静态代码块

      class Person {
          final static public double PI;
      
          static {
              PI = 3.14;
          }
      }
      
  • final修饰的基本类型变量,变量不可改变

  • final修饰的引用类型变量,引用本身不可改变,被引用的值可以被修改

class Student{
    private String name;

    public Student(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }
}

class Person {
    final Student student = new Student("smile");

    public void run() {
        System.out.println("初始值" + student);

        student.setName("易文杰");

        System.out.println("修改后的值" + student);
    }
}

上面代码,会输出初始值smile 修改后的值易文杰 表示:引用类型变量,引用本身不可改变,被引用的值可以被修改

class Person {
    final public int age = 20;

    Person(int age) {
        this.age = age;
    }
}

上面代码,会运行异常Cannot assign a value to final variable 'age'

final修饰内部类

class Person {
    public void run() {
        final int AGE = 20;
        
        final String NAME;
        
        NAME = "smile";
    }
}

final修饰形参

class Person {

    public String work(final String work) {
        work = "打工";

        return work;
    }
}

上面的代码会报错:Cannot assign a value to final variable 'work'

finalstatic一起搭配使用。

public class Test {
    public static void main(String[] args) {
        System.out.println(Status.SUCCESS);
    }
}

class Status {
    final static public int SUCCESS = 200;

    static {
        System.out.println("类被加载");
    }
}

上面的代码中,当我们直接使用final 修饰的静态属性的时候,不会导致类被加载。输出如下:200

这篇关于Java 面向对象 final关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!