Java面试知识点1——基础语法

Java面试知识点1——基础语法

1.什么是自动装箱与自动拆箱?

答:自动拆装箱主要针对Java中的4类8种基本数据类型
简单理解:自动装箱是指将基本类型(4类8种)的数据自动转为引用类型(除了基本类型的都是引用数据类型)的数据
举例:

//自动装箱
int a = 1;
Integer b = a;
System.out.println(b.getClass());
//结果为:class java.lang.Integer

//自动拆箱
 int c = b;
 System.out.println(c);
//由于对于基本类型变量,是无法直接获得变量类型的
2.String、StringBuilder、StringBuffer之间的区别是什么?

答:首先,String是只读字符串,其引用的字符串内容是不能被改变的,而StringBuilder和StringBuffer表示的字符串对象可以直接被修改的;
其次,StringBuilder单线程环境下使用,效率要比StringBuffer要高,但是由于StringBuffer加锁了,会使得线程更安全

3.equals 与 == 有什么不同 ?

答:分为equals重写前与重写后两种区别
在equals方法重写之前:equals对比的是其左右两边数据的地址值是否相同,而 == (双等号)对比的是左右两边的值是否相等;
在equals方法重写之后:equals对比的是其左右两边数据的具体值是否相同。
除此之外,基本类型的值比较是否相等用的是 == (双等号),而equals()方法一般用于对象应用数据的比较判断是否相等。

4.什么是面向对象编程?

答:面向对象编程的基本思想:就是利用类、方法、继承、封装、多态等概念思想来进行程序设计,从显示世界中实际存在的事物(对象)出发来构造软件系统,尽可能的运用人类的自然思想进行程序设计。

5.请解释一下面向对象的三大特征。

答:面向对象的三大特征分别是:封装、继承、多态。
首先,封装是将事物的属性和行为抽取出来,通过类进行封装,提高代码的复用性。通过方法来控制成员变量的操作,提高了代码的安全性。
其次,继承发生在父类和子类之间,当子类继承父类之后,子类可以实现代码的抽取和服用,单继承,多实现。
最后,多态是在继承的基础上产生的,父类的引用指向子类的实现。

//假设Animal为父类,Dog为子类
//使用多态创建Dog对象如下(在创建对象的同时会调用空参构造)
Animal dog = new Dog()

使用多态的三个条件:继承 、重写、向上转型

6.是否可以继承String类? 为什么用final修饰?

答:不能继承String类,因为String是被final修饰的类(可以通过查看源码),因此不能被继承。
使用final修饰,可以提高效率和安全性。
①只有字符串是不可变的,因此字符串池才有可能实现;
②只有字符串是不可变的,多线程才是安全的,同一个字符串实例可以被多个线程共享;
③因为字符串是不可变的,所以在被创建的时候就已经被hashcode缓存了,不需要重新计算,使得字符串很适合做map中的键;
④如果字符串是可变的,会引起很严重的安全问题。

7.什么是JDK,JRE,JVM?

答:JDK是开发者工具包,包含JRE和JVM,集成了 JRE 和一些好用的小工具;
JRE是开发环境,包含JVM和核心类库;
JVM是虚拟机,将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。

8.什么是方法签名?

答:方法名称+参数类型

9.Java中的访问修饰符有哪些?

答:public <---- protect <---- default< ----private

10.break,continue,return的区别及作用是什么?

答:区别:break,continue用于跳出循环,return更多用于方法的结束。
break:跳出当前这一层循环
continue:结束当前循环进入下一次循环
return:结束整个方法

11.final有什么用?和finally,finalize有什么区别?

答:(1)final修饰的类不能被继承,final修饰的方法不能被重写,final修饰的变量时常量,不能被重新赋值。
(2)区别:finally一般用于try-catch结果中,不管是否出现异常,finall后面的语句都会被执行;finalize是Object类的方法,用在垃圾回收器中。

12.简述this和super的区别

答:this指向的是自身的一个对象,表示对象本身,通过this()调用的是本类的其他构造方法;
super指向的是自己的一个超类对象,这个超类对象是最近的一个父类,super()调用的是父类的构造方法。

13.抽象类能被final修饰吗?

答:不能。理由:因为final修饰的类不能被继承,而抽象类本身就是用来被继承的,所以不能。

14.static修饰的方法能调用非static修饰的变量和方法吗?

答:不能,static修饰的方法只能调用静态方法和变量

15.局部内部类和匿名内部诶访问局部变量的时候,为什么变量必须加上final?

答:因为生命周期不一致,局部变量保存在栈中,当方法结束后,非final修饰的变量会被销毁,而匿名内部类对局部变量的引用仍然存在,调用局部变量的时候就会出错。

16.重载(Overload)和重写(Override)的区别?

答:重载:方法名称相同,参数类型不同;
重写:发生在父子类中,方法的名称参数必须相同,抛出的异常小于父类,访问修饰符大于等于父类

17.构造器(constructor)是否可被重写(override)?

答:构造器不能被继承,索引不能被重写,但是可以被重载。

18.Java中创建对象的方式有哪些?

答:①使用new关键字
②使用Class类的newInstance方法
③使用Constructor类的newInstance方法
④使用clone方法
⑤使用反序列化

下一篇:Java面试知识点2——集合
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值