编译错误:由于编写程序不符合程序的语法规定而导致的语法问题。

运行错误:能够顺利的编译通过,但是在程序运行过程中产生的错误。

java异常类都是由Throwable类派生而来的,派生出来的两个分支分别为ErrorException类。

  Error类:java程序在运行过程中发生的系统内部错误和资源耗尽错误。由java虚拟机生成并抛出,java通常部队这类异常进行处理,而且这类错误很少出现。

  RuntimeException类:程序错误导致的异常。

  非RuntimeException类:(比如,IOException类:本来是可以正常运行的程序,由于某些情况发生异常导致程序不能正常运行。)

package follow_pacage;

public class exp {
public static void main(String[] args) {
tryCatch();
}
static void tryCatch() {
try {
try {
System.out.println("执行里层try块\n");
int b = Integer.parseInt("abc");
System.out.println(b);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("执行里层catch\n");
}
}catch(NumberFormatException e) {
System.out.println("执行外层catch\n");
}
}
}

 异常捕获:

try{
...
}catch(Exception e){
...
}

  我试了一下,try后可以不跟catch,而直接跟fianlly。

finally:

  如果将内存释放的工作放在finally块内,程序不会由于内存未释放资源而导致内存泄漏。

  finally语句必须配合try使用。

  通常情况下,finally语句块总会执行,那么什么时候finally语句块不会执行呢?

    1.cpu关闭

    2.finally之前的语句有Syste.exit(0)

    3.finally过程中抛出异常,则异常之后的而其他程序不会继续执行

    4.程序所属线程死亡。

  如果try或者catch语句块中包含return语句,那么程序在执行return语句之前执行finally语句块。

  不能在finally中执行return、continue语句(https://blog.csdn.net/abinge317/article/details/52253768

异常抛出:

  1)在方法的声明中使用throws语句指定它所抛出的异常

  2)使用throw语句抛出异常

  例子:

package follow_pacage;

public class exp {
public static void main(String[] args) {
try {
String s = null;
demo(s);
}catch(NullPointerException e) {
System.out.println("异常为:"+e);
}
}
static void demo(String s) {
try {
if(s == null) {
throw new NullPointerException("ThrowExample");
}
}catch(NullPointerException e){
System.out.println("参数s的值为空");
//这里抛出了异常
throw e;
}
}
}

  try catch语句可以处理异常,如果一个方法可以导致一个异常,但并没有用try catch语句来处理异常,就要在方法名后面使用throws声明这个异常,异常将在外层被处理或者继续抛出。

package follow_pacage;

import java.io.IOException;

public class exp {
public static void main(String[] args) {
try {
System.out.println("请输入:");
String s = getInput();
System.out.println("输入为:");
System.out.println(s);
}catch(IOException e) {
System.out.println("产生异常:"+e.getMessage());
}
}
public static String getInput() throws IOException{
char[] buffer = new char[10];
boolean flag = true;
int count = 0;
while(flag) {
buffer[count] = (char)System.in.read();
if(buffer[count] != '\n') {
count++;
}else {
flag = false;
}
//这里在输入结尾有一个回车,所以实际只存放了9个字符
if(count >= 10) {
IOException aException = new IOException("buffer is full");
//抛出异常
throw aException;
}
}
//新建了一个String类型的字符串,将char[]类型的buffer字符传入
return new String(buffer);
}
}

自定义异常: 

package follow_pacage;

public class MyException extends Exception{
public MyException() { }
public MyException(String str) {
super(str);
}
}

java——异常类、异常捕获、finally、异常抛出、自定义异常的更多相关文章

  1. SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理

    最近一直在找可以自定义异常,并用C#程序捕获并进行相应的处理,试了很多方法都没有成功.今天终于找到了不错的方法.所以转载并分享给大家. 摘自:http://www.cnblogs.com/scottc ...

  2. 抛出自定义异常,spring AOP事务不回滚的解决方案

    spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...

  3. Java中主线程如何捕获子线程抛出的异常

    首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下: public void run(); 而所有的具 ...

  4. Java处理Exception无法捕获的异常

    场景: 使用try...catch(Exception e){}来捕获异常,执行过程中线程中断或阻塞了,但是catch块中却并没有捕获到异常信息. try{ // 此处可能是调用一个远程的接口,或是调 ...

  5. Java Thread 如何处理未捕获的异常?

    Java Thread是不允许异常抛出到本线程之外的,Runnable接口的public abstract void run()是不允许throws Exception的,这在编译时就通不过. 线程异 ...

  6. Spring事务异常回滚,捕获异常不抛出就不会回滚(转载) 解决了我一年前的问题

    最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......    为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常 ...

  7. PHP 高级编程(4/5) - SPL异常类之 LogicException 逻辑异常

    SPL 提供了一系列标准异常.日常的使用中我们应该根据需求科学的使用它们,来使我们的程序更加健壮.LogicException 是从 Exception 基类派生的,没有添加任何附加方法.抛出逻辑异常 ...

  8. Spring事务异常回滚,捕获异常不抛出就不会回滚

    最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......    为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常 ...

  9. 【转】Spring事务异常回滚,捕获异常不抛出就不会回滚

    最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......     为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异 ...

  10. spring事物回滚机制 (事务异常回滚,捕获异常不抛出就不会回滚)

    当异常被捕获catch的时候,spring的事物则不会回滚 为什么不会滚呢??  spring aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常 ...

随机推荐

  1. Linux alien命令

    一.简介 alien是一个用于在各种不同的Linux包格式相互转换的工具,其最常见的用法是将.rpm转换成.deb(或者反过来). 二.安装 http://toutiao.com/a618899776 ...

  2. tab页以及jqgrid某些用法参考记录

    <%@ Page Language="C#" AutoEventWireup="True" CodeBehind="CcrCreditHuman ...

  3. 数据结构 nxd(顺序对)

    数据结构 nxd(顺序对) 问题描述 给定 n 个数 a1,a2,...,an,求满足条件的(i,j)数量: i<j 且 a[i]<a[j] ★数据输入输入第一行为一个正整数 n.第二行为 ...

  4. java全栈day11----构造方法 综合案例

    构造方法 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的事情,当使用n ...

  5. Java/C++中数组的区别

    1. 数组名区别 -------------------------------------- 1. java中不用说,本着一切皆对象的原则,所以java中的数组也是对象.那么数组类是哪个,当然不是j ...

  6. STL-- vector中resize()和reserve()区别

    最近写了一个小型的STL--TinySTL.发现有一些基础的东西需要记录下来,所以我打算多写一些东西,方便以后查看. 先看看<C++ Primer>中对resize()函数两种用法的介绍: ...

  7. Ubuntu学习小结(一) 基础知识,系统安装,软件安装,解压缩

    这段时间,抽空研究了一下Ubuntu,虽然也有过到目前为止使用计算机最作死的经历,但目前已经学会了一些最基本的操作.在这里简单的记录一下,算是吸取的教训,供其他人借鉴. 1.装Ubuntu系统.装Ub ...

  8. C# 重写WndProc 拦截 发送 系统消息 + windows消息常量值

    接收拦截+发送消息 对于处理所有消息.net 提供了wndproc进行重写 WndProc(ref Message m)protected override void WndProc(ref Mess ...

  9. Vistual Studio的导出模板功能

    应用场景,每个项目有自己固定的目录结构和引用文件, 无需每次创建一个项目,就手工一一将那些目录再new一遍.如图所示 菜单  文件=>导出模板 之后的操作基本上一路"下一步" ...

  10. Kali Linux介绍篇

    Kali Linux 官网:https://www.kali.org/ Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Linux 发行版,包含很多安全 ...