首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
牛客886950433号
南昌航空大学 Java
发布于江西
关注
已关注
取消关注
@代码界的小白:
Java基础面试高频考点!
精华
本章节主要分享一些Java基础知识在面试中常出现的高频考点,这里给出的是相对比较简略的答案,不过针对面试的回答,这些就足够了,另外就是一定要加入自己的个人理解,不要背书形式的回答。 1.Java语言的三大特性是什么? 回答:Java语言的三大特性分别是封装、继承和多态。 封装是指将对象的属性私有化,提供一些可以访问属性的方法,我们通过访问这些方法得到对象的属性。 继承是指某新类继承已经存在的类,该新类拥有被继承的类的所有属性和方法,并且新类可以根据自己的情况拓展属性或方法。其中新类称为子类,原存在的类被称为父类。 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。 子类可以用自己的方式实现父类的方法。 注意:Java不支持多继承 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。【摘自JavaGuide】 在 Java 中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。 2.重载与重写的区别 回答: 重载是发生在同一个类中,具有相同的方法名,但是有不同的参数,参数的个数不一样、参数的位置不一样,这就叫重载,常见的就比如构造方法,有有参构造和无参构造。 重写是发生在当子类继承父类时,对父类中的一些方法根据自己的需求进行重写操作。 3.接口和抽象类的区别是什么? 回答:接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。 抽象类是可以有私有方法或私有变量的,通过把类或者类中的方法声明为abstract来表示一个类是抽象类,被声明为抽象的方法不能包含方法体。子类实现方法必须含有相同的或者更低的访问级别(public->protected->private)。抽象类的子类为父类中所有抽象方法的具体实现,否则也是抽象类。 相同点:(1)都不能被实例化(2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。 不同点:(1)接口只有定义,不能有方法的实现,但java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。(3)接口强调特定功能的实现,而抽象类强调所属关系。(4)接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。 (5)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改。从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。 4.Java中的内部类说一下 回答:内部类有四种,分别是静态内部类、局部内部类、匿名内部和成员内部类 静态内部类:常见的main函数就是静态内部类,调用静态内部类通过“外部类.静态内部类” 局部内部类:定义在方法中的类叫做局部内部类。 匿名内部类:是指继承一个父类或者实现一个接口的方式直接定义并使用的类,匿名内部类没有class关键字,因为匿名内部类直接使用new生成一个对象 5.说一下final关键字的作用 回答:final关键字可以修饰类、方法和属性。 当final修饰类的时候,表明这个类不能被继承。final 类中的所有成员方法都会被隐式地指定为 final 方法。 当final修饰方法的时候,表明这个方法不能被重写。 当final修饰属性的时候,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 6.说一下String,StringBuilder和StringBuffer的区别 String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。 StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。 总结: 操作少量的数据: 适用 String 单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer 7.说一下Java中的==与eaquels的区别 == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。 eaquels: 情况 1:类没有重写 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。 情况 2:类重写了 equals() 方法。一般,我们都重写 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。 8.Java访问修饰符有哪些?都有什么区别? 回答:Java中的修饰符有public private protected 1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用 2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。 3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。 追问:怎么获取private修饰的变量 回答:private通过反射获取,可以设置setAccessable为true实现 9.Java中的异常体系说一下? 回答:Java中的异常主要分为Error和Exception Error 指Java程序运行错误,如果程序在启动时出现Error,则启动失败;如果程序运行过程中出现Error,则系统将退出程序。出现Error是系统的内部错误或资源耗尽,Error不能在程序运行过程中被动态处理,一旦出现Error,系统能做的只有记录错误的原因和安全终止。 Exception 指 Java程序运行异常,在运行中的程序发生了程序员不期望发生的事情,可以被Java异常处理机制处理。Exception也是程序开发中异常处理的核心,可分为RuntimeException(运行时异常)和CheckedException(检查异常),如下图所示 RuntimeException(运行时异常):指在Java虚拟机正常运行期间抛出的异常,RuntimeException可以被捕获并处理,如果出现此情况,我们需要抛出异常或者捕获并处理异常。常见的有NullPointerException、ClassCastException、ArrayIndexOutOfBoundsException等 CheckedException(检查异常):指在编译阶段Java编译器检查CheckedException异常,并强制程序捕获和处理此类异常,要求程序在可能出现异常的地方通过try catch语句块捕获异常并处理异常。常见的有由于I/O错误导致的IOException、SQLException、ClassNotFoundException等。该类异常通常由于打开错误的文件、SQL语法错误、类不存等引起。 追问:异常的处理方式? 回答:异常处理方式有抛出异常和使用try catch语句块捕获异常两种方式。 (1)抛出异常:遇到异常时不进行具体的处理,直接将异常抛给调用者,让调用者自己根据情况处理。抛出异常的三种形式:throws、throw和系统自动抛出异常。其中throws作用在方法上,用于定义方法可能抛出的异常;throw作用在方法内,表示明确抛出一个异常。 (2)使用try catch捕获并处理异常:使用费try catch 捕获异常能够有针对性的处理每种可能出现的异常,并在捕获到异常后根据不同的情况做不同的处理。其使用过程比较简单:用try catch语句块将可能出现异常的代码抱起来即可。 10.Java中的深拷贝和浅拷贝说一下? 回答:深拷贝和浅拷贝都是对象拷贝 浅拷贝:按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。(浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。) 上图: 两个引用student1和student2指向不同的两个对象,但是两个引用student1和student2中的两个teacher引用指向的是同一个对象,所以说明是浅拷贝。 深拷贝:在拷贝引用类型成员变量时,为引用类型的数据成员另辟了一个独立的内存空间,实现真正内容上的拷贝。(深拷贝把要复制的对象所引用的对象都复制了一遍。) 上图:两个引用student1和student2指向不同的两个对象,两个引用student1和student2中的两个teacher引用指向的是两个对象,但对teacher对象的修改只能影响student1对象,所以说是深拷贝。 摘自:JavaGuide 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。 深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。 追问:浅拷贝与深拷贝的特点是什么? 浅拷贝特点 (1) 对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个。(2) 对于引用类型,比如数组或者类对象,因为引用类型是引用传递,所以浅拷贝只是把内存地址赋值给了成员变量,它们指向了同一内存空间。改变其中一个,会对另外一个也产生影响。 深拷贝特点 (1) 对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个(和浅拷贝一样)。(2) 对于引用类型,比如数组或者类对象,深拷贝会新建一个对象空间,然后拷贝里面的内容,所以它们指向了不同的内存空间。改变其中一个,不会对另外一个也产生影响。(3) 对于有多层对象的,每个对象都需要实现 Cloneable 并重写 clone() 方法,进而实现了对象的串行层层拷贝。(4) 深拷贝相比于浅拷贝速度较慢并且花销较大。 注意:后序还会推出《Java面试必知必会》系列,下一章将是Java集合在面试中高频考点,关注我,带你快速掌握Java面试核心考点,记得收藏点赞加关注哦! 推荐阅读Java集合在面试中高频考点
点赞 71
评论 9
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-28 13:09
苏州大学 集成电路IC设计
自认为较难的问题
就是你有什么问题要问我吗?这个我感觉还挺难的,毕竟这个涉及到自身的理解和展望,我感觉还是要表达下自己的态度,无论怎么样都要准备一些问题,不过个人感觉不建议问过于细枝未书和非常深奥的问题,毕竟问出口,后面反而是扣分项。
你遇到最难的面试题目是_
点赞
评论
收藏
分享
07-28 14:00
门头沟学院 客户端其它
偷偷蛐蛐领导被发现.....
快进来,教你点真东西,悄悄滴。愿君谨记于心!!!不要过度的表现自己身上与工作无关的事情,因为没人感兴趣,比你好的人会认为你是跳梁小丑,没你好的人会认为你在故意炫耀。和同事相处要保持最基本的尊重,因为说破天也就是个陌生人罢了,每个人都有自己的利益诉求,只是恰巧你们碰到了一起。收起的你的小情绪,无论是不是他人的错误,你发怒或者哭泣都会让人觉得你这么大个人连自己的情绪都控制不好,没有教养。斤斤计较占小便宜,在工作的时候,不要总想着帮了别人之后,如何从他那里拿取好处,工作的事尽量能帮就帮,下次你工作有问题,别人才会帮你。口无遮拦,无论你和同事关系多好,对于一些敏感事情,都要守口如瓶。说话之前,动动脑子...
和同事相处最忌讳的是__
点赞
评论
收藏
分享
06-24 17:38
已编辑
哈尔滨工业大学 产品经理
26硕找实习找了三个月,至今0offer
我愿称为实习悖论➡️大公司实习经历不够➡️小公司说我稳定性差(实习时长我只能3个月,还要回尔滨秋招)求大佬帮看看简历🙏求推荐的岗位🙏工资一点要求都没有,自费实习我都愿意全国可飞,租房子实习
vicky_023:
先说能干六个月进去了再润呗 太老实啦
0offer是寒冬太冷还...
点赞
评论
收藏
分享
07-07 17:06
已编辑
深圳技术大学 golang
双非大二拿下腾讯实习offer
终于拿下腾讯offer,同时给大伙释放一个b站hc
Joefoo:
b站的录用通知好中二
点赞
评论
收藏
分享
07-30 00:08
湖北工业大学 C++
大二学生血泪教训:C++深浅拷贝详解 面试必问
作为C++初学者,当你开始使用指针和动态内存分配时,“深拷贝”和“浅拷贝”是必须跨越的一道坎。不理解它们,轻则程序崩溃,重则内存泄漏。让我带你彻底搞懂这两个概念的区别、应用场景以及如何正确实现它们。概述浅拷贝因为初始化或者赋值一个对象时,会把指针也复制过去从而导致析构函数重复delete,导致世界末日通过深拷贝用不同的内存空间,这样就不会重复delete掉两次了一、什么是拷贝在C++中,对象拷贝主要发生在两种场景:1.使用一个对象初始化另一个对象,说人话就是新建一个对象等于另一个对象Myclass obj2 = obj1 (这里调用了拷贝构造函数)2.将一个对象赋值给另一个已存在的对象,也就是...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
8549
2
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
3352
3
...
虾皮秋招一面
3025
4
...
百度提前批 三面
2355
5
...
觉得研发高人一等的这辈子有了
1668
6
...
最强本科✌
1628
7
...
被猿辅导挂了简历,但我想说...
1554
8
...
虾皮一面凉经
1449
9
...
上班一周,工资还没拿,先欠公司两千
1320
10
...
也是逆天了
1113
创作者周榜
更多
正在热议
更多
#
工作中哪个瞬间让你想离职
#
64635次浏览
576人参与
#
找工作如何保持松弛感?
#
92020次浏览
1112人参与
#
中兴秋招
#
206484次浏览
2302人参与
#
如何快速融入团队?
#
17759次浏览
211人参与
#
秋招被确诊为……
#
165112次浏览
769人参与
#
和同事相处最忌讳的是__
#
25359次浏览
250人参与
#
虾皮求职进展汇总
#
250096次浏览
1873人参与
#
计算机专业还有必要去大厂卷吗
#
38585次浏览
183人参与
#
26届的你,投了哪些公司?
#
47826次浏览
510人参与
#
Offer比较,你最看重什么?
#
194035次浏览
1313人参与
#
投格力的你,拿到offer了吗?
#
87188次浏览
585人参与
#
你最希望上岸的公司是?
#
135559次浏览
709人参与
#
简历上的经历如何包装
#
30951次浏览
842人参与
#
我对___祛魅了
#
50342次浏览
450人参与
#
柠檬微趣工作体验
#
6811次浏览
40人参与
#
你遇到最难的面试题目是_
#
17117次浏览
204人参与
#
你跟室友的关系怎么样?
#
7680次浏览
117人参与
#
通信硬件岗投递时间线
#
18872次浏览
69人参与
#
我想象的实习vs现实的实习
#
290436次浏览
2246人参与
#
什么样的背景能拿SSP?
#
40048次浏览
232人参与
#
你最讨厌面试问你什么?
#
29197次浏览
319人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务