1. 常用的包
java.lang包 - 是java的核心包,该包中的所有类由java虚拟机自动导入。如:String/System/Math/thread等
java.util包 - 是java的工具类/接口/集合框架类包, 如:Arrays、List、Set、Scanner、Random类等
java.io包 - 是java的输入/输入编程相关的类、接口包,如:FileInputStream类、FileOutputStream类等。
java.net包 - 是java中的网络包,该包中提供了有关网络编程的类信息。如:ServerSocket类、Socket类等。
java.text包 - 包含了一些java格式化相关的类
java.sql包 - 包含了java进行JDBC数据库编程相关的类、接口
java.awt包 - 包含了抽象窗口工具集的相关类、接口
java.swing包 - 包含了Swing图形用户界面编程的相关类、接口,可用于构建平台无关的GUI程序。
2. 常用的方法
Object()
- 采用无参的构造方法可以来构造对象,通常用于子类super()方式调用。
boolean equals(Object obj)
- 用于判断调用对象和参数对象是否相等。
- 具有自反性、传递性、对称性、一致性、非空性。
- 该方法默认比较两个对象的地址,与==的效果是一致的。
- 若希望该方法比较两个对象的内容时,则可以采用方法重写的策略。
- 若重写了该方法则需要重写hashCode()方法。
int hashCode()
- 用于返回调用对象的哈希码值(内存地址的编号,对应一块内存)。
- 若该对象调用equals()方法比较信息没有修改,则该方法返回的数值保持一致
- 若两个对象调用equals()方法相等,则各自调用该方法的数值必须相同。
- 若两个对象调用equals()方法不相等,则各自调用该方法的数值可以相同,但最好不同。
String toString()
- 用于返回对象的字符串表示形式。
- 该方法默认返回:【包名.类名@哈希码】的【十六进制】表示形式。
- 若希望该方法去返回其他内容时,就需要重写该方法。
- 当使用println()打印对象名或+连接字符串时都会自动调用toString()。
测试题
@Override
//重写Object类中的equals方法,将实参传递给object类型的obj形参
public boolean equals(Object obj){
if(obj == this) return true; //如果obj(传参对象的引用)指向的地址和该对象的地址相同,返回true
else if(obj == null) return false; //如果obj(传参对象的引用)为空引用,则返回false
else if(obj instanceof Student){ //判断obj(传参对象的引用)是否指向的是Student的对象
Student s = (Student)obj; //是的话将形参的类型强转为Student类型
return(s.getId()==this.getId()); //即都为Student类型的引用,后即为比较Id的值是否相等
}
else return false;
}
------------------------------------------------------------------------------
//重写了equals方法后,就得重写hashCode方法
//由于hashCode()方法自身的常规协定要求:两个对象equals相等:各自的哈希码值要相同
//而由于此时equals()方法已经重写,为了满足这个要求,则需要重写hashCode()方法
@Override
public int hashCode(){ //采用流氓方法,将equals()相等时弄成一样的
//return getId(); //方法1
int type = 12;
return type*8+getId(); //方法2
}
------------------------------------------------------------------------------
//继承下来的toString()方法返回的是:包名.类名@哈希码的十六进制
//但这个数据没有实用价值,为了返回其他有效数据则需要进行该方法的重写
@Override
public String toString(){
return "[id = " + getId() + ", name = " + getName() + "]";
}
测试类
Student s1 = new Student(1001,"刘备");
Student s2 = new Student(1001,"刘备");
------------------------------------------------------------------------------------------------
--------------------------------------未重写equals方法时-----------------------------------------
------------------------------------------------------------------------------------------------
//由于Student类默认继承自Object,因此equals()方法也就继承过来了。
//父类的引用指向类子类的对象,形成了多态
System.out.println(s1.equals(s2)); //false 从Object继承下来的equals()方法默认比较对象的地址
System.out.println(s1 == s2); //false ==默认比较对象的地址 false
//若Student类中没有重写hashCode()方法时,则调用Object继承下来的方法
int res1 = s1.hashCode();
System.out.println("res1 = "+res1); //res1 = 930384804
int res2 = s2.hashCode();
System.out.println("res2 = "+res2); //res2 = 1148967021
//若Student类中没有重写toString()方法时,则调用Object继承下来的方法
String str1 = s1.toString();
System.out.println("str1 = " + str1); //str1 = javaSE.day12.Student@37748ba4
String str2 = s2.toString();
System.out.println("str2 = " + str2); //str1 = javaSE.day12.Student@447bd86d
------------------------------------------------------------------------------------------------
--------------------------------------重写了equals方法后-----------------------------------------
------------------------------------------------------------------------------------------------
System.out.println(s1.equals(s2)); //true 因为学号一样,即为判断是一个人
System.out.println(s1 == s2); //false ==还是默认的比较对象的地址
//Student类中重写了hashCode()方法,则调用重写以后的版本
int res1 = s1.hashCode();
System.out.println("res1 = "+res1); //res1 = 1097
int res2 = s2.hashCode();
System.out.println("res2 = "+res2); //res2 = 1097
//Student类中重写了toString()方法,调用重写以后的版本,打印成员变量值
String str1 = s1.toString();
System.out.println("str1 = " + str1); //str1 = javaSE.day12.Student@447bd86d
String str2 = s2.toString();
System.out.println("str2 = " + str2); //str1 = javaSE.day12.Student@447bd86d
//若重写了toString()方法,则调用重写以后的版本,打印成员变量值
String str1 = s1.toString();
System.out.println("str1 = " + str1); //str1 = [id = 1001, name = 刘备]
String str2 = s2.toString();
System.out.println("str2 = " + str2); //str2 = [id = 1001, name = 关羽]
//当直接打印对象的引用、打印对象的引用和字符串连接时,会自动调用toString()方法
System.out.println(s1); //自动调用toString() //[id = 1001, name = 刘备]
String ss = "hello";
ss = ss + s1; //自动调用toString()
System.out.println(ss); //hello[id = 1001, name = 刘备]