zoukankan      html  css  js  c++  java
  • Java 常见对象 01

    常见对象·Object类

    Object类的概述

    * A:Object 类概述
      * 类层次结构的根类
      * 所有类都直接或间接地继承自该类

    * B:构造方法
      * public Object()
      * 回想为什么面向对象中说:
        子类的构造方法默认访问的是父类的无参构造

     Object类的 hashcode() 方法 (在学集合时掌握)

    * A:案例演示
      * public int hashCode()
      * a:返回该对象的哈希码值,默认情况下,该方法会根据对象的地址值来计算,调用系统的本地资源进行计算
      * b:不同对象的 hashCode() 一般来讲不会相同,但是对同一个对象的 hashCode() 值肯定相同
      * c:不是对象的实际地址值,可以理解为逻辑地址值
        * 举例:物体和编号

    package com.heima.object;
    
    import com.heima.bean.Student;
    
    public class Demo1_HashCode {
    
        public static void main(String[] args) {
            Object obj1 = new Object();
            int hashcode = obj1.hashCode();
            System.out.println(hashcode);
            
            Student s1 = new Student("张三", 23);
            Student s2 = new Student("李四", 11); // 不同对象的地址不同
            
            System.out.println(s1.hashCode()); // ctrl + alt + 下键 向下复制一行 
            System.out.println(s2.hashCode());
        }
    
    }
    hashCode() 方法

    Object类的 getClass() 方法 (在学反射时掌握)

    * A:案例演示
      * public final Class getClass()
      * a:返回此 Object 对象的运行时类
      * b:可以通过 Class 类中的一个方法,获取对象的真是类的全名称
        * public String getName()

    package com.heima.object;
    
    import com.heima.bean.Student;
    
    public class Demo2_GetClass {
    
        public static void main(String[] args) {
            Student s = new Student("张三", 18);
            
            // Class clazz = new Class();
            Class clazz = s.getClass();        // 获取该对象的字节码文件
            String nameString = clazz.getName();  // 获取类名
            
            System.out.println(nameString);
            
        }
    
    }
    getClass() 和 getName()

    Object类的 toString() 方法

    * A:案例演示
      * public String toString()
      * a:返回该对象的字符串表示

    // 默认方法
    public
    String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

      * b:它的值等于
        * getClass() . getName() + "@" + Integer.toHexString(hashCode())
      * c:由于默认状态下的数据对我们来说没有意义,一般建议重写该方法

    * B:最终版本
      * 自动生成

     

    @Override
    public String toString() {
            return "Student [name=" + name + ", age=" + age + "]";
    }
    Student类 内重写 toString方法
    package com.heima.object;
    
    import com.heima.bean.Student;
    
    public class Demo3_ToString {
        /*
         * 重写前:
         *     左边:类名
         *     中间:@
         *     右边:hashCode的十六进制表现形式
         */
        public static void main(String[] args) {
            Student s = new Student("张三", 23);
            String str = s.toString();
            
            //toString()的作用: 可以更方便地显示属性值
            //getXxx方法用于获取值,可以用于显示,也可以对值进行操作
            
            System.out.println(str);        
            System.out.println(s);  //如果直接打印对象名,会默认调用toString方法
            
            //alt shift s 重写toString方法
        }
    
    
    }
    toString() 方法

    Object类的 equals() 方法

    * A:案例演示
      * a:指示其他某个对象是否与此对象 “相等”
      * b:默认情况下比较的是对象的引用是否相同
      * c:由于比较对象的引用没有意义,一般建议重写该方法

    // 默认方法
    public
    boolean equals(Object obj) { return (this == obj); }

    @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Student other = (Student) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    Student类 内重写 equals方法 
    package com.heima.object;
    
    import com.heima.bean.Student;
    
    public class Demo3_Equals {
        /*
         * equals 默认比较地址值
         * public boolean equals(Object obj) {
               return (this == obj);
         * }
         * object中的equals方法是比较对象的地址值,没有什么意义,我们需要重写
         * 因为在开发中我们通常比较的是对象中的属性值,我们认为相同属性是同一个对象
         */
        public static void main(String[] args) {
            Student s1 = new Student("张三", 18);
            Student s2 = new Student("张三", 18);
            boolean b = s1.equals(s2);    // 重写后比较对象中的属性值
            System.out.println(b);
            System.out.println(s1 == s2);
        }
    
    }
    equals() 方法

    == 号 和 equals()方法 的区别

    * 共同点:都可以做比较,都返回boolean值

    * 区别:

      * == 是一个比较运算符,既可以比较基本数据类型,也可以用于比较引用数据类型
        基本数据类型比较的是值,引用数据类型比较的是地址值

      * equals() 方法 是一个方法,只能比较引用数据类型,所用的对象都会继承Object类 中的方法
        如果没有重写Object类中的方法,equals() 方法和 == 号比较引用数据类型 无区别,重写后的equals() 方法 比较的是对象中的属性值

  • 相关阅读:
    gateway dblink transport mssql image datatype to oracle blob datatype
    Sql server 数据库备份、恢复等
    sql full left right inner cross 基础
    真的发现自己已不再年轻
    利用日志备份恢复时,提示 该 LSN 太晚,无法应用到数据库
    系统调用原理(转)
    Linux添加自定义系统调用
    libusb 介绍
    用户空间与内核空间数据交换的方式(4)relayfs
    用户空间与内核空间数据交换的方式(2)procfs
  • 原文地址:https://www.cnblogs.com/zhaochuming/p/12587169.html
Copyright © 2011-2022 走看看