Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch
今天在做一个将String转换为Integer的功能时,发现Integer.parseInte()会抛出异常NumberFormatException.
函数Integer.parseInt(String)定义
public static int parseInt(String s)
throws NumberFormatException
测试代码:
public class Test
{
public static void main(String[] args)
{
Integer num = Integer.parseInt("ff");
System.out.println(num);
}
}
我们知道,所有的会抛出异常的地方都需要try catch 捕获,或者使用throws继续向上抛出。那么为什么上面的代码会通过编译呢?原来Java里面有Exception和RuntimeException这两个类。RuntimeException是Excetpion的子类。如果一个某一个异常是RuntimeException的子类而不是Exception的直接子类,那么我们可以不用显示的try catch捕获,而是在发生异常的时候抛给JVM捕获。当然我们也可以写上try catch来处理,不交给JVM。如下面的代码:
public class Test
{
public static void main(String[] args)
{
try
{
Integer num = Integer.parseInt("ff");
System.out.println(num);
}catch(Exception e)
{
System.out.println("程序出现了异常!");
}
}
}
关于Java中的异常,还有一些常见问题,现在罗列在下面:
1) Exception类关系
Throwable是所有异常的父类。如常见的:NullPointerException和ClassNotFoundException
2)Error和Exception
Throwable下有两个子类,一个是Exception,另一个是Error。那么Error和Exception有什么区别呢?
Error:是指JVM错误。这个是我们自己写程序中不会遇到的,是JVM运行过程中自己抛出的异常。这个不需要程序员过多的关注。
Exception:所有用户可以处理的异常的父类。也就是说,我们写代码的过程中可能会遇到的所有的异常的父类就是Exception
3)Exception和RuntimeException
这就是本文一开始讨论的话题。Exception是RuntimeException的父类。程序员在写代码的时候,如果遇到抛出的是RuntimeException,则可以根据情况选择是否用try catch或者throws 对异常进行处理。如果遇到的异常是Exception子类,但又不是RuntimeException子类,那么程序中必须显示的try catch或者throws 进行处理。
4)throw与throws的区别
throw指的是我们程序遇到异常的时候,在当前上下文中不处理。说得更狭隘一点,比如我们在一个函数中,如果有异常,我们直接用throws抛出,交给函数调用处进行处理,而不在本函数中处理。
throws指的是如果函数中有用throw抛出异常,需要在函数声明的末尾加上throws语句,表明当前函数会抛出异常,从而通知函数的调用出进行显式处理。throws和throw是配合使用的。如下面的代码:
public class Test
{
public static void main(String[] args)
{
doSomething();
} public static void doSomething()throws Exception
{
Integer num = Integer.parseInt("ff");
System.out.println(num);
}
}
上面的代码无法通过编译,因为在doSomthing()里面抛出了异常,需要在Main函数中处理。Main函数要么加上try catch 语句,要么将此异常继续向上抛出,交给JVM处理。但一般不这么做。我们总希望程序能正确的运行并退出。下面是正确的处理异常代码:
public class Test
{
public static void main(String[] args)
{
try
{
doSomething();
}
catch(Exception e)
{
System.out.println("doSomething函数出现了异常!异常信息如下:");
e.printStackTrace();
}
System.out.println("Main函数正常退出!");
} public static void doSomething()throws Exception
{
Integer num = Integer.parseInt("ff");
System.out.println(num);
}
}
Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch的更多相关文章
- Java 中的异常和处理详解
Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...
- Java中的异常详解
一.异常定义 阻止当前方法或作用域继续执行的问题,称为异常 二.异常分析 所有不正常类都继承Throwable类,这个类主要有两个子类Error类和Exception类.Error指系统错误 ...
- Java中的异常和处理详解
简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. ...
- Java中的异常简介
Java中异常的分类 Java中的异常机制是针对正常运行程序的一个必要补充,一般来说没有加入异常机制,程序也能正常运营,但是,由于入参.程序逻辑的严谨度,总会有期望之外的结果生成,因此加入异常机制的补 ...
- java中的异常类
Java中的异常: 1. Throwable是所有异常的根,java.lang.Throwable Throwable包含了错误(Error)和异常(Exception),Exception又包含了运 ...
- Java 中的异常
前段时间集合的整理真的是给我搞得心力交瘁啊,现在可以整理一些稍微简单一点的,搭配学习 ~ 突然想到一个问题,这些东西我之前就整理过,现在再次整理有什么区别嘛?我就自问自答一下,可能我再次整理会看到不一 ...
- Java 中的异常和处理详解(转载)
原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函 ...
- Java中的异常和处理详解(转发:https://www.cnblogs.com/lulipro/p/7504267.html)
简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. ...
- java中的异常 try catch
1.学习异常的原因? 如果没有异常处理机制,那么程序的一点小问题,都会导致[程序终止运行].实际开发中显然是不可能的,所以异常对于程序来说是非常重要的. 2.处理异常的方式: A ...
随机推荐
- PHP投票系统
1.投票页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- NSRunLoop概述和原理
1.什么是NSRunLoop?我们会经常看到这样的代码: - (IBAction)start:(id)sender{pageStillLoading = YES;[NSThread detachNew ...
- Node.js 路由
我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码. 因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数.这一功能应当属 ...
- Rhel6-moosefs分布式存储配置文档
MFS 特性: 1. Free(GPL) 2. 通用文件系统,不需要修改上层应用就可以使用 3. 可以在线扩容,体系架构可伸缩性极强. 4. 部署简单. 5. 高可用,可设置任意的文件冗余程度(提供比 ...
- 搭建web服务器环境
一. 安装apache 安装好之后测试:浏览器地址栏输入:localhost,若弹出"It works!"表明已成功安装. 管理方式:1.通过Apache自带的镜像管理器:2.wi ...
- CentOS6.4安装Hadoop2.0.5 alpha - Single Node Cluster
1.安装JDK7 rpm到/usr/java/jdk1.7.0_40,并建立软链接/usr/java/default到/usr/java/jdk1.7.0_40 [root@server-308 ~] ...
- hdu 1039 (string process, fgets, scanf, neat utilization of switch clause) 分类: hdoj 2015-06-16 22:15 38人阅读 评论(0) 收藏
(string process, fgets, scanf, neat utilization of switch clause) simple problem, simple code. #incl ...
- 需要使用id内省方法--responsesToSelector: 的两个地方
第一个: 当从数组中取出对象,并且需要执行某个方法时,最好使用responsesToSelector:判断该对象是否可以 执行该方法.因为在OC数组中,取出的对象都是 id 类型的. 第二个: 在MV ...
- 利用MVVM设计快速开发个人中心、设置等模块
我们在做iOS开发过程中,静态页面的开发比开发动态页面更让我们开发者抓狂.因为动态页面通常是一个页面一种cell样式,作为开发者只需要专注于定制好一种样式之后,就可以使用数据填充出较好的界面.而静态c ...
- TopCoder----卖柠檬
1. 题目描述 Problem Statement You are playing a game called Slime Tycoon.You will be selling Slimonade ...