java SE基础面试题收集归纳(二)

  1. Java 中异常分为哪些种类  

检查型异常(CheckedException)和非检查型异常(RuntimeException)。

  1. 检查性异常必须使用try catch或者throws等关键字进行处理,否则编译器会报错。 当前方法知道如何处理该异常,则用 try-catch 块来处理该异常;当前方法不知道如何处理,则在定义该方法是声明抛出该异常。
  2. 非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。

 

  1. 请写出你最常见的 5 个 RuntimeException 

1)java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。

2)java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序

试图通过字符串来加载某个类时可能引发异常。

3)java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符。

4)java.lang.IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生。

5)java.lang.IllegalArgumentException 方法传递参数错误。

6)java.lang.ClassCastException 数据类型转换异常。

7)java.lang.NoClassDefFoundException 未找到类定义错误。

8)SQLException SQL 异常,常见于操作数据库时的 SQL 语句错误。

9)java.lang.InstantiationException 实例化异常。

10)java.lang.NoSuchMethodException 方法不存在异常。

 

  1. throw 和 throws 的区别 是什么 

throw:

1)throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。

2)throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常。

throws:

1)throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。

2)throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。

3)throws 表示出现异常的一种可能性,并不一定会发生这种异常。

 

  1. final、 finally、 finalize 的区别?  

 

Final:修饰符,被它修饰的属性不能改变,方法不能重写,类不能继承。

Finally:和try或者try-catch使用,表示最后指向,一般用来释放资源。

Finalize:finalize()是Object的protected方法,子类可以覆盖该方法来整理系统资源或者执行其他清理工作,GC在回收对象之前调用该方法。如果被清理对象没有被引用就把它干掉。

 

  1. Math.round(11.5)等于多少? Math.round(- 11.5) 又等于多少?  

12\-11[无论正负+0.5向小取整]

 

  1. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String上? 

Jdk1.5之前使用byte、short、char、int

Jdk1.5开始引用了枚举类型

Jdk1.7开始引用了String字符串类型

但是长整型(long)在目前所有的版本中都是不可以的。

 

  1. 数组有没有 length() 方法? String 有没有 length() 方法?

数组拥有length属性,没有length()方法

String通过length()方法来获取字符串长度

  

  1. String 、 StringBuilder 、 StringBuffer 的区别? 

String:是只读字符串,也就是说不能改变。

StringBuilder:(jdk1.5出现)字符串长度可变,线程不安全,单线程下推荐使用,拼接字符串效率较高。

StringBuffer:字符串长度可变,所有方法被synchronize修饰,线程安全,拼接字符串效率中等。

 

  1. short s1 = 1; s1 = s1 + 1; 有错吗?short s1 = 1; s1 += 1 有错吗;  

short s1 = 1; s1 = s1 + 1;有错 1是int ,s1 + 1结果也是int,没有强制类型转换,int不能直接赋值给short。

short s1 = 1; s1 += 1没有错,相当于s1 =(short)(s1+ 1);隐含强制类型转换。

 

  1. Java 中有几种类型的流  、
  1. 按照流的方向:输入流(inputStream)和输出流(outputStream)。
  2. 按照实现功能分:节点流(FileReader)、处理流(包装流)(BufferedReader)
  3. 按照处理数据的单位:字节流和字符流。字节流继承于 InputStream 和 OutputStream,字符流继承于InputStreamReader 和 OutputStreamWriter。

 

  1. 如何将一个 java 对象序列化到文件里  

Java类需要实现Serializable[标记接口]

public class User implements Serializable

//写入

ObjectOutputStream out= new ObjectOutputStream(new FileOutputStream("user.txt"));

out.writeObject(new User("zhangsan","123456"));

out.flush();

out.close();

System.out.println("jieshu");

//读出

ObjectInputStream in=new ObjectInputStream(new FileInputStream("user.txt"));

User user=(User)in.readObject();

System.out.println(user);

in.close();

 

 

  1. 字节流和字符流的区别 ? 

字节流读取的时候,读到一个字节就返回一个字节;字符流使用字节流读取一个或者多个字节时,先去指定的编码表,将查到的字符返回。字节流可以处理所有类型数据,而字符流只能处理字符数据,只要是处理文本数据优先考虑使用字符流,其他数据处理用字节流,字节流主要操作byte类型数组,以byte数组为主,主要的操作类OutPutStream、InputStream

字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。所以字符流是由 Java 虚拟机将字节转化为 2 个字节的 Unicode 字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。在程序中一个字符等于两个字节,java 提供了 Reader、Writer 两个专门操作字符流的类。

 

  1. 什么是 java 序列化,如何实现 java 序列化?  

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化实现:

  1. implements Serializable【标记接口】
  2. 使用FileOutputStream流构建对象流ObjectOutputStream
  3. ObjectOutputStream 对象的 writeObject(Object obj)
  4. 就可以将参数为 obj 的对象写出(即保存其状态)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值