热门标签 | 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或其他判断的条件上。


推荐阅读
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 编写了几个500行左右代码的程序,但基本上解决问题还是面向过程的思维,如何从问题中抽象出类,形成类的划分和设计,从而用面向对象的思维解决问题?有这方面的入门好书吗?最好是结合几个具体的案例分析的 ... [详细]
  • HTML基础入门指南
    本文将深入浅出地介绍HTML的基础知识,包括其定义、开发工具、制定机构、特性、基本标签及更多实用内容。 ... [详细]
  • 本文探讨了如何像程序员一样思考,强调了将复杂问题分解为更小模块的重要性,并讨论了如何通过妥善管理和复用已有代码来提高编程效率。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文介绍如何在 Visual Studio Code 中使用 Jupyter Notebook 插件,包括创建、编辑和运行笔记本的基本操作。 ... [详细]
  • MySQL Debug 模式的实现与应用
    本文详细介绍了如何启用和使用 MySQL 的调试模式,包括编译选项、环境变量配置以及调试信息的解析。通过实际案例展示了如何利用调试模式解决客户端无法连接服务器的问题。 ... [详细]
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社区 版权所有