Object类

Object类【重点】
① Object类是所有类的父类,直接或是间接的父类。
② Object类型的引用可以存储任意类型的对象。
    ③ Object中的方法是所有类都具备。
常用方法:
a. getClass():返回值引用中实际对象类型。
   
   作用:通常用于判断两个引用中存储的实际对象类型是否一致;【重点】
         一致-true; 不一致-false.
    b. int hashCode():对象在内存中地址的整数表现形式。【了解】

c. public String toString():返回对象字符的结果。【重点】
    
   覆盖的原则:将所有的属性拼接成字符串,作为返回值。
   作用:方便打印输出对象所有的属性内容。


d. public boolean equals(Object obj):比较对象的内容是否一致。【重点】

   ==:如果两端比较的变量是基本数据类型,比数值。
     如果两端比较的变量是引用数据类型,比地址。
     
    开发中"=="比较两个对象是否为同一个对象,
      结果为:true-同一个对象
      结果为:false-不同的对象
  
          覆盖的步骤:   
1. 判断this和obj是否指向同一个对象
2. 判断obj是否为null
3. 判断两个引用中存储的实际对象类型是否一致
4. 强制类型转换
5. 将属性逐一比较

            面试题目:写出"=="和equals方法的区别???

        e. finalize():垃圾回收器在回收垃圾对象,调用此方法。【开发中不要将任何核心代码写在此方法中】【面试重点】
   
   垃圾对象:没有任何引用指向的对象。
   垃圾回收:回收垃圾对象,释放内存存储空间。
   
   垃圾回收器(GC)用于垃圾回收。
           垃圾回收器回收垃圾对象的时机:
① 自动回收垃圾对象:JVM内存耗尽时,不能再为新创建的对象
        分配存储空间时,垃圾回收器会自动的回收所有垃圾对象
(垃圾回收器会自动的调用finalize方法)
② 手动回收机制:利用System.gc(),通知JVM做垃圾回收,

       如果垃圾回收器空闲,则回收,否则,暂不回收。

eg:几个常见的方法

package test_object;
/*
*
*equals
*
*/
public class TestEquals {
public static void main(String[] args) {
/*int a=12;
int b=20;
System.out.println(a==b);*/

Student2 s1 = new Student2("ww",38);
Student2 s2 = new Student2("ww",38);
System.out.println(s1==s2);
/* Student s3=s1;
System.out.println(s1==s3);*/
System.out.println(s1.equals(s2));
}
}


class Student2{
private String name;
private int age;
public Student2() {
super();
// TODO Auto-generated constructor stub
}
public Student2(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public boolean equals(Object obj){
//1. 将this和obj比较,判断this和Obj是否指向同一个对象
if(this==obj){
return true;
}
//2. 判断 obj是否为null
if(obj==null){
return false;
}

//3. 判断两个引用中存储的实际对象类型是否一致
if(this.getClass()!=obj.getClass()){
return false;
}
//4. 强制类型
Student2 s=(Student2)obj;

//5. 将每一个属性逐一比较:基本数据类型用"==";对象比较用equals比较
if(this.age ==s.age && this.name.equals(s.name)){
return true;
}else{
return false;
}
}

}

---------------------------------------------------------------------------------------------------

package test_object;
/*

*HashCode返回对象内存地址以整数的形式表现

*/

public class TestHashCode {
public static void main(String[] args) {
MyClass mc = new MyClass();
MyClass mc2 = new MyClass();

System.out.println(mc.hashCode());
System.out.println(mc2.hashCode());
}
}
class MyClass{}

------------------------------------------------------------------------------------------------------

package test_object;

/*

*toString方法返回该对象字符串表示形式

*

/
public class TestToString {
public static void main(String[] args) {
// Student s1 = new Student("ww",38);
/*System.out.println(s1.toString());
//System.out.println(s1.getClass().getName()+"@"+Integer.toHexString(s1.hashCode()));
System.out.println(s1);*/
// System.out.println(s1);
/*int a=12;
System.out.println(a);*/
Student s1 = new Student("ls",39);
Student s2 = new Student("杨sl",28);
/*System.out.println(s1.getName()+"\t"+s1.getAge());
System.out.println(s1);*/

int sum=s1.getAge()+s2.getAge();
System.out.println(sum/2);
}
}


class Student{
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
// System.out.println("-----------------test--------------");
//return name+"  "+age;//覆盖的原则:将所有的属性内容拼接为一个字符串,作为结果。
return "name="+this.name+",age="+this.age;//this.可以省略
}
}

------------------------------------------------------------------------------------------------------------

package demo2017114;
/*
 * getClass返回实际对象类型
 */
public class TestgetClass {
public static void main(String[] args) {
Animal111 an=new Dog();
System.out.println(an.getClass());              //返回实际对象类型
}
}
class Animal111{
public String eat(){
return "吃东西";
}
}
class Dog extends Animal111{
public String eat(){
return "吃了一个萝卜";
}
}


### Object 的作用 在 Java 中,`Object` 是所有的根。每个无论是否显式声明继承,都会直接间接继承自 `Object` 。这使得 `Object` 的方法能够被所有对象使用,提供了基础功能支持。`Object` 的定义确保了所有对象都具备一些通用的行为,例如对象的比较、克隆、字符串表示等。 ### 常见方法及使用 #### 1. `toString()` 此方法返回对象的字符串表示形式。默认情况下,返回的字符串格式为 `名@哈希码`,例如 `java.lang.Object@1b6d3586`。在实际开发中,通常会重写此方法以提供更有意义的对象描述。 示例: ```java Object obj = new Object(); System.out.println(obj.toString()); // 输出:java.lang.Object@哈希码 ``` 重写示例: ```java @Override public String toString() { return "Custom String Representation"; } ``` #### 2. `equals(Object obj)` 默认情况下,`equals()` 方法用于比较两个对象的引用是否指向同一个对象实例。然而,在实际开发中,通常需要根据对象的实际属性来判断相等性,因此需要重写此方法。例如,当对象被存储在 `Map` `Set` 中时,如果两个对象的 `hashCode()` 相同,则会调用 `equals()` 方法进行进一步比较。 #### 3. `hashCode()` 此方法返回对象的哈希码值。通常与 `equals()` 方法一起重写,以确保两个相等的对象具有相同的哈希码。这对于基于哈希的集合(如 `HashMap` 和 `HashSet`)的正确行为至关重要。 #### 4. `clone()` 此方法用于创建并返回对象的一个副本。要使用此功能,需要实现 `Cloneable` 接口并重写 `clone()` 方法,否则会抛出 `CloneNotSupportedException` 异常。 #### 5. `getClass()` 此方法返回运行时的 `Class` 对象,可以用于反射操作。 #### 6. `notify()` 和 `wait()` 这些方法用于线程间的协作。`wait()` 方法使当前线程等待,直到另一个线程调用 `notify()` `notifyAll()` 方法。 ### Object 的重要性 由于 `Object` 是所有的超,因此它提供了一种统一的方式来处理所有对象。例如,可以通过 `Object` 型的引用变量来引用任何型的对象,从而实现多态性。 此外,`Object` 提供的方法为对象的基本操作奠定了基础。例如,`toString()` 方法使得对象可以以字符串形式输出,便于调试;`equals()` 和 `hashCode()` 方法确保了对象在集合中的正确行为;`clone()` 方法提供了对象复制的机制。 ### 示例代码 以下是一个重写 `toString()` 和 `equals()` 方法的示例: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Person person = (Person) obj; if (age != person.age) return false; return name != null ? name.equals(person.name) : person.name == null; } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值