23年 java核心面试知识点汇总

本次总结了四五章的知识点,还会有后续

目录

四章 内存图

程序运行时 java的内存区

程序运行时 内存区的配合

java语言的几大特性(面试点)?

值传递和引用传递的区别?

静态

this调用另一个构造器

初始化

五章 继承

重写和重载方法的区别?

多态

抽象类和接口有什么异同点?(面试频率很高)

Object:所有类的超类

Object方法(面试点)

equals方法

equals方法的作用(面试点)

重写equals方法时 需要注意什么?(面试点)

重写equals方法和hashcode方法 在hashmap中是如何使用的?

泛型

拆箱和装箱是什么?

为什么有包装类?

什么是128陷阱(面试点)?


四章 内存图

不同的程序在运行期间都是独自占用一块内存

进程是由线程组成的 :依赖自己的主方法运行起来的是进程 要独自占用一块空间

java是直接和操作系统对接的 操作系统会给java开辟一块单独的空间

运行的时候 java会转成汇编和C 实际上这个空间运行的已经不是java代码了

java能够识别出操作系统 但是操作系统不认识java转成的汇编和C

程序运行时 java的内存区

CPU的运行是由操作系统调用的 java无权自己调用 所以必须转换成操作系统能够看懂的语言

程序运行时 内存区的配合

方法区 :最开始所有的方法都在方法区,需要程序计数器进行配合 方法的出栈入栈问题

栈 :在栈中创建对象 栈需要引用 需要本地方法栈进行配合 进行翻译 再交给操作系统 栈对堆进行调用

java语言的几大特性(面试点)?

封装、继承、多态、抽象

访问器方法和更改器方法

访问器能够保障多线程下的安全

值传递和引用传递的区别?

值传递传的值的地址,引用传递传的是句柄的地址。

java中只存在值传递 C++ 里面有引用传递

值传递不仅可以传基本类型 也可以用来传递对象类型 对象也是值

值传递B不可以改变A的指向,但是可以改变值

引用传递可以改变指向

静态

用static修饰

静态的方法优先执行

静态的句柄信息是在方法区

静态的方法和属性被new出来是在堆中 静态和非静态的调用都是被拷贝一份出来

静态的方法可以被全局读到 其他的方法可以对其中变量进行修改 因此使用静态方法时 一般要加上final修饰

this调用另一个构造器

在构造器第一句话 写上this()语句,就会调用同一个类的其他构造器

初始化

静态的优先于非静态的初始化

顺序是:父类静态优先----子类静态----父类所有非静态(块和构造器)----子类所有非静态(块和构造器)

五章 继承

public才能够继承

重写和重载方法的区别?

重写方法名称、返回值类型、参数的类型及个数完全相同,重载方法名称相同,参数的类型及个数不同。重写继承关系,重载一个类。被重写的方法不能拥有比父类更严格的坊控制权限,重载没有权限要求。

多态

调用同一个方法可以表现出不同的功能

抽象类和接口有什么异同点?(面试频率很高)

instanceof 方法用来判断子孙后代是不是这个类的实例

相同点:

1)都不能被实例化。

2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中方法后才能实例化。

不同点:

1)在成员变量上,抽象类可以有变量、常量、构造方法、有抽象方法也可以有非抽象方法;接口只能有常量、抽象方法。

2)在使用上,接口侧重于实现封装(隐藏实现代码),抽象类侧重于提取共性(约束,强迫子类必须实现某个方法)。

接口只有定义不能有方法实现(Java 1.8中可以定义default方法体),抽象类可以有定义与实现,方法可在抽象类中实现。

3)在继承上,接口可以继承多个父类,抽象类只能继承一个父类。

4)抽象类可以有构造器,抽象方法可以有public、protected和default这些修饰符;接口不能有构造器,接口方法默认修饰符是public,不可以使用其它修饰符。

Object:所有类的超类

Object方法(面试点)

1.clone方法

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

主要是JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法。

2.getClass方法

final方法,获得运行时类型,获取类对象。

3.toString方法

该方法用得比较多,一般子类都有覆盖。

4.finalize方法

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5.equals方法

该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法,都是判断地址是否相等。

6.hashCode方法

该方法用于哈希查找,可以减少在查找中使用equals的次数,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

如果不重写hashcode(),在HashSet中添加两个equals的对象,会将两个对象都加入进去。

7.wait方法

wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法

该方法唤醒在该对象上等待的某个线程。

9.notifyAll方法

该方法唤醒在该对象上等待的所有线程。

equals方法

equals方法的作用(面试点)

在字符串中的equals方法时用来比较值是否相等,在object类中是用来比较地址是否相等

重写equals方法时 需要注意什么?(面试点)

如果要重写equals时候 需要重写hascode 因为equals方法中是两个方法打配合的

重写equals方法和hashcode方法 在hashmap中是如何使用的?

equals和hascode方法都与hashmap方法有关

hashmap 是一种用到了链表 红黑树的结构 增删改查是 o(1)的时间复杂度 ,性能非常快

泛型

ArrayList  xx = new ArrayList()

类似于上述<> 的结构 里面只能放引用类型,只能放Inther 但是不能放int

拆箱和装箱是什么?

装箱:将基本数据类型转换为包装类型。

拆箱:将包装类型转换为基本数据类型。

为什么有包装类?

1、数据类型的值之间的转换

2、面向对象

基本数据类型 不是对象类型 包装类是类,是面向对象的

3、方便集合存储

方便在集合当中存储,集合当中的泛型,要求我们是对象类型的数据,但是基本数据类型不是对象。

在面向对象中, “一切皆为对象” ,但是基本类型不符合这个理念,所以为了统一理念,为每个基本类型都设计对应的包装类。包装类的主要作用是用于类型之间的转换的。相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

并发编程中的锁代码块也必须是引用类型

什么是128陷阱(面试点)?

Integer的两个值取 -128到127 之间,相等,否则不等。

128陷阱:通过查阅Integer源码,发现Integer自动装箱底层调用的是valueOf方法,该方法定义了一个catch数组,其中值范围是 -128~127之间,如果自动装箱的数据是在此范围中的,直接返回该数组的内存地址,所以比较两个变量时,数据值是在-128 ~ 127 之间的,返回相等,否则是重新开辟的内存空间存放数据,故返回不相等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADRU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值