仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1899|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网站制作之Java的Package与Import机制之我的了解(...

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:51:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
但是一些大型开发或者是保密型比较高的项目都会用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技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,
飘灵儿 该用户已被删除
沙发
发表于 2015-1-19 12:05:47 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
山那边是海 该用户已被删除
板凳
发表于 2015-2-1 11:12:57 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
再见西城 该用户已被删除
地板
发表于 2015-2-7 04:30:55 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
若相依 该用户已被删除
5#
发表于 2015-2-9 02:37:42 | 只看该作者
是一种使用者不需花费很多时间学习的语言
莫相离 该用户已被删除
6#
发表于 2015-2-26 18:44:46 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
爱飞 该用户已被删除
7#
发表于 2015-3-3 15:20:50 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
海妖 该用户已被删除
8#
发表于 2015-3-5 15:05:11 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
透明 该用户已被删除
9#
发表于 2015-3-7 00:42:53 | 只看该作者
是一种为 Internet发展的计算机语言
愤怒的大鸟 该用户已被删除
10#
发表于 2015-3-7 09:19:36 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
活着的死人 该用户已被删除
11#
发表于 2015-3-14 16:25:04 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
灵魂腐蚀 该用户已被删除
12#
发表于 2015-3-20 02:43:50 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
蒙在股里 该用户已被删除
13#
发表于 2015-3-21 13:20:58 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
小魔女 该用户已被删除
14#
 楼主| 发表于 2015-3-24 21:19:50 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
老尸 该用户已被删除
15#
发表于 2015-4-8 11:40:50 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
飘飘悠悠 该用户已被删除
16#
发表于 2015-4-9 17:25:31 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
金色的骷髅 该用户已被删除
17#
发表于 2015-4-22 13:45:17 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
变相怪杰 该用户已被删除
18#
发表于 2015-5-1 14:11:48 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
分手快乐 该用户已被删除
19#
发表于 2015-5-3 02:47:26 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
乐观 该用户已被删除
20#
发表于 2015-5-8 12:10:38 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-30 00:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表