Java 基础学习之包及访问权限 一 (包的概念及使用)

   包的主要目的是实现程序的分割保存,这样不仅便于开发而且也方便维护。但是这样也往往会出现不同包中的类互相访问的情况。

1 包的基本概念

  1. 包(package)是在使用多个类或接口时,为了避免名称重复而采取的一种措施,如果使用,直接在程序中加入 package 关键字即可,格式如下:
package 包名称.子包名称;

在 .txt 文件中输入如下代码,输入代码之后把文件名改成 PackageDemo.java

package self.learn.packaged;

public class PackageDemo {

	public static void main(String[] args) {
		print();

	}
	public static void print() {
		System.out.println("Java is interesting!");
	}
}
相关截图:

在这里插入图片描述
在这里插入图片描述
以上的编译命令中加入了一下两个参数:
(1)-d :表示生成目录,生成的目录以 package 的定义为准。
(2). : 表示在当前所在的文件夹之中生成的。

2 import 语句

  1. 类的导入格式:
import 包名称.子包名称.类名称;   ---> 手工导入所需的类
import 包名称.子包名称.*;   ---> 由 JVM 自动加载所需的类

提问:分别倒入与使用 “ * ” 导入哪种性能更高?
回答:两种的性能是一样的。
   这两种导入方式,本身并不存在性能的问题,因为使用 “*” 也是自动加载所需的类,而不需要的类根本不会被加载进来。

  1. 一个类要被外包访问,则此类一定要定义成 public class 。

关于 “public class” 和 “class” 声明类的补充
   如果一个类声明为 public class,则文件名称必须与类名称一致,而且在一个类文件中只能有一个 public class,而如果使用 class 声明一个类,则文件名称可以与类名称不一致,但是在执行的时候必须执行生成的 class 文件名称。除了这些外,public class 和 class 还在包的访问上有所限制,如果一个类只在本包中访问,不需要被外包访问,则直接声明成 class 即可;而如果一个类要被外包访问,则必须声明为 public class 。

  1. 如果一个程序中同时导入了两个包的同名类,在使用时就必须明确地写出完整的 “包.类名称”,代码如下:
package self.learn.packaged.a;

public class Demo {
	public void say(){
		System.out.println("Java is interesting!");

	}
}
package self.learn.packaged.b;

public class Demo {
	public void say(){
		System.out.println("Java is interesting!");

	}
}
package self.learn.packaged;

import self.learn.packaged.a.*;         // 包中存在 Demo 类
import self.learn.packaged.b.*;         // 包中存在 Demo 类

public class PackageDemo {
	public static void main(String[] args) {
		Demo demo = new Demo();
        demo.say();
	}	
}
相关截图:
指定具体包名前:

在这里插入图片描述

指定具体包名后:

在这里插入图片描述

3 系统常见包

   在 JDK 中为了方便用户开发程序,提供了大量的系统功能包,如下表列出了一些常用包。

序号包名称作用
1java.lang此包为基本的包,像 String 这样的类就保存在此包中,在 JDK 1.0 的时候如果想编写程序,则必须手工导入此包,但是随后的 JDK 解决了此问题,所以此包现在为自动导入。
2java.lang .reflect此包为反射机制的包,是 java.lang 的子包
3java.util此包为工具包,一些常用的类库、日期操作等都在此包之中,如果此包精通掌握各种设计思路都好理解。
4java.text提供了一些文本的操作类库
5java.sql数据库操作包,提供了各种数据库操作的类和接口
6java.net完成网络编程
7java.io输入、输出处理

4 静态导入

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

import static.类名称.*;
实例:定义一个类,全部由静态方法组成。
package self.learn.packaged.a;

public class Operate {             // 里面的方法全部是 static 类型
	public static int add(int i, int j) {    // 加法操作
		return i+j;
	}
	public static int sub(int i, int j) {    // 减法操作
		 return i - j;
	}
}
package self.learn.packaged;

import static self.learn.packaged.a.Operate.*;  // 静态导入

public class PackageDemo {
	public static void main(String[] args) {
		System.out.println("3+3 = "+add(3, 3));
		System.out.println("6-3 = "+sub(6, 3));
	}	
}
运行结果截图:

在这里插入图片描述
以上的程序中使用了静态导入,所以 Operate 类中的所有静态方法就可以直接在 导入类中使用,而不再需要使用 “类.静态方法()” 的形式调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值