JAVA教程之浅析Java言语中两种非常的不同
net程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net比。java程序员都是代码完成的,所以java程序员常戏称.net程序员是操作员,呵呵。<P> Java供应了两类次要的非常:runtimeexception和checkedexception。一切的checkedexception是从java.lang.Exception类衍生出来的,而runtimeexception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。它们的分歧的地方体现在两方面:机制上和逻辑上。
1、机制上
它们在机制上的分歧体现在两点:1.怎样界说办法;2.怎样处置抛出的非常。请看上面CheckedException的界说:
publicclassCheckedExceptionextendsException
{
publicCheckedException(){}
publicCheckedException(Stringmessage)
{
super(message);
}
}
和一个利用exception的例子:
publicclassExceptionalClass
{
publicvoidmethod1()
throwsCheckedException
{
//...thrownewCheckedException(“...堕落了“);
}
publicvoidmethod2(Stringarg)
{
if(arg==null)
{
thrownewNullPointerException(“method2的参数arg是null!”);
}
}
publicvoidmethod3()throwsCheckedException
{
method1();
}
}
你大概已注重到了,两个办法method1()和method2()城市抛出exception,但是只要method1()做了声明。别的,method3()自己其实不会抛出exception,但是它却声明会抛出CheckedException。在向你注释之前,让我们先来看看这个类的main()办法:
publicstaticvoidmain(String[]args)
{
ExceptionalClassexample=newExceptionalClass();
try
{
example.method1();
example.method3();
}
catch(CheckedExceptionex){}example.method2(null);
}
在main()办法中,假如要挪用method1(),你必需把这个挪用放在try/catch程序块傍边,由于它会抛出Checkedexception。
比拟之下,当你挪用method2()时,则不必要把它放在try/catch程序块傍边,由于它会抛出的exception不是checkedexception,而是runtimeexception。会抛出runtimeexception的办法在界说时不用声明它会抛出exception。
如今,让我们再来看看method3()。它挪用了method1()却没有把这个挪用放在try/catch程序块傍边。它是经由过程声明它会抛出method1()会抛出的exception来制止如许做的。它没有捕捉这个exception,而是把它传送下往。实践上main()办法也能够如许做,经由过程声明它会抛出Checkedexception来制止利用try/catch程序块(固然我们否决这类做法)。
小结一下:
*Runtimeexceptions:
在界说办法时不必要声明会抛出runtimeexception;
在挪用这个办法时不必要捕捉这个runtimeexception;
runtimeexception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。
*Checkedexceptions:
界说办法时必需声明一切大概会抛出的checkedexception;
在挪用这个办法时,必需捕捉它的checkedexception,否则就得把它的exception传送下往;
checkedexception是从java.lang.Exception类衍生出来的。
2、逻辑上
从逻辑的角度来讲,checkedexceptions和runtimeexception是有分歧的利用目标的。checkedexception用来唆使一种挪用方可以间接处置的非常情形。而runtimeexception则用来唆使一种挪用方自己没法处置或恢复的程序毛病。
checkedexception迫使你捕捉它并处置这类非常情形。以java.net.URL类的构建器(constructor)为例,它的每个构建器城市抛出MalformedURLException。MalformedURLException就是一种checkedexception。假想一下,你有一个复杂的程序,用来提醒用户输出一个URL,然后经由过程这个URL往下载一个网页。假如用户输出的URL有毛病,构建器就会抛出一个exception。既然这个exception是checkedexception,你的程序就能够捕捉它并准确处置:好比说提醒用户从头输出。
再看上面这个例子:
publicvoidmethod()
{
int[]numbers={1,2,3};
intsum=numbersnumbers;
}
在运转办法method()时会碰到ArrayIndexOutOfBoundsException(由于数组numbers的成员是从0到2)。关于这个非常,挪用方没法处置/改正。这个办法method()和下面的method2()一样,都是runtimeexception的情况。下面我已提到,runtimeexception用来唆使一种挪用方自己没法处置/恢复的程序毛病。而程序毛病一般是没法在运转过程当中处置的,必需更正程序代码。
总而言之,在程序的运转过程当中一个checkedexception被抛出的时分,只要可以得当处置这个非常的挪用刚刚应当用try/catch来捕捉它。而关于runtimeexception,则不该当在程序中捕捉它。假如你要捕捉它的话,你就会冒如许一个风险:程序代码的毛病(bug)被掩饰在运转傍边没法被发觉。由于在程序测试过程当中,体系打印出来的挪用仓库路径(StackTrace)常常使你更快找到并修正代码中的毛病。有些程序员倡议捕捉runtimeexception并记录在log中,我否决如许做。如许做的害处是你必需经由过程扫瞄log来找出成绩,而用来测试程序的测试体系(好比UnitTest)却没法间接捕捉成绩并呈报出来。
在程序中捕捉runtimeexception还会带来更多的成绩:要捕捉哪些runtimeexception?甚么时分捕捉?runtimeexception是不必要声明的,你如何晓得有无runtimeexception要捕捉?你想看到在程序中每次挪用办法时,都利用try/catch程序块吗?
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 是一种将安全性(Security)列为第一优先考虑的语言 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
页:
[1]