码迷,mamicode.com
首页 > 编程语言 > 详细

java -- Object类

时间:2019-09-30 20:05:53      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:饿汉   工具类   --   创建   自定义类   ret   int   java   思考   

一.什么是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;

 

}

 

}

 

 

java -- Object类

标签:饿汉   工具类   --   创建   自定义类   ret   int   java   思考   

原文地址:https://www.cnblogs.com/jiujiang/p/11613848.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!