关于android开发中涉及到的java知识:面向对象(八)

来源:互联网 发布:js 浮点数比较 编辑:程序博客网 时间:2024/05/12 09:29
面向对象(八)
今天来整理下对象与垃圾回收和JAR文件使用方面的知识:
什么是垃圾,简单来说就是不被使用的引用类型实体被分配的堆内存。垃圾回收机制就是负责回收这些内存的机制。
●垃圾回收机制的特征:
1.它只负责回收堆内存中的对象,不会回收其他任何的物理资源。
2.程序是无法控制它的,它只在合适的时候进行,只有在对象永久性失去引用后,系统就会在合适的时候对对象的内存进行回收。
3.在它回收对象之前会调用它的finalize()方法,这个方法可能(注意是可能)会使对象重新复活(即让一个引用变量重新引用该对象),从而取消垃圾回收机制。
●对象在堆内存中的状态:
1.可达状态:即一个对象被创建后有1个以上的引用变量引用它。
2.可恢复状态:即程序中不再有引用变量引用这个对象。在调用finalize()方法后,若有引用变量引用它,则变为可达状态,否则变为不可达状态。
3.不可达状态;即在调用所有对象的finalize()方法后,该对象没有变成可达状态,则这个对象将永久性地失去引用,变成不可达状态。
系统的垃圾回收不可控,但我们可以使用程序对某个对象进行强制垃圾回收。
●强制垃圾回收的方法;
1.调用System类的静态gs()静态方法:System.gc();
2.调用Runtime对象的gc()实例方法:Runtime.getRnutime().gc();
●finalize方法
先来看下finalize方法的原型:
protected void finalize() throws Throwable
方法原型中的throws Throwable表示它可以抛出任何类型的异常。
finalize()方法的特点:
1.不要主动调用finalize()方法,此方法应该交给垃圾回收机制。
2.finalize()方法何时调用,是否被调用具有不确定性,不要以为该方法一定会被调用。
3.当JVM(java虚拟机)执行可恢复对象的finalize()方法时可能会使对象或系统中其他对象重新变成可达状态。
4.当JVM执行finalize()方法出现异常时垃圾回收机制不会报告异常,程序继续运行。
注:使用强制垃圾回收后,如果没有进行暂停,系统将不会进行垃圾回收,即不会调用finalize()方法,要想使之调用finalize()方法,则需要在System.gc()后面调用runFinalization()方法,强制调用垃圾回收机制的finalize()方法,runFinalization()方法是System和Runtime类提供的,调用格式为:System.runFinalization();或Runtime.getRnutime().runFinalization();
●使用JAR文件
JAR文件就是Java档案文件,它是一种压缩文件。
那JAR文件到底是干什么用的呢?打个比方:当你开发了一个应用程序后,这个程序就包含了很多类,如果想让别人使用它,则需要对其进行压缩为JAR包,若别人的电脑中的CLASSPATH环境变量中添加这个jar文件,则java虚拟机就可以自动在内存中解压这个jar文件,把它当成一个路径来使用,然后从路径中寻找需要的类和包的对应路径。
使用jar文件的好处:
1.安全。可以对JAR文件进行数字签名,让能够识别数字签名的用户使用里面的东西。
2.加快下载速度。压缩为JAR包后,只需建立一次HTTP连接就可以下载所有的文件。
3.压缩。使文件变小。
4.包封装。可以让JAR包里的文件依赖统一的版本类文件。
5.可移植性。JAR包可以再任何平台上使用。
下面来看一些jar命令。
1.创建jar文件:jar cf text.jar text
将text目录下的全部内容压缩生成一个text.jar文件。
2.创建jar文件,并显示压缩过程:jar cvf text.jar text
3.不使用清单文件:jar cvfM text.jar text
4.自定义清单文件内容:jar cvfm text.jar manifest.mf text
5.查看jar包内容:jar tf text.jar
6.查看jar包详细内容:jar tvf text.jar
7.解压缩:jar xf text.jar
8.带提示信息解压缩:jar xvf text.jar
9.更新jar文件:jar uf text.jar Hello.class
10.更新时显示详细信息:jar uvf text.jar Hello.class
到今天为止,java面向对象的内容基本结束,谢谢浏览。
0 0
原创粉丝点击