包的定义和使用

来源:互联网 发布:知乎注册名字 编辑:程序博客网 时间:2024/05/07 09:44

1.包的定义:package是在使用多个类或接口时,为了避免名称重复采用的一种措施,直接在程序中加入package关键字即可。

包的定义格式:

package    包名称.子包名称;

所谓的包实际上就是一个文件夹,一个*.class 文件要保存在一个文件夹中。

既然包本身就是一个文件夹,所以在java的编译指令中就提供了专门的打包编译命名,在编译的时候加上参数。

打包编译:

javac  -d   主类名称.java

此时,生成完*.class 之后,就可以直接访问了。

Java    包名称.子包名称.主类名称;


2.  包的导入

当一个包的class 文件需要使用另一个包的class 文件的时候就需要导入指令。

语法:

import   包名称.子包名称.类名称;--〉手工导入 所需要的类。

import   包名称.子包名称.*;  ----> 由JVM自动加载所需要的类。

当一个包导入另一个包时,另一个包中的类必须为public,导入时有以上两种导入方法。

一个包packages1.java中导入举例:

package ZhangRun.club;

import Nsbc.club.Demo;//导入的包

public class packages1 {

public static void main(String[] args) {

System.out.println(new Demo().getInfo());

}

}

另一个包中Demo.java

package Nsbc.club;

public class Demo{

public String getInfo(){

return "Hello,World!!!";

}

}

运行结果:Hello,World!!!


3.如果一个类声明为public class则文件名必须和类名称一样,而且 在一个类中只能有一个public class,但是如果使用class声明一个类的话,则文件名可以和类名称不一样,但是执行的时候必须执行生成的class文件名称。

如果一个类只在本包中访问,则直接声明为class即可,而如果一个类要被外包访问,则必须声明为public class。

在开发中导入包,为了方便即可直接使用“*”的方法导入,如上述2中有说明。

如果导入的几个包中有相同的类名称,则这时候我们就这样使用,以a,b,c,3包为例

我在c包中导入a,b包,而a,b包中有相同的一个类为Demo类,这时候比如我要使用a包中的Demo类,则这样:包名称.子包名称. 类名称(如上2中导入方法)!这样就可以明确指定要使用的类了,,这样实例化也方便。(包.类名称)

比如在c 中实例化a中Demo类:

包名称.子包名称.Demo  d  = new   包名称.子包名称.Demo();

此时就可以根据实例化对象调用a包中Demo类中的方法了。


4. Java 特殊特性-----静态导入

在JDK1.5之后提供了静态导入功能,静态导入就是如果一个类中的方法全部都是静态static声明的静态方法,则在导入的时候就可以直接使用“import  static”的方式导入,导入格式如下:import   static   包.类.*;

举例:Demo.java

package Nsbc.club;

public class Demo{

public static String getInfo(){

return "Hello,World!!!";

}

public static String getInfoes(){

return "nishuibaichuan!!!";

}

}

packages1.java

package ZhangRun.club;
import static Nsbc.club.Demo.*; //静态导入

public class packages1 {

public static void main(String[] args) {

System.out.println(getInfo());
System.out.println(getInfoes());

}

}

运行结果:

Hello,World!!!
nishuibaichuan!!!


5. jar命令的使用

将*.class文件压缩成一个文件交给用户使用,那么这样的文件就称为jar文件,如果想要生成jar文件,直接使用JDK中bin 目录里的jar.exe 就可以将所有的类文件进行压缩。


6.访问权限

private:可以定义方法,属性,定义的方法和属性不能被类的外部所看到。

default:可以在本包中的任意地方访问。

protected:保护,不同包的非子类不可以访问。

举例:

(1)HelloDemo.java

package nishuibaichuan.club.g ;

public class HelloDemo{

protected String name = "nishuibaichuan";//只能在本包及不同的子类访问

}

 (2)  ProtectedDemo.java

package nishuibaichuan.club.h;

import nishuibaichuan.club.g.HelloDemo;

class SubHello extends HelloDemo{

public void print(){

System.out.println("访问受保护属性:" + super.name);

}

}

public class ProtectedDemo{

public static void main(String[] args){

SubHello sub = new SubHello();

sub. print();

}

}

public:公共的,都可以访问,不受任何限制。


7.  总结:

private:在一个类名称中可被访问,外部类访问则用setter()和getter()方法进行访问。

default:在同一包中访问,如在Nishui.club包下的src下的g包中。

protected:可跨包访问,如在Nishui.club包下的src下的g包和h包中。

public:公共的,都可以访问,不受任何限制。如在Nishui.club包下的src下的g包和Nishui.club.cn 下的src下的h包都可以访问。




0 0
原创粉丝点击