对Final的一点认识
在编程的过程中,我们总是会遇到final关键字,那么我们对final怎么理解呢,下面是我的一点粗浅认识,和大家共享。
package zy.pro.jbd.demo;
public class FinalDemo {
final int numInt1=16;
final String str="zy";
final String str1;
注意:str1在此没有初始化,那么必须要在构造函数中初始化,否则要报错。也就是说,final变量必须要进行初始化。
public FinalDemo() {
str1="zy";
}
public static void main(String[] args){
System.out.println("-------------------------------------------------");
}
public void executeFinalTest(){
}
private void testFinalInt(){
numInt1+=1;
上面,我们定义了numInt1为final变量,在次将会出现一个错误:cannot assign a final value to final variable numInt1 at line 24
由此可见,如果一个基本型别的变量被定义成了final,那么此变量将不能再被改变。
System.out.println(numInt1);
}
private void testFinalString(){
str=str+"aaaaa";
此处同样也会报错。
System.out.println(str);
}
}
我们再作一个测试:
(1) 先创建一个类:A.java
package zy.pro.jbd.testbase;
public class A {
int t=10;
public A() {
}
public void setT(int t){
this.t=t;
}
public int getT(){
return this.t;
}
}
(2) 写如下测试代码
final A a = new A();
public void testFinalObject() {
a.setT(29);
System.out.println("t: " + a.getT());
}
测试输出的结果是:
t: 29
由此可见,结果发生了改变,说明final定义的变量是可以改变的,但是改变的不是变量的引址(即reference),而是变量的内容。
我们如果写如下代码
/*
* some error will be threw
A b=new A();
a=b;
*/
则会发生错误,说明final类型的对象不能指向另外一个同类型的对象。
上边说的比较乱,我们总结一下:
总结:
(1) Final 修饰 基本类型变量,则此变量是不可改变的
(2) Final 修饰 对象,则其指向是不能改变的,但是其值是允许改变的.(即对象中的任一个属性发生改变都意味着此对象的值发生了改变)
(3) Final 修饰方法,则此方法将不能被重载,但是能被继承,也就是说在子类中可以调用父类的final方法;private方法仅允许在父类中调用.在子类中你也可以定义同名的方法,这意味着,private方法对子类来说是不可见的.
附录:
1) A.java
package zy.pro.jbd.testbase;
public class A {
int t=10;
public A() {
}
public void setT(int t){
this.t=t;
}
public int getT(){
return this.t;
}
public final void finalA(){
System.out.println(" final method finalA");
}
private void privateA(){
System.out.println("private method privateA");
}
private final void privateFinalA(){
System.out.println("private final method privateFinalA");
}
}
2) AA.java 继承自A.java
package zy.pro.jbd.testbase;
public class AA
extends A {
public AA() {
}
/*
public final void finalA(){
System.out.println(" final method finalA");
}
这几行代码是错误的
*/
private void privateA() {
System.out.println("private method privateA in class AA");
}
private final void privateFinalA() {
System.out.println("private final method privateFinalA in class AA");
}
}
3) 我的测试程序FinalDemo.java
package zy.pro.jbd.demo;
/**
* this demo is created to test the usage of the final reserved word
*/
import zy.pro.jbd.testbase.A;
public class FinalDemo {
final int numInt1 = 16;
final String str = "zy";
final String str1;
final A a = new A();
public FinalDemo() {
str1 = "zy";
}
public static void main(String[] args) {
System.out.println("-------------------------------------------------");
FinalDemo fd = new FinalDemo();
fd.executeFinalTest();
}
public void executeFinalTest() {
this.testFinalInt();
this.testFinalString();
this.testFinalObject();
}
private void testFinalInt() {
//numInt1+=1;
System.out.println(numInt1);
}
private void testFinalString() {
//str=str+"aaaaa";
System.out.println(str);
}
public void testFinalObject() {
a.setT(29);
System.out.println("t: " + a.getT());
/*
* some error will be threw
A b=new A();
a=b;
*/
}
}
如果还有问题,请和我联系zhyiwww@163.com
------------------------------------------共同学习,共同进步--------------------------------------------------
分享到:
相关推荐
1. **下载并安装finalData**:首先需要从官方网站或其他可信渠道下载finalData安装包,并按照提示完成安装过程。 2. **获取注册码**:通常情况下,用户购买finalData软件后会收到一封包含注册码的邮件。如果是在其他...
Final Effects是一款广受欢迎的视觉效果插件集合,主要用于视频编辑软件如Adobe Premiere Pro之中。这款插件提供了大量的特效和过渡,让视频制作人能够轻松创建出专业级别的视觉效果,极大地丰富了他们的创意工具箱...
《Final-IK 2.1:Unity中的IK插件与动捕技术详解》 Final-IK 2.1是一款专为Unity游戏引擎设计的反向动力学(Inverse Kinematics,简称IK)插件,它的最新版本带来了更强大的功能和优化,旨在提升游戏角色的动画效果...
《final data 3.0 数据恢复工具深度解析》 在数字化时代,数据的重要性不言而喻,一旦丢失,可能会带来重大的损失。幸运的是,有了像"final data 3.0"这样的数据恢复软件,我们可以找回那些误删的宝贵资料。这款...
Final IK 1.9 是一个强大的插件,主要用于Unity 3D引擎中的骨骼动画系统,它为游戏开发者和动画师提供了高效且灵活的反向动力学(Inverse Kinematics,简称IK)解决方案。这个版本的Final IK是经过优化和升级的1.9...
Final IK 2.2 - Unity
ClassFinal通过特定的加密算法和混淆技术,对Java类文件进行处理,使得未经授权的人难以理解或修改加密后的代码。 Java安全涉及到多个层面,包括数据安全、代码安全、网络安全等。ClassFinal主要关注的是代码安全,...
7. **安全恢复**:在恢复过程中,FinalData不会对源磁盘进行任何修改,确保原始数据的安全。 8. **备份与还原**:FinalData允许用户创建硬盘或分区的映像文件,以便在将来需要时恢复整个系统或特定分区。 9. **...
它不仅支持FAT和NTFS文件系统,还对exFAT等现代文件系统有良好的兼容性。通过全面分析硬盘扇区,FinalData可以重建文件系统的元数据,从而找到那些在常规操作中无法访问的文件。 其次,FinalData的用户界面设计友好...
以下是对`final`关键字在不同场景下使用的详细介绍: 1. **final变量** - `final`修饰的局部变量一旦初始化后,就不能再改变其值。这有助于防止意外修改,增加代码的可预测性和安全性。 - 类级(静态)常量通常也...
修饰方法的`final`关键字意味着该方法不能在子类中被重写,尽管子类仍然可以定义相同名称的方法,但这种方法必须是新的方法而非对父类方法的重写。这是因为`final`方法的不可重写特性,旨在防止子类改变父类方法的...
FinalData就是利用这一点,扫描未被新数据覆盖的区域,找到并恢复那些“已删除”的文件。 二、FinalData的主要功能 1. **深度扫描**:FinalData可以进行深度扫描,不仅查找最近删除的文件,还能寻找更早之前丢失的...
5. **效率优化**:尽管增加了复杂的光照效果,Final Glow在渲染速度上做了优化,减少了对计算资源的需求。 总的来说,Final Glow插件是3DS Max用户提高作品质量、创造独特视觉体验的重要工具。通过学习和熟练掌握其...
该应用的最终版本,"Final版",意味着开发者已经对其进行了多次优化和改进,旨在为用户提供更加稳定、流畅且功能丰富的体验。从压缩包中包含的文件名"DIYP影音Final版.apk"可以看出,这是一个Android应用程序包文件...
4. **安全恢复**:Final Data2在恢复过程中不会对原有数据造成任何改变,确保数据的安全性。 5. **操作简便**:界面友好,操作流程清晰,即便是非专业用户也能快速上手。 使用Final Data2时,首先选择要扫描的驱动...
FinalData是一个免费的带有中文界面的数据恢复软件,主要用于恢复误删除的文件。FinalData软件体积小,可以快捷、有效地恢复误删除的文件,FinalData提供了绿色版和安装版,绿色版可以放在U盘上使用。
1. **深度扫描**:FinalData能对硬盘进行全面的扫描,包括FAT和NTFS文件系统,寻找被删除或丢失的文件。它不仅能恢复误删除的文件,还能在分区格式化后找回数据。 2. **预览功能**:在恢复文件前,FinalData允许...
6. 安全恢复:FinalData不会对原硬盘进行写操作,避免了在恢复过程中进一步破坏丢失的数据。 安装FinalData时,需要注意以下几点: 1. 关闭所有可能正在使用硬盘的应用程序,以防止数据被覆盖或修改。 2. 使用Final...
数据恢复是信息技术中的一个重要领域,它涉及到对已删除、损坏或不可访问的数据进行检索。FinalData通过扫描硬盘上的原始数据块来寻找被标记为已删除但实际并未完全覆盖的文件。这种技术允许它在很多情况下找回看似...
Final Cut Studio 2.0 容量大小为50多G! Final Cut Studio 2让你超越纯粹的剪辑。你将发现特别为 Final Cut Pro 用户设计的新创意工具的强大力量。从剪辑快速过度到动画制作、音频编辑及混音、颜色分级以及作品交付...