目录
- JDK/JRE/JVM三者的关系
- JDK常用的包
- == 和 equals 的区别是什么?
- Java 中的几种基本数据类型了解么?
- 什么是自动拆装箱?
- final 关键字中有什么作用?
- 接口和抽象类有什么区别?
- String, StringBuffer 和 StringBuilder区别
- String 类的常用方法有哪些?
- Object的常用方法有哪些
- Java创建对象有几种方式?
- throw 和 throws 有什么区别?
- &和&&的区别
- final、finally、finalize有什么区别?
- 重载和重写有什么区别?
- 常见的Exception有哪些?
- 什么是反射?
- 反射常见的应用场景
- Java 中 IO 流分为几种?
- Files类的常用方法都有哪些?
- 什么是AIO、BIO和NIO?
JDK/JRE/JVM三者的关系
-
Jdk【Java Development ToolKit】java开发 工具箱,提供了 Java 的开发环境和运行环境。
-
Jre【Java Runtime Enviromental】为 Java 的运行提供了所需 环境。
-
JVM【Java Virtual Machine】就是我们耳熟能详的 Java 虚拟机。Java 能够跨平台运行的核心在于 JVM 。
JRE = JVM + Java 核心类库
JDK = JRE + Java工具 + 编译器 + 调试器
JDK常用的包
java.lang:这个是系统的 基础类,比如String、Math、Integer、System和Thread,提供常用功能。java.io: 这里面是所有 输入输出 有关的类,比如文件操作等。java.net: 这里面是与 网络 有关的类,比如URL,URLConnection等。java.util: 这个是系统 辅助类,特别是集合类Collection,List,Map等。java.sql: 这个是 数据库 操作的类,Connection,Statememt,ResultSet等
== 和 equals 的区别是什么?
==运算符- 基本类型:比较值
- 引用类型:比较地址
equals()- 基本类型:比较值
- 引用类型:默认使用的
==比较的地址,不过一般进行重写,如Integer和String重写后比较的是值
Java 中的几种基本数据类型了解么?
Java 中有 8 种基本数据类型,分别为:
- 6 种数字类型:
- 4 种整数型:
byte、short、int、long - 2 种浮点型:
float、double
- 4 种整数型:
- 1 种字符类型:
char - 1 种布尔型:
boolean。
什么是自动拆装箱?
- 装箱:将基本类型用它们对应的包装类包装起来;
- 拆箱:将包装类型转换为基本数据类型;
final 关键字中有什么作用?
-
修饰引用
- 如果引用为基本数据类型,则该引用为常量,该值无法修改;
- 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
- 如果引用是类的成员变量,则必须当场赋值,否则编译会报错。
-
修饰方法:无法被子类重写,但仍然可以被继承。
-
修饰类:无法被继承
接口和抽象类有什么区别?
- 相同点:
- 都不能直接实例化
- 都可以有抽象方法
- 都是体现多态
- 不同点:
- 抽象类的子类使用
extends来继承;接口必须使用implements来实现接口。 - 抽象类可以有 构造函数;接口不能有。
- 类可以实现很多个接口;但是只能继承一个抽象类。单继承多实现
- 接口中的方法默认使用
public修饰;抽象类中的方法可以是任意访问修饰符。
- 抽象类的子类使用
String, StringBuffer 和 StringBuilder区别
- 可变性:
String不可变StringBuffer和StringBuilder可变
- 线程安全:
String不可变,因此是线程安全的StringBuilder不是线程安全的StringBuffer是线程安全的,内部使用synchronized进行同步
String 类的常用方法有哪些?
indexOf():返回指定字符的索引。charAt():返回指定索引处的字符。replace():字符串替换。trim():去除字符串两端空白。split():分割字符串,返回一个分割后的字符串数组。getBytes():返回字符串的 byte 类型数组。length():返回字符串长度。toLowerCase():将字符串转成小写字母。toUpperCase():将字符串转成大写字符。substring():截取字符串。equals():字符串比较
Object的常用方法有哪些
toString():默认输出对象地址。equals():默认比较两个引用变量是否指向同一个对象(内存地址)。hashCode():将与对象相关的信息映射成一个哈希值,默认的实现hashCode值是根据内存地址换算出来。clone():复制对象的副本,使用的是浅拷贝。getClass():返回此 Object 的运行时类,常用于java反射机制。wait():使当前线程释放对象锁,进入等待状态。notify():唤醒在此对象上等待的单个线程,选择是任意性的。notifyAll():唤醒在此对象上等待的所有线程
Java创建对象有几种方式?
- 用
new语句创建对象。 - 使用反射,使用
Class.newInstance()创建对象。 - 调用对象的
clone()方法。 - 使用反序列化
throw 和 throws 有什么区别?
throw用于 手动抛出java.lang.Throwable类的一个例化对象throws的作用是作为 方法声明和签名的一部分,方法被抛出相应的异常以便调用者能处理。
&和&&的区别
&运算符有两种用法:(1)按位与;(2)短路与。
&:按位与,通过&两边的值计算结果。&&:短路运算,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
final、finally、finalize有什么区别?
final、finally和finalize是Java中的三个不同的概念。
final:用于声明变量、方法或类,使之不可变、不可重写或不可继承。finally:是异常处理的一部分,用于确保代码块(通常用于资源清理)总是执行。finalize:是Object类的一个方法,用于在对象被垃圾回收前执行清理操作,但通常不推荐使用
重载和重写有什么区别?
-
重载
重载发生在同一个类内部,目的是提供多种同名方法以适应不同的情况。
- 方法名必须 相同。
- 参数列表必须 不同(参数的数量、类型或顺序不同)。
- 返回类型无要求。
-
重写
在子类中重新定义父类中的方法称为方法重写。
- 方法名必须 相同。
- 参数列表必须 相同。
- 返回类型必须 相同。
- 访问修饰符不能比父类的方法更严格(例如,父类方法为public,则子类重写的方法也应该是public)。
常见的Exception有哪些?
常见的 RuntimeException:
ClassCastException// 类型转换异常IndexOutOfBoundsException// 数组越界异常NullPointerException// 空指针ArrayStoreException// 数组存储异常NumberFormatException// 数字格式化异常ArithmeticException// 数学运算异常
常见的 CheckedException:
NoSuchFieldException// 反射异常,没有对应的字段ClassNotFoundException// 类没有找到异常IOException// IO异常SQLException// SQL异常
什么是反射?
反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性和方法。
Java的反射可以:
- 在运行时判断任意一个 对象所属的类。
- 在运行时判断任意一个类 所具有的成员变量和方法。
- 在运行时任意调用一个对象的 方法
- 在运行时 构造任意一个类的对象
反射常见的应用场景
- 动态代理
- JDBC的
class.forName - BeanUtils中属性值的拷贝
- RPC框架
- ORM框架
- Spring的IOC/DI
Java 中 IO 流分为几种?
- 按功能来分:输入流(input)、输出流(output)。
- 按类型来分:字节流和字符流。
- 字节流和字符流的区别是:
- 字节流按8位(一个字节),以字节为单位输入输出数据
- 字符流按 16位(两个字节),以字符为单位输入输出数据
Files类的常用方法都有哪些?
exists():检测文件路径是否存在。createFile():创建文件。createDirectory():创建文件夹。delete():删除一个文件或目录。copy():复制文件。move():移动文件。size():查看文件个数。read():读取文件。write():写入文件。
什么是AIO、BIO和NIO?
-
BIO (Blocking I/O):同步阻塞I/O, 线程发起IO请求后,一直阻塞,直到缓冲区数据就绪后,再进入下一步操作。 -
NIO (Non-Blocking I/O):同步非阻塞IO,线程发起IO请求后,不需要阻塞,立即返回。用户线程不原地等待IO缓冲区,可以先做一些其他操作,只需要定时轮询检查IO缓冲区数据是否就绪即可。 -
AIO ( Asynchronous I/O):异步非阻塞I/O模型。线程发起IO请求后,不需要阻塞,立即返回,也不需要定时轮询检查结果,异步IO操作之后会回调通知调用方
