一、请简单描述JDK和JRE的区别?
- JDK就是Java Developement Kit的缩写,java最核心的东西,包括了java的运行环境(JRE),一些基本类库
- JRE(Java Runtime Environment)是java的运行环境,包含java虚拟机和一些基本运行类库,但不包括调试和开发工具,一个项目被编译为.class后缀后即可在JRE上运行。
- JVM是 java运行时所需要的环境。
二、说说&和&&的区别
- &和&&都可以用作逻辑与的运算符,表示逻辑与(and)。
- &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式
- &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作
三、equals()和==的区别
- ① equals():是超类Object中的方法。
② ==:是操作符。- ① equals():用来检测两个对象是否相等,即两个对象的内容是否相等。
② ==:用于比较引用地址和比较基本数据类型
四、StringBuffer和StringBuilder区别
- StringBuilder是线程不安全的,效率较高;
- StringBuffer是线程安全的,效率较低。
五、static和final区别
- final
- 分配到常量池中,程序不可改变其值
- 子类中将不能被重写,不能被继承
- static
- 分配在内存堆上,引用都会指向这一个地址而不会重新分配内存
- 虚拟机优先加载
- 可以直接通过类来调用而不需要new
六、final, finally, finalize的区别
- final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。
- finally是异常处理语句结构的一部分,表示总是执行。
- finalize是Object类的一个方法,在垃圾收集器执行的时候会调用此方法。
七、引用类型是占用几个字节
- hotspot在64位平台上,占8个字节,在32位平台上占4个字节。
八、Overload和Override的区别
- Overload是重载的意思,Override是覆盖的意思,也就是重写。
- 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同
- 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同
九、Java的数据类型
- 基本数据类型
byte、short、int、long、float、double、char、boolean
- 引用数据类型
类(class)、接口(interface)、数组
十、Java 的 IO
Java 中有几种类型的流
- 按照流的方向:
- 输入流(inputStream)和输出流(outputStream)。
- 按照实现功能分:
- 节点流(可以从或向一个特定的地方(节点)读写数据。如 FileReader)
- 处理流(是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
- 按照处理数据的单位:
- 字节流和字符流。
十一、什么是java序列化,如何实现java序列化?
- 将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象
- 可以调用OutputStream的writeObject方法来实现,必须实现serializable接口。
十二、java反射
- 对 Java 中反射的理解
Java中的反射首先是能够获取到Java中要反射类的字节码,然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用。
- 获取字节码有三种方法
- Class.forName(className)
- 类名.class
- this.getClass()。
十三、java泛型
1. Java中的泛型是什么 ?
泛型就是参数化类型,也就是所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
2. 使用泛型的好处是什么?
- 类型安全,提供编译期间的类型检测
- 前后兼容
- 泛化代码,代码可以更多的重复利用
- 性能较高,用GJ(泛型JAVA)编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。
3. Java的泛型是如何工作的?什么是类型擦除?
- 泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息
- 类型擦除:所有类型参数都用他们的限定类型替换,包括类、变量和方法(类型擦除)