第一部分:Object
一、构造方法
1、无参的构造方法
二、常用方法
(一)hashCode
1、特点
- 返回该对象的哈希码值,整数。
- 针对不同的对象返回不同的整数,通过将该对象的内部地址转换成一个整数来实现。
- 默认使用IDE重写后,会和成员变量有关。
2、分析hashCode方法与HashSet类
1)哈希算法提高从集合中查找元素的效率,将集合分成若干个区域,每个对象可以计算出一个哈希码。
2)将对象的哈希码分组,
每组分别对应某个存储区域,根据一个对象的哈希码就可以确定该对象应该存储在哪个区域。
2)HashSet底层用的也是数组。
- 当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode。
- int hc=o.hashCode(); 返回的hashCode为整数值:Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a[0]位置,如果I=1,则放在数组a[1]位置。
- 如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。
- 如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。
2-参加hash算法的对象的属性,不要去修改,不然会破坏算法。
(二)equals
1、特点:
- 指示其他某个对象是否与此对象“相等”,内部是使用“==”实现,看源码。
- 默认情况下比较的是地址值。比较地址值一般来说意义不大,所以我们要重写该方法,用来比较对象的成员变量值是否相同。
- 像 String 类默认重写了 Object 的equals方法,比较的是内容【值】是否相同。
2、类型的比较
- ==:
- 基本类型:比较的就是值是否相同。
- 引用类型:比较的就是地址值是否相同
- equals:
- 引用类型:默认情况下,比较的是地址值。
- 不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同。
- String 重写后,比较是值。
3、日常使用:
- 基本类型,使用“==”比较
- String 和引用类型使用 “equals”比较
(三)getClass
1、特点:
- 得到内存中的字节码对象。
- 反射时使用
(四)toString
1、特点
- 返回该对象的字符串表示
- toHexString,把一个整数转成一个十六进制表示的字符串
- getClass().getName() + "@" + Integer.toHexString(hashCode())
2、建议所有子类都重写该方法。
3、直接输出一个对象的名称,其实就是调用该对象的toString()方法。
(五)finalize
1、特点:
- 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
- 用于垃圾回收,但是什么时候回收不确定。
(六)clone
1、特点:
- 创建并返回此对象的一个副本。
- Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
- 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
(七)wait
(八)notify
(九)notifyAll
第二部分:键盘类:Scanner
一、特点
1、基本格式:
- public boolean hasNextXxx():判断是否是某种类型的元素
- public Xxx nextXxx():获取该元素
2、举例:用int类型的方法举例
- public boolean hasNextInt()
- public int nextInt()
3、注意:
- InputMismatchException:输入的和你想要的不匹配
二、问题
1、常用的两个方法:
- public int nextInt():获取一个int类型的值
- public String nextLine():获取一个String类型的值
2、一个问题:
- 先获取一个数值,在获取一个字符串,会出现问题,其他都不会有问题。
- 主要原因:就是那个换行符号的问题。因为 Scanner 可以解析正则表达式。
3、如何解决呢?
- 方法1:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。
- 方法2:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。