这一章节我们将来讨论一下final。
1.特性
(1)对于常量,使用final之后就不可变
因为使用了final之后,id就没有了set方法,因此,不能对id进行操作,即便new之后直接对id进行操作也不可以
package com.ray.ch06;
public class Test {
private final int id = 1;
public int getId() {
return id;
}
public static void main(String[] args) {
// new Test().id=2;//error
}
}
(2)对于对象,使用final之后是引用不变,但里面的值可能改变
package com.ray.ch06;
public class Test {
private final Value value = new Value();
public Value getValue() {
return value;
}
public static void main(String[] args) {
Value value = new Test().getValue();
System.out.println("before set i -> final value:" + value.getI());
value.setI(2);
System.out.println("after set i -> final value:" + value.getI());
}
}
class Value {
private int i = 0;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
输出:
before set i -> final value:0
after set i -> final value:2
跟上一个特性的代码相似,value也是没有set方法,因此不能对其设置新的引用。
但是,我们可以get出value的引用,然后设置里面的值,通过输出结果即可看到。
(3)联合static一起使用
package com.ray.ch06;
public class Test {
private static final int id = 0;
private final String name = "abcd";
private final Value value = new Value();
private static final Value value2 = new Value();
public static Value getValue2() {
return value2;
}
public Value getValue() {
return value;
}
public static int getId() {
return id;
}
public String getName() {
return name;
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
System.out.println(test1 == test2);
System.out.println(test1.getName() == test2.getName());
System.out.println(test1.getValue() == test2.getValue());
}
}
class Value {
}
输出:
false
true
false
跟static联合使用,可以通过Test.value来取得,因此引用必定相同。
但是如果不是跟static联合使用,就会出现一个情况,对象的引用不同。
根据上面的输出结果:字符串在使用final后,两者都是引用同一个字符串,但是Value类在使用final后,两个引用是不同的。
总结:这一章节主要讲述了final的特性。
这一章节就到这里,谢谢。
-----------------------------------
目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
LFS 6.6版本是一个稳定的版本,它提供了详细的指导和步骤来创建一个从头开始的Linux环境。该版本的中文版对中文用户来说是一个非常有价值的资源,因为其提供了中文的指导,使得阅读和理解过程更加顺畅。 LFS项目的...
LFS──LinuxfromScratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西(rawcode)作成符合自己口味的菜肴──个性化的...
在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...
1. **代码编辑器**:Eclipse 提供了一个强大的Java代码编辑器,支持语法高亮、自动完成、错误检查以及重构功能。它可以智能感知上下文并提供有用的提示,帮助开发者提高编码效率。 2. **项目管理**:Eclipse IDE...
1. **源代码结构**:可能包括多个Java源文件,分别负责网络连接、NTRIP协议解析、数据接收与处理等功能。 2. **AndroidManifest.xml**:定义应用的元数据,如权限、活动、服务等。 3. **build.gradle**:构建脚本,...
标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...
1. **创建Excel文件**:从头开始构建一个新的Excel文件,包括设置工作簿的样式、颜色、图表、公式等。 2. **读取Excel文件**:打开现有的Excel文件,读取其中的数据和格式信息,例如单元格的值、样式、公式以及合并...
1. **文档创建**:支持从头创建新的文档,或基于现有模板生成文档。 2. **文档读取和解析**:能够打开并读取多种格式的文档,如DOCX、DOC、RTF、PDF、HTML等。 3. **格式转换**:可以在不同文件格式之间进行转换,...
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。Swing提供了丰富的组件库,允许开发者创建美观且功能丰富的交互式用户界面。在这个...
Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。在Java笔试中,这些概念经常被考察。 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,分为过程抽象(方法)和...
在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。
Java SDK是许多软件开发中的重要组成部分,特别是在与服务器端交互时。在这个名为"java-sdk-master.zip"的压缩包中,包含的是Leancound的Java SDK,这是一个专为集成Leancound服务而设计的开发工具包。Leancound是...
在Java编程中,库(Library)是预先编写好的代码集合,程序员可以导入并直接使用,无需从头开始编写所有功能。这些库通常以JAR(Java Archive)文件的形式存在,里面封装了类和方法,可供应用程序调用。Java库广泛...
1. **源代码**:这是实现模糊视图背景的核心部分,可能包含Java类和方法,用于处理图像并应用模糊效果。 2. **示例应用**:可能包含一个简单的Java应用,演示如何使用库来创建模糊视图背景,这对于开发者理解和学习...
1. 创建新文档:从头开始创建Word文档,设置页面布局、字体样式、段落格式等。 2. 编辑现有文档:加载现有的Word文件并修改内容,包括文本、图像、表格、页眉页脚等元素。 3. 转换文档:将Word文档转换为其他格式,...
【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...
1. **创建文档**:通过API,开发者能够从头开始构建Word文档,包括添加文本、图片、表格、形状、页眉和页脚等元素。 2. **编辑现有文档**:能够打开和修改现有的DOC或DOCX文件,进行内容替换、格式调整、页面布局...