Java final 修饰符知识点总结(必看篇)_java

final从字面上理解含义为“最后的,最终的”。在Java中也同样表示出此种含义。

final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。

1. final修饰类:

final修饰类即表示此类已经是“最后的、最终的”含义。因此,用final修饰的类不能被继承,即不能拥有自己的子类。

如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误。

2. final修饰方法:

final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。

此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,

将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是

在子类中重新定义了新的方法。

public class B extends A {

  public static void main(String[] args) {

  }

  public void getName() {

  }
}

class A {

  /**
   * 因为private修饰,子类中不能继承到此方法,因此,子类中的getName方法是重新定义的、
   * 属于子类本身的方法,编译正常
   */
  private final void getName() {

  }

  /* 因为pblic修饰,子类可以继承到此方法,导致重写了父类的final方法,编译出错
  public final void getName() {

  }
  */
}

3. final 修饰变量:

final修饰的变量表示此变量是“最后的、最终的”含义。一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。

这里需要注意以下几个问题:

1. final修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行显示初始化(即为其显示指定初始值)。

对于final修饰的形参,由于是实参传递过来的,很好理解。

对于final修饰的局部变量,与未用final修饰的变量一样,都是需要显示初始化。即局部变量都是需要显示初始化的。

对于一般的类属性和对象属性,由类和对象的初始化过程中可以看出,首先都进行了默认初始化。然后对有显示赋值的变量才再进行显示初始化。

但对final修饰的类属性和对象属性而言,如果不显示初始化,其默认将是进行默认初始化后的值,这与final本身出发点矛盾,因此,Java语法规定:

final修饰的类属性和变量属性必须要进行显示初始化赋值。

另外,无论对于基本数据类型还是引用数据类型,final修饰的变量都是首次显示初始化后值都不能修改。对于基本数据类型,很好理解。对于引用

数据类型,引用变量指向的是实际的对象,但其存储的是所指向对象的地址,因此,其值不能修改并不意味着其所指向的对象不能修改。

4. final修饰变量后导致的“宏替换”/"宏变量"问题

Java 中宏变量/宏替换指的是在java代码中在编译期某些变量能够直接被其本身的值所替换,编译到.class文件中。因此,编译后的.class文件中已经不存在此变了。

在String类型的变量中,有时候经常遇到如下情况:

 

public class Test {

  public static void main(String[] args) {

    String country = "China";
    String name = "qqyumidi";

    String userInfo = country + name; //编译后此处依然是country和name变量
    String user = "China" + "qqyumidi"; //编译后此处直接变成Chinaqqyumidi

  }
}

 在上述代码中的第9行,编译后的变量结果直接为Chinaqqyumidi。而第8行代码中,由于country和name都是普通的变量,编译器无法在编译时直接确定userInfo的值,因此

此处编译后结果不直接是Chinaqqyumidi。

但是,如果希望第8行中的代码在编译期直接就能表示为Chinaqqyumidi,就需要用到final修饰符对country和name变量进行修饰。

原因:final修饰符修饰的变量在由于其本身的特性,在编译期就能直接确定其值,且此值不可变。在编译过程中,可以直接将其变量直接转换成其值本身去表示。

public class Test {

  public static void main(String[] args) {

    final String country = "China";
    final String name = "qqyumidi";

    String userInfo = country + name; //编译后此处直接是Chianqqyumidi

  }
}

以上就是小编为大家带来的Java final 修饰符知识点总结(必看篇)的全部内容了,希望对大家有所帮助,多多支持~

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索final修饰符
final 修饰变量、final修饰的方法、final修饰的类、final修饰方法、final修饰的变量,以便于您获取更多的相关知识。

时间: 2024-11-02 05:40:40

Java final 修饰符知识点总结(必看篇)_java的相关文章

java异常和错误类总结(必看篇)_java

java异常和错误类总结 最近由于考试和以前的面试经常会遇到java当中异常类的继承层次的问题,弄得非常头大,因为java的异常实在是有点多,很难记下来,今天正好查了一些资料整理下来,希望对自己和大家有点帮助.最开始的时候习惯用笔记本(手写的纸质的本子)记笔记,后来发现查阅的时候不是很方便,而且速度比较慢.后来改用notepad开始记,感觉效果挺棒,简单易用,没有花哨的东西.但是也有它的缺点,比如版式的整理,不能加入一些图片(往往图片特别是一些大纲是非常好的记忆学习方法)等等,于是尝试用mark

JS中BOM相关知识点总结(必看篇)_javascript技巧

window对象 ECMAScript是JavaScript的核心,但是如果要在web中使用javascript,那么BOM(浏览器对象模型)才是真正的核心.BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关. window对象:BOM的核心对象是window,它表示浏览器的一个实例.在浏览器中,window对象有双重角色,它既是通过javascript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象. 因此,所有全局作用域中声明的变量.函数都会变成w

javaScript知识点总结(必看篇)_基础知识

1.javaScript的概念:是一种表述语言,也是一种基于对象(Object)和事件驱动(EventDriven)的,安全性好的脚本语言,运行在客户端,从而减轻服务器端的负担,总结如下:   1.javaScript主要用来向HTML页面找那个添加交互行为.   2.javaScript是一种脚本语言,语法和java类似.   3.javaScript一般用来编写客户端脚本.   4.javaScript是一种解释性语言,边执行边解释. 2.javaScript由核心语法ECMAScript.

JavaWeb学习笔记分享(必看篇)_java

自定义列表     <dl></dl>:表示列表的范围         **在里面 <dt></dt>:上层内容         **在里面 <dd></dd>:下层内容   有序列表     <ol></ol>:有序列表的范围         --属性 type:设置排序方式,1(默认),a,i..         **在ol标签里面 <li>具体内容</li>     无序列表   

Eclipse常用快捷键总结(必看篇)_java

Alt+/                                内容辅助 最常用的快捷键,省去了自己一个字一个字敲代码的时间 Ctrl+Shift+F                        格式化文档 Ctrl+Shift+O                    批量导入包 Ctrl+t                                 打开类型树 Ctrl+鼠标左键 / F3              打开申明 查看代码的时候经常会用到 Alt+左箭头    

java中final修饰符实例分析_java

final修饰符: final修饰成员变量必须有程序员显示指定初始值. 类的Field:必须在静态初始化块中或声明该Field时指定初始值. 实例Field:必须在非静态初始块中,声明Field或者构造器中指定初始值. final局部变量:必须由程序员显示初始化. final修饰的基本变量和引用类型变量的区别? final修饰的基本变量:不能对基本变量重新赋值. final修饰的引用变量:只保证这个引用类型所引用的地址不会变,即 一直引用同一个对象,但这个对象完全可以发生改变. 复制代码 代码如

java变量修饰符问题,大神来回答啊

问题描述 java变量修饰符问题,大神来回答啊 如下图:为什么方法中的变量只能用final修饰? 解决方案 1.方法内没有公有的,私有:全是局部变量: 2.公有,私有成员是针对类的: 你可以这么写 public class Test{ public int c = 0; public int b = 0; private a = 0; public void fun() { //这里面全是局部变量,方法运行完就,回收了: int a1 = 1; } } 解决方案二: java中有关"变量&quo

Java的访问修饰符与变量的作用域讲解_java

Java访问修饰符(访问控制符)Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] arguments) {

jQuery基础知识点总结(必看)_jquery

jQuery是一个优秀的.轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF1.5+, Safari 2.0+, Opera 9.0+),而jQuery2.0及后续版本将不再支持IE6/7/8浏览器.jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用).events.实现动画效果,并且方便地为网站提供AJAX交互.jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择. 1.jQuery入口函数与