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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 重温经典《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中,“初始化”和“创建”捆绑在一起,两者不能分离,以后在学习一些有名的框架源码的时候,你会经常遇到初始化,实例化,创建等概念,你需要在特定的语义环境正确的理解他们,才能确保你能迅速的理解框架的设计思路,有的情况下,他们中的一些概念是一样的,在这里不做过多的探讨。

目录
相关文章
|
16小时前
|
存储 Java 测试技术
滚雪球学Java(30):多维数组:定义和初始化一次搞定
【5月更文挑战第5天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
4 0
滚雪球学Java(30):多维数组:定义和初始化一次搞定
|
16小时前
|
存储 Java ice
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
15 4
|
16小时前
|
存储 算法 搜索推荐
滚雪球学Java(27):从零开始学习数组:定义和初始化
【5月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
9 3
|
16小时前
|
存储 IDE Java
Java一分钟之变量声明与初始化基础
【5月更文挑战第7天】本文介绍了Java编程中的变量声明与初始化,包括变量的类型和命名规则,以及显式和默认初始化。文章强调了局部变量必须初始化的重要性,并列举了三个常见问题:类型不匹配、未初始化和作用域混淆。为避免这些问题,建议明确类型、主动初始化、注意作用域,并利用IDE辅助。通过示例代码展示了正确使用变量的方法,鼓励读者通过实践加深理解。
15 0
|
16小时前
|
Java
Java为什么建议初始化HashMap的容量大小?
【5月更文挑战第3天】Java中初始化HashMap容量能提升性能。默认容量16,扩容按当前的1/2进行。预估元素数量设定合适容量可避免频繁扩容,减少性能损耗。过大浪费内存,过小频繁扩容,需权衡。Java 8后扩容策略调整,但核心仍是预估初始容量以优化性能。
40 1
|
16小时前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
27 3
|
16小时前
|
Java 编译器
【Java探索之旅】解密构造方法 对象初始化的关键一步
【Java探索之旅】解密构造方法 对象初始化的关键一步
17 1
|
16小时前
|
存储 Java 编译器
【Java探索之旅】数组概念与初始化指南:动静结合
【Java探索之旅】数组概念与初始化指南:动静结合
23 0
|
16小时前
|
Java
Java类 初始化顺序 | 静态数据的初始化
Java类 初始化顺序 | 静态数据的初始化
9 0
|
16小时前
|
存储 Java 索引
Java数组的初始化
Java数组的初始化
13 0