一、try-cathc-finally 异常处理
1、
1 package com.test1; 2 3 import java.util.Scanner; 4 5 public class Test1 { 6 7 public static void main(String[] args) { 8 Scanner input=new Scanner(System.in); 9 System.out.print("请输入被除数:"); 10 int num1=input.nextInt(); 11 System.out.print("请输入除数:"); 12 int num2=input.nextInt(); 13 14 if(num1!=0 && num2!=0){ 15 System.out.println(num1+"/"+num2+"="+num1/num2); 16 17 }else{ 18 System.out.println("分子分母不能为0"); 19 } 20 21 22 23 24 25 } 26 27 }
2、try-catch-finally处理异常
1 package com.test1; 2 3 import java.util.InputMismatchException; 4 import java.util.Scanner; 5 6 public class Test2 { 7 8 public static void main(String[] args) { 9 Scanner input = new Scanner(System.in); 10 11 try { 12 System.out.print("请输入被除数:"); 13 int num1 = input.nextInt(); 14 System.out.print("请输入除数:"); 15 int num2 = input.nextInt(); 16 System.out.println(num1 + "/" + num2 + "=" + num1 / num2); 17 18 }catch(InputMismatchException e){ 19 System.out.println("输入不匹配异常"); 20 return; 21 }catch(ArithmeticException e){ 22 System.out.println("分母不能为0"); 23 }catch (Exception e) { 24 System.out.println("其他未知错误!!"); 25 } finally { 26 System.out.println("感谢使用!!"); 27 } 28 29 } 30 31 }
3、throws声明异常
1 package com.test1; 2 3 import java.util.InputMismatchException; 4 import java.util.Scanner; 5 6 public class Test3 { 7 8 public static void main(String[] args) throws InputMismatchException,ArithmeticException,Exception { 9 Scanner input = new Scanner(System.in); 10 System.out.print("请输入被除数:"); 11 int num1 = input.nextInt(); 12 System.out.print("请输入除数:"); 13 int num2 = input.nextInt(); 14 System.out.println(num1 + "/" + num2 + "=" + num1 / num2); 15 16 17 18 } 19 20 }
4、throw自定义异常
1 package com.test1; 2 3 public class Student { 4 private String sname; 5 private int age; 6 private String sex; 7 8 public Student() { 9 } 10 public Student(String sname, int age, String sex) { 11 this.sname = sname; 12 try { 13 this.setAge(age); 14 } catch (Exception e) { 15 e.printStackTrace(); 16 } 17 this.setSex(sex); 18 } 19 public String getSname() { 20 return sname; 21 } 22 public void setSname(String sname) { 23 this.sname = sname; 24 } 25 public int getAge() { 26 return age; 27 } 28 public void setAge(int age) throws Exception { 29 if(age>0 && age<150){ 30 this.age = age; 31 }else{ 32 throw new Exception("年龄只能在0到150之间"); 33 } 34 } 35 public String getSex() { 36 return sex; 37 } 38 public void setSex(String sex) { 39 if(sex.equals("男") || sex.equals("女")){ 40 this.sex = sex; 41 42 }else{ 43 try { 44 throw new Exception("性别必须是男或女!"); 45 } catch (Exception e) { 46 e.printStackTrace(); 47 } 48 49 } 50 51 } 52 53 54 }
1 package com.test1; 2 3 public class Test { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 Student stu=new Student("浩浩", 180, "男"); 10 11 } 12 13 }
二、log4j记录日志笔记
1 log4j日志 2 1、log4j日志记录在控制台和文件代码 3 log4j.rootLogger=debug,stdout,logfile 4 5 ###log4j to Console### 6 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 7 log4j.appender.stdout.Target=System.err 8 log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout 9 10 ###log4j to file### 11 log4j.appender.logfile=org.apache.log4j.FileAppender 12 log4j.appender.logfile.File=jbit.log 13 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 14 log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %F %M %m%n 15 2、解释 16 log4j.rootLogger=输出级别,输出目的地 17 2.1 输出级别 18 debug表示输出级别:fatal<error<warn<info<debug 19 fatal:指出严重的错误事件将会导致应用程序的退出。 20 error:指出虽然发生错误事件,但仍然不影响系统的继续运行。 21 warn:表示会出现潜在错误的情形。 22 info:在粗粒度级别上指明消息,强调应用程序的运行过程。 23 debug:指出细粒度信息事件,对调试应用程序是非常有帮助的。 24 debug:将输出fatal,error,warn,info,debug级别的日志, 25 error:只输出fatal,error级别的日志信息。 26 2.2 输出目的地 27 2.2.1 ConsoleAppender :输出日志事件到控制台。 28 Target属性System.err表示把日志信息写到控制台。 29 SimpleLayout表示简单的格式化日志输出,它输出级别Level,后面跟着一个破折号,最后是日志消息。 30 2.2.2 FileAppender:输出日志事件到文件 31 (1)File属性jbit.log表示把日志输出到jbit.log文件 32 (2)PatternLayout根据指定的转换模式格式化日志输出,需要配置layout.ConversionPattern转换模式,如果不配置,将使用默认的转换模式, 33 (3)ConversionPattern转换模式 34 %d :用来设置输出日志的日期和时间,默认的格式为ISO8601。也可以在其后指定格式,比如%d{yyyy-MM-dd HH:mm:ss},输出格式类似于2010-03-09 17:51:08 35 %m:用来输出代码中指定的消息 36 %n:用来输出一个回车换行符。 37 %l:用来输出日志事件的发生位置,包括类名,发生的线程,以及在代码中的行数。例如,如果输出为cn.jbit.log.Test11.main(Test11.java:21),说明日志事件发生在cn.jbit.log包下的Test11类的main线程中,在代码中的行数第21行. 38 %p:用来输出优先级,即debug,info,warn,error,fatal等 39 %F:用来输出文件名。 40 %M:用来输出方法名 41 1、log4j日志记录在控制台和文件代码 42 log4j.rootLogger=debug,stdout,logfile 43 44 ###log4j to Console### 45 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 46 log4j.appender.stdout.Target=System.err 47 log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout 48 49 ###log4j to file### 50 log4j.appender.logfile=org.apache.log4j.FileAppender 51 log4j.appender.logfile.File=jbit.log 52 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 53 log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %F %M %m%n 54 2、解释 55 log4j.rootLogger=输出级别,输出目的地 56 2.1 输出级别 57 debug表示输出级别:fatal<error<warn<info<debug 58 fatal:指出严重的错误事件将会导致应用程序的退出。 59 error:指出虽然发生错误事件,但仍然不影响系统的继续运行。 60 warn:表示会出现潜在错误的情形。 61 info:在粗粒度级别上指明消息,强调应用程序的运行过程。 62 debug:指出细粒度信息事件,对调试应用程序是非常有帮助的。 63 debug:将输出fatal,error,warn,info,debug级别的日志, 64 error:只输出fatal,error级别的日志信息。 65 2.2 输出目的地 66 2.2.1 ConsoleAppender :输出日志事件到控制台。 67 Target属性System.err表示把日志信息写到控制台。 68 SimpleLayout表示简单的格式化日志输出,它输出级别Level,后面跟着一个破折号,最后是日志消息。 69 2.2.2 FileAppender:输出日志事件到文件 70 (1)File属性jbit.log表示把日志输出到jbit.log文件 71 (2)PatternLayout根据指定的转换模式格式化日志输出,需要配置layout.ConversionPattern转换模式,如果不配置,将使用默认的转换模式, 72 (3)ConversionPattern转换模式 73 %d :用来设置输出日志的日期和时间,默认的格式为ISO8601。也可以在其后指定格式,比如%d{yyyy-MM-dd HH:mm:ss},输出格式类似于2010-03-09 17:51:08 74 %m:用来输出代码中指定的消息 75 %n:用来输出一个回车换行符。 76 %l:用来输出日志事件的发生位置,包括类名,发生的线程,以及在代码中的行数。例如,如果输出为cn.jbit.log.Test11.main(Test11.java:21),说明日志事件发生在cn.jbit.log包下的Test11类的main线程中,在代码中的行数第21行. 77 %p:用来输出优先级,即debug,info,warn,error,fatal等 78 %F:用来输出文件名。 79 %M:用来输出方法名
三、log4j案例
1 log4j.rootLogger=debug,stdout,logfile 2 3 ###log4j to Console### 4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 log4j.appender.stdout.Target=System.err 6 log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout 7 8 ###log4j to file### 9 log4j.appender.logfile=org.apache.log4j.FileAppender 10 log4j.appender.logfile.File=jbit.log 11 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 12 log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %l %F %M %m%n
1 package com.test; 2 3 import java.util.InputMismatchException; 4 import java.util.Scanner; 5 6 import org.apache.log4j.Logger; 7 8 public class Test { 9 //1.创建日记对象 10 private static Logger logger=Logger.getLogger(Test.class.getName()); 11 12 public static void main(String[] args) { 13 try { 14 Scanner input=new Scanner(System.in); 15 System.out.print("请输入被除数:"); 16 int num1=input.nextInt(); 17 logger.debug("输入被除数:"+num1); 18 19 System.out.print("请输入除数:"); 20 int num2=input.nextInt(); 21 logger.debug("输入除数:"+num2); 22 23 System.out.println(String.format("%d /%d=%d", num1,num2,num1/num2)); 24 logger.debug("运算结果:"+String.format("%d /%d=%d", num1,num2,num1/num2)); 25 }catch(InputMismatchException e){ 26 logger.error("除数和被除数必须是整数!",e); 27 }catch(ArithmeticException e){ 28 logger.error(e.getMessage()); 29 } catch (Exception e) { 30 logger.error(e.getMessage()); 31 }finally{ 32 System.out.println("欢迎使用!!"); 33 } 34 35 36 37 } 38 39 }