JavaSE 之 final 初探

我们先看一道面试题:

  请问 final 的含义是什么?可以用在哪里?其初始化的方式有哪些?

首先我们回答一下这道题,然后再探究其所以然。 

    1、final 表示“最终的”、“不可改变的”,意指其修饰类不可以被继承或修饰的属性的值不可改变。
  2、final 既可以修饰类,也可以修饰属性。
  3、final 变量可以直接初始化值,也可以在构造方法中初始化值,但是二者只可选其一。

好了!现在我们已经知道了答案了,那咱们就来一一验证吧!

1、直接初始化属性值,类不可被继承:

package com.smbea.demo;

import org.junit.Test;

/**
 * final 修饰属性并并直接初始化
 * 此类不可被继承
 * @author hapday
 */
public final class FinalDemo2 {
	final int num = 9;

	@Test
	public void finalTest() {
//		this.num = 7;	// 这一句之所以注释是因为报 The final field FinalDemo2.num cannot be assigned 的错误
		System.out.println(this.num);  // 输出结果:9
	}
}

 2、通过构造器为 final 的变量初始化:

package com.smbea.demo;

/**
 * final 修饰属性并通过构造器初始化
 * @author hapday
 */
public class FinalDemo {
	final int num ;

	public FinalDemo(int num) {
		System.out.println("无参构造器");
		this.num = num;
		System.out.println(this.num);
	}

	public static void main(String[] args) {
		new FinalDemo(8);
	}
}

  

时间: 2025-01-11 04:23:34

JavaSE 之 final 初探的相关文章

year:2017 month:08 day:04

2017-08-04 JAVAse 1.final修饰符 final可以修饰类,成员方法,成员变量(static 修饰符不可以修饰类) final的初始化在对象被实例化前即可final 修饰的方法不可以被继承: final修饰的变量是常量[值不能被修改],(自定义型) final修饰的方法不能被重写 2.this与super的用法及其区别 this:用于本类的引用 应用场景:封装(在本类中区分形参和私有属性) super:用于父类的引用 应用场景:继承(在子类中调用父类非私有成员) this s

JavaSE初探(0001) -----JDK、JRE、JVM、Java

JavaSE组成部分:JDK.JRE.JVM.Java Java:Java语法 JDK:包含着JRE和一些常用的工具(JDK安装目录下的bin目录下的可执行文件) JRE:包含着Java运行库和JVM. JVM:是运行所有Java位码(.class)文件的操作系统,相当于虚拟机.Java所谓的"一次编译,到处运行", 依赖的就是这个虚拟机.只要在不同的操作系统平台下安装JRE即可运行Java位码文件.

JavaSE入门学习22:Java面向对象之final关键字

在Java程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的 关键字,它所表示的是这部分是无法修改的.不想被改变的原因有两个:效率.设计.使用到final的有三种情况:变 量(final变量即为常量).方法.类. 一final关键字 final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你 将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误.

JavaSE知识-08(面向对象_继承&方法&final)

代码块的概述和分类 根据其位置和声明的不同,代码块可以分为局部代码块,构造代码块,静态代码块,同步代码块. 常见代码块的应用 a:局部代码块 在方法中出现:限定变量生命周期,及早释放,提高内存利用率 b:构造代码块 (初始化块) 在类中方法外出现:多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行 c:静态代码块 在类中方法外出现,并加上static修饰:用于给类进行初始化,在加载的时候就执行,并且只执行一次. 一般用于加载驱动 class Demo1_Code {

JavaSE基础之JDBC

JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver: c.Oracle:oracle.jdbc.driver.OracleDriver: ②获取数据库链接:  a.MySQL:jdbc:mysql://localhost:3306/DataBaseName: b.SQLServer:jdbc:sqlse

JavaSE入门学习23:Java面向对象之构造方法

学了JavaSE面向对象这一部分,也该对构造方法做一个总结了. 一构造方法 在多数情况下,初始化一个对象的最终步骤是去调用这个对象的构造方法.构造方法负责对象的初始化工作,为 实例变量赋予合适的初始值.构造方法必须满足以下语法规则: (1)方法名必须与类名相同: (2)不要声明返回类型: (3)不能被static.final.synchronized.abstract和native修饰.构造方法不能被子类继承,所以用final和abstract 修饰没有意义.构造方法用于初始化一个新建的对象,所

初探Java序列化(Serialization)

Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化Deserialization是一种将这些字节重建成一个对象的过程.[字节流的来回转换] Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端.这就需要有一种可以在两端传输数据的协议.Java序列化机制就是为了解决这个问题而产生. 将对象状态转换成字节流之后,可以用java.io包中各种字节流的类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序

javase基础

目录 目录... 1 第一天... 5 1:计算机概述(了解) 5 2:键盘功能键的认识和快捷键(掌握) 5 3:常见的DOS命令(掌握) 6 4:Java语言概述(了解) 6 5:JDK,JRE,JVM的作用及关系(掌握) 7 6:JDK的下载,安装,卸载(掌握) 7 7:第一个程序:HelloWorld案例(掌握) 7 8:常见的问题(掌握) 8 9:path环境变量(掌握) 8 10:classpath环境变量(理解) 8 第二天... 10 1:关键字(掌握) 10 2:标识符(掌握)

Apache Drill初探

    Apache Drill初探 介绍 Apache Drill是一个开源的,对于Hadoop和NoSQL低延迟的SQL查询引擎. Apache Drill 实现了 Google's Dremel.那么什么是Google's Dremel?网络中一段描述:Dremel 是Google 的"交互式"数据分析系统.可以组建成规模上千的集群,处理PB级别的数据.MapReduce处理一个数据,需要分钟级的时间.作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到