Java Recap 1

Start with very simple idea

<1> equals与==的区别

1. ==是一个运算符 equals是Object类的方法区别

2. 比较时的区别用于

基本类型的变量比较时: ==用于比较值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。

用于引用类型的比较时: ==和equals都是比较栈内存中的地址是否相等 。相等为true 否则为false。但是通常会重写equals方法去实现对象内容的比较。

<2> Object.equals()

The default implementation of the equals() method in the Object class compares the references of the two objects to see if they are the same object in memory.

<3> hashCode

hashCode() 有什么用 与 a.equals(b) 有什么关系?简介: hashCode() 方法是相应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。它与 equals() 方法关系特别紧密。 根据 Java 规范,两个使用 equals() 方法来判断相等的对象,必须具有相同的 hash code。

除了传统的手动写hashCode, 还可以用Objects.hash(Object...)

<4> Comparator 与 Comparable 有什么不同

Comparable 接口用于定义对象的自然顺序,而 comparator 通常用于定义用户定制的顺序。

Comparable 总是只有一个,但是可以有多个 comparator 来定义对象的顺序

<5> Object有哪些公用方法

clone equals hashcode wait notify notifyall finalize toString getClass 除了clone和finalize其他均为公共方法。11个方法,wait被重载了两次

<6> 关于finally

finally不管有没有异常都要处理当try和catch中有return时,finally仍然会执行,finally比return先执行不管有木有异常抛出, finally在return返回前执行

finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),

所以函数返回值是在finally执行前确定的注意: finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值finally不执行的几种情况: 程序提前终止如调用了System.exit, 病毒,断电

<7> 序列化

声明为static和transient类型的数据不能被序列化, 反序列化需要一个无参构造函数

<8> Java 中,Serializable 与 Externalizable 的区别

Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、脆弱而且不安全。Externalizable 允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。

<9> Java 中的拷贝

浅拷贝

拷贝对象和原始对象的引用类型引用同一个对象

深拷贝

拷贝对象和原始对象的引用类型引用不同对象

clone() 的替代方案使用 clone() 方法来拷贝一个对象即复杂又有风险,它会抛出异常,并且还需要类型转换。

Effective Java 书上讲到,最好不要去使用 c

这份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记的【点击此处即可】即可免费获取

lone(),可以使用拷贝构造函数或者拷贝工厂来拷贝一个对象

<10> Java 中的static

1. 静态变量 

静态变量: 又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。实例变量: 每创建一个实例就会产生一个实例变量,它与该实例同生共死 

2. 静态方法 静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法(abstract)。 

 3. 静态语句块 静态语句块在类初始化时运行一次。 

存在继承的情况下,初始化顺序为:

父类(静态变量、静态语句块)

子类(静态变量、静态语句块)

父类(实例变量、普通语句块)

父类(构造函数)

子类(实例变量、普通语句块)

子类(构造函数)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值