Java第四章 第2节 常用类库学习笔记

1、泛型

概念:

泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

这个感觉就是类似抽象类,是不确定时的选择。LinkList<>之类的,用的就是这个,因为这里面可以传各种类型。

然后是上界限定和下界限定,用来帮助我们选择想要的类,当然也可以不限制。

作用:

1、 提高代码复用率
2、 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)

注意:

在编译之后程序会采取去泛型化的措施。
也就是说Java中的泛型,只在编译阶段有效
在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。

2、Object类

需要注意它的equals 和 toString,另外就是这里面的空指针异常。

3、Math类

常用的数学方法都有,然后需要注意两个:

  • 四舍五入 round
  • 向下取整 floor
  • 向上取整 ceil

注意负数,-1.5 四舍五入是 -1,大小记清楚就行了,就是按照大小操作的。

4、Arrays类

提供了很多方法:

  • toString
  • sort
  • search
  • copy of

等等。

5、BigDecimal类

主要用于解决浮点数的计算误差。

6、Date类

大部分都过时了,需要注意的是 getTime方法。1s = 1000ms。计时分时区。

7、DateFormat类

需要注意format和parse两个常用方法。

8、Calender类

为了改进Date,出现的类,实现了大部分的时间方面的方法。需要注意的是时间的计数是从0开始,所以月份是0-11,秒数是0-59等等。

9、String类

重要类,经常需要使用,方法很多。

需要注意的是:

  • 为什么说String一经创建就无法更改?因为实际存储是按照Char数组存储的,存放在常量池,更改的时候,实际上是复制操作。
  • 堆:新生代,老年代,永久代(元空间),它们的Gc机制不同,新生代Gc访问的多,15轮之后,变成老年代,老年代也会变成新生代。
  • 常量池在永久代中,不被Gc。
  • 常量池的性质决定我们,能不用 + 号拼接字符串就不用,因为会产生大量不被Gc的垃圾,占用内存。如果需要大量拼接字符串,使用StringBuffer或者StringBuilder,两者区别是线程安全与否,这样节省内存,操作方式是 append添加字符串,toString转变为字符串。

10、案例过程学习

本次做休息日日历案例,主要有以下几点学习:

  • 1、慢慢学习自己分析案例,分析需要的主要模块,分析需要设计哪些类,现在还是有点不会,很多分析不清楚,慢慢练习,估计后边需要练习使用抽象类和接口之类的东西,但是确实不会用,希望后边能有案例带领练习。
  • 2、打印日历的难点是第一行,也就是每个月第一天怎么打印,通过百度学习了如何操作。
  • 3、怎么计算任意年份月份的休息日呢?大概练习了Calendar类的方法,但是很生疏,API不熟悉,是百度的,之后需要仔细学习API。
  • 4、因为getTime得到的ms,可能很大,所以用了long类型,但是天数又很小,想通过类型强转为int,但是出问题了,这一块需要注意,可能是因为我之前用的Long?类型强转的时候一定要注意,有时候bug就在这。
  • 5、控制台怎么都不齐,然后百度发现,这个可能是显示的问题,所以不再纠结这一块,浪费了大量时间。