Java基础知识复习(面向对象)--- 掌握这些你的面向对象就无敌了

目录

1.为什么重写equals还要重写hashcode?

2.hashcode相同equals可能不同吗?

3.重载和重写的区别?

4.Java中==和equals的区别?

5.String、StringBuffer、StringBuilder三者之间的区别?

6.接口和抽象类的区别是什么?

7.对象创建的流程分析?

8.java的动态绑定机制

目录

1.为什么重写equals还要重写hashcode?

2.hashcode相同equals可能不同吗?

3.重载和重写的区别?

4.Java中==和equals的区别?

5.String、StringBuffer、StringBuilder三者之间的区别?

6.接口和抽象类的区别是什么?

7.对象创建的流程分析?

8.java的动态绑定机制

9.final关键字的作用


1.为什么重写equals还要重写hashcode?

如果只重写了 equals 方法,会先判断两个对象的 hashCode 是否相同,此时因为没有重写 hashCode 方法,所以会直接执行 Object 中的 hashCode 方法,而 Object 中的 hashCode 方法对比的是两个不同引用地址的对象,所以结果是 false,那么 equals 方法就不用执行了,直接返回的结果就是 false。

2.hashcode相同equals可能不同吗?

是可以的。hashcode相同只能表明二个对象的地址都在这一块区域,equals还会比较其内容是否相同。

3.重载和重写的区别?

1.重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问权限修饰符可以不同,发生在编译时。

2.重写: 发生在父子类中,方法名和参数列表必须相同,返回值范围可以小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private,则子类就不能重写该方法。

4.Java中==和equals的区别?

== 的作用:

  基本类型:比较的就是值是否相同。

  引用类型:比较的就是地址值是否相同。判断等号左右两个对象是否是同一个对象。

equals 的作用:

  引用类型:默认情况下,比较的是地址值。

特点:String、Integer、Date这些类库中equals被重写,比较的是内容而不是地址!

5.String、StringBuffer、StringBuilder三者之间的区别?

String 字符串常量

StringBuffer 字符串变量(线程安全)

StringBuilder 字符串变量(非线程安全)

String 中的String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[] ,String对象是不可变的,也就可以理解为常量,线程安全。

StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。

小结:

(1)如果要操作少量的数据用 String;

(2)多线程操作字符串缓冲区下操作大量数据用 StringBuffer;

(3)单线程操作字符串缓冲区下操作大量数据用 StringBuilder。

6.接口和抽象类的区别是什么?

实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

构造函数:抽象类可以有构造函数;接口不能有。

main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。

实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符

7.对象创建的流程分析?

class Person {
    int age = 90;
    String name;
    Person(String n,int a){
        name = n;
        age = a;
    }
}

Person p = new Person("小红",20);

• 流程分析(本题有关于类加载的内容考察)

1.加载Person类信息(Person.class),只会加载一次

2.在堆中分配空间(地址)

3.完成对象初始化[3.1 默认初始化 age=0 name=null 3.2显示初始化 age=90 name=null 3.3构造器的初始化 age=20,name=小红]

4.在对象在堆中的地址,返回给p(p是对象名,可以理解为是对象的引用)

8.java的动态绑定机制

1.当调用对象方法的时候, 该方法会和该对象的内存地址/运行类型绑定。

2.当调用对象属性时,没有动态绑定机制,哪里声明,那里使用。

9.final关键字的作用

final关键字可以用于三个地方。用于修饰类、类属性和类方法。

被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写);

对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值