内部类
在一个类的内部再定义一个完整的类
内部类
- 编译之后可生成独立的字节码文件
- 内部类可直接访问外部类的私有成员,而不破坏封装
- 为外部类提供必要的内部功能组件
成员内部类
- 在类的内部定义,与实例变量、实例方法同级别的类
- 创建内部类对象时,需要创建外部类对象
- 当外部类、内部类属性重名时,优先访问内部类属性(访问外部类属性需要 外部类名.this.属性名)
- 不能定义静态成员,但可以包含静态常量 final
匿名内部类
- 没有类名的局部内部类
- 必须继承一个父类或实现一个接口
Object类
getClass
返回引用中存储的实际对象类型
应用:判断两个引用中实际存储对象类型是否一致
hashCode
返回对象的哈希值
toString
返回该对象的字符串表示
可根据需要重写
equals
比较两个对象地址是否相同
可通过重写比较两个对象的内容是否相同
finalize
由JVM自动调用
包装类
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
floar | Float |
double | Double |
boolean | Boolean |
char | Character |
Integer缓冲区
实际中缓冲区的数值用的比较频繁,进行复用可减少内存的损耗
Integer integer3 = 100;
Integer integer4 = 100;
System.out.println(integer3 == integer4);
Integer integer5 = 200;
Integer integer6 = 200;
System.out.println(integer5 == integer6);
// true
// false
Integer缓冲区内有-127—128,创建该区域内的对象地址都是引用该缓冲区,因此地址一样。如果范围之外就会重新new对象,地址便不一样。
String类
字符串常量池:JDK1.7 存放在方法区,1.8后存放在堆中
// 字符串值改变只是修改引用,新建name2时会搜索常量池是否有"xiao",有则引用该字符串,因此name1和name2是存储的地址相同
String name1 = "hello";
name1 = "xiao";
String name2 = "xiao";
常用方法
String,不可变字符串,效率较慢
StringBuffer,可变长字符串,运行效率教StringBuilder慢,线程安全
StringBuilder,可变长字符串,运行效率快,线程不安全
时间类
Date
Calendar(较为常用 )
构造方法为protected Calendar(),无法直接创建该对象
SimpleDateFormat