JAVA网站制作之Java的Package与Import机制之我的了解(...
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开初学|心得以下内容的测试前提是你的呆板上,设置了path命令PATH=D:JDK1.4BIN;D:JDK1.4LIB;,能够一般实行java和javac命令,不必设置classpath路径的情形下。
从一个复杂的例子谈谈package与import机制
基础准绳:为何必要将Java文件和类文件实在安装到其所回属之Package所对应的绝对路径下。
为何要如许做呢?假如你在程序中,用到打包命令package,而且间接编译和实行该程序。比方:以上面程序为例:
packagea.b.c;
publicclasshello
{
publicstaticvoidmain(Stringargs[])
{
System.out.println("Hellotheworld!");
}
}
此程序能够编译经由过程,可是实行时,却提醒以下毛病!
D:myxdj>javachello.java
D:myxdj>javahello
Exceptioninthread"main"java.lang.NoClassDefFoundError:hello(wrongname:a/
b/c/hello)
atjava.lang.ClassLoader.defineClass0(NativeMethod)
atjava.lang.ClassLoader.defineClass(ClassLoader.java:537)
atjava.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
atjava.net.URLClassLoader.defineClass(URLClassLoader.java:251)
atjava.net.URLClassLoader.access$100(URLClassLoader.java:55)
atjava.net.URLClassLoader$1.run(URLClassLoader.java:194)
atjava.security.AccessController.doPrivileged(NativeMethod)
atjava.net.URLClassLoader.findClass(URLClassLoader.java:187)
atjava.lang.ClassLoader.loadClass(ClassLoader.java:289)
atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
atjava.lang.ClassLoader.loadClass(ClassLoader.java:235)
atjava.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
D:myxdj>
在xdj目次下创建一个ac子目次把hello.java放在它上面,用以下命令举行编译和实行时,可一般经由过程!
D:myxdj>javacd:myxdjachello.java
D:myxdj>javaa.b.c.hello
Hellotheworld!
D:myxdj>
再看上面别的一种情形,先让我们在xdj目次下创建两个文件a.java和b.java文件,其内容以下。
a.java文件内容:
importa.b.c.*;
publicclassa
{
publicstaticvoidmain(String[]args)
{
bb1=newb();
b1.print();
}
}
a.java文件内容:
packagea.b.c;
publicclassb
{
publicvoidprint()
{
System.out.println("我是被挪用子类的程序输入呀!");
}
}
间接编译a.java文件时,会提醒以下毛病!
D:myxdj>javaca.java
a.java:1:packagea.b.cdoesnotexist
importa.b.c.*;
^
a.java:6:cannotaccessb
badclassfile:..java
filedoesnotcontainclassb
Pleaseremoveormakesureitappearsinthecorrectsubdirectoryoftheclasspa
th.
bb1=newb();
^
2errors
D:myxdj>
接上去,我们把b.java移到xdjac下,并把xdj目次下的b.java删撤除呀!从头实行编译指令,此次一定能够编译乐成!你能够发明b.java也同时被编译过了,这就是所谓的make编译体例。
D:myxdj>javaca.java
D:myxdj>
提醒1:假如你在xdj目次下仍保存一个b.java文件的话,实行对主程序的编译命令时仍会报错!你本人能够尝尝呀!
提醒2:假如你删除xdjac.java文件的话,保存b.class文件,实行对主程序的编译命令时是能够经由过程,此地能够不必要子程序的源代码。
提出一个成绩:假如把目次ac全体剪切到别的目次,如D盘根目次下,在xdj目次假如实行编译和实行命令呢?
很分明,会报以下毛病!固然了,条件前提是你没有设置classpath路径,实在只需没把类搜刮路径设置到我这个地位就会堕落的!你尝尝吧!
D:myxdj>javaca.java
a.java:1:packagea.b.cdoesnotexist
importa.b.c.*;
^
a.java:6:cannotresolvesymbol
symbol:classb
location:classa
bb1=newb();
^
a.java:6:cannotresolvesymbol
symbol:classb
location:classa
bb1=newb();
^
3errors
D:myxdj>javaa
Exceptioninthread"main"java.lang.NoClassDefFoundError:a/b/c/b
ata.main(a.java:6)
D:myxdj>
办理的举措能够用以下命令便可一般编译和实行:
D:myxdj>javac-classpathd:a.java
D:myxdj>java-classpathd:;a
我是被挪用子类的程序输入呀!
D:myxdj>
提醒3:-classpath参数,缺省是以以后目次为基本目次的,即不带-classpath参数的情形下。
提醒4:利用java.exe仍是javac.exe,最好明白指定-classpath选项,可设置情况变量CLASSPATH便可,同时设置了-classpath参数和情况变量classpath时,会以-classpath参数为主的。假如在它们所指定的路径或JAR文件中存有package称号和类称号不异的类,会引发搅浑的!
假如你在D盘的根目次天生一个打包文件a.zip,其内容目次ac下的一切文件的话,你也能够用上面命令举行编译和实行。
D:myxdj>javac-classpathd:a.zipa.java
D:myxdj>java-classpathd:a.zip;.a
我是被挪用子类的程序输入呀!
D:myxdj>
以上会商就暂告一段落吧!假如你还想进一步懂得package与import机制话,哪你能够持续往下看下往的。
深切剖析package与import机制部分
不论你有无利用import指令,存在今朝目次下的类城市被编译器优先接纳,只需它不属于任何package。这是由于编译器老是先假定您所输出的类名就是该类的全名(不属于任何package),然后-classpath所指定的路径中搜刮属于该类的.java文件或.class文件,在这里能够晓得defaultpackage的脚色十分特别。
必需明白告知编译器我们用到哪一个package下的类,导进时或在包称号.类称号中举行援用。导进某个包时,必定要举行-classpath路径指定某个包的地位。你假如指定了多个路径话,假如在一个路径下已找到了该包话,就优先援用该包的类。
当java编译器入手下手编译某个类的源代码时,起首它会做一件事变,这就是创建“类路径援用表”,它是依据参数-classpath或classpath情况变量来创建的。假如没有指定选项-classpath或情况变量CLASSPATH时,缺省情形下类路径援用表只要一条记录,即以后的目次(“.”)。情况变量CLASSPATH的内容会被选项-classpath所掩盖,没有累加效果。
当编译器将类路径援用表创建好以后,接着编译器要断定它能够使用类援用内外的数据作为绝对肇端路径,找到一切用到的package。
编译器还要完成一张名为“类援用表”与“绝对类援用表”的数据布局。
全部编译程序中package与import机制相干的部分流程以下:
入手下手,
创建类路径援用表与类援用表;
假如创建乐成:则类称号剖析程序:
假如已存在该类的类文件,持续别的的编译事情。
假如该类的文件不存在,寻觅该类的源代码文件:
假如找到,则编译该
类的源代码,持续
别的的编译事情。
此时,也可前往到
入手下手,make机制,
递回式编译。
假如找不到,编译
停止,收回告诫
信息。
假如创建失利:编译停止,收回告诫信息(2)。
JAVA静态链接实质研讨
不论你在统一个源代码(.java)中利用了几个类声明,它们城市逐一编译成.class文件,即便是外部类、匿名类都是一样。在java中,关于每个类所组成的类文件,都可将它视为静态链接库。
在类文件中,一切关于特写类的操纵都被转换成类的全名。Import除用来指引编译器剖析出准确的类称号以外,没有别的功效。
在运转时代,仍旧用到一个与编译器不异的程序,就是类路径援用表的创建,而使用静态链接载进类文件的机制流程以下:
入手下手,
创建类路径援用表,
依据类文件外部的信息,与类路径援用表的数据分解类文件的相对路径。
假如找到类文件,反省该类的类文件外部信息,是不是切合绝对路径信息:
假如切合,载进该类。
假如不切合,实行毛病,收回
Exception信息。
假如找不到类文件,则实行毛病,收回Exception信息。
最初,必要申明的是,在java中供应很多的类包,java言语中将完成与盘算机底层相干的输出输入、经常使用的数据范例转换等功效的函数封装在包中。假如你的程序提醒找不到如许基本包的话,你就能够用参数-classpath或情况变量classpath举行指定地位来办理此类成绩!
前面写的有点乱呀!不晓得你可否了解呀!不外信任你看完我对package与import的会商后,应当会有所劳绩的。假如你另有任何干于package与import的疑问的话,能够和我一同会商和交换呀!我的邮箱是:xiaodajin@sina.com。
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听, Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 是一种使用者不需花费很多时间学习的语言 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 是一种为 Internet发展的计算机语言 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
页:
[1]