Java基础

133 阅读6分钟

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如何实习多态的(多态三要素)

  1. 继承
  2. 子类重写父类方法
  3. 父类引用指向子类对象

9. 多态的优点,缺点

  • 灵活
  • 解耦

6. 接口和抽象类的区别(继承和实习的区别)

interfaceabstract class
类,方法,属性,继承,new

什么时候使用抽象类,什么时候使用接口? 1 优先定义接口  2 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。

7. 普通类和抽象类的区别

classabstract 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 = 1int a2 = 1a1 == a2 --> ture
int a1 = 999int a2 = 999a1 == a2 --> ture
int a1 = 1Integer a2 = 1a1 == a2 --> ture
int a1 = 999Integer a2 = 999a1 == a2 --> ture (原因:Integer自动解包装,转int)
int a1 = 1Integer a2 = new Integer(1)a1 == a2 --> ture
int a1 = 999Integer a2 = new Integer(999)a1 == a2 --> ture(原因:Integer自动解包装,转int)

Integer VS Integer

值1值2结果
Integer a1 = 1Integer a2 = 1a1 == a2 --> ture(原因:Integer缓存值-127~128)
Integer a1 = 999Integer a2 = 999a1 == a2 --> false
Integer a1 = 1Integer 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. 有几种基础数据类型

基础数据类型
byteshortintlong
floatdoublecharboolean

13. 是否可以在一个static方法中调用一个非static方法

不可以

14. final在Java中有什么作用

类,属性,方法,继承,new
final放到类上,类不可被继承,不可改变的类
final放到属性上,为常量属性
final放到方法中,方法不可被重写
  1. JDK8有哪些新特性?
JDK8新特性
Stream流
Lambda表达式
接口增强(默认方法,静态方法)
Optional操作
双冒号方法引用(类::方法名,对象::方法名)
新的时间API 新的时间,API localDate localTime localDateTime
函数式接口FunctionInterface

一Stream流二,Lambda表达式,三接口增强(包含默认方法,静态方法)四,Optional操作五对象获取,双冒号(类::静态方法),六新的时间,Canada等。

  1. 枚举

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…