1.JDK和JRE、JVM

JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境。
JRE:Java Runtime Environment 的简称,Java运行环境 ,为 Java 的运行提供了所需环境。
JVM:Java Virtual Machine的简称,是运行所有Java程序的抽象计算机,是Java语言的运行环境

具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。

2.Java三大特性介绍

封装、继承、多态

3.什么是多态

多态是同一个行为具有多个不同表现形式或形态的能力,为不同数据类型的实体提供统一的接口。

前置条件

  • 必须在继承体系下
  • 子类必须要对父类中方法进行重写
  • 父类引用指向子类实现

4.类和对象的区别

  • 对象是具有类型的变量。
  • 类是对象的抽象,而对象是类的具体实例。

类是抽象的,不占用内存,而对象是具体的,占用存储空间。

5.抽象类和接口区别

  • 接口只能定义方法,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
    default方法存在的意义:对已有的接口,如果想对接口增加一个新方法,那么需要对实现该接口的所有类进行修改,如果接口实的现类很多,就会带来很大的工作量。default方法按须重写
  • 实现接口的关键字为implements,继承抽象类的关键字为extends。单继承多实现
  • 抽象类中可以存在普通的成员变量;接口中只有常量,没有变量。
  • 接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。
  • 抽象类中成员变量默认default也叫friendly,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。

访问修饰符

作用域

public

外部包,同包,类内部,子类

private

类内部

protected

同包,类内部,子类

default (friendly)

类内部,同包

6.重写和重载的区别

重写:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.子类重写放大的访问修饰符一定要大于父类方法的访问修饰符(public>protected>default>private)
4.子类重写的方法一定不能抛出新的检查异常或者比父类方法申明更加宽泛的检查型异常
重载:
1.在一个类中,方法名相同,有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。
2.同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。

7.&和&&的区别

&既是逻辑运算符也是位运算符;&&只是逻辑运算符
&不具有短路效果,即左边false,右边还会执行;&&具有短路效果,左边为false,右边则不执行

8.==和equals的区别

  • ==
    如果作用于基本数据类型的变量,则直接比较其存储的 值是否相等,如果作用于引用类型的变量,则比较的是所指向的对象的地址是否相等。
  • equals()
    方法存在于Object类中,在没有重写equals()方法的类中,调用equals()方法其实和使用==的效果一样,也是比较的是引用类型的变量所指向的对象的地址,具体比较需要对比equals的实现。

9.hashcode 与 equals之间的关联

如果两个对象相等,那么它们的hashCode()值一定相同,如果两个对象hashCode()相等,它们并不一定相等。

10.Integer和int的区别

1、Integer是int提供的封装类,而int是Java的基本数据类型;

2、Integer默认值是null,而int默认值是0;

3、声明为Integer的变量需要实例化,而声明为int的变量不需要实例化;

4、Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。

11.String,StringBuffer,StringBuilder


String

StringBuffer

StringBuilder

执行速度

最差

其次

最高

线程安全

线程安全

线程安全

线程不安全

使用场景

少量字符串操作

多线程环境下的大量操作

单线程环境下的大量操作

12.String s = new String(“xyz”);创建了几个String Object? 二者之间有什么区别?

俩个对象:new String创建了String对象;另一个是“abc”对象,abc在一个字符串池中,s这个对象指向这个字符串池。

13.final, finally, finalize的区别

  • final是Java中的关键字,用于修饰变量、方法或类,表示它们不可被修改或继承。
  • finally是Java中的关键字,用于定义在try-catch语句块中的一个代码块,无论是否发生异常,finally中的代码都会被执行。
  • finalize是Java中的Object类中的一个方法,用于在对象被垃圾回收前执行一些清理操作,例如释放资源等。

14.flx、ceil、floor、round的区别

flx(x):向0取整
ceil(x):向右取整(ceil英文: 天花板; 最高限度),取较大的整数值
floor(x):向左取整(地板, 底部),因此取较小的整数值
round(x):四舍五入到最近的整数

15.Object里有哪些方法

equals(Object obj):判断当前对象是否与另一个对象相等。

hashCode():返回当前对象的哈希码。

toString():返回当前对象的字符串表示。

getClass():返回当前对象的类对象。

notify():唤醒在当前对象上等待的单个线程。

notifyAll():唤醒在当前对象上等待的所有线程。

wait():使当前线程等待,直到另一个线程调用notify()或notifyAll()方法唤醒它。

wait(long timeout):使当前线程等待指定的时间,直到另一个线程调用notify()或notifyAll()方法唤醒它。