文章目录
异常
定义:指非正常情况的错误【异常体系的最终父类是object】
函数内部的问题:
- 函数自身内部解决: return 正常结果
- 函数将问题反馈给调用者:throw 异常对象
a. error 是系统级别的异常,产生的原因有:系统崩溃,虚拟机错误,内存溢出等
b. 编译时异常:编译器强制要求我们处理的异常,通常有:IOException、SQLExption。
不处理无法通过编译,处理的方法有Try{} catch(){} 、throws
c. 运行时异常:程序在运行中产生的异常,常见的异常有:Try{} catch(){}
Throwable 异常
throwable :是所有错误和异常的父类
error :【错误】 程序员无法通过代码解决的问题
Exception :【异常】 是程序员可以通过代码解决的问题
异常的分类特点
运行时异常(RunTimeException):非检查异常,代码在运行过程中,可以处理也可以不处理的异常
名称 | 对应提示 |
---|---|
数组角标越界 | ArrayIndexOutofBoundsException |
空指针异常 | NullPointerException |
栈溢出异常 | StackOverFlowError |
堆溢出异常 | OutofHeapError |
类型转化异常 | ClassCastException |
数字异常 | ArithmeticException |
数据转换异常 | NUmberFormatException |
非运行时异常(非RunTimeException):检查异常,是Java中较为常见的异常,我们需要对其进行处理的异常(对安全的一些隐患进行预)
抛出异常:JVM抛throw抛
一、JVM对异常的处理:
概述:当JVM发现有异常产生,就会寻找catch里的遗产 ,匹配了就调用catch里面的代码进行处理
注意:
- try内部的代码越少越好
- try内部不进行任何处理
- catch里面的异常对象越明确越好,级别越低越好
- 使用第三种格式时,多个异常间必须是并列关系
- catch中只能处理,不能有输出语句
补充try{}与catch{}【用户自己处理出现的异常】
**语句格式1:**
try{
里面的代码有可能会有问题
}catch{
如果有问题,开始处理
}
例如:
try {
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
语句格式2:
try {
可能出现问题的代码 ;
}catch(异常名1 变量名1){
对异常的处理方式 ;
}catch (异常名2 变量名2){
对异常的处理方式 ;
}
注意:异常对象 n >= 异常对象2 级别 >= 异常对象1
try {
//System.out.println(1/0);
int[] arr = {1,2,3};
System.out.println(arr[100]);
}catch(ArithmeticException e) {
System.out.println("除数不能为零");
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界");
}
语句格式3: 在jdk7后,可以并列处理
try{
肯有问题的代码
}catch(异常对象 1 | 异常对象 2 | 异常对象 n 变量名1){
处理问题的代码
}
try {
System.out.println(1/0);
int[] arr = {1,2,3};
System.out.println(arr[100]);
}catch(ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("除数不能为零");
}
二、throws:
让别人处理,在代码中表现为,谁调用谁处理,可以逐级向上抛
throws后面跟异常的类名,可以多个异类名,用逗号隔开
public static void main(String[] args) throws ClassNotFoundException {
Class.forName(“com.mysql.jdbc.Driver”);
}
public static void main(String[] args) throws ArithmeticException,ArrayIndexOutOfBoundsException {
System.out.println(1/0);
int[] arr = {1,2,3};
System.out.println(arr[100]);
}
throw和throws的区别:
概述:
throws:使用时在方法上将异常抛给调用者,谁调用谁处理
throw:在功能方法内部出现某种异常,程序不能继续运行,需要跳转时把异常对象抛出
区别:
- throws用在方法声明后面,跟的是异常类名;throw用在方法体内,跟的是异常对象名
- throws可以跟多个异常类名,用逗号隔开;throw只能抛出一个异常对象名
- throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,一旦执行则表示一定抛出了某种异常
编译时异常和运行时异常的区别:
所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常
编译时异常: Java程序必须显示处理,否则程序就会发成错误,无法通过编译
运行时异常: 无需显示处理,也可以和编译时异常一样处理
异常的应用:
题目:创建一个文件,先判断一下 这个file是否存在,那么如果不存在的话 创建一个新的文件,如果存在的话我们打印一下文件的字节
public static void main(String[] args) {
try {
File a = new File("C://xin/one.java");
if (!a.exists()) {
// 获取其父类路径,构建相应的文件
File file1 = a.getParentFile();
// 创建文件,mkdirs()是创建多个文件夹
file1.mkdir();
// 构建相应的文件
a.createNewFile();
} else {
System.out.println(a.length());
}
} catch (IOException e) {
e.printStackTrace();
}
}
常用类
路径:绝对路径,相对路径
绝对路径: 文件的全路径(从盘符一直到文件的路径 c://abc/html/1.html)
相对路径: 通常情况下是指一个文件,相对寻找另一个文件的路径描述(1.html)
eg:
C://abc/html/1.html
C://abc/image/1.png
相对路径应该如何去描述:…/imgae/1.png
…/表示上一级路径
…/…/表示上上层路径
关于FILE类的用法
File Java.io.file中
前缀:
在File中有个前缀,通常用于表示路径之间的关系符号“/”
在Linux系统中使用“/”
Windows 系统中使用“\”第一个\表示的是转移字符
File中的字段:
separator 表示“\”,通常使用这个属性来连接数据
构造方法:
String为类型的(常用) File(String)
两个String类型的 File(String )
函数 | 用途 |
---|---|
file.getPath(); | 返回文件的相对路径名称 |
file1.compareTo(file2); | 两个文件之间的比较,按照字典数据比较路径(返回数字) |
file.delete(); | 删除文件 |
file1.equals(file2); | 比较两个file是否相同 |
file.exists(); | 判断该文件是否存在 |
file.getAbsolutePath(); | 返回绝对路径,返回file类型 |
file.getName(); | 返回文件名 |
file.getParent(); | 返回父路径 |
file.isAbsolute(); | 判断file是否是一个绝对路径 |
file.renameTo(); | 重命名 |
file.ifHidden(); | 判断文件是否是隐藏文件 |
//输出file的字节码长度
System.out.println(file.length());
//获取file的相对路径名称
System.out.println(file.getPath());
//按照字段顺序比较路径
System.out.println(file.compareTo(file1));
//删除文件
// boolean bRet = file.delete();
// System.out.println(bRet);
// 比较两个file是否相同
System.out.println(file.equals(file1));
//返回绝对路径getAbsolutePath 返回String类型 getAbsoluteFile 返回file类型
System.out.println(file.getAbsolutePath());
//返回文件名称
System.out.println(file.getName());
//返回父路径
System.out.println(file.getParent());
//判断file是否是一个绝对路径
System.out.println(file.isAbsolute());
//判断file是否是一个目录
System.out.println(file.isDirectory());
//判断file是否是一个文件
System.out.println(file.isFile());
//判断文件是否是一个隐藏文件
System.out.println(file.isHidden());
MATH类:包含基本的数字操作
表示Java的数学相关用法,该类被修改
函数 | 用途 |
---|---|
abs(number); | 方法表示绝对值 |
cbrt(number); | 表示立方根 |
sqrt(number); | 表示平方根 |
toDegrees(double angel); | 弧度转角度 |
toRadians(double angel); | 角度转弧度 |
static关键字:
- 用static声明的成员变量-静态成员变量 类名调用
- 生命周期和类相同 被类的所有实例共享
- 在类载入时被初始化
- static成员变量只有一份
- 静态变量不能访问非静态成员,非静态成员可以访问静态成员
RANDOM伪随机数
包名:Java.util
构造方法:2个(无参有参)
int index = rand.nextInt(result.length);
System.out.println(result[index]);
DATE时间类型
包名:Java.util.Date 表示时间(表示特定的时间,精确到毫秒)
创建Date表示当前时间
Tue Feb 11 15:54:17 CST 2020
星期 月份 日期 时间 市区 年份
date.getTime(); 获取的毫秒数
直接创建对象表示获取系统的时间
一半用getTime记录时间的毫秒数,通过创建Date对象传递毫秒数来记录具体的时间
CALENDAR日期类型
calendar是一个抽象类
抽象类特点:
必须要有实现子类 因为不是直接实例化
抽象类不一定有抽象方法,有抽象方法一定有抽象类
注意:Date和Calendar以及String之间的时间转化问题
//获取当前系统的时间
Calendar c = Calendar.getInstance();
System.out.println(c);
SIMPLEDATEFORMAT
Date和Calendar 格式化和分析日期的具体类
Calendar c = Calendar.getInstance();
System.out.println( c );
Date date = c.getTime();
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat();
//把date类型转换成String
String dateResult = sdf.format(date);
System.out.println(dateResult);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(sdf1.format(date));
常见格式:
yy-MM-dd hh:mm:ss a(AM/PM) E(星期)