原创:simon
本文向大家介绍如何创建Java类和创建Java类的基本语法,通过一个例子来向大家介绍类的主要概念。
Public class Stack
{
private Vector items;
publicd Stack()
{
items = new Vector(10);
}
public Object push(Object item)
{
items.addElement(item);
returen item;
}
public synchronized Object pop()
{
int len = items.size();
Object obj = null;
if(len == 0)
throw new EmptStackException();
obj = items.elementAt(len - 1);
items.removeElementAt(len - 1);
return obj;
}
public boolean isEmpty()
{
if(items.size() == 0)
return true;
else
return false;
}
}
上面的例子定义了一个类叫作Stack,在这个类中定义了一个实例变量items,定义了一个构造器,定义了三个方法,关于实例变量,构造器和方法我们会再后面一个一个的给大家进行讲解。
类的定义:
一个类在使用前必须要进行定义,当然Java本身提供了许多类,你可以直接拿过来使用,就象C语言中预定义的许多变量一样,不用你自己定义了。类声明的语法主要包括两个部分,一个是类的声明,就是上面例子中的第一行语句,用来声明类的名称等信息;下面用一对大括号括起来的部分称为类体,用来定义类的实例对象,构造器和方法等。
类的声明:
下面我们给出类声明的语法,
public class is publicly aclearcase/" target="_blank" >ccessible
abstract class cannot be instantiated
final class cannot be subclassed
class NameOfClass Name of the Class
extends Super Superclass of the class
implements Interfaces Interfaces implemented by the class
{
ClassBody
}
上面的语法中,大括号前面的内容就是类声明的基本语法,其中Class NameOfClass是类声明中最主要的部分,它定义了类的名称,是必不可少的,Class是Java的关键字,NameOfClass是类的真实名称。public,abstract,final可看成是一组,在使用的时候只能使用其中一个,他们必须放在类的名称前面,如果使用public说明定义的这个类可以被在同一个封装中的其他类所使用和访问,如果使用abstract说明定义的这个类是一个抽象类,不能用此类来创建类的实例,也就是对象,如果使用final说明定义的类是一个终极类,不能在用这个类来定义子类了。extends Super和implements Interfaces可以看成一组,在使用的时候只能使用其中的一个,如果使用extends Super说明现在定义的类是一个超类的子类,如果使用implements Interfaces说明该类使用了Interfaces接口,这两个组成部分体现了类的继承特性。
类定义中的类体部分主要包含三个成分:实例变量,构造器和方法,这三个成分称为类的成员。其中实例变量用来保存类的状态,构造器用来对类的实例进行初始化,方法将用来赋予类强大的能力,来完成一些工作。
下面我们就组成类体的三个成分分别进行说明:
构造器:
构造器的作用就是对类的实例进行初始化。构造器的名字必须和类名称相同。比如例子中展示的类Stack的构造器也叫Stack。Java允许类可以有多个构造器,但所有的构造器名称都要相同,要和类名称相同,但每个构造器的参数数量和类型是不同。编译器会根据参数的数目和类型来准确的判断应该使用哪个构造器来对类的实例进行初始化。一般的情况下,构造器主要就是对类的实例变量进行初始化。编译器会根据你调用构造器时所使用的参数的个数和类型来选择准确的构造器。
当你编写一个类的时候,你也可以不给类定义构造器,此时Java的运行环境会自动使用默认的构造器来对类实例进行初始化。
实例变量:
在上面的例子中我们使用了一个实例变量:
private Vector items;
实例变量用来描述类的状态。注意:为了声明实例变量我们应该将上面这条语句方法类体中,但不能放在类的方法声明中。在方法中声明的变量是方法的本地变量,和我们现在提到的实例变量是不一样的。
accessLevel Indicates the access level for this member
static Declares a class member
final Indicates that it is constant
transinet This variable is transient
volatile This variable is volatile
type name The type and name of the variable
上面就是声明一个实例变量的语法成分,其中type name是声明一个实例变量必须要有的,type用来说明实例变量的数据类型,也就说明该变量可以用来存放的值的类型,name是实例变量的名称,变量名可以由任何合法的字符组成,首字符应该是一个字母。在一个类中,实例变量应该是唯一的,不能存在两个名称相同的实例变量,但你可以在该类的子类中重新定义一个实例变量和你的超类的实例变量名称相同,这时,子类的实例变量会覆盖掉超类的实例变量,另外实例变量的名称可以和类中的某个方法的名称相同。
除了type name之外,下面我们对其他的成分进行一下说明:
accessLevel
你可以使用这个修改符来控制其他类对该实例变量的访问方式,不同的访问方式包括:public,protected,package,和private。
static
声明一个类变量,这个变量在不声明类实例的情况下就可以使用,使用的方式是:对象名.变量名
final
使用这个修改符实际上上是定义了常量,他的值是不能被改变的。所以你不能在程序中去修改他的值,如果你试图这样做的话,结果将是在编译的时候发生错误。
transient
这中控制方式实际上不是Java语言主要的控制方式,主要是在serialization对象中使用。
volatile
这个修改符用来通知编译器不要在编译的时候对实例变量进行优化,这是一个Java的高级特性,一般很少用到他。
方法:
向你所知道的那样,对象有一个能力就是去执行一些方法,其他类的对象可以通过调用该类的方法来让该类执行一定的操作,下面我们就来看看如何在你的程序中给类填加方法。
public Object push(Objec item)
{
items.addElement(item);
return item;
}
上面的例子定义了一个方法,通过这个例子我们可以分析一下,一个方法的定义应该包括两大部分,一个就是方法声明,一个是方法体。
方法声明用来定义类的各种性质,例如访问级别,返回类型,名称和参数等等。
accessLevel Access level for this method
static This is a class method
abstract This method is not implemented
final Method cannot be overridden
native Method implemented in another language
synchronized Method requires a monitor to run
returnType methodname The return type and method name
(paramlist) The list of arguments
throws exceptions The exceptions thrown by this method
上面就是声明一个方法的语法成分,一样其中rutuenType mehtodname是在声明一个方法的时候必须要有的,其中methodname是方法的名称。returntype是方法的返回值类型。
声明一个方法的语法中其他的成分说明如下:
accessLevel:
和声明一个实例变量时是一样的,用来控制其他类访问该方法的方式,其中包括public,protected,package,和private。
static:
用来声明一个类方法,该方法可以在不声明对象实例的情况下直接使用,使用的语法是:对象名.方法名
abstract:
用来声明一个抽象方法,该方法不能通过对象实例来直接使用,因为该方法一定是一个抽象类中的方法。
final:
声明一个终极类方法,就是说在该类的子类中不能用同名的方法来覆盖本方法。
native:
如果你有一些使用其他编程语言编写的函数,想在Java程序中使用他们,你可以使用native关键字来声明类中的某个方法不是用java编写的,这样你就可以将以往的工作成果包含到你的Java程序中。
synchronized:
当多个方法可能同时对同一个数据进行操作时,就需要对这些方法进行同步,确保每个方法的操作不会影响到其他的方法,这时你就可以使用该方法来完成。
(paramlist)
这是方法的参数,用来给方法传递信息。
[throws exceptions]
当你的程序在执行过程中可能会出现一些问题或错误的时候,你应该进行违例处理,这就是本成分的功能,具体的违例处理我们还会在其他的文章中进行说明。
在方法体中,你可以编写任何条数的语句。另外我们还要说明三个概念:
this:
在类的方法中,你可以使用this来表示对本类自身的调用,比如你在方法中需要使用到该类的某个实例变量,你可以通过this.变量名来使用。
super:
如果你的类是一个超类的子类,你可以通过在该类的方法中使用super来调用超类的方法和实例变量等。
本地变量:
你可以在方法体中声明任意数量的本地变量。这些变量是本地变量,他们的作用域只限于本方法内,当方法结束的时候,该变量的生命期就结束了。
好,最后我们再对private,public,protected,package说明一下:
在类中,声明方法和实例变量的时候都可以通过上面的四个修改符来控制他们可能被其他类访问的方式,其中:
private:
将限制方法和实例变量只能被本方法中的其他方法所访问。
protected:
则允许类的方法和实例变量可以被该类,子类和在一个Package中的其他方法所访问
public:
允许任何类来访问。
package:
则限制只有该类和在一个Package中的其他类来访问。
ok,我们通过上面的讲解,基本说明了定义一个类的基本语法成分,大家如果对这一部分的内容理解之后,我想你就可以自己利用前面提到的Java基本语法和类的基本语法来编写自己的类了!