舌战面试官-java基础篇

一.String,StringBuilder和StringBuffer有什么区别?

String内部的char[]用final修饰的,所以它是不可修改的。每次我们修改string内容时,比如说做一些拼接内容时,都会在底层new一个新的StringBuffer对象,把+前面的值赋给新的StringBuffer对象,然后StringBuilder调用append方法,把+后面的值加进来,再调用toString方法生成新的String对象。旧的对象失去引用,就会被垃圾回收器回收。需要注意的是,每个+号都要重复上述操作,并不是连续的+就可以用一个新的StringBuffer对象连续append就可以了,所以String性能很差

StringBuffer内部的char[]没用final修饰,所以他是可以动态增长的,这个char[]默认长度是16,StringBuilder内部很多方法都是用synchronized修饰的,解决了并发带来的问题

StringBuilder几乎和StringBuffer一样,但是它内部方法没有用synchronized修饰,所以效率高,但是线程不安全。

二. == 和 equals的区别

这个我详细写了一篇来说明,源码级别理解,这个说实话没有大家想象的简单,想信做过那种== 和equals 返回true还是false的题应该深有体会,好像知道怎么回事,又好像不知道,建议去看看我的那篇,相信你会有所收获的
== 与 equals的区别(源码级理解)

三.为什么要用反射,反射的实现方式?

反射是说我们不需要在编译期知道这个类的结构,我们可以通过反射在运行期动态的探索类的内部结构。

反射的实现方式:

对象.getClass();

类名.calss();

Class.forName(“全限定类名”);

四.泛型是什么?有什么作用?

直白的说泛型是在编译期规范集合存储的数据类型的。即不确定的的数据类型。

ArrayList< T > list = new ArrayList< T >();
这里的T就是list要存储的数据类型,如果list.add()不是T类型,编译器就会报错。
//遍历集合
for (T t : list) System.out.println(t);

假设不写泛型,即
ArrayList list = new ArrayList();
在迭代器遍历时只能Object来接收
//遍历集合
for (Object obj : list) System.out.println(obj);

最后要注意,泛型只存在于编译期,一旦程序运行,泛型就失效了,我们可以通过反编译代码发现,反编译出来的源码并没有泛型出现。

五.static关键字的作用,java中static关键字和private关键字修饰的方法能否被重写?

static关键字作用在于创建一个独立于对象实例的变量或者方法,使得即使没有实例,也能通过类来使用这个静态变量和静态方法

static还可以修饰代码块
使用语法:
static{
//代码
}
学习过jvm的小伙伴应该知道,static修饰的代码块会在类初始化时执行且只执行一次,所以我们使用静态代码块的好处在于:类一运行,静态代码块就会执行,不需要我们手动执行某个方法。这样我们就可以把那些只执行一次的初始化操作放在静态代码块中

private方法时类私有的,不会被继承,自然也不会被重写了;
static修饰的方法可以被继承,但是不能被重写。

六.抽象类和接口的区别

抽象类
特点:
1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上
public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。
8,接口可以有default、static方法.所以接口里方法不一定全是抽象的

7.final的作用是什么,String为什么用final修饰,String是线程安全的吗?

final修饰类是代表类不能被继承,修饰方法代表方法不能被重写,修饰变量代表变量的值不可被修改

string之所以用final修饰,是为了保持string的不可变性,这样就能够维护JVM中的字符串常量池,同时使得string在多线程环境下是线程安全的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值