最详细的 Java 基础面试题汇总( 九 )
在以下 4 种特殊情况下 , finally 块不会被执行:
- 在 finally 语句块第一行发生了异常 。因为在其他行 , finally 块还是会得到执行
- 在前面的代码中用了 System.exit(int)已退出程序 。exit 是带参函数 ;若该语句在异常语句之后 , finally 会执行
- 程序所在的线程死亡 。
- 关闭 CPU 。
public static int f(int value) {try {return value * value;} finally {if (value =http://kandian.youth.cn/index/= 2) {return 0;}}}
如果调用 f(2) , 返回值将是 0 , 因为 finally 语句的返回值覆盖了 try 语句块的返回值 。33 Java 序列化中如果有些字段不想进行序列化 , 怎么办?对于不想进行序列化的变量 , 使用 transient 关键字修饰 。
transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时 , 被 transient 修饰的变量值不会被持久化和恢复 。 transient 只能修饰变量 , 不能修饰类和方法 。
34 获取用键盘输入常用的两种方法方法 1:通过 Scanner
Scanner input = new Scanner(System.in);String s= input.nextLine();input.close();
方法 2:通过 BufferedReaderBufferedReader input = new BufferedReader(new InputStreamReader(System.in));String s = input.readLine();
35 Java 中 IO 流Java 中 IO 流分为几种?- 按照流的流向分 , 可以分为输入流和输出流;
- 按照操作单元划分 , 可以划分为字节流和字符流;
- 按照流的角色划分为节点流和处理流 。
- InputStream/Reader: 所有的输入流的基类 , 前者是字节输入流 , 后者是字符输入流 。
- OutputStream/Writer: 所有输出流的基类 , 前者是字节输出流 , 后者是字符输出流 。
文章插图
IO-操作方式分类
按操作对象分类结构图:
文章插图
IO-操作对象分类
既然有了字节流,为什么还要有字符流?问题本质想问:不管是文件读写还是网络发送接收 , 信息的最小存储单元都是字节 , 那为什么 I/O 流操作要分为字节流操作和字符流操作呢?
回答:字符流是由 Java 虚拟机将字节转换得到的 , 问题就出在这个过程还算是非常耗时 , 并且 , 如果我们不知道编码类型就很容易出现乱码问题 。 所以 ,I/O 流就干脆提供了一个直接操作字符的接口 , 方便我们平时对字符进行流操作 。 如果音频文件、图片等媒体文件用字节流比较好 , 如果涉及到字符的话使用字符流比较好 。
BIO,NIO,AIO 有什么区别?
- BIO (Blocking I/O): 同步阻塞 I/O 模式 , 数据的读取写入必须阻塞在一个线程内等待其完成 。 在活动连接数不是特别高(小于单机 1000)的情况下 , 这种模型是比较不错的 , 可以让每一个连接专注于自己的 I/O 并且编程模型简单 , 也不用过多考虑系统的过载、限流等问题 。 线程池本身就是一个天然的漏斗 , 可以缓冲一些系统处理不了的连接或请求 。 但是 , 当面对十万甚至百万级连接的时候 , 传统的 BIO 模型是无能为力的 。 因此 , 我们需要一种更高效的 I/O 处理模型来应对更高的并发量 。
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 学习大数据是否需要学习JavaEE
- 从事Java开发时发现基础差,是否应该选择辞职自学一段时间
- 2021年Java和Python的应用趋势会有什么变化?
- 普通大学计算机专业的本科生,该选择主攻前端还是Java
- Java语言会不会随着容器的兴起而衰落
- 大一有考研计算机专业的打算,该学习C++还是Java
- 计算机专业的同学在掌握了Java之后,还可以学习哪门后端语言
- 不实习,如何增加Java项目经验
- 大学生如何提升Java编程能力