Article View: cn.bbs.comp.lang.java
Article #21462С���쳣��Exception�������ķ���(2)
From: ��ɽ������,�ɾ����ѵ�
Date: Wed, 03 Dec 2003 12:14
Date: Wed, 03 Dec 2003 12:14
221 lines
19350 bytes
19350 bytes
CSDN - �ĵ����� - Java
���� С���쳣��Exception�������ķ���(2) maqj�����룩
�ؼ��� ����(Exception)�����������
���� http://www.javaworld.com/javaworld/jw-10-2003/jw-1003-generics.html
?
��Ҫ�������쳣
�ڸ��ӵ�����У���������һЩ�ض��Ĵ����ִ��ʱ���׳����ֲ�ͬ�쳣�ķ�������
̬װ��һ�����ʵ��һ�������ܻ�������ͬ���쳣������ClassNotFoundException
, InstantiationException, IllegalAccessException, �� ClassCastException��
һ����æ�ij���Ա�������������ʱ���ܼİѷ������ð���һ��ֻ�Ჶ������
��Exception��try/catch�飬��������ĸ���ͬ��catch�鵽try�����(�������
�����嵥��)���⿴�����ƺ����÷�ȴ�����һЩ����ʶ�ĸ���Ч�����磬��
��className()��null,��ôClass.forName()�����׳�һ��NullPointerException��
��������������б���������������£�catch�齫������쳣��Ȼ���û����ȥ
��������һ���쳣��ֻ����ΪNullPointerException��RuntimeException��һ������
������RuntimeException����Exception��һ�����ࡣ����һ����ͨ��catch(Exception
e)���Ჶ������RuntimeException�����࣬����NullPointerException, IndexOutOfBoundsException
, ��ArrayStoreException��ͨ����һ������Ա��������ȥ������Щ�쳣��
�ڴ����嵥3��,null��className�ᵼ��һ��NullPointerException�쳣�������
���ڵ��õķ�����������Ч��
�����嵥3
public SomeInterface buildInstance(String className) { SomeInterface impl
= null; try { Class clazz = Class.forName(className); impl =
(SomeInterface)clazz.newInstance(); } catch (Exception e) { log
error("Error creating class: " + className); } return impl;}
��һ��ʹ�÷��Ͳ����Ӿ�Ľ����������־��¼����Ϊcatch��֪��������һ������
���쳣��������Щ����Ա��������������ʱ��ȡ��Ӽ����ֶ�ȥ�鿴�쳣
������(�����嵥4)�����������ʹ��catch���Ŀ����롣
�����嵥4
catch (Exception e) { if (e instanceof ClassNotFoundException) {
log.error("Invalid class name: " + className + ", " + e.toString());
} else { log.error("Cannot create class: " + className
+ ", " + e.toString()); } }
�����嵥5�ṩһ������IJ��������쳣�����ӣ�һЩ����Ա���ܻ�����Ȥ������
��instanceof���DZ������Ϊ���������쳣�Իᱻ����ÿһ���������쳣(ClassNotFoundException
, InstantiationException, IllegalAccessException) �ᱻ����ʹ��?����һ��
��װ����ȷ������ȴû��ʵ��SomeInterface�ӿ�����������������һ��ClassCastException
�쳣������쳣Ҳ�ᱻ��֤��
�����嵥5
public SomeInterface buildInstance(String className) { SomeInterface impl
= null; try { Class clazz = Class.forName(className); impl =
(SomeInterface)clazz.newInstance(); } catch (ClassNotFoundException
e) { log.error("Invalid class name: " + className + ", " + e.toString
()); } catch (InstantiationException e) { log.error("Cannot create
class: " + className + ", " + e.toString()); } catch (IllegalAccessException
e) { log.error("Cannot create class: " + className + ", " + e.toString
()); } catch (ClassCastException e) { log.error("Invalid class type
, " + className + " does not implement " + SomeInterface.class.getName
()); } return impl;}
��ijЩ����£���õķ����������׳�һ����֪���쳣�����߽д���һ���µ��쳣��
������ͼȥ�ڵ�ǰ��������д��?��������÷���ͨ���������쳣��һ����֪
����������ȥ�������ִ������Ρ�
����Ĵ����嵥6�ṩ��һ��buildInterface()�������滻�汾�������װ���ʵ��
����ʱ�������⣬����汾���׳�һ��ClassNotFoundException�쳣�������������
�����÷�����ȷ���õ�һ����ȷ��ʵ����������һ���쳣��������÷����Ͳ���
Ҫȥ��鷵�صĶ����Ƿ�Ϊ���ˡ�
ע���������ʹ����Java 1.4�ķ���������һ���Ѿ���������쳣��װ���µ��쳣��
�Ա㱣��ԭʼ�Ķ�ջ������Ϣ������ջ���ٽ�ָ������buildInstance()������
�쳣��Դ������DZ�ڵ���newInstance()�׳����쳣��
�����嵥6
public SomeInterface buildInstance(String className) throws ClassNotFoundException
{ try { Class clazz = Class.forName(className); return (SomeInterface
)clazz.newInstance(); } catch (ClassNotFoundException e) { log.error
("Invalid class name: " + className + ", " + e.toString()); throw e;
} catch (InstantiationException e) { throw new ClassNotFoundException
("Cannot create class: " + className, e); } catch (IllegalAccessException
e) { throw new ClassNotFoundException("Cannot create class: " + className
, e); } catch (ClassCastException e) { throw new ClassNotFoundException
(className + " does not implement " + SomeInterface.class.getName(
), e); }}
����Щ����£���δ����������ij�ִ���״̬�ָ�����ʱ������һ��������쳣
��ʹ������ָ��ij��״̬�Ƿ��ǿɻָ��ľͱ�ú���Ҫ�ˡ������������ֹ۵�ȥ����
���嵥6����ʵ������ӡ�
�ڴ����嵥7�У����className��Ч������᷵��һ��ȱʡ�Ķ������׳�һ����
����ָ���Ƿ��IJ�������������ת�ͻ����Ȩ������
ע�⣺IllegalClassException��һϵ�е��쳣�࣬Ϊʾ����Ŀ�Ķ������ἰ����ע
��������Java�������
�����嵥7
public SomeInterface buildInstance(String className) throws IllegalClassException
{ SomeInterface impl = null; try { Class clazz = Class.forName(
className); return (SomeInterface)clazz.newInstance(); } catch (
ClassNotFoundException e) { log.warn("Invalid class name: " + className
+ ", using default"); } catch (InstantiationException e) { log.
warn("Invalid class name: " + className + ", using default"); } catch
(IllegalAccessException e) { throw new IllegalClassException("Cannot
create class: " + className, e); } catch (ClassCastException e) {
throw new IllegalClassException(className + " does not implement
" + SomeInterface.class.getName(), e); } if (impl == null) { impl
= new DefaultImplemantation(); } return impl;}
ʲôʱ��Ӧ����һ�������쳣��
��ijЩ����²���һ�������쳣�ǿ��Եģ����統��ܱ����ұ���ȥ����һ��������
����ʱ����������dz����⣬�Ҷ��ڴ��͡�����ʧ�ܵ�ϵͳ��˵����Ҫ���ڴ�����
��8�У���һ����������ж�ȡ����˳���?���ǣ���������ʱ���������
���쳣����һ��BadRequestException���κ�RuntimeException�����࣬����NullpointerException
�������Ǹ��쳣�ͻᱻwhileѭ���ⲿ��������κδ�������ѭ����ֹ����
�κ�ʣ��������ᱻ���?����ζ�����������ڼ�ȥ����һ��������һ�ֽϲ�
�����
�����嵥8
public void processAllRequests() { Request req = null; try { while
(true) { req = getNextRequest(); if (req != null) {
processRequest(req); // throws BadRequestException }
else { // Request queue is empty, must be done
break; } } } catch (BadRequestException e) { log.error
("Invalid request: " + req, e); }}
�����������һ�ֽϺõķ����Ƕ��������������������Ҫ�ĸı䣬���ȣ���try
/catch�������������ѭ���С�����Ļ��κδ�����ѭ���ڲ�������ʹ��?
���Ҳ�������ѭ����ֹ�����ѭ�������������ʹһ������������ʧ�ܡ���
����������try/catch��ʹ��ȥ����һ�����͵��쳣�������κ��쳣����ѭ����
������������Ҳ���Լ����?�뿴��������嵥9��
�����嵥9��
public void processAllRequests() { while (true) { Request req = null
; try { req = getNextRequest(); if (req != null) {
processRequest(req); // Throws BadRequestException }
else { // Request queue is empty, must be done
break; } } catch (Exception e) { log.error("Error
processing request: " + req, e); } }}
����һ�������쳣����������ֱ���뱾ƪ��ʼ�Ĺ۵���Υ����ȷʵ��ˡ����ǣ���ֻ
���ڷdz��dz�����ĵĻ����¡�����������£�����һ�����͵��쳣�Է�ֹһ������
���쳣��ֹ���ϵͳ���С�
������������¼���һ��ѭ���б����������£���ʹ�ڴ����ڼ����쳣���׳���
�Ǹ�ѭ������Ҫִ���Ա����ȥ���?
�ڴ����嵥9�У��ڴ���ѭ����try/catch�鱻��Ϊ�Ƕ����쳣�����ߣ�the top-level
exception handler������������Ҫ����ͼ�¼������������뼶��������쳣����
���쳣û�б����ԣ�Ҳ���ᶪʧ�������쳣�����ж�������Ҫ���������
ÿ�����͡����ӵ�ϵͳ����һ�������쳣�����ߣ�������ÿһ����ϵͳ����ȡ����ϵ
ͳ�����ɴ���ģ��������쳣����������ȥ�����쳣�����DZ�����⣬��������
����ֹ���������²���ͼ�¼������⡣�Ⲣ���ǰ�ʾ���е��쳣��Ӧ���������
���׳����κ��쳣������ڽϵͼ��𱻴��?���Ӧ����ô������������쳣��
������ⷢ��ʱ��״̬���ͻ�֪���ĸ�ࡣ���ǣ�����쳣�����ڽϵͼ��𱻴���
����ô�׳�����������������Щ���ɻָ��Ĵ�����һ�������?����
�쳣�����ߣ������DZ鼰���ϵͳ��
��Ҫ���������쳣
�����ڳ����嵥1�е�����������ڳ���Ա������cleanupEverything()������������
���쳣��ʼ�ģ����һ�������ú���������һ�������׳�6����ͬ�쳣ʱ����
������:����������õ�����⣬���÷���Ҳ���ò�������6����ͬ���쳣���������
�嵥10����
�����嵥10
public void cleanupEverything() throws ExceptionOne, ExceptionTwo, ExceptionThree
, ExceptionFour, ExceptionFive, ExceptionSix { cleanupConnections(
); cleanupFiles(); removeListeners();}public void done() { try {
doStuff(); cleanupEverything(); doMoreStuff(); } catch (
ExceptionOne e1) { // Log e1 } catch (ExceptionTwo e2) { //
Log e2 } catch (ExceptionThree e3) { // Log e3 } catch (ExceptionFour
e4) { // Log e4 } catch (ExceptionFive e5) { // Log e5 }
catch (ExceptionSix e6) { // Log e6 }}
���ǣ���ʹ�����е����ң�ȴ�������ʹ�������쳣���Ա������ַdz���ʵ�����⣺
����һ������Exception������DZ�������ϸ�ڣ�����Ҳ��ʧȥ�˴�������֮���ڵ�
��ᡣ���һ��˵������һ�������쳣��ǿ���κε�������ķ����Ĵ���Ҫô������
�������쳣������ǰ��һ�����ַ��������⣩��Ҫô���������Ǹ������쳣������
�ⷶΧ��
�д���Ե��ǣ���һ�������������׳�һ�������쳣Exceptionʱ��������������
����������ԭ��֮һ��һ��ԭ���ǣ�������������˼�������ķ��������Ǽ�������
���ܻ���������ͬ���쳣�������ͣ��ģʽ������ģʽ�������������쳣״̬��
ϸ�ڡ���˲�����ʲô�����������ֻ�Ǽ���������׳�Exception������
������һ���쳣����װ�ڽϵͼ�����쳣��������һ�������ǣ��ڷ���ʵ�������
�����쳣Exception����throw new Exception())�ĵط�����Ϊ����Ա��Ϊ�쳣��ʵ
�ϲ�Ӧ�ñ���������������Ρ�
�������������ֻҪ��˼������ƣ��Ͷ��ɽ����ʲô��ϸ�ڣ���һ���쳣���Ӧ
�ñ������������ƿ��ܰ������������������������һЩȷʵ�ᷢ����쳣����
һ��ѡ���Ǵ���һ���쳣ȥ��װ�����������쳣�Ķ������ڴ��������£���������
�����쳣�����߽�һϵ���쳣��Ӧ�þ����ܵ���ϸ�����ָ���ϸ���쳣���ṩ����
�ڴ���״̬����Ϣ������������������α������������ϸ�ı���¼��
�����Exception�౻ѡ�У��Ǿ���ζ���κε���һ�������˻��׳�Exception����
�ķ�����Ҫô������������Ҳ���׳�Exception��Ҫô��װ�������������һ����
����Exception��try/catch���С��������ַ�����ǰ�������������⡣
С��ʹ�÷����쳣
��ƪ����̽���˴��?���쳣�ļ������棺������Զ����Ҫ��������Ҳ��Ӧ�����ԡ�
����Ӧ�ú��ٱ�����ֻ�ڷdz����������£������Dz����ṩ��ϸ��Ϣ��������ȥ
��Ч�Ĵ������ǣ������㲻����������ʱ��Ӧ��С�IJ����쳣��
�쳣��Java�е�һ��ǿ�����Ĺ��ߡ��������ȷʹ�ã�����ʹ���Ϊһ������Ч�ʵ�
����Ա������������Ŀ������ڣ��ر����ڲ��Ժ͵���ʱ�����쳣�������ʹ��ʱ��
�����ϵͳ�У�������������������ڣ����һ����һ�ε��ظ�������������Ҫ��ע
�������ĺ����ʹ�÷����쳣��
--
�������䣬��������
�������£������ĺ�
һ�������˻�һ��
һ����������һ��
��ɢ�����㣬��ɢ������
���ҴҴҽԹ��
[m[1;35m�� ��Դ:������δ��վ bbs.pku.edu.cn��[FROM: 162.105.40.117][m
Technical Details
Message-ID:
<49VETN$A0M@bbs.pku.edu.cn>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!newsfeed.news2me.com!elnk-nf2-pas!newsfeed.earthlink.net!sjc70.webusenet.com!news.webusenet.com!maily.cic.tsinghua.edu.cn!news.happynet.org!PKUShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: f6cb0,cecb458cee58af14,start X-Google-Attributes: gidf6cb0,public X-Google-ArrivalTime: 2003-12-03 04:15:15 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!newsfeed.news2me.com!elnk-nf2-pas!newsfeed.earthlink.net!sjc70.webusenet.com!news.webusenet.com!maily.cic.tsinghua.edu.cn!news.happynet.org!PKU From: skyswind@bbs.pku.edu.cn (��ɽ������,�ɾ����ѵ�) Newsgroups: cn.bbs.comp.lang.java Subject: С���쳣��Exception�������ķ���(2) Date: 03 Dec 2003 12:14:51 GMT Organization: ����δ��վ Message-ID: <49VETN$A0M@bbs.pku.edu.cn> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit X-Filename: Java/M.1070453639.A Lines: 221