博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA编程思想笔记——初始化和清理(1)
阅读量:4949 次
发布时间:2019-06-11

本文共 2241 字,大约阅读时间需要 7 分钟。

1 用构造器确保初始化

        构造器采用与类相同的名字。主类的名字和文件名要相同。

        从概念上讲,初始化 和 创建 是彼此独立的,然而,在JAVA中,初始化 和 创建 是捆绑在一起的,两者不能分离。

        构造器是一种特殊类型的方法,因为它没有返回值。这与返回值为空(void)明显不同。对于返回值为空,尽管方法本身不会自动返回什么,但是仍可选择让它返回别的东西。构造器则不会返回任何东西。

2 方法重载

        构造器是强制重载方法名的另一个原因。       

        区分重载的方法:每个重载的方法都必须有一个独一无二的参数类型列表。参数顺序也可以区分两个方法,但是不推荐这么做。

        基本数据类型从较小的类型自动提升至一个较大的类型。但是如果传入的实际参数较大,就要通过强制类型转换进行窄化转换。

                转换顺序为:char -> int -> long -> float -> double;  byte -> short -> int ......

3 默认构造器

        又称为无参构造器。

        如果已经定义了一个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器。

4 this关键字

        this关键字返回了对当前对象的引用。通常写this的时候,都是指”这个对象“或”当前对象“,而且它本身表示对当前对象的引用
        应用情景:
1 将当前对象传递给其他方法
2 在构造器中调用构造器  除构造器之外,编译器禁止在其他任何方法中调用构造器

5 static

  • static方法就是没有this的方法。在static方法的内部不能调用非静态方法,但是反过来可以。
  • 可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法

6 清理:终结处理和垃圾回收

        垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块特殊内存,因为
这块内存不是通过创建获得的
        finalize()方法:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。
注:在C++中,对象一定会被销毁(析构函数),而Java中的对象却并非总是被垃圾回收。需要注意三点:
  • 对象可能不被垃圾回收
  • 垃圾回收并不等于“析构”
  • 垃圾回收只与内存有关
        所谓的特殊情况,即是通过某种创建对象方式以外的方式为对象分配了内存空间。这时需要finalize()方法。主要是指在分配内存时可能采用了类C的做法,而非Java中通常做法。这种情况主要发生在使用“本地方法”的情况下,本地方法是一种在JAVA中调用非JAVA代码的方法。
        总结一句话,finalize()函数不是进行普通的清理工作的合适场所,因为它的使用情况非常特殊。
一个例子,之前在不应该的地方糊涂的:
class WebBank {	boolean loggedIn = false;	WebBank(boolean logStatus) {		loggedIn = logStatus;	}	void logIn() {		loggedIn = true;	}	void logOut() {		loggedIn = false;	}	protected void finalize() {		if(loggedIn)			System.out.println("Error: still logged in");		// Normally, you'll also do this:		// super.finalize(); // Call the base-class version	}}public class TerminationConditionEx {	public static void main(String[] args) {		WebBank bank1 = new WebBank(true);		WebBank bank2 = new WebBank(true);		// Proper cleanup: log out of bank1 before going home		bank1.logOut();		// Drop the reference, forget to cleanup:		new WebBank(true);		// Force garbage collection and finalization:		System.gc();	}	}
上面的代码之所以会有error警告输出,是因为new WebBank(true);出来的对象没有引用(虽然Java的垃圾回收技术不是简单地检查引用数,这个接着就会讲到),所以在强制进行垃圾回收的时候,会检测它的loggedIn状态,另外两个不会。
Java不允许创建局部对象,必须使用new创建对象。
垃圾回收机制
        引用记数是一种简单但速度很慢的垃圾回收技术。并且不能处理循环引用这种情况。
        Java的垃圾回收所依据的思想为对任何“活”的对象,一定能最终追溯到其存活在堆栈或静态存储区之中的引用。
        Java的垃圾回收机制的概括可以为:自适应的、分代的、停止-复制、标记-清扫式垃圾回收器。

转载于:https://www.cnblogs.com/suzhou/archive/2013/05/16/3639010.html

你可能感兴趣的文章
Python&Selenium&Unittest&BeautifuReport 自动化测试并生成HTML自动化测试报告
查看>>
活现被翻转生命
查看>>
POJ 1228
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>
springmvc怎么在启动时自己执行一个线程
查看>>
流操作的规律
查看>>
Python基础学习15--异常的分类与处理
查看>>
javascript运算符的优先级
查看>>
React + Redux 入门(一):抛开 React 学 Redux
查看>>
13位时间戳和时间格式化转换,工具类
查看>>
vue router-link子级返回父级页面
查看>>
C# 通知机制 IObserver<T> 和 IObservable<T>
查看>>
Code of Conduct by jsFoundation
查看>>
div 只显示两行超出部分隐藏
查看>>
C#小练习ⅲ
查看>>
debounce、throttle、requestAnimationFrame
查看>>
linux下的C语言快速学习—进程和文件
查看>>
电源防反接保护电路
查看>>
stm32 堆和栈(stm32 Heap & Stack)
查看>>
SpringMVC从入门到精通之第三章
查看>>