热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

java异常之实战篇(trows和trycatchDeadCode)

一:throws 和 trycatch 区别(1)例如,publicFileWriter(StringfileName)throwsIOException{}我在mian中创建一个FileWrite对象importjava.io.*;publicclassShengmingThro
一: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引起的原因

经常使用MyEclipseEclipse编辑器编写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或其他判断的条件上。


推荐阅读
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • 本文介绍了常用的编辑器快捷键,包括快速转换编辑器、浏览选项卡、提取本地变量和方法、编辑器窗口最大化等功能。通过使用这些快捷键,可以提高编辑器的使用效率,减少复杂度,并提升代码的可测试性。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • wordpress的内页悬浮选项卡功能预览及使用方法介绍
    本文介绍了wordpress的内页悬浮选项卡功能,包括功能预览和使用方法。用户可以自定义切换按钮,设置锚点信息区域,灵活多变且无需代码编辑。文章可以统一设置按钮,也可以独立设置单篇文章的按钮,滚动模式下按钮以滑动形式展示,具有条理性和锚点属性,有利于SEO。滚动效果增加了网站的互动性,让用户参与互动,同时完全兼容手机,使信息展示更清晰。 ... [详细]
  • 本文介绍了在Linux中执行.sh脚本时出现/bin/sh^M: bad interpreter: No such file or directory异常的原因分析,并提供了两种解决方法:在Windows下进行编码格式转换,或在Linux中修改文件格式和执行权限。具体操作步骤也在摘要中给出。 ... [详细]
author-avatar
Defect___219
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有