说明
因为是个人复习java的总结,所以结构稍显杂乱,有些语句过于口语化.
Object
equals()方法,其实内部实现就是==,基本类型比较值,引用类型比较的是地址
源代码表现为
this == obj this为调用方法的对象,obj为传入的内容
所以在使用的时候基本需要重写
Date类
主要就是用来表示时间,可以在毫秒和具体日期之前切换.
毫秒日期的原点为1970/1/1 00:00:00
中国为东八区所以需要加八个小时
直接打印返回的是重写后的toString方法,包括时区年月日等信息
如果想要格式化输出的Date可以通过SimpleDateFormat类来实现.
因为SimpleDateFormat中有堆Date类输出的格式解析实现,首先需要通过构造器创建对应的输出解析方式,使用y,M,d,H,m,s表示年月日时分秒,然后通过 SimpleDateFormat的对象调用format格式化Date对象,然后就可以输出指定的格式.
format是转换Date为指定格式而parse方法则是解析指定格式为Date
具体调用和format一样,只是效果不同,但是需要注意其抛出的解析异常,格式不正确时出现.
Calendar类
Calendar类无法直接创建对象,但是可以使用getInstance静态方法来获取其子类.
主要使用的get方法获取其中具体的属性值,仍需要先实现子类对象,然后调用get()传入Calendar中的具体字段,然后获得返回值,如传入Calendar.YEAR
然后还有set方法设置,具体和get相同
还有add方法传入对应的字段和int,对字段增加后面int的值,可为负数
System类
其中含有获取系统信息的大量方法以及系统操作
常用的如currentTimeMillis()方法,获取当前的系统时间,毫秒表示,多用于对于程序运行时间的计数.
还有就是arraycopy方法,其中有五个参数,具体看文档,实现的就是把一个数组一定长度的内容放到另一个数组中
StringBuilder类
- 忘记比较StringBuffer了,下次更新补充.
因为字符串在底层是被final修饰的byte数组,无法改变的,所以需要StringBuilder这个类来作为字符串的缓冲区,达到使用可改变的字符串的目的,从而减少内存的占用.
特别在做字符串的组合的时候,String类对于内存的占用十分多,每个””都需要创建,每次计算都要新增字符串,而这些字符串实际上都不会再使用到,所以效率十分低.
而StringBuilder底层其实也是byte数组,但是不是final修饰并且是长度可变的.所以对于字符串的组合操作使用效率较高.
其中append方法,效果从名字可以看出,但是特殊在其返回值是调用的对象,从概念上理解就是StringBuilder所占用的一块对象内存在append中一直没有改变,只是其中的数组内容发生了一些变化,因此对于这个函数可以使用链式地语句书写模式,也就是说可以不断.append(),因为其返回值是同一个对象.
还有toString方法,其实就是把StringBuilder转换成String.
其实很多类有重写toString()方法,但是这个方法和String的是不同的,很多类中重写的是Object类中的toStirng,主要是输出的问题,而String类中的则是转换成字符串.
包装类
其实就是基本数据类型的类,其中有一些操作方法.
byte Byte
char Character
int Integer
boolean Boolean
float Float
double Double
long Long
short Short
其实其中常用的就ValueOf()静态方法,获取字符串或者int的值
.IntValue静态方法,其实就是包装类变回基本数据类型
基本类型和字符串之间的转换
其实就是parseInt()方法,随数据类型更改方法名
集合框架
其实就是集合整理上实现的类的一个结构
首先Collection接口分为List接口和Set接口
其中List接口有以下实现类:Vector,ArrayList,LinkedList
其中Set分为TreeSet和HashSet
然后HashSet又被LinkedHashSet继承
主要学习顶层的抽象类,可以了解共性的方法,还有底层的实现类,可以了解具体实现类的特性.
Collection常用功能
其实思考Collection作为所有集合的共同接口,其中包含的共性必然是增删改查等基本操作的规范.
Iterator接口
其实就是一个迭代器,用于判断集合中是否还有元素,并进行遍历.因为部分集合是无需的,所以有迭代器是十分必要的.
迭代器具有泛型,泛型的数据类型随着集合而定.
这个接口不能直接实例化,而获取其对象的方法也很奇葩,使用的是集合中的iterator()方法.
foreach语句,其实底层也是迭代器,但是语句简化.
for(集合/数组的数据类型 变量名: 集合名/数组名)
泛型
其实就是规范能输入的数据类型
如果不知道什么类型的时候,就可以在类中设置泛型为
如果不写会默认为Object,但是不安全,因为在使用的时候很可能泛型输能输入不同类型的数据,那么在输出的时候,使用就需要向下转型才能使用你存入时需要使用的初衷方法,但是这样可能传入是传入错误数据从而导致无法转型.
但是如果定义泛型,那么就可以把这种错误解决在编译阶段,并且输出之后不需要向下转型.
如果写了泛型,这些问题就会在编译阶段出错,从而减少了错误的修改代价.
泛型可以使用在类中,即所有数据类型都改成,不包括静态的方法,这个字母不一定要强制要求,这样做的好处,是对于一个类,需要限定其中数据类型统一的时候,在创建对象时设置泛型,从而达到类中数据类型统一的目的.但是着样实质上一个对象也只能统一为一种类型.
泛型也可以定义在方法中
也可以定义在接口中,而在接口中的泛型类型的设置,一种是在实现类中重写对应方法为某种类型,而达到某种类型的泛型.另一种是接口实现什么类型的翻新,其中的方法就跟随什么泛型.实际上最终是接口实现类对象设置某种类型泛型,其中方法就某种类型泛型.
泛型通配符
其实就是?,可以用来匹配所有类型的数据.
一次泛型中没有继承概念,不会向上转型,所以只能使用通配符设置.
但是需要注意,通配符不能在创建对象的时候使用,只能是作为方法的参数传递,也就是一个匹配所有类型的方法.
泛型通配符还有一种高级的用法,其实就是在泛型基础上增加一个范围的判定
上限限定 <? extends E>
下限限定 <? super E>
如有错误欢迎读者批评指正!!