java面向对象——Object类

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 = 刘备]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值