重温经典《Thinking in java》第四版之第五章 初始化与清理(二十六)

本文涉及的产品
无影云电脑企业版,4核8GB 120小时 1个月
资源编排,不限时长
无影云电脑个人版,1个月黄金款+200核时
简介: 重温经典《Thinking in java》第四版之第五章 初始化与清理(二十六)

随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。初始化和清理正是涉及安全的两个问题。许多C语言的错误都源于程序员忘记初始化变量。特别是在使用程序库的时候,如果用户不知道初始化库的构件,那么在使用的时候就会报各种错误。清理也是一样,如果你忘记清理,那么这个元素占用的资源就会一直得不到释放,结果是资源用尽。在这里我特别希望提醒我们的java程序员,不要因为语言帮我们初始化了默认值,不要因为垃圾回收器帮助我们回收对象,不要因为现在的内存资源很富裕就忽视了上面这些问题,否则你编写的程序就是不健壮的。

在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。下面是一个带有构造器的简单类:

classRock { 
Rock() { // This is the constructor System.out.print("Rock "); 
    } 
} 
publicclassSimpleConstructor { 
publicstaticvoidmain(String[] args) { 
for(inti=0; i<10; i++) 
newRock(); 
    } 
}

/* Output:

Rock Rock Rock Rock Rock Rock Rock Rock Rock Rock

*///:~

在使用new Rock()创建对象时,将会为对象分配存储空间,并调用相应的构造器。这就保证了在你能操作对象之前,它已经被初始化了。在Java中,构造器的名称必须和类名完全相同,没有参数的就叫默认构造器,也叫无参构造器。还有就是有参构造器,下面是一个有参构造器的例子:

//: initialization/SimpleConstructor2.java // Constructors can have arguments. classRock2 { 
Rock2(inti) { 
System.out.print("Rock "+i+" "); 
    } 
} 
publicclassSimpleConstructor2 { 
publicstaticvoidmain(String[] args) { 
for(inti=0; i<8; i++) 
newRock2(i); 
    } 
}

/* Output:

Rock 0 Rock 1 Rock 2 Rock 3 Rock 4 Rock 5 Rock 6 Rock 7

*///:~

有参构造器很有帮助,它可以使你在初始化对象时提供实际参数。从概念上讲,“初始化”和创建是彼此独立的,在Java中,“初始化”和“创建”捆绑在一起,两者不能分离,以后在学习一些有名的框架源码的时候,你会经常遇到初始化,实例化,创建等概念,你需要在特定的语义环境正确的理解他们,才能确保你能迅速的理解框架的设计思路,有的情况下,他们中的一些概念是一样的,在这里不做过多的探讨。

目录
相关文章
|
2月前
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
253 2
|
1月前
|
Java
Java 静态变量的初始化顺序
【10月更文挑战第15天】了解 Java 静态变量的初始化顺序对于正确编写和维护代码至关重要。通过深入理解初始化顺序的原理和细节,我们可以更好地避免潜在的问题,并提高代码的质量和可靠性。
|
2月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
137 3
|
2月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
68 1
|
4月前
|
安全 Java 关系型数据库
Java连接Mysql SSL初始化失败
Java连接Mysql SSL初始化失败
|
4月前
|
存储 Java
如何在 Java 中初始化二维 ArrayList
【8月更文挑战第23天】
100 1
|
4月前
|
存储 JavaScript Java
Java中未被初始化的字符串打印出“null”?
在Java中,未初始化的`String`变量默认值为`null`。打印此类变量时输出“null”,是因为`PrintStream`类中的`print`方法特别处理了`null`值,将其转换为字符串“null”。从JDK 17开始,`println`方法通过`String.valueOf`间接实现相同功能。当拼接包含`null`的字符串时,如`s1 + &quot;BLACK&quot;`,结果为“nullBLACK”,这是因为字符串构建过程中`StringBuilder`的`append`方法将`null`转换为“null”。
|
4月前
|
存储 Java 编译器
如何在 Java 中初始化对象 Arraylist?
【8月更文挑战第23天】
132 0
|
4月前
|
存储 Java 开发工具
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
|
4月前
|
Java Spring
Java SpringBoot Bean InitializingBean 项目初始化
Java SpringBoot Bean InitializingBean 项目初始化
62 0