Java常见基础面试题

一、请简单描述JDK和JRE的区别?

  • JDK就是Java Developement Kit的缩写,java最核心的东西,包括了java的运行环境(JRE),一些基本类库
  • JRE(Java Runtime Environment)是java的运行环境,包含java虚拟机和一些基本运行类库,但不包括调试和开发工具,一个项目被编译为.class后缀后即可在JRE上运行。
  • JVM是 java运行时所需要的环境。

二、说说&和&&的区别

  • &和&&都可以用作逻辑与的运算符,表示逻辑与(and)。
  • &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式
  • &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作

三、equals()和==的区别

  1. ① equals():是超类Object中的方法。
    ② ==:是操作符。
  2. ① equals():用来检测两个对象是否相等,即两个对象的内容是否相等。
    ② ==:用于比较引用地址和比较基本数据类型

四、StringBuffer和StringBuilder区别

  • StringBuilder是线程不安全的,效率较高;
  • StringBuffer是线程安全的,效率较低。

五、static和final区别

  • final
  1. 分配到常量池中,程序不可改变其值
  2. 子类中将不能被重写,不能被继承
  • static
  1. 分配在内存堆上,引用都会指向这一个地址而不会重新分配内存
  2. 虚拟机优先加载
  3. 可以直接通过类来调用而不需要new

六、final, finally, finalize的区别

  • final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。
  • finally是异常处理语句结构的一部分,表示总是执行。
  • finalize是Object类的一个方法,在垃圾收集器执行的时候会调用此方法。

七、引用类型是占用几个字节

  • hotspot在64位平台上,占8个字节,在32位平台上占4个字节。

八、Overload和Override的区别

  • Overload是重载的意思,Override是覆盖的意思,也就是重写。
  1. 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同
  2. 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同

九、Java的数据类型

  • 基本数据类型

byte、short、int、long、float、double、char、boolean

  • 引用数据类型

类(class)、接口(interface)、数组

十、Java 的 IO

Java 中有几种类型的流
  1. 按照流的方向:
  • 输入流(inputStream)和输出流(outputStream)。
  1. 按照实现功能分:
  • 节点流(可以从或向一个特定的地方(节点)读写数据。如 FileReader)
  • 处理流(是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
  1. 按照处理数据的单位:
  • 字节流和字符流。

十一、什么是java序列化,如何实现java序列化?

  • 将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象
  • 可以调用OutputStream的writeObject方法来实现,必须实现serializable接口。

十二、java反射

  • 对 Java 中反射的理解

Java中的反射首先是能够获取到Java中要反射类的字节码,然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用。

  • 获取字节码有三种方法
  1. Class.forName(className)
  2. 类名.class
  3. this.getClass()。

十三、java泛型

1. Java中的泛型是什么 ?

泛型就是参数化类型,也就是所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

2. 使用泛型的好处是什么?
  1. 类型安全,提供编译期间的类型检测
  2. 前后兼容
  3. 泛化代码,代码可以更多的重复利用
  4. 性能较高,用GJ(泛型JAVA)编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。
3. Java的泛型是如何工作的?什么是类型擦除?
  • 泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息
  • 类型擦除:所有类型参数都用他们的限定类型替换,包括类、变量和方法(类型擦除)
发布了7 篇原创文章 · 获赞 0 · 访问量 107

猜你喜欢

转载自blog.csdn.net/qq_36387471/article/details/105479196