一、Object类
1.概述:
Object也称超类,基类或父类,是所有类的直接或间接父类,位于继承树的最顶层。即任何类,如果没有书写exdents显示继承某个类,都默认继承Object类,否则为间接继承。
public class Student extends Object { //默认继承Object
}
2.常用方法:
Object类中所定义的方法,是所有对象都具备的方法。可以存储任何对象;作为参数,可接收任何对象,作为返回值可返回任何对象.
getClass()方法:
- 返回引用中存储的实际对象类型.
- 应用:通常判断两个引用中存储的对象类型是否一致
public class StudentTest {
public static void main(String[] args) {
Student stu1 = new Student("张三","123");
Student stu2 = new Student("李四","456");
// 判断stu1和stu2是不是同类型
Class class1=stu1.getClass();
Class class2=stu2.getClass();
if(class1==class2) { //false
System.out.println("s1和s2属于同一个类型");
}else {
System.out.println("s1和s2不属于同一个类型");
}
}
}
hashCode()方法:
- 返回该对象的十进制的哈希码值。
- 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值。
- 哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码。
String str1 = "重地";
String str2 = "通话";
System.out.println(str1.hashCode()); //哈希码相同 1179395
System.out.println(str2.hashCode()); //哈希码相同 1179395
toString()方法:
- 返回该对象的字符串表示(表现形式)。
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值。
重写Object类的toString方法
@Override
public String toString() {
return "Student [name=" + name + ", num=" + num + "]";
}
示例:
public class StudentTest {
public static void main(String[] args) {
Student stu1 = new Student("张三","123");
Student stu2 = new Student("李四","456");
//没有重写toString方法前,打印的是对象的内存地址
// System.out.println(stu1); //lession07.Student@15db9742
// System.out.println(stu2); //lession07.Student@6d06d69c
//重写后
System.out.println(stu1); //Student [name=张三, num=123]
System.out.println(stu2); //Student [name=李四, num=456]
}
}
equals()方法:
- 默认实现为(this == obj),比较两个对象地址是否相同。
- 可进行覆盖,比较两个对象的内容是否相同。
public class StudentTest {
public static void main(String[] args) {
Student stu1 = new Student("张三","123");
Student stu2 = new Student("张三","123");
/* Object的equals方法 ,只是比较两个对象的地址值
* public boolean equals(Object obj) {
return (this == obj);
}
*
*/
/*使用==比较,比较的是两个对象的地址值,但是其姓名
跟学号都是相同,认知上应该为同一个人
所以应该重写Object的equals方法
*/
//重写前
System.out.println(stu1.equals(stu2)); //false
//重写后
System.out.println(stu1.equals(stu2)); //true
}
}
equals重写步骤:
- 比较两个引用是否指向同一个对象。
- 判断obj是否为null。(使用instanceof可判断空值)
- 判断两个引用指向的实际对象类型是否一致。
- 强制类型转换。
- 依次比较各个属性值是否相同。
@Override
public boolean equals(Object obj) {
if (this == obj) { //判断两个对象是否为同一个引用
return true;
}
if (obj instanceof Student) { //判断传入的obj是否为Student 类型 ,如果obj为null那么instanceof是为false
Student stu2 = (Student)obj; //将obj强转为Student类型
//比较属性值是否相同
if (stu2.getName().equals(this.name) && stu2.getNum().equals(this.num)) {
return true;
}
}
return false;
}
finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象。
- 垃圾回收: 由GC销毁垃圾对象,释放数据存储空间。
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
- 手动回收机制:使用System.gc(); 通知JVM执行垃圾回收。
二、包装类
1.概述:
包装类即基本数据类型所对应的引用数据类型,Object可统一所有数据,包装类的默认值是null。
八大数据类型对应的引用类型为:
基本数据类型 | 引用数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2.装箱,拆箱:
八大基本数据类型与为包装类之间的互相装换
6个共性方法:
- parseXXX()静态方法(除了Character)。
- valueOf()静态方法。
注:需保证类型兼容,否则抛出NumberFormatException异常。
JDK 5.0之后,自动装箱、拆箱。基本数据类型和包装类自动转换。
示例:
public class Test {
public static void main(String[] args) {
int num =20;
//装箱--->将基本数据类型转换为引用数据类型
Integer a = Integer.valueOf(num);
System.out.println(a); //20
//拆箱--->将引用数据类型装换为基本数据类型
Integer b = new Integer(100);
int c =b.intValue();
System.out.println(c); //100
//基本数据类型装换为字符串
String str1 =num+""; //1.使用+拼接
String str2 = Integer.toString(num); //2.使用对应包装类的toString方法
//字符串转换为基本数据类型
String str3 ="200";
int n = Integer.parseInt(str3); //使用parsexxx()方法
System.out.println(n);
// 特殊boolean字符串形式转成基本类型,"true"--->true非"true"---->false
String str4="TrUe";//true不分大小写
boolean b1=Boolean.parseBoolean(str4);
System.out.println(b1); //true
}
}
即装箱用对应包装类的valueOf方法,拆箱用xxxValue()方法,基本数据类型与字符串之间转换用parsexxx()方法,【Character没有】。
Integer缓冲区
java为Integer规定了一个缓存范围即(-128-127)如果使用Interger直接赋值的情况下是直接从常量池中拿,如果超出了范围则new一个新的对象来存值。
示例:
Integer integer1=100;
Integer integer2=100;
System.out.println(integer1==integer2);//true
Integer integer3=200;
Integer integer4=200;
System.out.println(integer3==integer4);//false
即200已经超出这个范围则会在堆内存中new一个新的对象来存储值。
三、大数,时间管理类
1.浮点类型大数(BigDeicmal):
用与精确计算浮点数。
创建方式:
BigDecimal bd=new BigDecimal(“1.0”);
注:BigDeicmal不能使用"+","-"等运算符,必须使用其提供的方法计算
计算方法:
加法:BigDecimal add(BigDecimal bd)
减法:BigDecimal subtract(BigDecimal bd)
乘法:BigDecimal multiply(BigDecimal bd)
除法:BigDecimal divide(BigDecimal bd)
2.Date类
1.概述:用于表示特定的瞬间,精确到毫秒值(1秒=1000毫秒)。其大部分方法以过时,被Calendar类取代
3.日历类(Calendar):
1.概述:Calendar 类是一个抽象类,无法直接实例化,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。
实例:
Calendar c = Calendar.getInstance();
2.常用方法:
void set(int year,int month,int date,int hourofday,int minute,int second):设置日历的年、月、日、时、分、秒。
int get(int field):返回给定日历字段的值。字段比如年、月、日等.
4.日期格式化SimpleDateFormat:
用于对日期进行格式化
public class TestSimpleDateFormat {
public static void main(String[] args) throws Exception{
//1创建SimpleDateFormat对象 y 年 M 月
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
//2创建Date
Date date=new Date();
//格式化date(把日期转成字符串)
String str=sdf.format(date);
System.out.println(str);
//解析 (把字符串转成日期)
Date date2=sdf.parse("1990/05/01");
System.out.println(date2);
}
}