Object
-
getClass
获取对象的所属的类类型,不允许被重写
-
hashCode
一个对象在堆中的特征(地址)经过hash算法得到的一个int值
Object中一般是以地址值为特征的
一般我们会重写,以属性的值进行计算。
-
equals
两个对象的比较方法
Object里是判断两个地址是否相同,使用的 ==
一般我们会重写,以属性的值是否相同来判断的
-
toString
输出一个对象的字符串形式
Object里是对象的地址:全限类名+@+hashCode的十六进制字符串
一般我们会重写,以输出对象的属性为原则
String
字符串常量池的存在
当字符串进行常量赋值或者调用intern方法的时候,会将字符串对象放入到常量池中并返回常量池中的地址。
String的本质,底层是字符数组。
枚举
对象个数固定的类型,基本和类一样,类可以定义的部分,枚举都可以,有这样几个不同点:
- 构造器是私有的
- 所有的枚举类都继承Enum,所以不能再继承其他类
- 枚举类可以实现接口
- 由枚举类统一实现
- 由枚举对象做单独实现
- 枚举类可以提供抽象方法,但必须由枚举对象立即实现
集合
Collection
单列集合的抽象,一个元素就是一个数据。
Collection接口是Iterable的子接口,Collection集合都可以使用迭代器。
List
有序的、元素可重复、有索引
遍历的时候有三种方式
- 普通for循环,需要转换成数组操作
- 增强for循环(推荐)
- 迭代器遍历
// 获取迭代器的对象
Iterator it = 集合.iterator();
while(it.hasNext()){
it.next();
}
- ArrayList:底层使用数组实现,增删慢,查找快
- LinkedList:底层使用双向链变实现,增删快,查找慢
- Vector:底层使用动态数组实现,加了线程安全,使用方法和ArrayList相同
Set
元素没有顺序、没有索引、不能重复
-
HashSet:底层用Hash表,无序且不可重复
- 唯一性的验证:先验证hashCode的值,如果hashCode值相同,需要继续验证equals的结果
- 使用的时候,自定义的类型必须重写hashCode和equals
-
TreeSet:底层用红黑树,有序且不可重复
唯一性的验证:根据比较方法的返回值是否为0,为0则代表重复。
提供了两种排序的方法
- 自然排序:要求集合中元素的所属类型实现Conparable接口,提供compareTo的方法实现。返回值有正数、负数和0三个选项
- 比较器排序:一般用在源代码无法侵入的情况,要求第三方的类实现Comparator接口,提供compare方法的实现。返回值有正数、负数和0三个选项。可以使用外部类、成员内部类、匿名内部类、lambda表达式来进行使用。
-
LinkedHashSet:数据的存取顺序是一致的
Map
双列的结合,一个元素是一个键值对(key-value),键值对被抽象成了Map的内部子接口,Entry
- HashMap:key值不重复、键值对是无序的,原理参照HashSet,要求对key所在的类重写hashCode和equals
- TreeMap:key值不重复,key可以进行排序,排序的方式参照TreeSet,同样的也是提供自然排序和比较器排序。
- HashTable:使用和HashMap一样,加了线程安全
- LinkedHashMap:要求map的键值对存取顺序一致
- Properties
遍历
集合的常用方法组成的工具类
- 填充
- 排序
- 反转
- 混洗
- 添加多个元素
- 最大值、最小值
注解Annotation
定义
用在java类的元素(属性、方法、类名、包名)上,主要起标记作用,主要标记元素具有特殊功能,或者在编译期间进行语法检查。
写法
-
语法:@Interface
public @interface 注解的名字{ 属性; }
-
生效范围(@Retation)
- source :java文件里
- class : java文件和class文件
- runtime:运行时,包含前面的所有阶段
-
注解存在的位置(@Target)
- method:方法
- filed:属性上
- type:类型上
- …
异常
java中对于所有出现的异常情况抽象成了异常类,等到异常情况发生的时候,会抛出一个该异常类型的对象。
异常的种类
- 编译型异常
- 运行时异常
异常的处理
- 使用throw和throws关键字进行向上抛出
- throw
- throws
- 使用try-catch语句块进行捕获
- 将可能出现异常的代码放在try块里
- 使用catch后的参数捕获指定异常
- catch可以捕获多个异常,用|隔开
- 如果想对多个异常进行单独处理,可以写多个catch语句,但捕获的异常范围要从小到大捕获
finally
无论什么情况,都会执行的代码块,一般放一些记录日志、关闭资源等的代码。
如果finally中有变量的赋值操作,同时呢在上面有return语句,finally中的变量赋值不会被返回。主要是因为return的值已经复制好准备返回了,就等finally执行完毕了。
自定义异常
- 定义的编译型异常:需要写个类继承Exception,然后定义子类的构造器即可,主要靠父类的构造器进行实现
- 定义的编译型异常:需要写个类继承RuntimeException,然后定义子类的构造器即可,主要靠父类的构造器进行实现