昨天介绍了枚举类的相关知识,并没有讲完,我们继续!

枚举类的成员变量、方法和构造器

先定义一个枚举类,代码如下:

下面通过一个程序讲述对这个类的使用:

结果如下:

上面的程序使用Gender枚举类的时候与普通类没有什么很大的差别,差别只是产生Gender对象的方式不同,枚举类的实例只能是枚举值,而不是通过new随意的创建对象。

之前提到过,枚举类比较特殊,无论是写法上还是含义上。所以,对枚举类里的实例变量 也应该有一定的要求。举个栗子:如果没什么要求,那么上面的程序中我也可以把name实例变量赋值成“男”,但是这个显然是有问题的。所以理论上枚举类里的实例变量应该是封装好的,也就是说要通过private进行修饰。此外,在枚举类中还应该对实例变量的值进行一些限定。其实说白了,枚举类就是我们描述集合所用到的列举法,它的情况应该是有限且可知的。

看下面代码:

上面框出来的就是解决的两点。这样子就不会发生与实际相悖的混乱。

结果如下:

上述代码看起来已经天衣无缝了,但是仍然不是最好的。枚举类通常被设计成不可变类,也就是说,它的成员变量不应该改变,这样更安全,而且代码更加简洁。因此建议将枚举类的成员变量都用private final修饰。如果用final修饰,那么必须在构造器里为这些成员变量指定初始值。因此应该为枚举类显式定义带参数的构造器。

代码如下:

可能大家很不熟悉第42行的写法。

这两行相当于:

对象与垃圾回收

1. 垃圾回收机制特征:

(1)垃圾回收机制只负责回收内存中的对象,不会回收任何物理资源(例如数据库连接,网络ID等资源)

(2)程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行。当对象永久性的失去引用后,系统就会在合适的时候回收它。

(3)在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收。

2. 对象在内存中的状态:

(1)可达状态:当一个对象被创建后,有引用变量引用它,则这个对象在程序中处于可达状态;

(2)可恢复状态:如果程序中某个对象不再有任何引用变量引用它,它就进入了可恢复状态。在这种状态下,垃圾回收机制就准备对它进行回收。但是在回收之前会调用finalize()方法进行资源清理,如果该对象被重新引用,就不回收,否则就回收。

(3)不可达状态:系统调用finalize()方法之后该对象还是没有被调用,该对象就到了不可达状态,就进行回收。

 3. finalize方法

  • finalize()方法用来清理对象的资源;

  • 方法原型为:

protected void finalize() throws Throwable

  • 当finalize()方法返回后,对象消失,垃圾回收机制开始执行,方法原型中的throwsThrowable表示它可以抛出任何形式的异常。

  • 垃圾回收机制何时调用对象的finalize()方法是完全透明的,只有当程序认为需要更多的额外内存时,垃圾回收机制才会进行垃圾回收。因此,完全有可能出现这样一种情形:某个对象失去了引用,但是只占用了少量内存,而且系统没有产生严重的内存需求,因此垃圾回收机制并没有试图回收该对象所占用的资源,所以该对象的finalize()方法不会得到调用。

  • finalize()方法有4个特点:

    (1)永远不要调用某个对象的finalize()方法,该方法应该交给垃圾回收机制调用。

    (2)finalize()方法何时被调用,是否被调用具有不确定性,不要把finalize()方法当作一定会执行的方法。

    (3)当JVM执行可恢复对象的finalize()方法时,可能使该对象或系统中其他对象重新变成可达状态。

    (4)当JVM执行finalize()方法时出现异常时,垃圾回收机制不会报告异常,程序继续执行。

使用JAR文件

 1. JAR文件的全称是JavaArchiveFile,意思就是Java档案文件。通常JAR文件是一个压缩文件,与常见的ZIP压缩文件兼容,通常也被称为JAR包。JAR文件与ZIP压缩文件的区别是:JAR文件中默认包含了一个名为META-INF/MANIFEST.MF的清单文件,这个清单文件是生成JAR文件时由系统自动创建的。

2. JAR文件的作用:

当开发了一个应用程序之后,这个应用程序包含了很多类,如果需要把这个应用程序提供给别人使用,通常会把这些类文件打包成一个JAR文件,把这个JAR文件给别人使用。只要别人在自己的系统里面的CLASSPATH环境变量中添加这个JAR文件,则Java虚拟机就可以自动在内存中解压这个JAR包,然后进行使用。

3. JAR文件的好处:

(1)安全:能够对JAR文件进行数字签名,只让能够识别数字签名的用户使用里面的东西;

(2)加快下载速度:在网上使用Applet时,如果存在多个文件而不打包,为了能够把每个文件都下载到客户端,需要为每个文件单独建立一个HTTP连接,这是非常耗时的工作。但是打包以后,只需要建立一个HTTP连接即可;

(3)压缩

(4)包封装

(5)可移植性

【2017.07】

好了,今天java就到这里吧,下面本来是JAR包的使用,可是我怎么就这么不想看呢。明天学习第七章吧——Java基础类库。感觉现在看起来学的都是些理论上的东西,但是还是有很大帮助的,知道了很多机理以后,无论是看代码还是写代码都会考虑更多,让程序更加健壮,所以还是有必要的。不希望自己一直纸上谈兵,所以我把书上的程序都敲过一遍,会不会再说,首先混个手熟。加油吧,今天应该可以敲敲代码,弄弄竞赛题。对了,说个有意思的事情,我今天打开公众号,发现老爸给了我个消息,是一个表情,头晕眼花的那个,顿时觉得好好玩啊爸爸,太有意思了。不过这个可能在提醒我,只发专业东西不是太好的,可以多面性!get it!

《疯狂Java讲义》7相关推荐

  1. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  2. java下载pdf6_疯狂java讲义第6版 电子版(pdf格式)

    疯狂java讲义第6版pdf是李刚打造的经典java编程图书的最新版,为了帮助更多的读者能真正掌握Java编程,感受到Java语言的魅力,领会到Java编程的快乐,作者根据多年来的Java授课经验,精 ...

  3. 《疯狂Java讲义精粹》读书笔记2 ------ 多态

    -----------------<疯狂Java讲义精粹>2读书笔记--------------- Java引用变量有两个类型: · 编译时类型(由声明该变量时使用的类型决定) · 运行时 ...

  4. java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...

    [java]代码库import javax.swing.*; import java.awt.image.*; import java.awt.datatransfer.*; import javax ...

  5. 《疯狂Java讲义》学习笔记 第六章 面向对象(下)

    <疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...

  6. 李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.009-[疯狂Java讲义第3版 李刚]- 泛型 Style:EBook Series:Java Si ...

  7. [疯狂Java讲义精粹] 第十三章|类加载机制与反射

    java.lang.reflect包下的接口和类, 包括Class, Method, Filed,Constructor和Array等, 这些类分别代表类, 方法, Field, 构造器和数组, Ja ...

  8. 疯狂Java讲义:P200接口

    接口 Output package lee; public interface Output {//接口里定义的成员变量只能是常量int MAX_CACHE_LINE=50;//接口里定义的只能是pu ...

  9. 疯狂Java讲义_Chapter4_编写控制台的五子棋游戏

    编写控制台的五子棋游戏 昨天复习了下<疯狂Java讲义>,完成前几章的习题, 现在基本完成了控制台五子棋游戏的编写,能够按照要求 保证用户下和电脑下的棋上不能已经有棋子 判断横.竖.左斜. ...

  10. 《疯狂Java讲义》读书笔记5

    目录 Java的集合类 Inerator 接口 Set 集合 HashSet 类 LinkedHashSet 类 TreeSet 类 EnumSet 类 List 集合 ArrayList 和 Vec ...

最新文章

  1. React组件设计之边界划分原则
  2. 每天写的叫工作日志,每周写的总结叫周报,每月写的叫月报
  3. 线性模型的最小二乘法拟合(转)
  4. Instagram为何如此受欢迎?
  5. Android 导航栏如何轻松搞定
  6. 网易暴力裁撤绝症员工后,多益网络徐波、孙宇晨都要出钱给该离职员工治病!...
  7. convert mysql_MySQL的CONVERT()
  8. CCF NOI1039 2的n次方
  9. 安装和使用Entrez Direct
  10. 【Multisim仿真】二极管加正向和反向电压测量实验
  11. c语言字符串去重用指针,用几条shell命令快速去重10G数据
  12. 软件公司需要哪些资质?
  13. 在office如何安装翻译软件插件
  14. 九段刀客:js九宫格转盘抽奖实现原理
  15. [思考的乐趣] 有趣的莫比乌斯带
  16. D-Link宽带路由器设置全攻略
  17. 创建新的maven项目时报错找不到插件:Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.1
  18. gh-ost 工具
  19. 解决iOS版抖音破解重签名后无法安装
  20. c语言中printf%12d,C语言系列之printf和%12d的用法(三)

热门文章

  1. 正则表达式 语言间通用
  2. 如何清理asp站点缓存的代码
  3. 基于React脚手架集成Cesium
  4. java中读取文件的方法
  5. 检查本地服务器是否配置成功
  6. 线程池是怎样工作的?
  7. 你们要的动图来了:2张动图快速理解高内聚与低耦合
  8. 程序员也得懂点儿理财知识
  9. 3.JAVA中的多态
  10. map:map指向最后一个元素?指向第一个元素?