1. String有哪些方法
| 操作 | 方法 |
|---|---|
| 增 | |
| 删 | subString |
| 改 | |
| 查 | chatAt,indexOf,lastIndexOf |
| 替换 | replace,replaceAll,firstReplace |
| 分割 | split,trim |
| 比较 | equals,startWith,endWith,concat,compareTo |
2. String,StringBuffer,StringBuilder的区别
①String字符串不可变,SB字符串可变 ②线程安全,String,StringBuffer线程安全,StringBuilder线程不安全 ③字符串拼接,StringBuilder>StringBuffer>String 相同 ①都是final类 ②都操作字符串 ③sb有共同的父类 总结 少量字符串拼接使用String 线程安全,大量拼接使用StringBuilder ,线程不安全,大量使用StringBuffer
3. String str = "i"; 与String str = new String("i");一样吗
4. new String("a") + new String("b")会创建几个对象
4. 如何将字符串反转
StringBuilder,StringBuffer中反转方法
String a = "abc";
String b = "ab" + "c";
String c = "ab" + new String("c");
String d = a + "d";
String e = "abcd";
System.out.println(a = b); // true 编译器会优化为与String a一样
System.out.println(a = c); // false
System.out.println(d = e); // false 需要验证,d在堆中有对象?
3. Object有哪些方法
Object对象获取字节码getClass,通过HashCode进行唯一标识,通过Clone方法复制一个,再进行equals比较两个对象,将比较后的结果toString打印。等到wait打印结果出来,notify通知领导,领导同意后,notifyAll通知团队中的其他人。大家都知道后就当成垃圾回收finalize。
4. 什么是面向对象,什么是面向过程
5. 封装,继承,多态,抽象
1.封装 隐藏类的属性和功能实现,增强类的安全性和简化编程,通过提供公用接口,以特定的访问权限来使用类成员。 2.继承 对共有的特性和行为进行抽取,形成父类,继承就是子类继承父类的特征和行为,使得子类拥有父类的功能和特性,可以对父类功能进行扩展,但不能修改。 3.多态 多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例的相同方法在不同情形有不同表现形式。
6. 什么是封装,谈谈你对封装的理解
封装,即将对象的所有属性都私有化,如果需要对外提供,如果需要对外提供,则创建公共的方法。如果所有的方属性都没有都私有化,并且没有对外提供,这是不可取的。
7. 什么是继承?有什么好处
继承是以一个存在的类作为父类来实现新类的一种技术,新类继承父类所有的属性和方法,包括私有性方法。私有性方法。继承但是不可使用。子类可以扩展自己的属性和方法。通过继承,可以方便的复用代码。 ①继承父类的所有属性和方法 ②可以扩展自己的属性和方法 ③可以重写父类的方法。
8. Java如何实习多态的(多态三要素)
- 继承
- 子类重写父类方法
- 父类引用指向子类对象
9. 多态的优点,缺点
- 灵活
- 解耦
6. 接口和抽象类的区别(继承和实习的区别)
| interface | abstract class |
|---|---|
| 类,方法,属性,继承,new | |
什么时候使用抽象类,什么时候使用接口? 1 优先定义接口 2 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。
7. 普通类和抽象类的区别
| class | abstract class |
|---|---|
| 类,方法,属性,继承,new | |
- 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。
- 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
相同点
- 接口和抽象类都不能实例化
- 都位于继承的顶端,用于被其他实现或继承
- 都包含抽象方法,其子类都必须覆写这些抽象方法
7. 什么时候用接口,什么时候用抽象类
接口定义like a,抽象类定义 is a
在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 帮助子类做初始化工作。 这是继承的一种规则,如果你在子类中调用父类的方法而父类又没有初始化你怎么调用,所以在初始化子类时java会自动创建一个父类
8. 说说&与&&,|与||的区别
& 按位与(都是int类型时,将数据转为二进制,都是1则为1,否则为0) | 按位或(都是int类型时,将数据转为二进制,有一个是1则为1,否则0,Boolean时,一个为TRUE则为TRUE,但没有进行短路) 9 & 3 = 1 9 | 3 = 11
8421
0000 0000
9
0000 1001
3
0000 0011
&
0000 0001
|
0000 1011
&& || 短路运算
9. equal与==的区别
10. 静态变量与实例变量的区别
| 变量赋值,使用 |
|---|
| 类名.静态变量,实例对象.实例变量 |
| 静态变量属于类,实例变量属于实例 |
11. Integer与int的区别
Integer是int的包装类 Integer默认值null,int默认值0 int VS int; int VS Integer
| 值1 | 值2 | 结果 |
|---|---|---|
| int a1 = 1 | int a2 = 1 | a1 == a2 --> ture |
| int a1 = 999 | int a2 = 999 | a1 == a2 --> ture |
| int a1 = 1 | Integer a2 = 1 | a1 == a2 --> ture |
| int a1 = 999 | Integer a2 = 999 | a1 == a2 --> ture (原因:Integer自动解包装,转int) |
| int a1 = 1 | Integer a2 = new Integer(1) | a1 == a2 --> ture |
| int a1 = 999 | Integer a2 = new Integer(999) | a1 == a2 --> ture(原因:Integer自动解包装,转int) |
Integer VS Integer
| 值1 | 值2 | 结果 |
|---|---|---|
| Integer a1 = 1 | Integer a2 = 1 | a1 == a2 --> ture(原因:Integer缓存值-127~128) |
| Integer a1 = 999 | Integer a2 = 999 | a1 == a2 --> false |
| Integer a1 = 1 | Integer a2 = new Integer(1) | a1 == a2 --> false |
| Integer a1 = new Integer(1) | Integer a2 = new Integer(1) | a1 == a2 --> false |
什么是装箱,什么是拆箱? 装箱:将基础类型转换为对应的引用类型的 拆箱:将引用类型转换为基础类型
拆箱和装箱是如何实现的?
如:Integer类型
装箱:Integer.valueOf(1);
拆箱:Integer i = new Integer(1);
i.intValue();
12. 有几种基础数据类型
| 基础数据类型 | |||
|---|---|---|---|
| byte | short | int | long |
| float | double | char | boolean |
13. 是否可以在一个static方法中调用一个非static方法
不可以
14. final在Java中有什么作用
| 类,属性,方法,继承,new |
|---|
| final放到类上,类不可被继承,不可改变的类 |
| final放到属性上,为常量属性 |
| final放到方法中,方法不可被重写 |
- JDK8有哪些新特性?
| JDK8新特性 | |
|---|---|
| Stream流 | |
| Lambda表达式 | |
| 接口增强(默认方法,静态方法) | |
| Optional操作 | |
| 双冒号方法引用(类::方法名,对象::方法名) | |
| 新的时间API 新的时间,API localDate localTime localDateTime | |
| 函数式接口FunctionInterface |
一Stream流二,Lambda表达式,三接口增强(包含默认方法,静态方法)四,Optional操作五对象获取,双冒号(类::静态方法),六新的时间,Canada等。
- 枚举
public enum En {
A,
B("B"),
C,
;
En() {
this.name = "B";
}
En(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
}
public class Tt {
public static void main(String[] args) {
System.out.println(En.A); // A
System.out.println(En.B); // B
System.out.println(En.C); // C
System.out.println(En.C.compareTo(En.A)); // 2
}
}
// 枚举compareTo方法比较的是对应值在对应枚举的位置ordinal,
A ordinal 0
B ordinal 1
C ordinal 2
为什么不用Double存储金钱,怎样转Double才不会丢失精度
Double在进行计算时,无法精确到指定的数位,会丢失精度。
// 功能相似,但alueOf会丢失精度
Double.valueOf("");
Double.parseDouble("");
other interview questions: www.taodudu.cc/news/show-4…