



























显示结果为:hello
hello 6
在上面的例子中我们用到了这样一句:
public static void main(String[] args)
这个main方法是J2SE应用程序的入口,所有的J2SE应用程序都从这个方法开始运行。现在先来介绍一下static关键字,后面再来介绍main方法与初始化方面的知识。
static关键字可以用在方法与实例域前面。当static用于实例域时,表示此实例域是静态的,即只能赋值一次。当static用于方法时,表示此方法是静态方法。一般我们将静态实例域与静态方法称为类实例域与类方法。因为他们不需要创建对象就可以直接由类名调用。例如:

class StaticATest...{

StaticATest()...{
System.out.println("StaticATest()");
}

void test()...{
System.out.println("StaticATest.Test()");
}
}


class StaticBTest...{
static StaticATest st = new StaticATest();

static void test()...{
System.out.println("StaticATest.Test()");
}
}


public class StaticTest...{

public static void main(String[] args)...{
StaticBTest.test();
StaticATest t = StaticBTest.st;
t.test();
}
}
现在来介绍封装,什么是封装?在解释这个概念前我们先来认识一下包与可见权限。包是由package关键字定义的,创建包的主要用途是管理命名。Java语言中有四种可见权限,这四种可见权限分别是:
(a)public:表示在整个Java中都可以见(使用)。
(b)private:表示只可在类中可见(使用)。
(c)protected:表示在包中可见(使用)且在子类中也可见(使用)。
(d)default(默认):只可在包中使用(可见)。
现在我们来解释封装的概念,封装其实就是把类中一些实例域或方法隐藏起来,不让外部直接访问到这些内容。具体操作就是将类中所有的实例域都定义为private,并且为每个实例域创建一个public的方法,使外部可以调用它。将不对外的方法全部使用private。
类的扩展有两种方法,一种是组合,另外一种是继承。组合即将一个对象作为另外一个类的实例域。继承即用一个新类来扩展另外一个类,这个新类被称为子类,被用来扩展的那个类称为父类。子类拥有父类除private定义外的所有实例域和方法。继承需要使用关键字extends来扩展新类。若父类中有一个非private的方法,此时我们在子类中定义一个同样的方法,则子类的这个方法覆盖了父类的那个方法。覆盖父类方法后的可见性不可低于父类方法。在子类覆盖父类的那个方法中调用父类的那个被覆盖的方法,我们需要使用super关键字。且关键字必须放在方法作用域的第一行。Java语言只可以单继承。且Java语言中的所有类都用一个共同父类Object,这个父类有以下几个重要方法equals(),toString()等方法。其中equals()方法是比较两个对象的内容是否相等。在类库中这个方法大部分是这样实现的,但是它的默认方式却是比较两个对象的引用。故在创建新类时要覆盖此方法以达到所需要应用目的。toString()方法是返回类中各实例域的信息。在创建自己的类时也要覆盖此方法。抽象类是一种不可以创建对象的类,此类只可以做为继承的父类。一般将公共的信息作为此类的元素。抽象类中还可以定义抽象方法,若继承抽象类的类中用抽象方法,则此类仍然为抽象类。抽象类由abstract关键字定义。
介绍完类的继承后,现在我们来了解一下类的初始化。类的初始化顺序一般为以下几步:
1、父类static实例域的初始化。
2、子类static实例域的初始化。
3、父类普通实例域按定义顺序进行初始化。
4、运行父类构造器。
5、子类普通实例域按定义顺序进行初始化。
6、运行子类构造器。
例如:

class FatherStaticTest...{

FatherStaticTest()...{
System.out.println("FatherStaticTest()");
}
}


class FatherTest...{

FatherTest()...{
System.out.println("FatherTest()");
}
}


class SonStaticTest...{

SonStaticTest()...{
System.out.println("SonStaticTest()");
}
}


class SonTest...{

SonTest()...{
System.out.println("SonTest()");
}
}


class FatherClass...{

FatherClass()...{
System.out.println("FatherClass()");
}

public static void Test()...{
System.out.println("FatherClass.Test()");
}

private FatherTest ft = new FatherTest();
private static FatherStaticTest
































































































fst = new FatherStaticTest();
}


class SonClass extends FatherClass...{

SonClass()...{
System.out.println("SonClass()");
}
private SonTest st = new SonTest();
private static SonStaticTest











sst = new SonStaticTest();

public static void main(String[] args)...{
System.out.println("main()");
SonClass sc = new SonClass();
}
}
运行显示结果:FatherStaticTest()
SonStaticTest()
main()
FatherTest()
FatherClass()
SonTest()
SonClass()
static定义的内容仅在调用static实例域,调用static方法,创建对象时才被初始化。记住static方法是不能使用this关键字,即static方法中,不可使用对象。
Java语言中还有一关键字也需要交代一下,那就是定义常量的final关键字,这个关键字在Java语言类中也有其他的含义,若在定义类时,在类名前加上final关键字,则此类不可以被继承。若类中一个方法前使用final关键字,则此方法不可以被覆盖。注意,使用private关键字的方法,自动将其设置为final。
多态是Java面向对象的基石之一。何为多态,多态即子类的对象可以向上转型为其父类对象,但在实际应用中,又可以准确调用子类自己的方法。例如:

abstract class Animal...{

public void call()...{}
}


class Dog extends Animal...{

Dog(String s)...{
this.s = s;
}

public void call()...{
System.out.println("Dog " + s<img src="">);
}
private String s;
}


class Cat extends Animal...{

Cat(String s)...{
this.s = s;
}

public void call()...{
System.out.println("Cat " + s);
}
private String s;
}


public class AnimalTest...{

public static void main(String[] args)...{
Animal a1 = new Dog("汪汪");
Animal a2 = new Cat("喵喵");
a1.call();
a2.call();
}
}

运行结果为:Dog 汪汪
Cat 喵喵
Java语言值得我们使用的最重要一点就是垃圾处理机制,奶奶的,设计出Java语言的那位天才真的想的很周到,将很多的内容都交给了类库与Java虚拟机来完成,不过这也带来了一定的弊端,就是内存与速度。不过世界上也没有十全十美的东西。它所带来的好处也是多多的。不然他就不会这么流行。
到这里为止Java语言的基本内容可以说已经全部介绍完了。也许有人会问接口,内部类等等,这些我认为已经算是高级的东西了。等下篇我在来介绍。





































































