包装类
概念:将八大基本数据类型 转为 对应的引用数据类型
基本数据类型 使用起来 效率高 但是没有对象 没有方法可用
byte———Byte
short——-Short
int———-Integer
long———Long
double——Double
float——-Float
boolean—-Boolean
char———Character
装箱:把一个数据从基本数据类型 转成对应的引用数据类型 获取其对象
拆箱:从包装类对象 转换为对应的基本类型
手动装箱:
int num = 50;
Integer i2 = Integer.valueOf(num);//手动装箱
Integer i1 = num; //自动装箱 jdk1.5后
int num2 = (int)i2; //手动拆箱
int num3 = i1; //自动拆箱 jdk1.5后
Date对象 = SimpleDateFormat对象.parse(String) //需要抛异常
String s = “123”;
// Integer parseInt = Integer.parseInt(s);
int num4 = Integer.parseInt(s); //边转边拆箱
都是将String转为基本数据类型的方法
byte b = Byte.parseByte(String);
short s = Short.parseShort(String);
int i = Integer.parseInt(String);
long l = Long.parseLong(String);
float f = Float.parseFloat(String);
double d = Double.parseDouble(String);
boolean bool = Boolean.parseBoolean(String);
参数赋值为true 则返回真 其他任何字符串都返回false
char c = n.charAt(int);
异常类
概念:指程序在运行过程中出现的非正常情况 导致虚拟机非正常停止
Throwable异常最高级父类 有两个子类 Error Exception
Error:错误 指的是非常严重的错误 抛异常不能处理 NoClassDeFoundError
Exception 编译期异常 运行时异常 ClassNotFoundException
Exception类
编译期异常(检查时异常):属于必须要处理的异常 不处理编码不通过 不能执行
运行时异常RuntimeException:可处理可不处理的异常 即使代码将会错误 编译依然正常通过 在运行过程中判断错误
这两种异常都可采用两种方案处理
处理方案二:
throws
是发生编译期异常时 编码人员认定抛异常概率很低 选择此种方案 代码更整洁
特点:使用throws放置在方法名参数列表的后面 可以跟多个异常类 只放异常类名 用,隔开 没有先后顺序 不能单独设置某个异常的提示内容 都是展示系统标准的e.printStackTrace();
1.父类通过throws抛出了异常 则子类重写这个方法时
子类可以不抛异常
如果子类也要抛异常 则只能抛小于等于父类的异常
2.如果子类必须抛一个编译期异常 要么去父类中抛相同或者更大的异常 要么子类中使用try catch
处理方案一:
try{
怀疑会报错的代码
}catch(异常类的对象 e){
e.printStackTrace(); 打印栈信息
System.out.println(e.getMessage()); 错误代码
System.out.println(e.toString()); 异常类名+代码
当异常匹配成功后执行的代码
}catch(下一个异常类对象 e){
}
。。。
catch(Exception e){
放在最后一个 所有异常都能匹配进来的父类异常模块
}finally{
//无论代码正确与否都要执行的代码 放在此处
}
当try模块中有多个错误时 会拿取第一个异常 去匹配下面的catch模块 匹配成功则执行
不再匹配其他catch模块 执行完后执行finally模块
因此也要求如果放置Exception异常模块 要做最后一个catch模块使用
自定义异常类
自定义编译异常类 继承:Exception
自定义运行时异常 继承:RuntimeException
//定义一个类 继承自Exception 这个类就是一个编译异常类
public class LoginException extends Exception {
一般提供一个带String类型参数的构造方法 将创建异常对象时的提示信息传入并保存
public LoginException(String image) {
super(image);
}
}
测试类中 在希望抛出异常的情况下编写 通过关键字throw
throw 只管抛不管处理
throw new LoginException(“登陆失败”);
如果是编译异常类 一定要通过throws或者try..catch去处理 否则报错
如果是运行时异常类 可处理(通过throws或者try..catch去处理) 可不处理
总结
try..catch
处理异常的两种方案之一 在方法内部使用 可以自定义错误提示
catch模块有循序性 catch模块使用异常类的对象
throws
处理异常的两种方案之一 在方法参数列表的后面 后面抛异常类的名称
可抛多个 没有顺序性
throw
只负责抛出某个异常 不管处理 放在方法中某种情况之下 后面跟要抛的异常类的对象
如果抛编译异常 依然要通过以上两种方案之一去处理 如果运行时异常 则可处理可不处理
练习:
自定义编译异常 LoginException 他有一个子类异常ChildLoginException
自定义类型父类User 有一个抽象方法login()
子类Student实现父类方法 并完成登陆功能 功能使用子类异常提示用户 登录名只能是张三 否则抛异常