打包的意义:
① 标准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
就可以完成包的创建及其调用