Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 999|回复: 0

[JavaSE] 发布程序

[复制链接]

该用户从未签到

发表于 2014-11-14 13:39:53 | 显示全部楼层 |阅读模式
本帖最后由 zhezhe 于 2014-11-14 16:12 编辑

1. 把类包进包中
你必须把类放在与包层次结构相以应的目录结构下。
2. 编译与执行包
在类包在包中,编译与执行都要有点技巧。主要的问题来自于编译器和java虚拟机都要能够找到你的类以及所用到的其他类。对于核心API的类来说这不是问题。Java一定会知道它们在哪里。但对于你的类而言,从单一目录来编译源文件是不可能的(至少是不可靠的)。
1)加上 -d选项来编译
%cd MyProject/source  //呆在当前目录,别切换到.java文件的目录
%javac -d ../classes com/headfirstjava/PackageExcerise.java  
2)编译com.headfirstjava这个包的所有.java文件
%javac -d ../classes com/headfirstjava/*.java
3)执行程序
%cd MyProject/source  //从classes目录执行
%java com.headfirstjava.PackageExcerise  //必须制定完整的名称!一旦类被包进包中,你就不能用“简写”的名称来调用它。你必须在命令栏指定要执行main()类的完整名称,这包括了包结构,Java会坚持类必须要呆在相对应的目录结构下。


使用-d选项真的很酷!因为它不仅让你把编译结果输出到别的地方,它还可以把类依照包的组织放到正确的目录上。-d选项会要求编译器将编译结果根据包的结构来建立目录并输出,如果目录还没有建好,编译器会自动地处理这些工作。
3. 以包创建可执行的JAR
1)确定所有的类文件都放在classes目录下相对应的包结构中
2)创建manifest.txt文件来描述哪个类带有main(),以及确认有使用完整的类名称
在manifest.txt写入一行:
Main-Class:com.headfirstjava.PackageExercise
在此行后面要有换行,否则有可能出错。将此文件放在classes目录下。
3)执行jar工具来创建带有目录结构与manifest的JAR文件
只要从com开始,其下整个包的类都会被包进去JAR。
%cd MyProject/classes
%jar -cvmf manifest.txt packEx.jar com


4. 条列和解压
1)将JAR内容列出
%cd Skyler
%jar -tf packEx.jar
-->
META-INF/
META-INF/MANIFEST.MF
com/
com/headfirstjava/
com/headfirstjava/PackageExercise.class
cise.class

2)Extract the contents of a JAR
%cd Skyler
%jar -xf packEx.jar
META-INF代表META INFORMATION,jar工具会自动创建出这个目录和MANIFEST.MF文件,你的manifest.txt不会被带进JAR中,但它的内容会放进真正的manifest中。







本帖子中包含更多资源

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

x
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-11-14 14:11:10 | 显示全部楼层
本帖最后由 zhezhe 于 2014-11-14 14:26 编辑

补充一点:
javac -classpath,设定要搜索类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有在CLASSPATH里面的设定。
javac -sourcepath,设定要搜索编译所需java文件的路径,可以是目录,jar文件,zip文件(里面都是java文件)。
所以一个完整的javac命令行应该是这样的:
假设abc.java在路径c:\src里面,在任何的目录的都可以执行以下命令来编译。
javac -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip -sourcepath c:\source\project1\src;c:\source\project2 \lib\src.jar;c:\source\project3\lib\src.zip c:\src\abc.java

表示编译需要c:\classed下面的class文件,c:\jar\abc.jar里面的class文件,c:\zip\abc.zip里面的class文件
还需要c:\source\project1\src下面的源文件,c:\source\project2 \lib\src.jar里面的源文件,c:\source\project3\lib\src.zip里面的源文件
:D:D:D:D
再一点:
java -classpath
设定要搜索的类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有的CLASSPATH的设定
由于所要执行的类也是要搜索的类的一部分,所以一定要把这个类的路径也放到-classpath的设置里面。
表现在,在要执行的类的路径里面执行java时,一定要添加上点号(.)标示本目录也要搜索。
假设abc.class在路径c:\src里面
可以在任何路径下执行以下命令
java -classpath c:\classes;
c:\jar\abc.jar;c:\zip\abc.zip;c:\src abc

回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-11-14 14:15:41 | 显示全部楼层
本帖最后由 zhezhe 于 2014-11-14 16:13 编辑

我电脑上的CLASSPATH是这样的:
.;&JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
.代表当前目录
JAVA_HOME
G:\Java\jdk1.7.0_25

回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-11-14 14:32:41 | 显示全部楼层
本帖最后由 zhezhe 于 2014-11-14 14:34 编辑

QUESTION NO: 240
Given:
1. package com.company.application;
2.
Oracle 1z0-851: Practice Exam
3. public class MainClass {
4. public static void main(String[] args) {}
5. } And MainClass exists in the /apps/com/company/application directory. Assume the
CLASSPATH environment variable is set to "." (current directory).
Which two java commands entered at the command line will run MainClass? (Choose two.)
A. java MainClass if run from the /apps directory
B. java com.company.application.MainClass if run from the /apps directory
C. java -classpath /apps com.company.application.MainClass if run from any directory
D. java -classpath . MainClass if run from the /apps/com/company/application directory
E. java -classpath /apps/com/company/application:. MainClass if run from the /apps directory
F. java com.company.application.MainClass if run from the /apps/com/company/application
directory
Answer: B,C

Explanation:
关于C选项,/apps是其他任何程序执行目录的类的路径,也是com.company.application.MainClass所在的当前目录
:Q:Q
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-11-14 14:37:21 | 显示全部楼层
QUESTION NO: 239
A developer is creating a class Book, that needs to access class Paper. The Paper class is
deployed in a JAR named myLib.jar. Which three, taken independently, will allow the developer to
use the Paper class while compiling the Book class? (Choose three.)
A. The JAR file is located at $JAVA_HOME/jre/classes/myLib.jar.
B. The JAR file is located at $JAVA_HOME/jre/lib/ext/myLib.jar..
C. The JAR file is located at /foo/myLib.jar and a classpath environment variable is set that
includes /foo/myLib.jar/Paper.class.
D. The JAR file is located at /foo/myLib.jar and a classpath environment variable is set that
includes /foo/myLib.jar.
E. The JAR file is located at /foo/myLib.jar and the Book class is compiled using javac -cp
/foo/myLib.jar/Paper Book.java.
F. The JAR file is located at /foo/myLib.jar and the Book class is compiled using javac -d
/foo/myLib.jar Book.java
G. The JAR file is located at /foo/myLib.jar and the Book class is compiled using javac -classpath
/foo/myLib.jar Book.java
Answer: B,D,G

Explanation:
D和G好理解,至于B为什么对就要好好斟酌一下了:'(:'(
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-11-14 14:39:17 | 显示全部楼层
QUESTION NO: 237
Given a correctly compiled class whose source code is:
1. package com.sun.sjcp;
2. public class Commander {
3. public static void main(String[] args) {
4. // more code here
5. }
6. }
Assume that the class file is located in /foo/com/sun/sjcp/, the current directory is /foo/, and that
the classpath contains "." (current directory). Which command line correctly runs Commander?
A. java Commander
B. java com.sun.sjcp.Commander
C. java com/sun/sjcp/Commander
D. java -cp com.sun.sjcp Commander
E. java -cp com/sun/sjcp Commander
Answer: B
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-11-14 16:54:04 | 显示全部楼层
javac -source target
-source 指定用哪个版本的编译器对java源码进行编译
-target 指定生成的class文件将保证和哪个版本的虚拟机进行兼容。我们可以通过-target 1.2来保证生成的class文件能在1.2虚拟机上进行运行,但是1.1的虚拟机就不能保证了。

QUESTION NO: 268

Given:
1. public class Mule {
2. public static void main(String[] args) {
3. boolean assert = true;
4. if(assert) {
5. System.out.println("assert is true");
6. }
7. }
8. }
Which command-line invocations will compile?

A. javac Mule.java
B. javac -source 1.3 Mule.java
C. javac -source 1.4 Mule.java
D. javac -source 1.5 Mule.java
Answer: B
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-4-27 07:01 , Processed in 0.544192 second(s), 39 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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