-
Java try和catch的使用
尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常。这样做有两个好处。第一,它允许你修正错误。第二,它防止程序自动终止。大多数用户对于在程序终止运行和在无论何时错误发生都会打印堆栈轨迹感到很烦恼(至少可以这么说)。幸运的是,这很容易避免。 为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了。紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句。完成这个任务很简单,下面的程序包含一个处理因为被零除而产生的ArithmeticException异常的try块和一个catch子句。 class Exc2{ ... -
Java throws子句
如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常。做到这点你可以在方法声明中包含一个throws子句。一个throws子句列举了一个方法可能抛出的所有异常类型。这对于除Error或RuntimeException及它们子类以外类型的所有异常是必要的。一个方法可以抛出的所有其他类型的异常必须在throws子句中声明。如果不这样做,将会导致编译错误。 下面是包含一个throws子句的方法声明的通用形式: type method-name(parameter-list)throws exception-list{ //bod... -
再谈Java包
在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包。 包不但可以包含类,还可以包含接口和其他的包。 目录以\来表示层级关系,例如E:\Java\workspace\Demo\bin\p1\p2\Test.java。 包以.来表示层级关系,例如p1.p2.Test表示的目录为\p1\p2\Test.class。 如何实现包 通过package关键字可以声明一个包,例如: package p1.p2; 必须将package语句放在所有语句的前面,例如: package p1.p2; public class Test{... -
Java继承的概念与实现
继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。 继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。 继承使用extends关键字。 例如我们已经定义了一个类People: class People{ String name; int age; int height; void say(){ System.out.println(我的名字是+name+,年龄是+age+,身高是+height); } } 如果现在需要定义一个类Tea... -
Java源文件的声明规则
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则: 一个源文件中只能有一个public类。 一个源文件可以有多个非public类。 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。 如果一个类定义在某个包中,那么package语句应该在源文件的首行。 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。 import语句和pac... -
Java继承中方法的覆盖和重载
在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。 如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法。 参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。 被覆盖的方法在子类中只能通过super调用。 注意:覆盖不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用。 请看下面的例子: public class Demo{ public static void main(St... -
Java super关键字
super关键字与this类似,this用来表示当前类的实例,super用来表示父类。 super可以用在子类中,通过点号(.)来获取父类的成员变量和方法。super也可以用在子类的子类中,Java能自动向上层类追溯。 父类行为被调用,就好象该行为是本类的行为一样,而且调用行为不必发生在父类中,它能自动向上层类追溯。 super关键字的功能: 调用父类中声明为private的变量。 点取已经覆盖了的方法。 作为方法名表示父类构造方法。 调用隐藏变量和被覆盖的方法 public class Demo{ public static void main(Str... -
Java instanceof 运算符
多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型。C++使用runtime-type information(RTTI),Java使用instanceof操作符。 instanceof运算符用来判断一个变量所引用的对象的实际类型,注意是它引用的对象的类型,不是变量的类型。请看下面的代码: public final class Demo{ public static void main(Stringargs){ //引用People类的实例 People obj=new People(); if(obj instanceof Object){ Sy... -
Java多态和动态绑定
在Java中,父类的变量可以引用父类的实例,也可以引用子类的实例。 请读者先看一段代码: public class Demo{ public static void main(Stringargs){ Animal obj=new Animal(); obj.cry(); obj=new Cat(); obj.cry(); obj=new Dog(); obj.cry(); } } class Animal{ //动物的叫声 public void cry(){ System.out.println(不知道怎么叫); } ... -
Java多态对象的类型转换
这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制类型转换时,java运行时将抛出java.lang.ClassCastException异常。 在继承链中,我们将子类向父类转换称为“向上转型”,将父类向子类转换称为“向下转型”。 很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型。程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性。 然而有些时候为了完成某些父类没有的功能,我们需要将向上转型后的子类对象再转成子类,调用子类的方法,这就是向下转型。 注意:不能直接将父类的对象强制转换为子类... -
Java final关键字:阻止继承和多态
在Java中,声明类、变量和方法时,可使用关键字final来修饰。final所修饰的数据具有“终态”的特征,表示“最终的”意思。具体规定如下: final修饰的类不能被继承。 final修饰的方法不能被子类重写。 final修饰的变量(成员变量或局部变量)即成为常量,只能赋值一次。 final修饰的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。 final修饰的局部变量可以只声明不赋值,然后再进行一次性的赋值。 final一般用于修饰那些通用性的功能、实现方式或取值不能随意被改变的数据,以... -
Java final关键字:阻止继承和多态
在Java中,声明类、变量和方法时,可使用关键字final来修饰。final所修饰的数据具有“终态”的特征,表示“最终的”意思。具体规定如下: final修饰的类不能被继承。 final修饰的方法不能被子类重写。 final修饰的变量(成员变量或局部变量)即成为常量,只能赋值一次。 final修饰的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。 final修饰的局部变量可以只声明不赋值,然后再进行一次性的赋值。 final一般用于修饰那些通用性的功能、实现方式或取值不能随意被改变的数据,以...