目录
- 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操作之后会回调通知调用方