Java面试小册(4)

31

【Q】:Java中final,finally,finalieze各有什么区别?

【A】:

  1. final:用于修饰类,方法,和变量,主要用来设计不可变类,确保类的安全性,优化性能(编译器优化)。
    1. 类:被final修饰不能被继承。
    2. 方法:被final修饰的方法不能被重新。
    3. 变量:被final修饰的变量不可重新赋值,常用于定义常量。
  1. finally:与try-catch语句块结合使用,用于确保无论是否发生异常,finally代码块都会执行。主要用于释放资源(如关闭数据库连接,文件等),以确保即使发送异常,资源也会被正确释放。
  2. finalize:是Object类的方法,允许对象在垃圾回收前进行清理操作。较少使用,常用于回收资源,但不建议依赖它,因为JVM不保证finalize()会被及时执行。JDK9以后,此方法被AutoCloseable接口和try-with-resources语句代替。

32

【Q】:为什么Java中编写代码时会遇到乱码?

【A】:

  1. 主要时因为字符编码与解码不一样。编码和解码使用的字符集不一样。
  2. 默认编码设置问题:Java默认使用操作系统的字符编码,如果不同操作系统上未明确指定编码,可能导致乱码。
  3. 流处理中的编码问题:在文件和网络流处理中,读取或写入字符时没有指定编码格式,可能会默认使用平台编码,
  4. 数据库乱码问题:数据库字符集和应用字符集不匹配。

33

【Q】:JDK9为什么将String的char数组改为byte数组?

【A】:

  1. 为了节省空间,提高内存利用率。
  2. char[]实现,内部采用UTF-16编码,每个字符占两个字节,但如果字符只占一个字节,就造成了浪费。
  3. byte[]数组来实现,仅仅需要1字节,减少了内存占用。
  4. 并且引入coder来辨识编码方式。如果字符串只包含Latin-1范围内的字符ASCLL,则使用单字节编码,否则使用UTF-16。这种机制在保持兼容性的同时,又减少内存占用。

34

【Q】:一个线程中Java被调用两次start()方法,会发送什么?

【A】:

  1. 会报错!因为在Java中,一个线程只能被启动一次,所以尝试第二次调用start方法时,会抛出异常。
  2. 这是因为一旦线程开始执行,它的状态不能再回到初始状态。线程的生命周期不允许它从终止状态回到可运行状态。

35

【Q】:栈和队列再Java中的区别是什么?

【A】:

  1. 栈(Stack):遵循先进先出(LIFO)原则。包括push(入栈),pop(出栈)。Java中的Stack类(java.util.Stack)实现了这个类。
  2. 队列(Queue):遵循先进先出(FIFO)原则。包括enqueue(入队)和dequeue(出队)。Java中java.util.Queue提供了此数据结构。

36

【Q】:Java中的Option类是什么?有什么作用?

【A】:

  1. Optional是JDK8引入的一个容器类,用于表示可能为空的值,通过API。来减少程序中出现null,避免空指针异常的发生。
  2. 减少NullPointerException:通过Optional提供的操作方法,避免直接使用null进行空值检查,从而降低空指针异常的风险。
  3. 提高代码可读性:提供了一套简洁的API。如isPresent,ifPresent和orElse,可以让代码更具有表达性,清晰地展示处理空值的逻辑。

37

【Q】:Java中的IO流是什么?

【A】:

  1. 用于处理输入和输出数据的类库。通过流,程序可以从各种输入源(网络,文件)读取数据,或将数据写入目标位置(文件,控制台)。
  2. 分为字节流和字符流,分别用于处理字节级和字符级的数据:
    1. 字符流:处理8位字节数据,适合处理二机制文件。主要类是InputStream和OutputStream及其子类。
    2. 字符流:处理16位字符数据,适合处理文本文件,主要是Reader和Writer及其子类。

38

【Q】:Java中的基本数据类型

【A】:

  1. 整数:byte(1字节),short(2字节),int(4字节),long(8字节).
  2. 浮点型:float(4字节),double(8字节)
  3. 字符型:char(2字节)
  4. 布尔型:boolean

39

【Q】:Java中的自动装箱和拆箱?

【A】:

  1. 自动装箱:基本数据类型->包装类型。自动拆箱:包装类型->基本数据类型。
  2. 主要是为了提升代码可读性,减少手动转化操作,简化代码编写。
  3. 集合类如List<Integer>中无法存储基本数据类型,自动装箱。
  4. 自动装箱和自动拆箱常用于算法运算符中,尤其是包装类型参与运算时。

40

【Q】:什么是Java的网络编程?

【A】:

  1. Java的网络编程主要是利用java.net包,提供了网络通信的基本类和接口。
  2. Java网络编程的基本概念:
    1. IP地址:用于标识网络中的计算机。
    2. 端口号:用于标识计算机上的具体应用程序或进程。
    3. Socket(套接字):网络通信的基本单位,通过IP地址和端口号标识。
    4. 协议:网络通信的规则,如TCP(传输控制协议)和UDP(用户数据报协议)。
  1. Java网络编程的核心类:
    1. Socket:用于创建客户端套接字。
    2. ServerSocket:用于创建服务器套接字。
    3. DatagramSocket:用于创建支持UDP协议的套接字。
    4. URL:用于处理统一资源定位符。
    5. URLConnection:用于读取和写入URL引用的资源。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值