Java基础面试题

本文详细介绍了Java编程中的核心概念,包括面向对象的原理、封装、继承和多态,以及JDK、JRE、JVM的区别。还讨论了Java中的==与equals、hashCode与equals的关系,final关键字的作用,String、StringBuffer、StringBuilder的使用场景,重载和重写的区别,接口与抽象类的对比,List和Set的区别,ArrayList和LinkedList的特性,HashMap和HashTable的异同,字节码的概念及其优势,异常处理体系,类加载器的工作原理,线程的生命周期和状态,以及线程安全相关知识。
摘要由CSDN通过智能技术生成

1、什么是面向对象

面向对象是一种编程思路,与之相对应的是面向过程。

二者的区别在于:

面向对象注重调用事情的参与者,也就是我们所说的对象,

而面向过程更注重事情的具体实现步骤,顺序等。

那么举个生活中洗衣服的例子就是:

面向对象就是我们把衣服放到洗衣机,然后给洗衣机输入指令,从而调用洗衣机来帮我们洗衣服,

而面向过程就好比是我们自己洗衣服,需要把衣服浸湿,然后摊平放洗衣粉,再用刷子刷等一系列过程都需要我们自己来实现。

因此我们可以看出:

面向对象是更加易于复用,扩展和维护的,

而面向过程则更加直接高效。

说起面向对象当然不能不提它的三大特性:封装、继承、多态。

一、封装:

两层含义:

一层含义是把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立对象中;

另一层含义指“信息隐藏”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓,或只允许使用对象的功能,而尽可能隐藏对象的功能实现细节。

​封装的优点:

  1. 能够减少代码的耦合
  2. 类内部的结构可以自由修改。
  3. 精确的控制成员变量
  4. 隐藏信息实现细节

实现封装步骤

  1. 修改属性的可见性限制对属性的访问
  2. 对每个值属性提供对外的公共方法访问

二、继承

继承就是子类继承父类的方法或属性,而不需要自己再定义,只需要做出自己的改变和扩展。

继承格式:

class 父类 { }

class 子类 extends 父类 { }

继承的好处:

(1)提高类代码的复用性

(2)提高了代码的维护性

三、多态

继承是多态的前提。多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。

不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息,优点增强了软件的灵活性和重用性。

以上是我对面向对象的理解。

2、说说你对JDK JRE JVM的理解 

JDK:
Java Develpment Kit java 开发工具
JRE:
Java Runtime Environment java运行时环境
JVM:
java Virtual Machine java 虚拟机

它们的关系是JDK里包含有JRE,JRE里包含有JVM

.java文件通过javac编译成.class字节码文件,然后安装在不同系统上的JVM能够直接识别.class字节码文件,这就实现了我们所说的“一句代码,处处运行”。

 

3、==和equals比较

“==”是运算符
①如果比较的对象是基本数据类型,则比较的是其存储的值是否相等;
②如果比较的是引用数据类型,则比较的是所指向对象的地址值是否相等(是否是同一个对象)。

equals是Object中的方法,一般不能用于比较基本数据类型,如果没有对 equals 方法进行重写,则相当于“==”,比较的是引用类型变量所指向的对象的地址值。

一般情况下,类会重写equals方法用来比较两个对象的内容是否相等。比如String类中的equals()是被重写了,比较的是对象的值。

4、hashCode与equals

hashCode() 的作用是获取散列码,它实际上是返回一个整数值。这个散列码的作用是确定该对象在散列表中的索引位置。

散列表存储的是key-value键值对,它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!

以“HashSet如何检查重复”为例子来说明为什么要有hashCode:
对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,看该位置是否有值。

如果没有、HashSet会假设对象没有重复出现。

但是如果发现有值,这时会调用equals()方法来检查两个对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。这样就大大减少了equals的次数,相应就大大提高了执行速度。

hashCode与equals的关系是

  • 如果两个对象相等,则hashcode一定也是相同的
  • 两个对象有相同的hashcode值,它们也不一定是相等的
  • equals
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值