Object类
-
在java.lang包下
-
Object类是超类、基类,所有类的直接或间接父类,位于继承树的最顶层
-
任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
-
Object类中所定义的方法,是所有对象都具备的方法。
-
Object类型可以存储任何对象
- 作为参数,可接受任何对象
- 作为返回值,可返回任何对象
getClass()方法
-
public final Class<?> getClass(){}
-
返回引用中存储的实际对象类型
-
应用:通常用于判断两个引用中实际存储对象类型是否一致
hashCode()方法
- public int hashCode(){}
- 返回该对象的哈希值
- 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
- 一般情况下相同对象返回相同哈希值
toString()方法
- public String toString(){}
- 返回该对象的字符串表示(表现形式)
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值
equals()方法
-
public boolean equals(Object obj){}
-
默认实现为(this == obj),比较两个对象地址是否相同
-
可进行覆盖,比较两个对象的内容是否相同
- 比较两个引用是否指向同一个对象
- 判断obj是否为null
- 判断两个引用指向的实际对象类型是否一致
- 强制类型装换
- 依次比较各个属性值是否相同
finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用System.gc();通知JVM执行垃圾回收
包装类
什么是包装类?
-
基本类型数据有:byte,shot,int,long,float,double,char,boolean
基本类型数据存储在:内存空间的栈里
引用类型数据存储在:内存空间的堆里、栈里存放引用地址
-
每种基本类型都有包装类,包装类的默认值为null
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BTxBel7t-1604833997534)(E:\Mess\Typora\笔记\img\Java常用类\基本和包装.PNG)]
类型转换与装箱、拆箱
-
装箱:将栈里面的数据转到堆里面
拆箱:将堆里面的数据转到栈里面
-
8种包装类提供不同类型间的转换方式:
- Number父类中提供的6个拆箱方法:byteValue()、doubleValue()、floatValue()、intValue()、longValue()、shortValue()
- 装箱:
- 使用构造方法
- 调用valueOf()方法
- 拆箱:
- 调用xxxValue()方法
-
JDK1.5之后,提供了自动装箱和拆箱
- 直接相互赋值即可
- 自动装箱调用的Integer.valueOf()
-
parseXXX()静态方法:实现字符串和基本类型之间的转换
- 基本类型转成字符串
- 使用+进行字符拼接
- 使用Integer中的toString()方法
- 字符串转成基本类型
- 使用Integer.parseXXX(字符串)方法
- boolean字符串形式转成基本类型,“true”->true 非“true”皆转为false
- 基本类型转成字符串
-
注意:需保证类型兼容,否则抛出NumberFormatException异常
整数缓冲区
- Java预先创建了256个常用的整数包装类型对象(-128~127)
- 在实际应用当中,对已创建的对象进行复用。
- 使用的原因:因为开发过程中-128到127使用比较频繁,使用整数缓冲区节省时间和空间
String类
- 字符串是常亮,创建之后不可改变
- 给字符串修改赋值时,并没有修改原来数据,而是从新开辟一个新的内存空间,将原来的引用指向新内存空间,原来的数据成为垃圾数据
- 当新创建一个引用时,会在共享池里查找有没有相同数据,如果有直接指向该地址空间,没有则创建新的地址空间
- 字符串字面值存储在字符串池中,可以共享
- String s = “Hello”;产生一个对象,在字符串池中存储
- String s = new String(“Hello”);产生两个对象,堆和池中各存储一个;此时栈里面引用指向堆中地址(实际在内存中堆指向池中的数据,只用一个内存空间)
常用方法
- public int length():返回字符串的长度
- public char charAt(int index):根据下标获取字符
- public boolean contains(String str):判断当前字符串中是否包含str
- public char[] toCharArrary():将字符串转换成数组
- public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
- public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引
- public String trim():去掉字符串前后的空格
- public String toUpperCase():将小写转成大写、toLowerCase大转小
- public boolean endWith(String str):判断字符串是否已str结尾、startWith(String str)是否已str开始
- public String replace(char oldChar,char newChar):以旧字符串替换成新字符串
- public String[] split(String str):根据str做拆分
- 补充:
- equals()比较内容是否相等
- compare()比较大小,ASCII码大小
- compareTo()比第一个不同的字符ASCII码相减,如果前面相等比长度
可变字符串
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全
- toString()输出为字符串
- append()追加
- insert()添加,可以指定添加位置
- replace()替换,可以指定位置将其替换
- delect()删除,可以指定位置
- StringBuilder:可变长字符串。JDK5.0提供,运行效率快、线程不安全
- 方法与StringBuffer相同
- 和String相比
- 效率比String高
- 比String节省内存
BigDecimal
-
为什么用?
浮点数double和float存储的是近似值
很多实际应用中需要精确运算,而double是近似值存储,不符合要求,需要借助BigDecimal
-
位置:java.math包中
-
作用:精确计算浮点数
-
创建方式:BigDecimal bd = new BigDecimal(“1.0”) 传入“”字符串格式,内部有转换
-
加减乘除使用方法:add()、subtract()、multiply()、
- divide():除不尽会报异常,此时添加参数保留小数、和四舍五入机制即可
Date
-
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calender类中的方法所取代
-
时间单位
- 1秒=1000毫秒
-
Date
- 大部分都已经过时
- 常用的还有
- get、set、equals、toString、toLocaleString(好看的toString)
- after、before比较时间先后
-
Calender
- Calender提供了获取或设置各种日历字段的方法
- 构造方法
- protected Calender():由于修饰符是protected,所以无法直接创建该对象
- 其他方法