打包的意义:
① 标准Java库是由一系列包组成,包括java.lang,java.util,java.net等。标准Java包就是层次型包结构,就如同硬盘上嵌套的子目录一样,我们可以使用嵌套层次结构来组成包;
② Java的包是为了更好地规划代码,防止命名冲突和混乱。所以Java出现了打包机制;
③ 当把类组织起来放进一个包内之时,也就给包中的成员赋予了相互访问的权限,就“拥有”了该包内的程序代码;
④ 包访问权限为把类聚集在一个包中这一做法提供了意义和理由;
package----声明包
package com.iotek.ch09;
public class lotekTeacher{
private String name;//教师的姓名
private int age;//教师的年龄
/**
*包访问权限
*@return 自我介绍的内容
*/
String introduction(){
return “大家好我是”+name+”,今年”+age+”岁”;
}
}
① 包名由小写单词组成;
② Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,编程规范要求程序员在自己定义包的名称之前加上唯一前缀;
③ 由于互联网上的域名名称是不会重复的,所以一般推荐采用公司在互联网上的域名的倒置作为包的唯一前缀;
一个类可以使用同一包中所有类以及其它包中的所有公开类
我们可以通过两种方式访问其它包中的公开类
① 简单在每个类前面加上完整包名,例如java.util.Date today=new java.util.Date();
② 更简洁更通用的方式是:使用import语句来导包
import java.util.Date;
…
Date today=new Date();
可以import特定类,也可以导入整个包。通过在源代码文件的顶部(在打包语句后)使用import导入语句来实现。
步骤:
在d盘下的javastudy文件夹中创建一个package文件夹,在其内编写Dog.java名称的程序
源程序
1 package com.iotek.entity;
2 public class Dog{
3 String name;
4 public int age;
5 public void show(){
6 System.out.println(name+"------"+age);
7 }
8 }
上面的打包路径为com下的iotek下的entity中
编译方法:进入程序路径后 javac –d . Dog.java
编译成功后,会在包路径下产生编译好的文件
同一个包中
在编写一个DogTest的源程序
1 package com.iotek.entity;
2 public class DogTest{
3 public static void main(String [] args){
4 Dog dog=new Dog();
5 dog.name="旺财";
6 dog.age=5;
7 dog.show();
8 }
9 }
编译通过之后
运行方法:java com.iotek.entity.DogTest
前面Dog.java中的name属性在同个包中的其它类是可以访问的。
不同包中
先将com文件夹删除
DogTest.java中包路径更改为package com.iotek.test;
如下
1 package com.iotek.test;
2 public class DogTest{
3 public static void main(String [] args){
4 Dog dog=new Dog();
5 dog.name="旺财";
6 dog.age=5;
7 dog.show();
8 }
9 }
同样先编译Dog.java程序,在编译DogTest.java程序,此时编译不通过
然后将DogTest.java程序再次更改
1 package com.iotek.test;
2 public class DogTest{
3 public static void main(String [] args){
4 com.iotek.entity .Dog dog=new com.iotek.entity . Dog();
5 dog.name="旺财";
6 dog.age=5;
7 dog.show();
8 }
9 }
此时编译还是不通过
原因是Dog.java中的name属性引起的错误,应该将其更改为public String name;
源程序如下
1 package com.iotek.entity;
2 public class Dog{
3 //String name;//同个包中的其它类是可以访问的,
4 //不同包中的其它类不能访问使用默认访问修饰符的属性和方法
5 public String name;
6 public int age;
7 public void show(){
8 System.out.println(name+"------"+age);
9 }
10 }
更改后重新编译Dog.java,再次编译DogTest.java,此次未报错,成功生成
然后运行java com.iotek.test.DogTest
但DogTest.java中的全局包名太过麻烦,每次使用都要写
再更改为用import导入的方法,package必须写第一句
1 package com.iotek.test;
2 import com.iotek.entity.Dog;
3 public class DogTest{
4 public static void main(String [] args){
5 Dog dog=new Dog();
6 dog.name="旺财";
7 dog.age=5;
8 dog.show();
9 }
10 }
再次编译也能够执行。
综上:
Dog.java和DogTest.java的最终代码如下
1 package com.iotek.entity;
2 public class Dog{
3 //String name;//同个包中的其它类是可以访问的,
4 //不同包中的其它类不能访问使用默认访问修饰符的属性和方法
5 public String name;
6 public int age;
7 public void show(){
8 System.out.println(name+"------"+age);
9 }
10 }
1 package com.iotek.test;
2 import com.iotek.entity.Dog;
3 public class DogTest{
4 public static void main(String [] args){
5 Dog dog=new Dog();
6 dog.name="旺财";
7 dog.age=5;
8 dog.show();
9 }
10 }
然后依次
javac –d . Dog.java
javac –d . DogTest.java
java com.iotek.test.DogTest
就可以完成包的创建及其调用