package pack;
//为了简化类名的书写:使用一个关键字,import.导入包中的类
import packA.DemoA;
import packB.*;//包括packB目录下多有类!----【packB子文件夹不会导入,只导入packB中的所有类】
/*
建议,不要使用通配符*;需要使用包中哪个类,就导入哪个类
eclipse中快捷键,自动导入所使用到的类,Ctrl+Shift+o
当导入的多个包中出现类重名,程序中必须写包名
建立包名不要重复,可以使用url来完成定义,url是唯一的
www.itcast.cn
package cn.itcast.demo
package cn.itcast.test
*/
class PakageDemo
{
public static void main(String[] args)
{
//packB.DemoC c = new packB.DemoC();
DemoC c = new DemoC();
c.method();
//packA.DemoA d = new packA.DemoA();//如果没有这个import packA.DemoA;
DemoA d = new DemoA();
d.show();
}
}
/*
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
*/
package packA;
import packB.DemoB;
public class DemoA extends DemoB//必须public
{
public void show()//必须public
{
System.out.println("DemoA show run");
method();
}
}
package packB;
public class DemoB
{
/*public*/ protected /*保护*/ void method()//保护后,只有B子类才能访问
{
System.out.println("demoB method run");
}
}
/*
public class DemoC
{
}
一个**.java文件中只允许有一个public类或者接口
两个都public,必须把Demo重新建一个java文件
*/
package packB;//也可以多层package packb.haha.hehe.heihei;
public class DemoC
{
public void method()
{
}
}
package pack;
import packA.*;
class JarDemo
{
public static void main(String[] args)
{
DemoA a = new DemoA();
a.show();
System.out.println("Hello jar pack!");
}
}
/*
1.在eclipse中选择你要导出的类或者package,右击,选择Export子选项;
2.在弹出的对话框中,选择java文件---选择JAR file,单击next;
3.在JAR file后面的文本框中选择你要生成的jar包的位置以及名字,注意在Export generated class files and resources和Export java source files and resources前面打上勾,单击next;
4.单击两次next按钮,到达JAR Manifest Specification。注意在最底下的Main class后面的文本框中选择你的jar包的入口类。单击Finish,完成。
你可以在dos环境下,进入你的jar所在的目录,运行 java -jar 名字.jar,检测运行是否正确。
第二、你所要导出的类里边用到了别的jar包。比如说你写的类连接了数据库,用到数据库驱动包oracl.jar.。
1.先把你要导出的类按照上面的步骤导出形成jar包,比如叫test.jar
2.新建一个文件夹main,比如在D盘根目录下;
3.把test.jar和oracl.jar拷贝到main文件下,右击test.jar,解压到当前文件夹。把META-INF\MANIFEST.MF剪切到另外一个地方 (比如是桌面!) ;
4.右击oracl.jar,解压到当前文件夹。
5.在dos环境下,进入到D盘的main文件夹下,执行 jar cvfm new.jar meta-inf/manifest.mf .,不要忘了最后面的点。
6.用压缩工具打开你新生成的new.jar,用你放在桌面的META-INF\MANIFEST.MF覆盖new.jar原有。
你可以在dos环境下,进入你的jar所在的目录,运行 java -jar 名字.jar,检测运行是否正确。
*/