java -- Object类

一.什么是Object类?有哪些常用方法?

  答:1).Object类是所有类的父类,位于java.lang包中。

   2).数组也是Object类的子类。

   3).Object类的常用方法有:

        --- toString();

        --- equals();

        --- hashCode();

        ---.....

二.equals方法

  * 1.Object类中的equals方法
  * public boolean equals(Object obj){
     return (this == obj);
    }

  * 2.像String,Data这些类已经重写了equals方法,用来比较内容

  * 3.往往我们在自定义类中都会重写equals方法,用来进行内容的比较。
    如果不重写equals方法,那么就会默认调用Object类中的equals方法进行地址值的比较。+

面试题]==和equals的区别?

1.== : 如果比较的是基本数据类型,那么比较的是具体的值
  如果比较的是引用数据类型,那么比较的是地址值(两个引用是否只指向同一对象)
2.equals:如果不重写equals方法,那么默认调用Object类中的equals方法进行地址值比较。
  如果重写了equals方法,那么就进行内容的比较。

    // 重写equals方法进行属性内容的比较
    
    @Override
    public boolean equals(Object obj) {
        if(this == obj) {    // 说明两个对象是同一个
            return true;
        }
        if(obj instanceof Person) {
            Person p = (Person)obj;    // 向下转型
            return this.name.equals(p.name) && this.age == p.age;
        }
        return false;
        

三.设计模块

1.设计模式:设计模式是在大量的实践中总结和理论化之后优选的代码结构,编码风格,以及解决问题的思考方式

2.常见的有23中设计模式:单例设计模式,代理设计模式,装饰设计模式,观察者设计模式.....

3.单例设计模式:在一个项目中某个类中只有一个对象

4. 懒汉式和饿汉式的区别?
  1.饿汉式:线程安全的  2.懒汉式:线程不安全的,但是延迟了对象创建的时机。

// 懒汉式:    线程不安全的,但是延迟了对象创建的时机,一定程度上减少了内存的开销

class Bank2{
    // 私有化构造器
    private Bank2() {};
    
    private static Bank2 bank = null;
    
    public static Bank2 getSingleton() {
        if(bank == null) {
            bank = new Bank2();
        }
        return bank;
    }
}

// 饿汉式:    线程安全的

class Bank{
    // 私有化构造器
    private Bank() {}
    // 类内部创建一个私有化对象
    private static Bank bank = new Bank();
    // 创建一个共有方法获取对象
    public static Bank getSingleton() {
        return bank;
    }
}

四.static

1.static修饰变量:类变量
  1.同一个类的对象共同拥有一份类变量。每个对象各自拥有一份实例变量
    当一个对象对类变量进行修改后,其它的对象看到的都是修改后的类变量
  2.类变量是随着类的加载而加载的,而实例变量是随着对象的创建而创建
  3.类加载只加载一次
  4.如何调用类变量:类名.类变量名 对象名.类变量名

2.static修饰方法:静态方法
  1.静态方法是随着类的加载而加载的。
  2.调用静态方法:类名.静态方法名 对象名.静态方法名
  3.静态方法中不能调用,实例变量和非静态方法,非静态方法中可以调用类变量和静态方法
  4.静态方法中不能使用"this"和"super"

3.思考?什么时候使用static修饰属性和方法

static修饰属性:
  1.当一个变量为常量时必须使用static修饰
  2.当多个对象共同使用一份属性时使用static修饰。
static修饰方法:
  1.工具类中的方法一般都是用static修饰
  2.有时为了调用类变量,方法也会使用static修饰

类加载的过程
  a.当我们创建对象时,首先会在方法区查找该类的信息
  b.如果方法区没有该类的信息,这是便会进行类加载。如果方法区有该类的信息则直接创建对象
  c.类加载:将字节码文件加载到JVM中,同时在方法区特定的区域用来存放类变量
  d.类加载完成后,再来创建对象
  f.再次创建对象时仍在方法区查找该类的信息。如果存在将不再进行类加载(类加载只加载一次)

五.hashCode()

在Object类中的定义为:

public native int hashCode();

是一个本地方法,返回的对象的地址值。

但是,同样的思路,在String等封装类中对此方法进行了重写。方法调用得到一个计算公式得到的 int值

六.什么是toString方法?举例说明

  答:toString方法可以将任何一个对象转换成字符串返回,返回值的生成算法为:getClass().getName() + ‘@’ + Integer. toHexString(hashCode())。

   例1):打印对象时直接调用类的toString方法

    public static void main(){

     Student stu1 = new Student();

      stu1.setName(“张三”);

      stu1.setAge(23);

      System.out.println(stu1);

      System.out.println(stu1);

}

打印: Student@152b6651;

例2).类本身重写toString方法重写Student类的toString方法后

            public static void main(){

              Student stu1 = new Student();

              stu1.setName(“张三”);

              Stu1.setAge(23);

              System.out.println(stu1);

}

打印:Student:name = 张三,age = 23;

      例3).public class Student{

            Private String name = “123”; //学生姓名

            private int 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(){

  Return “Student:” + “name=” + name + “,age=” + age;

}

}

 

猜你喜欢

转载自www.cnblogs.com/jiujiang/p/11613848.html