异常类
异常类概念
- 指的是程序在执行过程中,出现非正常的情况,最终导致jvm的非正常停止。异常的本身就是java当中对可能出现的问题进行描述的一种对象体现。产生异常就是创建异常对象并抛出一个异常对象,java的处理方式是中断处理。
注:异常指的并不是语法错误。
异常体系
异常的根类是java.lang.Throwable,其下两个子类:java.lang.Error与java.lang.Exception。
Throwable体系:
- Error 严重错误Error,无法通过处理的错误,只能实现避免。
- Exception表示异常,由于使用不当,可以避免
程序中可能碰到异常
两数相除,除数是零(ArthmeticException)
空指针(NulPointException)
指针下的数组越界(ArraylndexOutOfBoundsException)
类型转换异常(ClassCastException)
..........
异常处理
java异常处理的五个关键字:try catch fanally throw throws
抛出异常throw
作用:可以用throw关键字在指定的方法中抛出指定的常数
使用格式:
throw new ...Exception("产生异常的原因“)
Objects非空判断:
objects类中的静态方法:public static <T>T requireNonNull( T obj);查看只针对对象是不是null
源码:
public static <T>T requireNonNull( T obj){
if(obj==null)
throw new NullPointerException();
return obj;
}
声明异常throws
throws关键字
作用:当方法内部出现异常对象时,使用会把异常对象声明抛出方法的调用者处理最终交给jvm处理 ----中断处理
使用格式:
在方法声明时使用
修饰符 返回值类型 方法名(参数列表)throws{
throws new AAAException("产生原因");
..........
}
捕获异常try...catch
Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理
格式:
try{
可能产生异常的代码
}catch(定义一个异常对象接收try抛出的异常对象){
}
...............
catch(异常类名 变量名){
}
Fanally代码块
try{
可能产生异常的代码
}catch(定义一个异常对象接收try抛出的异常对象){
}
...............
catch(异常类名 变量名){
}finally{
无论是否出现异常都会执行
}
自定义异常
格式:
public class xxxException extends Exception | RuntimeExcption{
添加一个空参数的构造方法
添加一个异常信息的构造方法
}
常用类
1String类
String类、StringBuilder类、StringBuffer类是三个字符串相关类。String类的对象代表不可变的字符序列,StringBuilder类和StringBuffer类代表可变字符序列
2包装类
包装类(Wrapper Class),8种基本数据类型分别对应一个包装类,包装类均位于java.lang包
-
Byte
-
Short
-
Integer
-
Long
-
Float
-
Double
-
Character
-
Boolean
3StringBuffer和StringBuilder类
StringBuffer和StringBuilder类非常相似,均代表可变的字符序列,两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样
两个类的区别主要是:
- StringBuffer JDK1.0提供的类,线程安全,做线程同步检查,效率较低
- StringBuilder JDK1.5提供的类,线程不安全,不做线程同步检查,因此效率较高,建议使用
4Date类和DateFormat类、
data
Date():无参数时创建当前时间,传入long类型参数时创建一个从1970年1月1日00:00:00到参数毫秒后的时间,该时间以后统称原点时间
getTime():获取当前时间距离原点时间的毫秒数
setTime():设置时间,参数为long类型,可以将时间设置为距原点时间参数毫秒后的时间
Dataform
-
SimpleDateFormat():无参时创建一个使用默认的格式的对象,传入“yyyy-MM-dd HH:mm:ss”这种规定格式时创建一个规定格式的对象
-
format():传入一个date类型的参数,然后返回一个一个转换后的字符串
5Calendar 该类为抽象类,没有构造方法
6 MAth类
1.常用方法
注:由于Math类不能实例化,所以一般直接使用Math.方法名即可
abs():返回绝对值
addExact():返回参数的和
max():返回较大的值
min():返回较小值
multiplyExact():返回参数的乘积
subtraExact():返回参数的差
sqrt():返回参数的正确舍入的正平方根
7
Random类
1.常用方法
Random():生成一个对象
nextInt():生成一个随机数,如果有参数则生成一个在0~参数之间的随机数
nextBoolean():生成一个随机的布尔值(true或false)
nextDouble():生成一个在0~1之间的小数
nextFloat():生成一个在0~1之间的小数
nextLong():生成一个随机的long型数
容器
概念:在Java当中,有一个类专门用来存放其它类的对象,这个类就叫做容器,它就是将若干性质相同或相近的类对象组合在一起而形成的一个整体 。
从图上可以看到,Java容器分为两大阵营:Collection和Map
Collection:主要是单个元素的集合,由List、Queue、Set三个接口区分不同的集合特征,然后由下面的具体的类来实现对应的功能。
Map:有一组键值对的存储形式来保存,可以用键对象来查找值。
下面我们从Collection的三个接口开始,介绍每一个实现类之间的特色,让大家在处理不同的数据时选择合适的容器。
Queue
Set
Map
泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
泛型类
泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。
类型通配符
1、类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是 List<String>,List<Integer> 等所有 List<具体类型实参> 的父类。
2、类型通配符上限通过形如List来定义,如此定义就是通配符泛型值接受Number及其下层子类类型。
3、类型通配符下限通过形如 List<? super Number> 来定义,表示类型只能接受 Number 及其上层父类类型,如 Object 类型的实例。