当前位置:文档之家› Java OPP 第七章 异常

Java OPP 第七章 异常

Java OPP 第七章 异常
Java OPP 第七章 异常

Java OPP 第七章异常(Exception)

7.1

1、对于if-else语句处理异常的缺点:

(1)代码臃肿;

(2)影响开发效率;

(3)很难考虑全部情况;

(4)业务代码与异常处理代码交织在一起影响可读性、影响日后维护。

2、异常:程序运行过程中的不正常情况。

7.2

1、Java异常处理5个关键字(try、catch、finally、throw和throws)。

2、try-catch

示例1:

package cn.bdqn.ysm1;

import java.util.Scanner;

public class Test3 {

public static void main(String[] args) {

Scanner in=new Scanner(System.in);

System.out.println("请输入被除数:");

try{

int num1=in.nextInt();

System.out.println("请输入除数:");

int num2=in.nextInt();

System.out.println(String.format("%d/%d=%d,num1,num2,num1/num2")) ;

System.out.println("感谢使用本程序!");

}catch(Exception e){

System.out.println("出现错误:被除数和除数必须是整数,除数不能为零。");

e.printStackTrace();

}

}

}

执行的三种情况:

(1)try语句块中的语句正常执行,不会发生异常,catch块中的语句不执行。

(2)try语句块在执行中遇到异常,且相应的catch中声明的异常匹配,try中剩余的代码被

忽略,catch块中语句将执行。

(3)try语句块在执行中遇到异常,且相应的catch中声明的异常不匹配,那么程序立刻推出。

Void printStackTrace();输出从方法调用处到异常抛出处的方法调用序列。

String getMessage();返回异常信息描述字符串。该字符串描述异常产生的原因,是

package cn.bdqn.ysm;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Scanner in=new Scanner(System.in);

System.out.println("请输入被除数:");

try{

int num1=in.nextInt();

System.out.println("请输入除数:");

int num2=in.nextInt();

System.out.println(String.format("%d/%d=%d,num1,num2,num1/n um2"));

}catch(Exception e){

System.out.println("出现错误:被除数和除数必须是整数,除数不能为零。");

System.out.println(e.getMessage());

}finally{

System.out.println("感谢使用。");

}

}

}

执行的2中情况:

(1)try语块中所有语句执行完毕,finally执行。

(2)try遇到异常,无论catch块捕获到与否,finally执行。

注意事项:1、try语块出现后,必须有一个catch语块出现或finally语块出现或同时出现

2、当try和catch语块中有return语句,执行顺序:执行try和catch中return 前的语句,执行finally语块中的语句,执行执行try和catch中return语句。

4、示例3:

package cn.bdqn.ysm;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Scanner in=new Scanner(System.in);

System.out.println("请输入被除数:");

try{

int num1=in.nextInt();

System.out.println("请输入除数:");

int num2=in.nextInt();

System.out.println(String.format("%d/%d=%d,num1,num2,num1/n um2"));

return;//语句依旧执行

}catch(Exception e){

System.out.println("出现错误:被除数和除数必须是整数,除数不能为零。");

return;//语句依旧执行

}finally{

System.out.println("感谢使用。");

}

}

}

执行结果:

输入被除数:

12

请输入除数:

出现错误:被除数和除数必须是整数,除数不能为零。

感谢使用。

5、finally语块不执行的唯一情况是在finally语块前出现System.exit(2),即退出Java虚拟机。示例4:

package cn.bdqn.ysm;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Scanner in=new Scanner(System.in);

System.out.println("请输入被除数:");

try{

int num1=in.nextInt();

System.out.println("请输入除数:");

int num2=in.nextInt();

System.out.println(String.format("%d/%d=%d,num1,num2,num1/n um2"));

}catch(Exception e){

System.out.println("出现错误:被除数和除数必须是整数,除数不能为零。");

System.exit(1);

}finally{

System.out.println("感谢使用。");

}

}

}

执行结果:

请输入被除数:

12

请输入除数:

出现错误:被除数和除数必须是整数,除数不能为零。

6、多重catch块

目的:为了对不同的异常输出不同的结果当使用多重catch块。

示例5:

package cn.bdqn.ysm;

import java.util.InputMismatchException; //注意这里的MismatchException要导入

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Scanner in =new Scanner(System.in);

System.out.println("除数:");

try{

int num1 =in.nextInt();

System.out.println("被除数:");

int num2 =in.nextInt();

System.out.println(num1+"/"+num2+"="+num1/num2);

System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2));

}catch(InputMismatchException e){

System.out.println("输入不是整数!"+e.getMessage());

}catch(ArithmeticException e){

System.out.println("除数不能为0!"+e.getMessage());

}catch(Exception e){

System.out.println("其他错误。");

}finally{

System.out.println("b");

}

System.out.println("d");

System.out.println("运行完成。");

}

}

(1)多重catch块必须由从子类到父类,因为所有的Exception都是从Exception类开始(2)如果将父类放在前面那么后面的exception就不会被执行。

声明异常:

一个方法中抛出异常,可以采用一下两种方式进行处理:

1、通过try-catch捕获并处理异常。

2、通过throws继续声明异常,如果调用者不打算处理该异常,则可以继续通过throws声明异常,让上一级调用者处理异常。Main()方法声明的异常将由Java虚拟机处理。

示例6:

package cn.bdqn.ysm;

import java.util.Scanner;

public class Test8 {

/**

* Option 1

* @param args

*/

/*public static void main(String[] args) {

try{

divide();

}catch(Exception e){

System.out.println("出现异常");

e.printStackTrace();

}

}*/

/**

* option 2

*/

public static void main(String[] args)throws Exception{ divide();

}

public static void divide(){

Scanner in=new Scanner(System.in);

System.out.println("请输入被除数:");

int num1=in.nextInt();

System.out.println("请输入除数:");

int num2=in.nextInt();

in.close();

System.out.println(num1/num2);

}

}

抛出异常:

示例7:

判断类:

package cn.bdqn.ysm1;

public class Person {

private String name="";

private String sex="";

public void setSex(String sex) throws Exception{ if("男".equals(sex)||"女".equals(sex)){

this.sex=sex;

}else{

throw new Exception("性别必须是“男”或者“女”!");

}

}

public void print(){

System.out.println(https://www.doczj.com/doc/a911165391.html,+"\n"+this.sex);

}

}

测试类:

package cn.bdqn.ysm1;

public class Test9 {

public static void main(String[] args) {

Person person=new Person();

try{

person.setSex("male");

person.print();

}catch(Exception e){

e.printStackTrace();

}

}

}

Throw和throws的区别在一下3方面:

1、作用不同:throw用于在程序内的抛出异常;throws用于声明在该方法内抛出异常。

2、使用位置不同:throw用与方法体内,做单独语句;throws必须跟在方法参数列表的后

面,不能单独使用。

3、内容不同:throw抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且跟

多个异常类。

自我感想:很显然,这里if-else和try-catch构成了一个对应的异常捕捉。

Java异常的分类:

1、所有的异常类型都是Throwable类的自类,它派生出Error和Exception两个子类。

2、Error类:表示仅靠程序本身无法恢复的严重错误,如内存溢出动态链接失败、虚拟机错

误。应用程序不应抛出,一般由虚拟机抛出。这种错误除尽力使程序安全退出外,其他方面无能为力。(所以当更关注Exception类)。

3、Exception类:由Java应用程序抛出和处理的非严重错误,如所需文件找不到、网络中

断、算数运算错误等,它的各种不同自类分别对应不同类型的异常。

4、运行时异常:包括RuntimeException和其他子类,这种会输出异常信息终止程序运行。Checked异常(非运行时异常)除了运行时异常外的其他由Exception继承来的异常类。程序必须捕捉或者声明抛出这种异常,否则会出现编译错误,无法通过编译。处理方式包括两种:通过try-catch在当前位置捕获并处理异常;通过throws声明异常,交给上一级调用方法处理。

Checked 异常

示例8

package cn.bdqn.ysm;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Test12 {

public static void main(String[] args) {

FileInputStream fis =null;

try{

fis = new FileInputStream(new File("accp.txt"));

}catch(FileNotFoundException e){

System.out.println("无法找到指定文件");

e.printStackTrace();

}

try{

fis.close();

}catch(IOException e){

System.out.println("关闭指定文件输入流是出现异常!");

e.printStackTrace();

}

}

}

这是checked异常的处理方法。(书中关于这个章节的写显然还不够,以后的章节可能有更细节的介绍。)

自定义异常

自定义异常的步骤:

(1)定义异常,并继承Exception或者RuntimeException,前者为Checked异常,后者为运行时异常。

(2)编写异常类的构造方法,并继承父类的实现。常见的构造实现。常见的构造方法有四种形式。

示例9

public MyException(){

super();

}

public MyException(String message){

super(message);

}

public MyException(String message,Throwable cause){

super(message,cause);

}

public MyException(Throwable cause){

super(cause);

}

(3)实例化自定义异常,并在程序中使用throw抛出。

示例10

异常类

package cn.bdqn.ysm;

public class GenderException extends Exception {

/**

*

*/

private static final long serialVersionUID = 1L;

public GenderException(){

super();

}

public GenderException(String message){

super(message);

}

}

Person类(网络注册的用户类)

package cn.bdqn.ysm;

public class Person {

private String sex;

public void setSex(String sex) throws GenderException{ if("男".equals(sex) || "女".equals(sex)){

this.sex=sex;

}else{

throw new GenderException("性别必须是\"男\"或者\"女\"");

}

}

public String getSex() {

return sex;

}

}

测试类

package cn.bdqn.ysm;

public class Test {

public static void main(String[] args) {

Person p=new Person();

try{

p.setSex("男");

System.out.println("p.sex");

}catch(GenderException e){

e.printStackTrace();

}

}

}

注意在现在网络中基本都是用封装来获得用户的信息的所以这典型的程序。

1、新代码:

package cn.bdqn.ysm;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Scanner in =new Scanner(System.in);

System.out.println("除数:");

int num1 =in.nextInt();

System.out.println("被除数:");

int num2 =in.nextInt();

System.out.println(num1+"/"+num2+"="+num1/num2);

System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2)) ;

}

}

黄色代码与绿色代码的输出结果相同,但这个代码似乎并不方便。除非是在大的公式中。

1、捕获异常:try catch finally 一般一起出现,其中至少出现2个,切必有try;

a、try后面{}内表示可能出现异常的码块

b、catch一定会出现才try{}后面,且可以出现多人,catch()内一定要指明异常的类型,

多个catch后面的异常类型一般顺序:先子类后父类,如果同级,按出现异常的顺序且一般会把根异常Exception放在最后。

c、finally表示最终一定会执行的代码一般放在最后,只能出现一次。

异常类型:所有异常都是Exception的子类。

2、声明异常:表示方法可能抛出的异常throws

抛出异常有些是调用者必须要处理的CheckedException-Exception 非运行时异常有些是不强求处理,但也有可能会中断的RuntimeException运行时异常

3、抛出异常:程序员手动抛出一个新的异常throw package cn.bdqn.ysm;

import java.util.InputMismatchException;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Scanner in =new Scanner(System.in);

System.out.println("除数:");

try{

int num1 =in.nextInt();

System.out.println("被除数:");

int num2 =in.nextInt();

System.out.println(num1+"/"+num2+"="+num1/num2);

System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2)) ;

}catch(InputMismatchException e){

System.out.println("输入不是整数!"+e.getMessage());

}catch(ArithmeticException e){

System.out.println("除数不能为0!"+e.getMessage());

}catch(Exception e){

System.out.println("其他错误。");

}

System.out.println("运行完成。");

}

}

3、getMessage();错误原因

3、Switch的结合运用

在如登陆问题选择如:

选择宠物:1、企鹅2、猫

一般可以用switch来处理输入3的问题,不需要用throw来定义新的错误。

如下:

package cn.bdqn.ysm;

import java.util.Scanner;

public class Test3 {

public static void main(String[] args) {

Scanner in=new Scanner(System.in);

System.out.println("input:");

try{

switch(in.nextInt()){

case 1:

System.out.println("C#");

break;

case 2:

System.out.println("Java");

break;

case 3:

System.out.println("SQL");

break;

default:

System.out.println("mistake");

break;

}

}catch(Exception e){

System.out.println("mistake");

}

}

}

4、throws &throw例子

package cn.bdqn.ysm;

public class Person {

private String name;

private String sex;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

https://www.doczj.com/doc/a911165391.html, = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) throws Exception { if(sex.equals("男")||sex.equals("女")){

this.sex = sex;

}else{

throw new Exception("性别比为男和女。");

}

}

public int getAge() {

return age;

}

public void setAge(int age) throws Exception{ if(age>0||age<150){

this.age = age;

}else{

throw new Exception("年龄输入不正确。");

}

}

}

package cn.bdqn.ysm;

public class TestP {

public static void main(String[] args) {

Person p=new Person();

try{

p.setSex("l");

p.setAge(180);

}catch(Exception e){

System.out.println(e.getMessage());

e.printStackTrace();

}

}

}

但问题是前一个错误确定后,后一个错误就不会执行了,但在实际操作需要判断多个异常。Ctrl+shift+t可以通过eclipse查询Java中的所有固有类如Object类等。

Java种可能不会学的原理反射。

关于自定义异常的改进方案(设想):

Person类

package https://www.doczj.com/doc/a911165391.html,a;

public class Person1 {

private String a;

public String getA() {

return a;

}

public void setA(String a) throws Aexception1{

if("a".equals(a)) {

this.a=a;

}else {

throw new Aexception1("W");

}

}

}

Test类

package https://www.doczj.com/doc/a911165391.html,a;

public class Test1 {

public static void main(String[] args) {

Person1 p=new Person1();

try {

p.setA("b");

}catch(Aexception1 e) {

e.printStackTrace();

}

}

}

如果可以将自定义异常类去处:

package https://www.doczj.com/doc/a911165391.html,a;

public class Aexception1 extends Exception {

/**

*

*/

private static final long serialVersionUID = -8056695678236320004L;

public Aexception1() {

super();

}

public Aexception1(String a) {

super(a);

}

}

这个类在表达的意思上明显是多余的,没有意思。

同一异常的一种改进:

Person类

package https://www.doczj.com/doc/a911165391.html,a;

public class Person1 {

private String a;

public String getA() {

return a;

}

public void setA(String a) throws Aexception1{

if("a".equals(a)) {

this.a=a;

}else if("b".equals(a)){

throw new Aexception1("W");

}else{

throw new Aexception1("E");

}

}

}

Test类

package https://www.doczj.com/doc/a911165391.html,a;

public class Test1 {

public static void main(String[] args) {

Person1 p=new Person1();

try {

p.setA("b");

}catch(Aexception1 e) {

e.printStackTrace();

}

}

}

Exception类

package https://www.doczj.com/doc/a911165391.html,a;

public class Aexception1 extends Exception {

/**

*

*/

private static final long serialVersionUID = -8056695678236320004L;

public Aexception1() {

super();

}

public Aexception1(String a) {

super(a);

}

}

利用这种黄色的改经代码可以多重判断。

C异常处理(精)

#include "stdafx.h" #include #include #include // 内存泄露检测机制 #define _CRTDBG_MAP_ALLOC #ifdef _DEBUG #define new new(_NORMAL_BLOCK, __FILE__, __LINE__ #endif // 自定义异常类 class MyExcepction { public: // 构造函数,参数为错误代码 MyExcepction(int errorId { // 输出构造函数被调用信息 std::cout << "MyExcepction is called" << std::endl; m_errorId = errorId; } // 拷贝构造函数 MyExcepction( MyExcepction& myExp { // 输出拷贝构造函数被调用信息 std::cout << "copy construct is called" << std::endl; this->m_errorId = myExp.m_errorId; }

~MyExcepction( { // 输出析构函数被调用信息 std::cout << "~MyExcepction is called" << std::endl; } // 获取错误码 int getErrorId( { return m_errorId; } private: // 错误码 int m_errorId; }; int main(int argc, char* argv[] { // 内存泄露检测机制 _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ; // 可以改变错误码,以便抛出不同的异常进行测试 int throwErrorCode = 110; std::cout << " input test code :" << std::endl; std::cin >> throwErrorCode; try { if ( throwErrorCode == 110 { MyExcepction myStru(110;

品质异常处理流程模板

品质异常处理流程 (公开文件,共4页) 一、目的: 规范品质异常处理流程,提高品质异常处理的时效性,确保来料质量及生产的正常运转,同时满足顾客的质量要求。 二、范围: 适用于本公司来料、制程、出货品质异常的处理。 三、定义: 3.1 来料品质异常: a、不符合相关检验标准要求,且不良率超过质量目标时; b、合格物料制程中发现重点物料不合格时; c、有经过改善且有效果确认,但又重复发生品质异常时。 3.2 制程品质异常: a、使用不合格的原料或材料; b、同一缺陷连续发生; c、不遵守作业标准或不遵守工艺要求; d、机械发生故障或精度磨损; e、其他情形影响到产品质量时。 3.3 出货品质异常: a、客户投诉或抱怨; 四、职责 4.1 来料品质异常: 品质:a.负责填写《品质异常联络单》“异常描述”部分; b.负责将《来料检验报告》、《品质异常联络单》发送于采购,抄送工程、生产; c负责品质异常改善结果确认。 采购:负责将《来料检验报告》、《品质异常联络单》发送给供应商并及时与供应商联系跟踪供应商及时回复“原因分析”“纠正与预防措施”并将结果回复品质部. 4.2 制程品质异常: 品质部: a,负责品质异常之最终判定; b,负责确认品质异常责任部门; c,负责主导品质异常案例的处理过程; d,负责对责任单位的改善结果进行追踪确认

异常责任单位: a负责品质异常的原因分析,提出临时措施及长期改善对策并执行。 生产部: a负责品质异常的改善和预防措施的实施及验证改善措施的有效性; 其它相关单位: a在需要时进行异常改善的配合 4.3 出货品质异常: 品质部: a负责将品质异常通知各部门及确定责任部门; b负责异常改善后的跟踪确认; c负责处理客户抱怨 异常责任单位: a负责品质异常的原因分析,提出临时措施及长期改善对策并执行。 生产部: a负责品质异常的改善和预防措施的实施及验证改善措施的有效性; 营业部: a负责将客户抱怨反馈给相关部门。 其它相关单位: a在需要时进行异常改善的配合 五、工作程序: 5.1 进料品质异常: 5.1.1 依相关检验标准判定不合格,针对不合格物料标示“不合格”,并立即移至不良品区域。 5.1.2 异常成立4小时内开立《品质异常联络单》通知采购。 5.1.3 采购接《品质异常联络单》后4小时内转责任供应商。 5.1.4 供应商需于1个工作日内针对异常物料提出临时对策,如对异常内容有疑问,需在4 小时与品质相关人员确认清楚。 5.1.5 供应商必须在《品质异常联络单》要求的期限前(如无明确要求,默认为《品质异常联络单》发出后2个工作日内)回复完整的改善方案。 5.1.6 品质部对供应商回复内容进行确认,针对改善措施不合格部分予以退件,要求供应商重新回复。改善措施合格,则报告予以归档,跟踪后续进料品质状况,依5.1.7执行。 5.1.7 针对供应商改善后产品加严检验,连续追踪3批无异常予以结案,转正常检验;连续追踪3批中途发现不良现象仍存在,则重复5.1.2-5.1.7。 5.1.8 如供应商改善措施回复后连续2个月无进料,则强制结案,后续进料依正常检验执行。 5.1.9

Java语言中的异常处理机制

Java语言中的异常处理机制 导语:为了加强程序的健壮性、流畅性、稳定性,就需要考虑有可能发生的异常,并进行相应的处理。下面就由为大家介绍一下Java语言中的异常处理机制,欢迎大家阅读! 1概述 在应用程序运行的过程中,经常会出现这样一些现象:用户不按照要求输入、需要进行处理的文件丢失、分母为零、数组下标超出预定范围、网络中断等,我们把这种现象称为异常。由于异常情况总是难免的,所以一个好的应用程序不仅要满足用户的基本需求,还要具备处理有可能出现的异常情况的能力,即程序必须具备较强的容错能力,把这种对异常进行处理的机制称为异常处理。对异常处理有两种常见方法:计算机系统遇到错误,给出出错信息并结束正在运行的程序;由程序员在程序中加入异常处理的功能。早期的程序设计语言没有提供专门进行异常处理的功能,程序员在编写程序的过程中,进行处理异常的代码往往和正常的代码混杂在一起,导致程序的可维护性和可读性下降。Java语言采取了异常处理机制,其方式为“抛出-捕获”,一个异常一旦产生,Java语言采取相应的机制来处理它,避免出现死循环、死机以及其他更大的危害,尽可能预防错误代码带来的不可预期的后果,整个程序的安全性得到了极大的提高。 2Java语言中的异常概述 Java语言提供了功能强大的异常处理机制,将所有处理异常的代码集中放置,以保证正常功能代码和处理异常的代码分开。在Java

程序设计语言中,采用了大量的异常类来进行处理,这些异常类可分为两大类:https://www.doczj.com/doc/a911165391.html,ng.Exception和https://www.doczj.com/doc/a911165391.html,ng.Error。Exception 类解决由程序本身及环境所产生的异常。而Error类则处理较少发生的内部系统错误。Exception类异常可以捕获并进行相应处理,而Error类异常,则是由用户按照系统提示关闭程序。常见的异常类如下表所示: 在以上常见的Java异常类中,每个异常类反映一类异常错误,其中包含了异常错误信息和处理方法。当程序运行过程中,出现一种异常现象,产生一个相应的异常类对象,再由相应的异常类进行处理,从而避免对系统产生更大的危害,以保证程序的正常运行。 3常见的异常处理方法 常见的异常处理方法有两种:一种处理异常是在产生异常的方法中,使用try…catch…finally结构;还有一种是进行异常的移交,使用关键字throws和throw交给上层方法去处理异常。 在该案例中,对三种异常进行了捕获,分别是数组下标越界、输入数据格式不正确和Exception异常,当触发某种异常,则对相应的异常异常进行处理。Exception异常类是所有异常的基类,当出现catch块没有进行捕获的异常,则采用Exception异常类进行异常处理。 异常的移交: 实例分析:初始化参数x使用了-2,将触发NegativeArraySizeException异常,但在Sum方法中不对该异常进

产品质量异常处理流程(精)

供应商来料异常管理流程 1. 目的: 规范来料产品的异常处理流程控制,提高来料合格率。 2. 范围: 本规范适用于所有外购零部件及外包加工件。 3. 职责与权限: 3.1生技部:负责检测治具的制作。 3.2质量中心:负责来料异常的提出、分析、处理。 3.3生产部:负责来料异常协助处理。 3.4研发部:负责来料异常的分析、处理。 3.5生管部:负责确认来料品上线使用时间。 3.6采购部:负责来料异常与供应商的纠通取得异常的处理。 4. 名词定义: 4.1不合格:未满足产品的质量要求。 4.2 A类:单位产品的极重要质量特性不符合规定,或者单位产品的质量特性极严重不符合规定。 4.3 B类:单位产品的重要质量特性不符合规定,或者单位产品的质量特性严重不符合规定。 4.4 C类:单位产品的一般质量特性不符合规定,或者单位产品的质量特性轻微不符合规定。 5、异常处理流程控制 5.1 IQC依据检验指导书、封样、评估报告等资料检验,发现来料品不满足质量要求。 5.2 IQC将自已判定为不合格的产品经工程师、部门主管核对确实为不合格品。 5.3 IQC 立即填写《供应商异常矫正单》进行处理。 5.4 质量中心主管主导组织针对异常讨论,参与人员:采购、PIE、质量中心经理、研发工程师、研发总监、厂部厂长及其相关人员。 6、异常分类: 6.1 外观不良:表面有划痕、水印、字体不清、表面气泡、砂眼、黑点、缺料、油污、毛刺、变形、色差、氧化及电镀层脱落、标识规格错误、无料号贴纸、无出厂检验报告等。 6.2性能不良:尺寸与图纸不符、适配过大,过小、色温,波长,亮度不符、电压,电流不符等。 7、异常处理方式 7.1将不良品返回供应商进行返工、返修、报废等。

实验10 java异常(答案)

实验六Java异常处理 【实验目的】 1)掌握Java异常的概念及工作机制 2)掌握异常的分类 3)掌握抛出异常语句的使用(throw) 4)掌握抛出捕获处理异常语句的使用(try…catch…finally) 5)掌握上抛异常语句的使用(throws) 6)掌握创建自定义异常 【实验环境】 JDK1.6+Eclpise3.2 【实验准备】 1)复习课件中理论知识 2)练习课堂所讲的例子 【实验内容】 1、编写一个应用程序,要求从键盘输入一个double型的圆的半径,计算并输出其面积。测试当输入的数据不是double型数据(如字符串“abc”)会产生什么结果,怎样处理。 package SIX; import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; public class CIRCLE { public static void main(String[] args) throws IOException { System.out.print("请输入半径: "); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); try{ System.out.println("圆的面积为: "+computerArea(Double.parseDouble(br.readLine()))); } catch(NumberFormatException e){ System.out.println("您输入的不是数值,请重新输入"); } } public static double computerArea(double r)

品质异常处理流程

品质异常处理流程 1.目的 为了使品质异常发生时,处理过程有据可依,使重大品质异常在规定的时间内得到有效改善,防止相同的问题重复发生,降低品质成本,确保产品质量符合要求。 2. 适用范围 适用于公司制程控制。 3. 名词释义 品质异常:因制程中出现了品质问题而导致的异常,也称制程异常。 停机:生产线生产出的产品不符合规定要求时或生产线不具备开机条件而已开机时,作停机处理,并下发《品质异常反馈单》。 4. 职责 检验科负责品质异常的反馈与跟进。 责任部门负责对品质异常进行分析、改善与预防及不良品的处理。 5. 作业流程 品质异常问题分类

异常问题处理流程 5.2.1当出现以上异常情况时,QC迅速对已发现的问题品作好标识并隔离。 5.2.2问题反馈 5.2.2.1发现人员或QC立即向上级或责任部门报告。 5.2.2.2根据本流程的要求填写《品质异常反馈单》并传递到责任部门。 5.2.2.3一般情况发《品质异常反馈单》即可,若某一问题多次发生,或问题较严 重,可能会导致批量不合格或客户重大投诉时。检验科发出《纠正和预防措施处理单》,要求责任部门改善。 5.2.3异常问题处理 5.2.3.1当缺陷不影响产品的性能(上表不需停机的问题),仅外观不良、非关键尺 寸超差时或问题未最终确认时,在得到检验科长级或厂长同意后,不需要停机,可进一步确认或执行在线分选。 5.2.3.2当生产线出现异常时(上表中需停机的问题),相关人员参照本流程的要 求,暂停有问题的机器或工位的操作。 5.2.4停机的时机 5.2.4.1 出现上表中需要停机时,QC直接下达停机指令,即上述表中所致A类问 题,员工/主操/领班应主动停机。 5.2.4.2 出现需要停机时,QC直接下达停机指令,相关部门不执行的,QC领班跟 进处理。即上升为B类问题。 5.2.4.3 出现需要停机时,QC及 QC领班先后要求停机,相关部门仍不执行的, 及时反馈到检验科长,由检验科长跟进处理,即上述的C类问题。 5.2.5纠正行动

如何使用异常处理机制

如何使用异常处理机制 《PHP核心技术与最佳实践》第1章面向对象思想的核心概念,本章将就面向对象一些概念展开讨论,其中重点讨论PHP特色的面向对象的风格和语法,并通过相互借鉴和对比,使读者认识PHP自身的特点,尤其是和其他语言中不同的地方。本节为大家介绍如何使用异常处理机制。 1.6.1 如何使用异常处理机制(1) 异常的思想最早可以追溯到20世纪60年代,其在C++、Java中发扬光大,PHP则部分借鉴了这两种语言的异常处理机制。 PHP里的异常,是程序运行中不符合预期的情况及与正常流程不同的状况。一种不正常的情况,就是按照正常逻辑不该出错,但仍然出错的情况,这属于逻辑和业务流程的一种中断,而不是语法错误。PHP里的错误则属于自身问题,是一种非法语法或者环境问题导致的、让编译器无法通过检查甚至无法运行的情况。 在各种语言里,异常(exception)和错误(error)的概念是不一样的。在PHP里,遇到任何自身错误都会触发一个错误,而不是抛出异常(对于一些情况,会同时抛出异常和错误)。PHP一旦遇到非正常代码,通常都会触发错误,而不是抛出异常。在这个意义上,如果想使用异常处理不可预料的问题,是办不到的。比如,想在文件不存在且数据库连接打不开时触发异常,是不可行的。这在PHP里把它作为错误抛出,而不会作为异常自动捕获。 以经典的除零问题为例,如代码清单1-16所示。 代码清单1-16 exception.php 1.// exception.php 2.getMessage(); 9.$a=-1; 10.}

生产异常处理流程

A版 汇签: 制定:审核:批准:修订记录:

1.目的 为了规范产线发生异常时,能及时、准确地反映并能通过相关人员确认、分析、及时解决,确保生产正常进行。 2.适用范围 适用于客户与工厂合作产品之生产线发生的异常现象。 3. 职责 3.1 工厂品质:提出异常问题,确认是否属实。 3.2 工厂工程:负责产线异常分析,找出问题原因,提出改善对策。 3.3 工厂:跟进改善结果及效果确认;对来料进行管控。 3.4 工厂品质:提供异常的最终处理方案,并对改善方案评估/验证;供应商 改善报告回复及监控。 3.5 客户项目、结构、工程:负责结构、软/硬件异常问题的解决。 3.6 客户采购:负责来料异常商务方面的处理。 3.7 客户计划:负责异常发生时总体计划的协调和异常发生产生的工时和物 料的签合。 3.8 质量总监:让步接收最终审批。 4. 异常处理流程 4.1工厂仓库按客户计划要求根据及套料单领取物料安排生产! 4.2产线在生产中发现产品与样板不符、功能缺失、装配出来的成品达不到标 准要求或来料无法使用等现象时,及时上报、工厂品质&工程等相关人员确

认。 4.2 工厂品质确认异常可接受,通知产线继续生产;如确认异常成立则交工厂 工程分析同时开出《生产异常报告》。 4.3 经工厂工程分析,给出初步分析结果,结果分为工艺问题、设计问题、来料问题。 4.4 由工厂工程分析为工艺问题,由工程辅导产线纠正生产工艺,工厂品质 监督确认,产线恢复正常生产。 4.5 经工厂工程初步分析异常属于设计问题,在能力范围内能解决的自行处 理,但需将解决办法知会客户,若无法解决的则书面知会客户品质、项目、结构、计划。由客户计划主导协调客户项目结构分析在30分钟内给出临时处理解决办法,经工厂品质确认合格恢复生产;对于后期的改善对策,由客户品质主导负责协调项目、结构工程等一起实施有效的解决对策并进行验证,得到工厂品质确认方可进行生产安排! 4.6由工厂工程及品质确认异常是来料问题,第一时间以邮件通知客户计划、 品质、采购,并要求客户品质在30分钟内对物料问题给予回复处理意见(临时解决办法),工厂给予相应配合和支持!同时客户品质联系供应商到工厂工厂及时解决,并要求供应商给出不良原因分析及改善报告回复,客户品质对其进行验证,同时要求供应商挑选符合品质标准的物料经品质确认后方可恢复生产。 4.6.1若供应商没在规定时间(原则上要求供应商4小时内)到工厂处理,先 由采购或品质与供应商沟通,如果供应商同意接收工厂工厂挑选并承担其挑选费用和不良物料,产线予以上线生产!

制程异常处理流程

1. 目的 规定当制程出现异常时的处理流程及各相关部门的责任, 使异常能够得到及时解决,确保生产正常 运行。 2. 适用范围 适用于制程出现异常时的处理。 3. 定义: 无。 4. 职责 4. 1各生产车间:当生产过程中制程出现异常时发出《不合格品报告单》通知 IPQC 4. 2品质部IPQC :对制程异常现象进行确认,并通知 QE 或PE 来现场进行原因分析和处理 4. 3品质部QE :对制程异常进行原因分析并确认责任部门,并对责任部门制订的改善对策进行验 证 4. 4工程部PE :对功能及结构性制程异常进行原因分析并确认责任部门 4. 5责任部门:负责制定异常的临时对策和永久对策并实施。 5. 作业程序 5. 1制程异常发出的时机: 5. 1. 1当同一不良现象重复出现且不良率超出备损率时; 5. 2制程异常的发出、确认及通知: 5. 2. 1由车间生产线根据不良现象和事实填写《不合格品报告单》,填写内容包括:订单号、 产品型 号、生产数量、不良数量、不良率、提出部门、提出时间、订单交期、不良现象描述。 经车间主管(经理)审核后给车间IPQC 确认; 5. 2. 2 IPQC 在收到车间发出的《不合格品单》后,对异常现象、不良数量、不良率进行确认, 并将确 认结果填写在“IPQC 确认”栏。如果确认结果与车间填写的内容不相符时,可退回 车间重新填写。 5. 2. 3 IPQC 确认后以电话形式通知以下人员到发生异常的现场进行原因分析: 5. 森一泰电子科技有限公司 作业指导书 制程异常处理作业指导书 2. 3. 1如果是外观异常,电话通知制程 QE 工程师到现场进行原因分析; 2. 3. 2如果是功能和结构性异常,电话通知 QE 工程师和工程部PE 工程师到现场进行 原因分析; 2. 3. 3如果电话联络不到相关产品的 QE 工程师或PE 工程师时应通知其直接上司做出 相应安排。 5. 5.

异常处理流程

异常处理流程及注意事项 1.发现不良; (1)确认所采用标准的完整性和有效性; (2)熟练掌握检验所涉及之相关标准或其他文件; (3)严格按抽样标准取样,注意均匀,来料检验须注意来料的不同时间,批号,生产班次等; (4)了解以往的品质状况及其品质履历; (5)掌握品管之检验技巧; 2.标示,区分,隔离; (1)标示,隔离须涉及到具体的不良品和可疑批次,不合格标示要完整且必要时要口头或书面知会先相关人员,以避免他人 混淆误用为原则; (2)不合格标示,隔离须注明不合格原因,检验员,检验日期,进料检验另须注明检验单号,并知会相关人员; 3.初步分析判断,并知会相关单位及现场领导; (1)确定不良等级,异常比率,影响度和影响面,必要时须及时知会相关单位之人员; (2)针对制程或成品类异常,要及时研拟临时对策; (3)进料之异常可能涉及组装或功能之不良,需通过试组装来确定其严重性和影响度,必要时可请工程部帮忙确认; 4.异常提报; (1)异常提报时要注意时效性和准确性,异常单的填写需准确完

整,成品异常要确认追溯批号,PO#与数量; (2)须标示和提供不良品; (3)会签的填写和勾选须正确完整; 5.跟催各相关单位签单状况,根据会签结果处理异常; (1)品管必须跟催会签状况,有迟迟未签之单位必须及时跟催,如多次跟催无效,可请领导协助,以避免异常处理的时效; (2)有签核S物料时,按S物料作业流程处理,并将处理结果维护到异常单中; (3)当物料急上线,且部门领导有同意采用,而高级主管又不在厂内,无法立即签核S单时,可询问品质经理,先输S物料, 以便后续作业; (4)当会签单位处理意见不一致时,需反映部门领导,并确认最终处理结果; 6.确认处理结果; (1)全检或重工后的,需重新确认品质状况,成品类有拆箱之异常,需填写成品不合格处置报表; (2)S物料须对其品质进行跟踪,有异常要及时提报; 7.追踪改善措施; (1)注意改善措施回文必须由责任单位之领导签核,并且要在7个工作日内完成改善措施回文; 8.确认改善结果; (1)评估改善措施之有效性,必要时须修改相关品质系统文件或

1.异常处理机制(精)

1. 异常机制 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。 异常处理的流程: ①遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象。 ②调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码。 2 异常的分类 异常的分类: ①异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。 ② Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 每个类型的异常的特点 Error体系: Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。 Exception体系包括RuntimeException体系和其他非RuntimeException的体系: ① RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现

产品质量异常处理流程汇总

XXXXXXXX 有限公司 产品质量异常处理流程 YCCL---2012 编制:版号: 审核:受控状态: 批准:分发号:

2012. 发布2012. 3 .实行3 .

产品质量异常处理流程 1.0目的: 规范品质异常处理作业,使品质异常发生时处理过程有据可依有 规可循,使品质异常能在规定的时间内有效改善,并采取相应的预防措施,防止相同问题重复发生。降低处理品质异常的成本,满足客户质量要求。 2.0范围: 品质异常、制程异常、出货前异常、客户抱怨 3.0定义: 3.1品质异常3.1.1产品品质异常: 3.1.1.1不符合相关检验标准要求,且不良率超过质量目标时。 3.1.1.2有经过改善且有效果确认,但又重复发生品质异常时。 3.1.1.3客户抱怨及退货时。 3.1.1.4其它情形,影响到产品品质时。 3.1.2制程异常3.121不遵守操作标准操作。 3.122虽然照操作标准操作,但因各种标准不完善,以致无法控制变 异原因。 3.1.2.3使用不合格的原料或材料。 3.124机械发生故障或磨损。 3.125其它情形,可能存在品质隐患时。

4.0职责 4.1质控部: 4.1.1负责各生产部门质量异常不良的提出4.1.2负责不良现象及不良比例的确认和判定,临时对策效果的确认 及不良物料的处理。 4.1.3负责质量外观不良类的最终判定与裁决。 4.2技术部: 负责结构类和功能类质量异常的分析与临时对策的提出。 4.3生产部门: 负责按质控部/技术部临时对策的执行,并配合处理相关不良品处理。 4.4业务部: 负责接收客户投诉并反馈信息至技术、质控,投诉分析完成后把处理结果反馈至客户。 4.5其它部门: 在问题涉及时负责问题的分析、措施的提出及执行。 5.0工作程序: 5.1进料品质异常: 5.1.1 IQC依相关检验标准判定不合格,针对不合格物料标示“不合 格”,并通知仓库立即移至不良品区域。 5.1.2异常成立1小时内开立《品质异常处理单》通知采购/生产管理 部门。

OpenCV异常处理机制

OpenCV异常处理机制 OpenCV异常处理机制分类: openCV 2010-12-14 21:49 187人阅读 评论(1) 收藏 举报 很多函数,都会对参数的有效性进行判断,不符合要求,直接弹对话框,然后程序崩溃,逼得你不得不正确调用他。这个属于编程的逻辑错误,就像assert一样,用于排除编码错误,这和业务错误处理的层次是不同的。 一般,我们仿照这种模式,如下 view plainprint?int TestCvError( IplImage *pImgGray, int iNum)

{ CV_FUNCNAME( "TestCvError" ); __BEGIN__; if (iNum <= 1 ) CV_ERROR(CV_StsOutOfRange, "参数iNum必须大于1"); if( !pImgGray ) CV_ERROR( CV_StsNullPtr, "Null pointer to pImgGray" ); if( pImgGray->depth != IPL_DEPTH_8U && pImgGray->nChannels != 1 ) CV_ERROR( CV_StsUnsupportedFormat, "Only 8-bit grayscale images are supported" ); //函数主要实现部分__END__; return 0; } int TestCvError( IplImage *pImgGray, int iNum) { CV_FUNCNAME( "TestCvError" ); __BEGIN__; if (iNum <= 1 ) CV_ERROR(CV_StsOutOfRange, "参数iNum必须大于1"); if( !pImgGray ) CV_ERROR( CV_StsNullPtr, "Null pointer to pImgGray" ); if( pImgGray->depth != IPL_DEPTH_8U && pImgGray->nChannels != 1 )

产线异常处理流程及技巧

产线异常处理流程及技巧 一.品管人员问题处理之流程(步骤) 发现问题分析问题解决问题预防问题 备注: 品管人员之所以不同于工程人员处理问题之关键在于品管人员用品管技能, 品管统计手法,逻辑推理等方法来进行问题的分析与处理、 A.发现问题 ●不良现象(必须了解清楚及正确之数据) 发生日期,不良数﹑投产数﹑不良率﹑不良发生点﹑不良状况(不良状况就是怎样产生的), 亦即何种测试条件下之测试不良,具体详细之不良情形、相关的信息,在我们处理问题前, 必须清楚无误地掌握到、 Case1: 1.4/27,产线发现PUH不良,不良率5%、 2.产线Loader test站,发现较多托盘进出过缓,分析为托盘不良、 3.贵司4/7来料之3374365191之碟盖,批量1000pcs,在我司检验时发现表面有严重刮伤 之不良现象,不良率2、5%、 4.贵司4/22来料之1232001520陶瓷(1500Pf +/-10%) 450k,在我司检验时发现本体上 上有两种文字印刷,见图、 B.分析问题 此项来讲﹐为SQE处理问题之关键﹕怎样判定此部分之不良就是原材料造成还就是产线制程造成﹖基本上我们应能通过种种的品管手法及逻辑推理手段中作出进一步的判定, 当然, 从某种程度来瞧, 其效果有时并不一定如理想中的那么直接, 但从另一方面讲﹐对我们来处理产线问题绝对就是有益的﹐现例﹕当产线发生不良,并初步怀疑为组件不良所致, SQE该如何处治? 通过何种方式去剖析并解决问题、 ●不良现象与组件之关联, 其相关关系如何? 找出组件不良之相关与机台不良之相关联系参数、如其中的某个参数, 规格, 外观等不良, 就是否对产品(机台)有直接的影响?以往历史中就是否有类似之不良? 在分析问题前,我们必须展开相关的联想并设问、 ●不良之确认 分析前, 我们应该对所产生的现象作进一步的确认, 确认所产生的现象, 确实为不良, 否则, 以下相关之工作将只能就是徒劳、 *不良之现象,就是否确实为不良(超出规格之要求)、 *就是否确实为组件fail、

生产异常处理机制

广东樱雪有限公司文件组装车间异常工时责任追究考核管理办法(修订版)为了确保制造部月度产量目标达成,确保公司生产经营紧张有序,生产压力在各生产支持主责模块间有效传递与分解,实现不停线、不断线、不下线,及时暴露生产异常并进行有效责任追究,经公司研究决定特制定本考核管理办法。一、总装车间生产支持主责模块及必须有效支持的项目

二、主要生产异常类型与主责模块责任界定

三、各类生产异常情况责任人分解 四、生产异常情况异常工时责任追究执行标准

五、生产异常责任追究运作模式 1、组装车间在生产过程中出现异常情况时由生产线线长、物料调度(指仓管 的方式通知主责模块第一责任 人,相关责任人收到异常信息后应立即(要求在接到信息的 现场进行处理和确认,如果不到现场处理和确认则视同默认车间反馈的异常事件及处理异常对车间生产影响的时间; 2、的形式通知主责模块第一责任 人(责任人到达现场除外),同时将异常工时与责任模块第一负责人进行口头初步确认; 3、的异常情况,由生产线线长(指发泡总装线)、物料 调度(指仓管员)在填写《异常工时责任追究反馈表》在上交车间主任审核,车间主任审核完后在各生产部部长审批; 4、《异常工时责任追究反馈表》审批流程:生产线线长、仓管员(填写)→ 车间主任(审核)→各生产部部长(审批); 5、各生产部部长将审批完后的《异常工时责任追究反馈表》在 的形式发送至相关责任人处进行公示; 6、相关责任人在收到《异常工时责任追究反馈表》后默认视同接受,如果有

各生产部部长进行沟通反馈,各生产部部长收到异议反馈后组织异议调查最终将以事实依据作为最终裁定; 7、最终裁定的《异常工时责任追究反馈表》将在事件发生日的 8、生产副总助理汇总上月所有异常工时责任追究统计表输出《异 常工时责任追究月度处罚明细表》,经制生产副总(审核)、总经理(审批)后报送行政部(执行扣罚); 9、异常工时责任追究月度处罚金额在责任人当月工资中扣除; 10、各班组负责人根据本班组异常工时产生的罚款额度以 形式提交申请,经各制造部部长(一审)、生产副总(二审),生产副总(批准)后报送各生产部车间统计员将罚款额度纳入受影响班组的当月工资总额; 六、其他事项 1、本考核管理办法由生产部负责起草、修订、解释、执行; 2、本考核管理办法从2013年*月*日起试行考核; 3、为了提高各主责模块对异常工时改进的重视程度,要求各主责模块每月收 到正式版《异常工时责任追究月度处罚明细表》后的三个工作日向生产部提交《异常工时改进方案》; 4、各主责模块提交的《异常工时改进方案》,要求要对产生的异常工时进行数 据分析、原因总结、明确改进措施、落实责任人与改善进度; 5、生产部对各部门的《异常工时改进方案》进行收集、审核、评价; 6、行政部对各主责模块《异常工时改进方案》的评价结果纳入部门月度绩效 考核,根据改进的效果对责任部门实行扣分或加分;

Java异常处理总结(精)

Java 异常处理总结 找到一个关于异常总结的很详细的文章, 分享下. 异常在我们编程中很重,在适当的位置,合理的处理或者抛出异常,对程序来说至关重要。转:异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C 开始,你也许已经知道如何用if...else... 来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java 语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java 语言设计者的高明之处,也是Java 语言中的一个难点,下面是我对Java 异常知识的一个总结,也算是资源回收一下。 一、Java 异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误https://www.doczj.com/doc/a911165391.html,ng.Error ;如果你用System.out.println(11/0,那么你是因为你用0做了除数,会抛出https://www.doczj.com/doc/a911165391.html,ng.ArithmeticException 的异常。有些异常需要做处理,有些则不需要捕获处理,后面会详细讲到。天有不测风云,人有旦夕祸福,Java 的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。 Java 中的异常用对象来表示。Java 对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class ),每个异常都对应一个异常(类的)对象。 异常类从哪里来?有两个来源,一是Java 语言本身定义的一些基本异常类型,二是用户通过继承Exception 类或者其子类自己定义的异常。Exception 类及其

基于Java语言的异常处理机制的研究

基于语言的异常处理机制的研究 摘要:是一种面向对象的程序设计语言,其异常处理机制是语言的一大特色。本文讨论了的异常处理机制,并指出了异常处理机制使用中的常见错误模式及注意事项,以便更好的利用解决实际问题。 关键字:; 异常; 异常处理机制; 错误模式 引言:异常是一个运行时错误。在不支持异常处理的计算机语言中,错误必须被手工检查和处理——典型的是通过错误代码的运用等等,这种方法既笨重又麻烦。的异常处理机制避免了这些问题,采用面向对象的方法来管理运行时错误。 1、异常处理思想的由来 异常即程序运行时出现的非正常情况。在程序的运行过程中随时都有可能发生错误的可能。这些错误可能是由于包含不合法的输入数据所造成的,或者是数组越界存取,还可能是因为试图使用空引用来引用对象。当这些错误发生时,通常希望程序能够智能化地处理,而不会导致系统的崩溃或数据的丢失。错误处理的终极任务就是将错误从发生地传递到能够处理它的地方。 图、传统的错误处理方式 在传统的非面向对象的编程语言中,错误处理的任务全落在程序员身上,这样做有两个去缺点,一是程序员的负担过重,二是出错处理不规范,不利于程序员之间的协作沟通,而且降低了程序的可读性。在中使用异常为程序提供了一种有效的错误处理方式,使得方法的异常中止和错误处理有了一个清晰的接口:当一个方法引发一个异常之后,可以将异常抛出,由该方法的直接或间接调用者处理这个异常。这就是常说的 (捕获抛出)方式。这种处理方式使得错误的处理规范化,程序员可以用一致的方式来处理错误。 2、的异常处理机制 异常处理机制基于三中操作:声明异常、抛出异常和捕获异常。具体见图。 声明异常告诉编译程序哪里可能出错。当一个语句引起错误时,含有这个语句的方法就 会创建一个异常对象并将它传递给系统。异常对象包含有关异常的信息,包括它的类型和出错时程序的状态。一个方法抛出异常后,运行系统开始寻找用来处理错误的代码。处理错误的代码称为异常处理器,从当前的方法开始,通过方法调用链向后搜索,查找这一代码。处理器必须与抛出的异常类型相匹配,如果未发现异常处理器,程序就会中止。任何不是被你程序捕获的异常最终都会被系统提供的默认处理程序处理。默认处理程序显示一个描述异常的字符串,打印异常发生处的堆栈轨迹并且终止程序。 3、异常处理机制的规则 具体而言的异常处理通过个关键字控制:、、、和。想要进行异常监控的代码被包含在一个块中。如果在“”块中发生异常,它被抛出。程序代码可以捕捉这个异常(用)并且用某种合理的方法处理该异常。系统产生的异常在运行时被系统自动引发。手动引发一个异常,用关键字。任何被引发方法的异常都必须通过子句定义。任何在方法返回前绝对被执行的代码都被放置在块中。下面是一个异常处理的通常形式: { } ( ) { } ( ) { }

C异常处理实现(精)

C异常处理实现: setjmp和longjmp 此文为internet上选摘,过后我会用自己的理解补充此文。 ------------ 将对setjmp与longjmp的具体使用方法和适用的场合,进行一个非常全面的阐述。 另外请特别注意,setjmp函数与longjmp函数总是组合起来使用,它们是紧密相关的一对操作,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,才能按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。 与goto语句的作用类似,它能实现本地的跳转 这种情况容易理解,不过还是列举出一个示例程序吧!如下: void main( void ) { int jmpret; jmpret = setjmp( mark ); if( jmpret == 0 ) { // 其它代码的执行 // 判断程序远行中,是否出现错误,如果有错误,则跳转! if(1) longjmp(mark, 1); // 其它代码的执行 // 判断程序远行中,是否出现错误,如果有错误,则跳转! if(2) longjmp(mark, 2); // 其它代码的执行 // 判断程序远行中,是否出现错误,如果有错误,则跳转! if(-1) longjmp(mark, -1); // 其它代码的执行 } else { // 错误处理模块 switch (jmpret) { case 1: printf( "Error 1"n");

break; case 2: printf( "Error 2"n"); break; case 3: printf( "Error 3"n"); break; default : printf( "Unknown Error"); break; } exit(0); } return; } 上面的例程非常地简单,其中程序中使用到了异常处理的机制,这使得程序的代码非常紧凑、清晰,易于理解。在程序运行过程中,当异常情况出现后,控制流是进行了一个本地跳转(进入到异常处理的代码模块,是在同一个函数的内部),这种情况其实也可以用goto语句来予以很好的实现,但是,显然setjmp与longjmp的方式,更为严谨一些,也更为友善。程序的执行流如图17-1所示。

异常情况处理流程说明

异常情况处理流程说明 一、“异常情况”包括 1、质量不合格问题。主要包括制程质量问题、售后质量问题、技术设计或图纸下发后出现问题、调试中 质量问题、外购设备物资质量问题等; 2、交货期延误问题、采购交期延误问题及其他有关生产进度的问题等; 3、生产物料损耗异常问题; 4、生产设备损坏问题; 5、员工违纪问题; 6、其它异常问题。 二、员工出现异常问题,应及时按规定报于部门领导; 三、企管部(质检部)在日常工作中发现员工出现异常问题时,应作出《整改通知》或《整改报告》,由 责任部门签收; 四、员工所属部门部长应及时落实责任人并对问题组织处理。责任人是指直接或间接造成各类问题发生的 员工包括各级管理人员。 五、责任部门部长应督促责任人填写《异常情况处理报告》,责任人应根据问题发生的原因、经过、问题 的现象或后果、问题发生的时间和发现时间,进行详细如实填写,并随后签字确认; 六、责任人填写完毕交直接主管进行原因分析,提出解决措施,并填写《异常情况处理报告》,上交部门 负责人。 1、责任人的直接主管为班长的,该班长应根据问题的具体情况认真分析,确定属于哪种原因,并分析自 己在问题中所负的责任,必须认真填写明白,不得包庇、隐瞒; 2、责任人的直接主管为部长的,则由责任人所属部门部长填写; 3、责任人为部长的,责任人可以不填写此栏,只填写“问题描述”和“责任部门处理意见”; 4、责任人为副总的,责任人填写“问题描述”和“处理意见”; 七、责任人所属部门部长应详细调查、分析问题,确定解决措施,并填写处理报告,依据公司的有关规定 并分析自己在问题中所负的责任,做出公平、公正的处理意见;该部长应本着认真客观的态度对待问题,反思自己工作的欠缺,及时纠正并预防问题的再次发生。 八、责任部门将报告交分管副总,分管副总分析问题发生原因和相关负责人的处理意见,根据公司的有关 规定,对责任人做出处理意见;并由责任部门部长将报告交企管部(质检部); 九、企管部长(质检部长)实施监督职责,本着公平、公正地原则,对问题深入分析,不确定的问题应重 新调查,并分析责任部门的处理建议是否符合公司的有关规定。若符合规定则填写问题处理报告,做出企管部(质检部)的处理意见;若不符合有关规定,或责任部门的处理意见有失公平、公正,则需

相关主题
文本预览
相关文档 最新文档