RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Java>列表

Java第三课

来源: 作者: 时间:2007-08-24 点击:

这是因为我们已经在目录sky2098.shiyanjun.keller内部了,所以访问不到MyPackage类了。

然而,如果我们拥有成千上万的类,要在磁盘上创建目录,工作量会很大,Java提供了自动生成目录的命令,我们可以这样做:

java源文件为:

 

package aa.bb.cc.test;
class Test{
public static void main(String[] args){
System.out.println(
"Test a package!!!");
}

}

在D:\javae\Lesson3目录下,编译后运行命令:

javac -d . Test.java

亦即 javac空格横d空格点空格Test点java

编译成功:

这样,就可以自动在我们的磁盘上创建目录D:\javae\Lesson3\aa\bb\cc\test:

这样,在比较大的项目开发中可以节省相当大的工作量。

关于javac的用法,可以查看DOS下的帮助:

通过帮助,我们也可以指定存放生成的类文件的路径,比如,在在D:\javae\Lesson3目录下,执行命令:

javac -d e:\java Test.java

亦即 javac空格横d空格e:\java空格Test点java

编译成功:

则在e:\java\目录下生成了目录aa\bb\cc\test,并且类文件Test.class存放在e:\java\aa\bb\cc\test目录下:

如果我们想要访问执行D:\java\aa\bb\cc\test目录下的Test.class文件,可以先设置classpath,在通过包访问:

但是这个运行的并不是我们实际想要运行的e:\java\aa\bb\cc\test目录下的Test.class文件。

因为我们设置classpath时%classpath%;表明了是当前目录,在当前目录下就已经找到Test.class文件,并成功运行了。

如果把当前目录d:\java\aa\bb\cc\test下的Test.class文件删除掉,就会出错:

也就是d:\java\aa\bb\cc\test目录下的不存在Test.class文件,所以无法访问。

因为在java文件中aa.bb.cc.test.Test是一个类,必须指明aa.bb.cc.test.Test的路径,即为E:\java,然后才能通过E:\javae\Lesson3>java aa.bb.cc.test.Test执行E:\java\aa\bb\cc\test目录下的Test.class文件。

设置classpath的命令为:

set classpath=%classpath%;e:\java;d:\java\aa\bb\cc\test;

编译运行:


如果我们切换到目录e:\java\aa下,然后运行命令:

set classpath=.

java aa.bb.cc.test.Test

则会出错:

这是因为我们已经在aa目录下了,通过java aa.bb.cc.test.Test执行e:\java\aa\bb\cc\test目录下的Test.class文件会失败。

我们想要访问到e:\java\aa\bb\cc\test目录下的Test.class文件,必须退回到a/bb/cc/test/的上一级目录后运行:

这样才能访问到e:\java\aa\bb\cc\test目录下的Test.class文件。

【疑问】如果我们想在e:\java\aa目录下访问执行e:\java\aa\bb\cc\test目录下的Test.class文件,应该如何访问呢?

我们可以通过D:\jdk1.5.0_06\jre\lib目录下的rt.jar文件,用WinRAR打开可以看到Sun公司为我们提供的包的组织形式:

其中有sunw,sun,org,META-INF,javax,java,com七个包,分别在这个七个目录下找到相应的类。

我们也可以反编译各个类文件(.class)查看java源文件(.java)。

■  关于访问权限

同一个类中:public,protected,default,private修饰的方法都可以被访问;

同一个包中:public,protected,default修饰的方法都可以被访问,而private修饰的方法都不可以被访问;

类的子类中:public,protected修饰的方法都可以被访问,而default,private修饰的方法都不可以被访问;

不同的包中:public修饰的方法都可以被访问,而protected,default,private修饰的方法都不可以被访问。

■  关于final

为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。

为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。

class中所有的private和static方法自然就是final。

■  关于abstract

在类中没有方法体的方法,就是抽象方法。

含有抽象方法的类,即为抽象类。

如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类。

我们可以将一个没有任何抽象方法的类声明为abstract,避免由这个类产生任何的对象。

构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。

■  关于native

native方法是用户在Java中可以使用,但不能编写的方法。

■ 关于JNI技术

JNI(Java Native Interface),它允许Java虚拟机(JVM)内部运行的Java代码能够与用其它编程语言(如C、C++、汇编语言)编写的应用程序和库进行互操作。

上一篇:java第二课
下一篇:Java第四课
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章