目录

  • 1.修饰类时
  • 2.修饰方法时
  • 3.修饰属性和局部变量时
    • 3.1修饰局部变量时
    • 3.2修饰成员变量时
    • 3.3修饰类变量时
  • 4.final与普通变量的区别
  • 5.final用于引用

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);    }}