你的位置:首页 > Java教程

[Java教程]Java学习 (十一)、面向对象编程(三)封装


打包的意义:

①   标准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 }

View Code

上面的打包路径为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 }

View Code

编译通过之后

运行方法: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 }

View Code

同样先编译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 }

View Code

此时编译还是不通过

原因是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 }

View Code

更改后重新编译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 }

View Code

 再次编译也能够执行。

 

综上:

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 }

Dog.java
 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 }

DogTest.java

然后依次

javac –d . Dog.java

javac –d . DogTest.java

java com.iotek.test.DogTest

就可以完成包的创建及其调用