一、异常
常见的运行时异常
异常类型 | 说明 |
---|---|
java.lang.ArithmeticException | 算数异常(比如被零除) |
java.lang.NullPointerException | 空指针异常(调用方法,属性的对象为null时) |
java.lang.ArrayIndexOutOfBoundsException | 数组索引越界 |
java.lang.ClassCastException | 类型转换异常 |
java.util.InputMismatchException | 输入的数据类型不匹配读取的类型 |
java.lang.ClassNotFoundException | 类未找到异常 |
java.io.FileNotFoundException | 文件未找到异常 |
java.io.IOException | IO异常(输入输出异常) |
java.sql.SQLException | 访问数据库异常 |
java.text.ParseException | 解析异常 |
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会在return中间执行!
try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,但return并不是让函数马上返回,而是return语句执行后,把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回!但此时会有两种情况;
1)如果finall中也有return,则会直接返回并终止程序,函数栈中的return不会被完成!
2)如果finally中没有return,则在执行完finall中的代码之后,会将函数栈中的try中的return的内容返回并终止程序;catch同try。
final,finally,finalize的区别
- final是一个关键字用于修饰类,属性和方法。
- finalize是Object类中提供的一个方法,用于在jvm对对象清理时,对于当前对象执行一些最终的处理工作
- finally是异常中的语句块
运行时异常与一般异常有何异同?
- 运行时异常是在程序运行期间,出现了对应异常情况之后以后jvm(虚拟机)抛出,并且将异常的堆栈信息输出到控制台(或日志文件)。
- 一般异常是在程序运行期间,或者编译期间由编译器抛出的异常信息,这些异常情况可以由程序员进行处理(抛出,捕获)。
error 和 exception有什么区别?
- error:错误异常是系统级别的问题,比如说JVM内存溢出,JVM系统错误等。
- exception:异常通常是程序在运行期间,或者编译期由编译器抛出的一些,可以被程序员处理的代码上的问题。
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- throws:(获取异常)用于方法的声明中,抛出有可能出现的异常
- throw:(抛出异常)用于语句块中,抛出指定类型的异常对象,- throw一旦执行,则一定会出现该类型异常。
- try:是将会发生异常的语句括起来,从而进行异常的处理
- Catch:是如果有异常就会执行它里面的语句
- Finally:不论是否有异常都会执行语句
二、常用类
Objects类
- Objects类是一个工具类
- Objects对外不提供构造器,因此无法创建对象
- Objects类中的所有方法都是static
- 提供的是对于对象的空指针安全操作的方法
User u1 = new User(1, "softeem", "123456");
User u2 = null;
//空指针安全的对象比较
System.out.println(Objects.equals(u1, u2));
//空指针安全的toString
System.out.println(Objects.toString(u2)); // 对象若为null则输出“null”字符串
System.out.println(Objects.toString(u2,"0")); //对象若为null则输出“0”
//空指针安全的hashCode
System.out.println(Objects.hashCode(u2));
//为空判断
System.out.println(Objects.isNull(u2));
//不为空判断
System.out.println(Objects.nonNull(u2));
//检查对象不为空,若为空则抛出NullPointerException
System.out.println(Objects.requireNonNull(u2));
Random类
构造器:
- Random()
常见方法:
- nextBoolean():随机一个布尔值
- nextDouble():随机一个0.0~1.0之间的double值
- nextInt():随机一个int范围内的整数值
- nextInt(int bounds):随机一个从0~bounds-1位的整数值
public class RandomDemo {
private static final class RandomGeneratorHolder{
static final Random randomNumberGenerator = new Random();
}
private static final String SOURCE = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
//随机指定长度位验证码
public static String genCode(int count) {
String code = "";
for(int i = 0;i < count;i++) {
int index = RandomGeneratorHolder.randomNumberGenerator.nextInt(SOURCE.length());
code += SOURCE.charAt(index);
}
return code;
}
public static void main(String[] args) {
Random r = new