廖雪峰-Java教程-Part02
异常处理
在方法定义的时候,使用throws Xxx
表示该方法可能抛出的异常类型。调用方在调用的时候,必须强制捕获这些异常,否则编译器会报错。
static byte[] toGBK(String s) {try {// 用指定编码转换String为byte[]:return s.getBytes("GBK");} catch (UnsupportedEncodingException e) {// 如果系统不支持GBK编码,会捕获到UnsupportedEncodingException:System.out.println(e); // 打印异常信息return s.getBytes(); // 尝试使用默认编码}}
也可以不捕获它,而是在方法定义处用throws表示toGBK()
方法可能会抛出UnsupportedEncodingException
,就可以让toGBK()
方法通过编译器检查(在使用toGBK方法时,仍然需要捕获异常,或者使用throws或者try-catch)
static byte[] toGBK(String s) throws UnsupportedEncodingException {return s.getBytes("GBK");}
如果不想写try-catch,可以在main方法中使用throws
finally字句不论是否有异常都会执行
反射
- 每加载一个class,jvm就会为class创建一个Class实例,包括,类名、父类、接口等,可以通过Class实例获取对应clas所有信息(反射:通过Class实例获取class的方法)
- Class实例可以用==判断是否相等,与instanceof不同的是,后者对于子类与父类判断结果也为true,Class实例判断则为false
- jvm中基本数据类型也有对应的Class实例
动态代理
JDK提供的动态创建接口对象的方法,不需要实现类
静态代码:定义接口,类实现接口后创建类的实例,将实例转型为接口然后调用
泛型
编写模板代码来适应各种类型