java 异常 之 实战篇(trows 和 try catch Dead Code)

一:throws 和 trycatch 区别

(1)例如,publicFileWriter(String fileName) throws IOException{}

我在mian中创建一个FileWrite对象

importjava.io.*;

publicclass ShengmingThrows {

public static void main(String[] args){

try{

FileWriter fw=new FileWriter("k.txt");

} catch(FileNotFoundException ex){}

}

}

(2) 另一种处理方法:

importjava.io.*;

publicclass ShengmingThrows {

public static void main(String[] args)throws IOException{

//try{

FileWriter fw=new FileWriter("k.txt");

// }

// catch(IOException e){}

}

}

请解释一下两种操作的不同之处,throws只是声明异常,异常并没有处理throws只是对该类声明会抛出一个异常,但没有对异常进行捕获,让别的调用它的方法进行处理,

或者继续抛出,抛给上一层函数或类的成员函数。。try catch是对可能出现异常的代码捕获异常并对其进行处理

throws只是声明异常,异常并没有处理

当然,try和catch也不是非要处理啊。

像代码,

try{

FileWriter fw=new FileWriter("k.txt");

}

catch(IOException e){}   //catch里也是空的,它也没有处理啊

二:抛出什么异常,如捕获多个异常

(1)完整代码如下

File file = new File("d:\\a.txt");// 这个不是read的不会抛异常的,只有,有可能抛出相应的异常,才写catch的,否则多余的catch eclipse也会报错的
BufferedReader bf = new BufferedReader(new FileReader(file));//有可能抛异常
catch(ParseException ex){// Date d1 = df.parse(tmp_date + t1);是由于parse函数抛出的异常,所以编程中可以根据函数的提示来书写异常
			ex.printStackTrace();
			System.out.println("数据解析异常:" + ex);
			// log.warn("****" + ex);
		}
	public static void main(String[] args){
		DateFormat df = new SimpleDateFormat("yy-MM-dd HH:mm:ss");

		String t1 = "07:30:45";
		String t2 = "08:32:46";
		String tmp_date = "2014-04-01 ";
		try{
			File file = new File("d:\\a.txt");// 这个不是read的不会抛异常的,只有,有可能抛出相应的异常,才写catch的,否则多余的catch eclipse也会报错的
			BufferedReader bf = new BufferedReader(new FileReader(file));
			Date d1 = df.parse(tmp_date + t1);
			Date d2 = df.parse(tmp_date + t2);
			//System.out.println("******" + d1.compareTo(d2));
			System.out.println(d1.getTime());
			System.out.println(d2.getTime());
			long diff = d2.getTime()-d1.getTime();
			long hour = diff/(1000*60*60);
			diff = diff%(1000*60*60);
			long minute = diff/(1000*60);
			diff = diff%(1000*60);
			long second = diff/1000;

			System.out.println("hour=" + hour + ", minute=" + minute + ", second=" + second);//2685000

		}catch(ParseException ex){// Date d1 = df.parse(tmp_date + t1)是由于parse函数抛出的异常,所以编程中可以根据函数的提示来书写异常
			ex.printStackTrace();
			System.out.println("数据解析异常:" + ex);
			// log.warn("****" + ex);
		}catch(NullPointerException ex){
			ex.printStackTrace();
			System.out.println("空指针异常:" + ex);
			// log.warn("****" + ex);
		}catch(IndexOutOfBoundsException ex){
			ex.printStackTrace();
			System.out.println("数组越界异常:" + ex);
			// log.warn("****" + ex);
		}catch(RuntimeException ex){
			ex.printStackTrace();
			System.out.println("运行时异常,NullPointerException IndexOutOfBoundsException 都是其子类" + ex);
			// log.warn("****" + ex);
		}
		catch(FileNotFoundException ex){
			ex.printStackTrace();
			System.out.println("文件找不到异常:" + ex);
			// log.warn("****" + ex);
		}catch(IOException ex){
			ex.printStackTrace();
			System.out.println("IO读取异常,是FileNotFoundException的父类" + ex);
			// log.warn("****" + ex);
		}catch(Exception ex){
			ex.printStackTrace();
			System.out.println("异常,上面各种异常的父类" + ex);
			// log.warn("****" + ex);
		}
	}

}

(2)总之,因为Exception这个是那几个异常的 父类或者基类!那几个异常都是他的子类,Exception放在最前面后面就没有机会了,其把所有的异常都捕获了。

三:初遇Dead Code

(1) Dead Code引起的原因

经常使用MyEclipse或Eclipse编辑器编写java代码的程序员,可能经常遇到一个黄线警告提示:dead
code;一般程序员遇到这些问题都会置之不理,反正也不影响程序的

编译执行。对,这不是bug,只是一个提示,对于一个有强迫症的程序员来说,他非要代码一点问题都没有,包括黄线警告都要消灭掉,这里简单说下dead
code 即死代

码、无作用的代码提示的原因和解决方法。

顾名思义,死代码,即你编写的那一行是无效代码,可有可无,说白了就是一行废话;这是你就要看一下这一行的处理逻辑是什么,可能是多余判断或者其他多余代码;比

如如下情况:

(2)情况一:没用的条件判断,就是你判断的这个条件永远为真

if (true& true) {

System.out.println("execute ok");

} else {

System.out.println("executefail");

}

从else开始即为无作用。因为true&true在编绎时即知结果,所以else部分是无用的,编译器知道肯定不会执行的代码。

换成:

boolean a =true;

boolean b = true;

if (a & b) {

System.out.println("execute ok");

} else {

System.out.println("executefail");

}

则不会出现该问题,因为在编译时编译器不确定a & b是否恒成立。

(2)情况二:多余的判断,就是你判断的这个对象永远不为空;其实类似于情况一

TimeLineEventModel dataModel = new TimeLineEventModel();

if(dataModel !=null){

执行一些操作....

}

这里的判断也是多余,因为你已经new了这个对象,那这个对象就不会为空,你刚刚new的对象,怎么会为空呢?

未完待续,可能还有其他一些情况的死代码,等到时候编码遇见了再进行补充吧!目前来看,deadcode提示一般出现在if或其他判断的条件上。

时间: 2024-11-03 21:46:14

java 异常 之 实战篇(trows 和 try catch Dead Code)的相关文章

java异常——五个关键字(try、catch、finally、throw、throws)

一.try.catch.finally常用组合 try{ xxx }catch(xxxException e){ e.printStackTrace(); } try{ xxx }catch(xxxException e){ e.printStackTrace(); }finally{ System.out.println("无论会不会抛异常,我就是会输出Σ(っ°Д°;)っ"); } try{ xxx }catch(AException e){ e.printStackTrace();

Java 基础:认识&理解关键字 native 实战篇

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码中的一个hashCode方法: 1 public native int hashCode(); 为什么有个navicat呢?这是我所要学习的地方.所以今天泥瓦匠想要总结下navicat. 一.认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这

[Java 05 OO] (基础篇) 《Java开发实战经典》

p5OO 第五章 面向对象 (基础篇) Notes (1), Constructor / this / String   String str1 = "hello"; 解释 : 是把一个在堆内存空间的使用权给了 str1 对象.   String str2 = "hello"; str1 == str2 是 true   String 字符串的内容不可改变 (2), Java 常用的内存区域    1), 栈内存空间    2), 堆内存空间    3), 全局数据

“全栈2019”22篇Java异常学习资料及总结

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"22篇Java异常学习资料及总结 下一章 "全栈2019"Java多线程第一章:认识多线程 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全

一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发

六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4 Statement stat = conn.createStatement(); 5 ResultSet rs = stat.executeQuery( 6 "select uid,

一篇不错的讲解Java异常的文章(转载)

http://www.blogjava.net/freeman1984/archive/2007/09/27/148850.html 六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4 Statement stat = conn.cre

java异常面试常见题目

在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它成为面试题中的常客.关于Java中Error和Exception的面试题目多是关于Exception和Error的概念,如何处理Exception,以及 处理Exception时需要遵守的最佳实践等等.尽管关于多线程.垃圾回收.JVM概念和面向对象设计等方面的问题依然主宰着这类面试,你仍然需要为回答

javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本篇章建议先阅读上一篇  -->javamail模拟邮箱功能获取邮件内容-中级实战篇[内容|附件下载方法](javamail API电子邮件实例) 在上一篇中,讲解了邮件获取内容的两个方法(HTML和附件),简单介绍了邮件发送和内容获取的相同和不同之处,并且引入了新类-->javax.mail.St

彻底征服 Spring AOP 之 实战篇

接上一小节彻底征服 Spring AOP 之 理论篇 Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体的例子吧.下面的几个例子是我在工作中所遇见的比较常用的 Spring AOP 的使用场景, 我精简了很多有干扰我们学习的注意力的细枝末节, 以力求整个例子的简洁性. 下面几个 Demo 的源码都可以在我的 Github 上下载到. HTTP 接口