package pack;
/*
编译时,javac -d . PackageDemo.java //会自动创建pack这个文件夹 其中‘.’表示当前目录,也可以自己定义
pack在哪里创建,当自定义路径时,在运行时必须要用set classpath=指定地址,,然后才能成功运行
运行时,java pack.PackageDemo //成功
为了简化类名的书写,使用一个关键字,import.
import 导入的是包中的类。
建议,不要写通配符 * ,需要用到包中的哪个类,就导入哪个类。
c:\myclass
c:\myclass\packb\DemoA.class
c:\myclass\packb\haha\DemoZ.class
import packb.*;
import packb.haha.*;
建立定包名不要重复,可以使用url来完成定义,url是唯一的。
www.itcast.cn
package cn.itcast.demo
package cn.itcast.test
*/
import packb.haha.hehe.heihei.*;
import packa.*;
import packb.*;
class PackageDemo
{
public static void main(String[] args)
{
DemoC c = new DemoC();
// DemoA d = new packa.DemoA();
// d.show();
// packa.DemoA d = new packa.DemoA();
// d.show();
// packb.DemoB d = new packb.DemoB();
// d.method();
}
}
/*
PackageDemo.java:8: 找不到符号
符号: 类 DemoA
位置: 类 pack.PackageDemo
DemoA d = new DemoA();
^
PackageDemo.java:8: 找不到符号
符号: 类 DemoA
位置: 类 pack.PackageDemo
DemoA d = new DemoA();
^
2 错误
错误原因:类名写错。
因为类名的全名是:包名.类名
PackageDemo.java:8: 软件包 packa 不存在
packa.DemoA d = new packa.DemoA();
^
PackageDemo.java:8: 软件包 packa 不存在
packa.DemoA d = new packa.DemoA();
^
2 错误
错误原因:packa包不在当前目录下
需要设置classpath,告诉jvm去哪里找指定的packa包。
PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进
行访问
packa.DemoA d = new packa.DemoA();
^
PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进
行访问
packa.DemoA d = new packa.DemoA();
^
2 错误
错误原因:有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限。
所以被访问的类要被public修饰。
PackageDemo.java:9: show() 在 packa.DemoA 中不是公共的;无法从外部软件包中对其进
行访问
d.show();
^
1 错误
错误原因:类公有后,被访问的成员也要公有才可以被访问。
总结:
包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
不同包中的子类还可以直接访问父类中被protected权限修饰的成员。
包与包之间可以使用的权限只有两种,public protected。
public protected default private
同一个类中 ok ok ok ok
同一个包中 ok ok ok
子类 ok ok
不同包中 ok
java.lang : java的核心包 jdk1.2版本以后,该包中的类自动导入。
java.awt: 用于制作图形界面。
java.io:input output 用于操作设备上的数据。
java.util : 这里定义是java的工具类。集合,日期。
java.net:用于网络通讯的。
java.applet: application let server let servlet java server page jsp
class haha implements Servlet
class hehe extends HttpServlet
jar 包://是多个包里的类对应的*.class 文件,打包成jar , 将classPath设置为jar包位置,可以直接用jar包里的类
用法: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-n 创建新档案后执行 Pack200 规范化
-e 为绑定到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。
示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/ .
>jar -option jar包名.jar 多个包名,空格隔开
>jar -ef haha.jar packA packB //创建jar包
>jar -tf haha.jar //查看jar包文件夹目录list
如果从网上下载了工具包,在解压缩后会有个*.jar文件,将其classpath设置为改地址目录 (DOS)>set classpath = *.jar
然后在本目录有doc文档,打开其中的index.html,可以查阅其中的类,然后可以用。
>jar -tf haha.jar > c:1.txt //将打jar包的详细信息显示到1.txt中
其中‘>’表示重定向
*/
package 包 , jar 包
最新推荐文章于 2022-12-10 22:34:48 发布