java的final关键字

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

1、修饰类

当用final修饰一个类,表明这个类不能被继承。也就是说如果一个类永远不让被继承,那么他可以用final修饰,String类就是final类。

final类的成员变量可以根据需要设为final,但是要注意final类的所有成员方法都会隐式第指定为final方法。

2、修饰方法

final修饰方法,一、可以把方法锁定,以防任何继承类修改它的含义。即:该方法在子类中明确禁止被覆盖。二、早期的java实现版本中,会将final方法转为内嵌调用,尅呀提高效率。在最近的java版本中,不需要使用final方法进行这些优化了。

注:类的private方法会隐式地被指定为final方法。

3、修饰变量

一、对于一个final变量,如果是基本数据类型的变量,则其数据一旦在初始化之后边不能更改。如果是一个引用类型的变量,则在其初始化之后不能再指向其他对象。

深刻理解final关键字。

1.类的final变量和普通变量有什么区别?

  当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。

2.被final修饰的引用变量指向的对象内容可变吗?

  在上面提到被final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容可变吗?看下面这个例子:

public class Test {
    public static void main(String[] args)  {
        final MyClass myClass = new MyClass();
        System.out.println(++myClass.i);
 
    }
}
class MyClass {
    public int i = 0;
}

这段代码可以顺利编译通过并且有输出结果,输出结果为1。这说明引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。

3.final和static

  很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。看下面这个例子:

public  class  Test {
     public  static  void  main(String[] args)  {
         MyClass myClass1 =  new  MyClass();
         MyClass myClass2 =  new  MyClass();
         System.out.println(myClass1.i);
         System.out.println(myClass1.j);
         System.out.println(myClass2.i);
         System.out.println(myClass2.j);
 
     }
}
 
class  MyClass {
     public  final  double  i = Math.random();
     public  static  double  j = Math.random();
}

  运行这段代码就会发现,每次打印的两个j值都是一样的,而i的值却是不同的。从这里就可以知道final和static变量的区别了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值