目录
- java异常分析
- java内部类之间的闭包和回调
java异常分析
java异常指的是:程序运行期出现的错误
java异常的概念:
- java异常是java提供的用于处理程序中错误的一种机制
- java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给java运行时系统,这个过程称为抛出(throws/throw)异常
- 当java运行时系统接收到异常对象时,会寻找能处理这一异常代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常
finally代码块:
不管try、catch里面的代码有无return,finally都会执行
如果try、catch里有return,finally也有return,最后以finally为准
finally不会执行的情况:
在finally之前有程序退出代码:System.exit(0);
注意:子类抛出的异常只能是父类异常的子集(不能比父类多与大)
第一种方式:自己捕获
try{
代码...
}catch(Exception e){
处理代码...
}finally{
一定执行代码...
}
第二种形式:自己在方法中抛(不必处理)
throw new 异常类(String s);
第三种,重点:自定义异常
代码解释
int age;
if(age<0){
throw new RuntimeException("年龄无效");
//RuntimeException类在java.lang包下
}
完整代码
public class myTest {
public static void main(String[] args) throws agemistakes {
int age=-1;
if(age<0){
throw new agemistakes("年龄无效");
}
}
}
class agemistakes extends Exception{
public agemistakes(String s){
super(s);
}
}
自定义异常方法展示代码:
public class myTest {
static myTest m;
public static void main(String[] args) {
sql();
}
public static void sql(){
try {
forName("com.mysql.cj.jdbc.Drivers");
}catch (sqlClassException Class){
Class.printStackTrace();
}try {
String url = "jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "1988";
con(url, user, password);
}
catch (sqlConException con){
con.printStackTrace();
}
finally {
close();
System.out.println();
System.out.println("本实验说明:模拟JDBC连接数据库异常,前两个为自定义的连接相关异常,最后一个自动为抛出异常");
System.out.println(m.getClass().getName());
}
}
public static void forName(String className) throws sqlClassException {
if(!className.equals("com.mysql.cj.jdbc.Driver")){
throw new sqlClassException("驱动加载失败,请检查驱动类名");
}
}
public static void con(String url,String user,String password) throws sqlConException {
if(!url.equals("jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC\";")
||!user.equals("root")||!password.equals("198810")){
throw new sqlConException("信息匹配错误,请检查信息填写");
}
}
public static void close(){
System.out.println("资源已成功关闭");
}
}
class sqlClassException extends Exception{
public sqlClassException(String msg){
super(msg);
}
}
class sqlConException extends Exception{
public sqlConException(String msg){
super(msg);
}
}
运行结果:
java内部类之间的闭包和回调
返回目录
笔记分析来源于网络
前言:
闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。
通过这个定义,可以看出内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥有一个指向此外围类对象的引用,在此作用域内,内部类有权操作所有的成员,包括private成员
java最引人争议的问题之一就是,人们认为java应该包含某种类似指针的机制,以允许回调(callback)。通过回调,对象能够携带一些信息,这些信息允许它在稍后的某个时刻调用初始的对象。如果回调是通过指针实现的,那么就只能寄希望程序员不会误用该指针。