java中异常处理

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 19:37   541   0

1)使用tey_cath_finally处理异常?

判断输入的是否为整数:扫描仪对象 . hasNextInt()

1-1)异常机制:

异常是一种特殊的对象,类为java.lang.Exception或其子类

异常处理快捷键:Alt+Shift+Z,选择try/catch Block

Exception 变量名 AS ex:最高级异常处理,

ex . getMessage()获得异常信息*****ex . printStackTrace()获得异常的内存堆栈信息及错误的位置

1-2)什么是异常:

异常是指在程序中的运行过程中所发生的不正常的事件,它会中断正在运行的程序

1-3)什么是异常处理:

java编程语言使用异常处理机制为程序提供了错误处理的能力

1-4)java中如何进行异常处理?

Java的异常处理是通过5个关键字来实现的:

try : 执行可能产生异常的代码

catch : 捕获异常

finally : 无论是否发生异常,代码都会执行

throws :声明方法可能要抛出的各种异常

throw:手动抛出异常

try{

//可能发生异常的语句

}catch{

//捕获异常

}finally{

//都会执行

}

注意:当程序遇到System.exit(1)的时候不走finally

如果发生异常,但并没有捕获到异常,则终止程序,剩余代码将不执行


2)存在return的try-catch-finally块:

存在以下几种情况:

第一种存在return方式:

package Text;
public class Return {
 public static void main(String[] args) {
  Text();
 }
 public static void Text()
 {
  int a=2;
  try
  {
   a++;//此处设置断点,第一步执行
   return;//第三步执行
  }
  finally
  {
   ++a;//第二布执行
  }
 }
}

分析:首先 在a++;位置设置了断点,第一步执行a++; 而第二步并没有执行 return;而是先进入了 finally块。执行完毕后

再返回上去 执行return。

finally块以后不能写代码

第二种存在return方式:

package Text;
public class Return {
 public static void main(String[] args) {
  Text();
 }
 public static void Text()
 {
  int a=2;
  try
  {
   a++;//此处设置断点,第一步执行
   return;//第三步执行
  }
  catch(Exception e)
  {
             e.printStackTrace();
  }
  finally
  {
   ++a;//第二布执行
  }
  System.out.println("aa");
 }
}

解析:我们在上述代码中添加了,catch块。执行顺序和上者一致。可以在finally块后写代码,但是不执行。执行

return的时候 结束了方法。

第三中存在return方式:

package Text;
public class Return {
 public static void main(String[] args) {
  Text();
 }
 public static void Text()
 {
  int a=2;
  try
  {
   a++;
   throw new Exception("我是测试");
   
  }
  catch(Exception e)
  {
   System.out.println(e.getMessage());
   return;
  }
  finally
  {
   ++a;//第二布执行
  }
  //System.out.println("aa");
 }
}

解析:我们在try里面手动添加了异常,并把return语句放在了catch块里面。执行顺序也是和上着一致。

先不走return,执行完finally块以后 再返回执行return语句。

此时finally块以后不允许写代码块

第四种存在return方式:

package Text;
public class Return {
 public static void main(String[] args) {
  System.out.println(Text());
 }
 public static int Text()
 {
  int a=2;
  try
  {
   a++;  //1
   throw new Exception("我是测试"); //2
  }
  catch(Exception e)
  {
   System.out.println(e.getMessage());//3
   return a;//4  //6
  }
  finally
  {
   ++a;//5
  }
  //System.out.println("aa");
 }
}
结果:3

解析:我们把Text方法 改成了有返回值的方法。那么现在执行顺序是否改变了那。

执行顺序如下:同样a++;设置断点调式。先执行//1 在执行//3 在执行//4 在执行//5 在执行//6

结论:如果是有返回值的,就会先执行一遍return 并把当前的值返回给方法。在执行++a的时候,a的值受

影响,但是返回值不会受影响。

第五种存在return方式:

package Text;
public class Return {
 public static void main(String[] args) {
  System.out.println(Text());//7
 }
 public static int Text()
 {
  int a=2;
  try
  {
   a++;//1
   throw new Exception("我是测试"); //2
  }
  catch(Exception e)
  {
   System.out.println(e.getMessage());//3
   return a;//4
  }
  finally
  {
   ++a;//第二布执行//5
   return a;//6
  }
  //System.out.println("aa");
 }
}

解析:我们也在finally块中添加了 return语句。那么执行顺序又有什么变化那。

第一步执行//1 第二步//2 第三步进入catch块执行//3 第四步//4

第五步进入finally块执行//5 第六步//6 第七步main方法//7

显然走完finally快后,并没有再去执行 catch块中的return语句。就直接结束了当前方法。

finally块中的return会影响 cathc块中return返回的值。

注意:一般finally块中不会写return语句


多种catch块:


常见的异常类型:



日常日志:

throws,声明异常,抛给调用者处理,调用者必须进行try..catch

位置:方法名后面进行声明异常,多个异常使用逗号隔开


调用者必须处理:


调用者不处理,抛给了java的虚拟机处理



手动抛出异常?

使用throw抛出异常

throw new Exception





开源日志记录工具log4j

日志及分类:


使用log4j记录日志步骤:

1.在项目中加入log4j的JAR文件

2.创建log4j.properties文件

3.配置日志信息



4.使用log4j记录日志信息



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP