03.08 对象的行为

4(==)与equals()的区别?
==比较的是对象的值,如果是地址,比较两个地址是否相等
equals也默认比较地址,但是每个类都继承了object,每个类都可以重写equals

在这里插入图片描述
equals比较 面试热点

hashcode

equals和hashcode方法两个都是java设计用来判断两个对象是否相等的方法,但是equals在进行比较的时候,逻辑是比较对象的所有属性是否相等,如果属性全都相等,当前两个对象就相等,但是这种验证方法效率比较低
如果用hashcode来比较,hashcode方法用到的hash值来比较(hash算法),效率非常高

有了hashcode,为什么需要equals方法?
hashcode并不是完全可靠的,有时候不同对象生成的hashcode一样

特点:
1、equals相等的两个对象,他们的hashcode值一定相等,也就是说equals来判断绝对是可靠的
2、hashcode相等的对象,使用equals进行比较并不一定相等。hashcode并不绝对的可靠
重写hashcode
在这里插入图片描述

哈希、翻译为散列
hashcode和equals方法
对于大量或者快速的对比,如果全都使用equals方法,效率比较低耗时比较多
解决方案::
每当要对比的时候,先用hashcode看值是否一样,若果值都不一样的直接表示当前对象不相等,如果hashcode相等,再用equals比较,都相等,对比成功

值传递

super关键字

java中有几种表示形式
1、super。属性 super。方法() 代表调用父类的属性和方法
2、super(参数)

在java类中使用super关键字表示引用父类的属性和方法,或者调用父类的构造器
this表示当前对象,super表示父类对象
在这里插入图片描述

final关键字

final本意:不可更改、衡量
final修饰变量,变量额值就不能更改,此刻就变成常量

final可以修饰类 :
表示当前类是最终类,当前类不能再做修改或者扩展,当前类不能被任何子类继承

final修饰方法:代表当前方法不能被修改,方法不能被重写

对象的行为

在这里插入图片描述
在这里插入图片描述
public protected 没有访问修饰符 private
一般只有属性和方法设置访问级别
类 一般使用public和默认
在这里插入图片描述

封装

在这里插入图片描述
封装 :
在java编程中,封装非常的重要,贯穿整个java学习的一个概念,学java的时候讲已经有封装的概念了,比如类
什么是封装?
将类的某些信息隐藏在类的内部,不允许外部直接访问,而是通过类提供对外的接口来访问当前的数据。
解析:
1、封装其实就是包装的意思,隐藏的意思。利用抽象数据类型和基于数据封装在一起,使其构成一个不可分割的整体
2、数据被保存在抽象数据类型的的内部,尽可能的隐藏内部的细节,只保留一些对外的接口,外部可以通过接口和内部数据发生联系
3、用户在访问当前这个对象数据的时候,不需要关系或者不需要来了解对象内部的细节

在这里插入图片描述

封装的特点

1.类的构造器必须是公共的(公共的创建对象才没有约束)
2.属性必须私有化(使用private来修饰属性)
3.提供get访问器和 set修改器来操作内部的数据
4.当前类是可序列化的(implements serializable)

javabean:
javabean是java中设计的一种可重用的组件
满足前面三条的所有对象都称为javabean对象
当前类遵从Javabean的规范

封装的好处:
1、良好的封装能够减少类与类之间的耦合
2、类内部的结构可以自由修改
3、可以对属性(成员变量)进行控制
4、隐藏信息,实现细节

static

static变量
java中并不存在全局变量的概念,但是我们可以通过static来实现一个伪全局的概念,static在java中表示全局或者静态的意思
用static来修饰属性或者方法,当前属性和方法就属于类级别的
对象级别:成员变量,成员方法属于对象级别的内容
类级别: 静态的内容都属于类级别的内容

在类加载的时候,类的静态变量就已经在内存里面创建了空间,静态变量默认是方法区。
通过类创建对象的时候,每个对象都可以共享静态变量。
成员变量和静态变量的区别:
1、静态变量随着类加载就初始化,在内存中有且仅有一个,jvm只会给当前类的静态变量分配一次内存,同时类的静态变量是所有对象共享的。并且还可以通过类名.静态变量来访问
2、实例变量(成员变量),伴随着对象的产生而创建,每个对象都有对应的实例变量。所有的实例变量都是和对象同生共死的。
3、一般我们在项目中哪些地方使用静态变量:
开发一个工具,所有类都用的(共享),
为了某些类方便访问

static(面试重点)

与static变量是一样的概念,属于类的方法。静态方法,类方法。之前一直在用的main方法就是静态方法
成员方法和静态方法调用成员变量或者静态变量的区别:
1、静态方法可以直接调用本类中的静态成员
2、静态方法不能调用非静态成员变量(成员变量此刻还没有创建)
3、普通成员变量可以调用静态变量,也可以调用普通变量
4、静态方法可以调用静态方法,但是不能调用成员方法
5、成员方法可以调用成员方法,可以调用静态方法

静态块

普通块:
在类下面{}来书写的代码就称为普通块,作用每次对象在产生的时候都会执行,可以使用它来做对象数据的初始化。但是每次创建对象都要执行,效率比较低。
静态块:
在普通块前面加一个static表示静态块。类加载的时候就在内存创建空间,并且有且仅有一个,不管创建多少个对象都是共享这个块
执行的顺序:
静态块—普通块----构造器

猜你喜欢

转载自blog.csdn.net/Theniceday_99/article/details/88355447