JAVA学习第十九课(java程序的异常处理 (二))
异常处理的捕捉形式:
这是能够对异常进行针对性处理的方式
六、try、catch的理解
详细格式:
try
{
//须要被检測异常的代码
}
catch(异常类 变量)//改变量用于接受发生异常的对象
{
//处理异常的代码
}
finally
{
//一定会被运行的代码
}
这三个代码块是一个总体。
try是尝试,catch捕捉,finally终于化
什么时候用try&catch。什么时候用抛?
在定义功能时,假设这个问题你能够处理的了,那么就用try&&catch。处理不了那么就用抛
代码演示:
import java.util.*;
class FuException extends Exception
{
FuException()
{
}
FuException(String s)
{
super(s);//Exception有
//System.out.println(s);
}
}
class ExceptionDemo
{//要么捕捉,要么抛出
public int method(int[] arr,int index) throws FuException
{
if(index<0)
{
throw new FuException("The index is fushu");
}
return arr[index];
}
}
public class Main
{
public static void main(String[] args)//throws FuException
{
int[] a = new int[10];
ExceptionDemo C = new ExceptionDemo();
try
{
int num = C.method(a,-2);
System.out.print("num"+num);
}
catch (FuException e)
{
System.out.println("角标为负数啦!");
//e对象可用可不用,以下是一些经常使用的方法
System.out.println("Message:"+e.getMessage());
System.out.println("string:"+e.toString());//toString可省略
//打印异常信息
e.printStackTrace();//jvm默认的异常处理机制就是调用异常对象的这种方法 }
}
}
/*真正建立日志文件
*log four(java; ; )
*{
*
*}
*/其简写形式:log4j
七、多catch情况
假设在程序处理时。抛出了多个异常
import java.util.*;
class FuException extends Exception
{
FuException()
{
}
FuException(String s)
{
super(s);//Exception有
//System.out.println(s);
}
}
class ExceptionDemo
{
public int method(int[] arr,int index) throws FuException,NullPointerException
{
if(index<0)
{
throw new FuException("The index is fushu");
}
if (arr==null)
{
throw new NullPointerException("没有数组实体");//可自己定义
}
return arr[index];
}
}
public class Main
{
public static void main(String[] args)//throws FuException
{
int[] a = new int[10];
ExceptionDemo C = new ExceptionDemo();
try
{
int num = C.method(a,2);
System.out.print("num"+num);
}
catch (FuException e)
{
System.out.println("角标为负数啦!");
}
catch (NullPointerException e)
{
//e.printStackTrace();
System.out.println("Message:"+e.getMessage());
}
//多catch情况,假设有以下catch情况。不能房最上面。会接受全部对象
catch (Exception e)
{
//父类的catch房最以下,否则编译失败
//假设实在出现已有catch以外的情况,虚拟机会处理
}
}
}
八、异常的处理原则
try究竟什么时候用?
最根本的核心:仅仅要使用了声明异常的方法,就要try,仅仅要代码中有抛出异常的动作,假设能处理就用try。见到了异常就处理,没有异常就不须要处理。注意:没有错误。非要写try,不仅没意义。还存在弊端。假设真的要处理异常。可是不知道是什么异常,那么仅仅能写Exception。一旦未知异常真的发生了,可是却有个预先处理的方式
,处理什么不知道,这个异常被处理掉了,一旦处理掉了,就相当于异常被隐藏,可是程序还在正常运行。所以,仅仅要没说有问题,就不处理,仅仅要问题发生了。看到了。再考虑问题是否要处理
异常处理的原则:
1.函数内部假设抛出需要检測的异常。函数上必需要声明。否则必须在函数内部用try&&catch捕捉,否则编译失败
2.假设调用到了声明异常的函数,要么try&&catch,要么throws。否则编译失败
3.什么时候catch。什么时候throws?
功能内部能够解决,用catch
解决不了,用throws,由调用者解决
4.一个功能假设抛出了多个异常,那么调用时必须相应多个catch,进行针对性的处理
(内部有几个须要检測的异常,就要抛几个异常,抛几个。就catch几个)
九、finally代码块
/*finally的应用:
* 用到finally最多的地方,比方数据库
* 比如:打开百度。搜索
* 连接数据库
* 查询:假如Exception了,查询过程中出问题
* 关闭连接
*假设出现异常,不关闭连接,还在浪费数据库资源,所以不管是否出现异常,关闭连接一定要运行
*进而释放资源,故关闭连接定义在finally里
*/
所以:凡是有资源须要关闭。一定要定义在finally里。
try。catch,finally代码块组合的方式:
1、try,catch,finally(三个都有常见)
2、try、catch,没有必要资源须要释放时,就不是必需定义finally
3、try、finally 异常无法直接catch处理,可是资源一定要关闭
void show()//throws Exception,不用声明。由于catch已经处理了
{
try
{ throw new Exception(); }
//有catch
catch
{ ..... }
}
void show()throws Exception//没catch,就要声明
{
try
{ throw new Exception(); }
//没catch
finally //连接资源,出现异常,可是这个异常不一定就要处理,可是资源一定要关闭,由于在内部开辟的。别人不知道
{ .... }
}
JAVA学习第十九课(java程序的异常处理 (二))的更多相关文章
- JAVA学习第二十九课(经常使用对象API)- String类
多线程告一段落,開始经常使用对象API的涉及,背也要背下来!.! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不能够被改变 一.特点 publ ...
- 风炫安全WEB安全学习第十八节课 使用SQLMAP自动化注入(二)
风炫安全WEB安全学习第十八节课 使用SQLMAP自动化注入(二) –is-dba 当前用户权限(是否为root权限) –dbs 所有数据库 –current-db 网站当前数据库 –users 所有 ...
- JAVA学习第十四课(接口:implements及其基本应用)
接口: 我们知道抽象类中能够定义抽象方法,也能够定义非抽象方法.当一个抽象类中的方法都是抽象方法的时候,我们就能够定义还有一种表现方式:接口(interface),所以接口是一种特殊的抽象类 接口的出 ...
- Java学习笔记十九:Java中的访问控制修饰符
Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...
- JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题
一.多线程下的单例设计模式 利用双重推断的形式解决懒汉式的安全问题和效率问题 //饿汉式 /*class Single { private static final Single t = new Si ...
- JAVA学习第二十六课(多线程(五))- 多线程间的通信问题
一.线程间的通信 实例代码: 需求是:输入一个姓名和性别后,就输出一个姓名和性别 class Resource { String name; String sex ; } class Input im ...
- Java学习(十九)
先学了字体分类 大概是这种效果: 一般把这些大类放在font-family的最后使用,防止字体呈现的效果不够好. 今天把final关键字学完了 也要几点要注意,我觉得比较重要的就是public sta ...
- 【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在 ...
- Python学习第十九课——类的装饰器
类的装饰器 # def deco(func): # print('==========') # return func # # # @deco #test=deco(test) # # def tes ...
随机推荐
- 【Luogu】P3116会议时间(拓扑排序,DP)
题目链接 本题使用拓扑排序来规划DP顺序.设s[i][j]表示i步是否能走到j这个点,e[i][j]表示i步是否能走到j这个点——用第二条路径.因为要满足无后效性和正确性,只有第i个点已经全部更新完毕 ...
- SPOJ GSS3 Can you answer these queries III ——线段树
[题目分析] GSS1的基础上增加修改操作. 同理线段树即可,多写一个函数就好了. [代码] #include <cstdio> #include <cstring> #inc ...
- 【二叉树】hdu 1710 Binary Tree Traversals
acm.hdu.edu.cn/showproblem.php?pid=1710 [题意] 给定一棵二叉树的前序遍历和中序遍历,输出后序遍历 [思路] 根据前序遍历和中序遍历递归建树,再后续遍历输出 m ...
- 转载: GMM-HMM学习笔记
转载地址:http://blog.csdn.net/davidie/article/details/46929269 最近几天钻研了语音处理中的GMM-HMM模型,阅读了一些技术博客和学术论文,总算是 ...
- 【bzoj2733】[HNOI2012]永无乡 线段树合并
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- 手把手教你搭建DHCP服务器
目录 DHCP实现原理 DHCP定义 DHCP分配方式 DHCP工作过程 初次登录 重新登录 更新租约 搭建DHCP服务器 实验目的 实验环境 实验步骤 实验结果 DHCP实现原理 DHCP定义 DH ...
- hihocoder #1290 : Demo Day
传送门 #1290 : Demo Day 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You work as an intern at a robotics star ...
- POJ Blue Jeans [枚举+KMP]
传送门 F - Blue Jeans Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- (转)java 中变量存储位置总结
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符 ...
- ueditor整合之后前段不显示高亮
自己整合ueditor插件后,发现在前段显示的时候并没有高亮处理 在网上看了一些方法后,自己尝试了下. 1.在页面上引入相关的js和css文件 主要是以下两个文件 <script src=&qu ...