关于后端:面试题百日百刷java基础篇五

26次阅读

共计 2028 个字符,预计需要花费 6 分钟才能阅读完成。

锁屏面试题百日百刷,每个工作日保持更新面试题。 请看到最初就能获取你想要的, 接下来的是今日的面试题:

1. 在 Java 中定义一个不做事且没有参数的构造方法的作用 **

Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因而,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将产生谬误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。

2. 成员变量与局部变量的区别有哪些?**

1. 从语法模式上看: 成员变量是属于类的,而局部变量是在办法中定义的变量或是办法的参数;成员变量能够被 public,private,static 等修饰符所润饰,而局部变量不能被访问控制修饰符及 static 所润饰;然而,成员变量和局部变量都能被 final 所润饰。

2. 从变量在内存中的存储形式来看: 如果成员变量是应用 static 润饰的,那么这个成员变量是属于类的,如果没有应用 static 润饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。

3. 从变量在内存中的生存工夫上看: 成员变量是对象的一部分,它随着对象的创立而存在,而局部变量随着办法的调用而主动隐没。

4. 成员变量如果没有被赋初值: 则会主动以类型的默认值而赋值(一种状况例外: 被 final 润饰的成员变量也必须显式地赋值),而局部变量则不会主动赋值。

3. 在一个静态方法内调用一个非动态成员为什么是非法的?**

因为静态方法能够不通过对象进行调用,因而在静态方法里,不能调用其余非动态变量,也不能够拜访非动态变量成员。

4. 接口和抽象类的区别是什么?**

1. 接口的办法默认是 public,所有办法在接口中不能有实现 (Java 8 开始接口办法能够有默认实现),而抽象类能够有非形象的办法。

2. 接口中除了 static、final 变量,不能有其余变量,而抽象类中则不肯定。

3. 一个类能够实现多个接口,但只能实现一个抽象类。接口本人自身能够通过 extends 关键字扩大多个接口。

4. 接口办法默认修饰符是 public,形象办法能够有 public、protected 和 default 这些修饰符(形象办法就是为了被重写所以不能应用 private 关键字润饰!)。

5. 从设计层面来说,形象是对类的形象,是一种模板设计,而接口是对行为的形象,是一种行为的标准。

5.String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?**

简略的来说:String 类中应用 final 关键字润饰字符数组来保留字符串,private final char

value[],所以 String 对象是不可变的。

而 StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是应用字符数组保留字符串 char[]value 然而没有用 final 关键字润饰,所以这两种对象都是可变的。

StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是 AbstractStringBuilder 实现的,大家能够自行查阅源码。

线程安全性

String 中的对象是不可变的,也就能够了解为常量,线程平安。AbstractStringBuilder 是

StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共办法。StringBuffer 对办法加了同步锁或者对调用的办法加了同步锁,所以是线程平安的。StringBuilder 并没有对办法进行加同步锁,所以是非线程平安的。

性能

每次对 String 类型进行扭转的时候,都会生成一个新的 String 对象,而后将指针指向新的

String 对象。StringBuffer 每次都会对 StringBuffer 对象自身进行操作,而不是生成新的对象并扭转对象援用。雷同状况下应用 StringBuilder 相比应用 StringBuffer 仅能获 10%~15% 左右的性能晋升,但却要冒多线程不平安的危险。

对于三者应用的总结:

1. 操作大量的数据: 实用 String

2. 单线程操作字符串缓冲区下操作大量数据: 实用 StringBuilder

3. 多线程操作字符串缓冲区下操作大量数据: 实用 StringBuffer

全部内容在 git 上, 理解更多请点我头像或到我的主页去取得,谢谢 **

正文完
 0