16.包机制

package和import机制

**疑问:**前面写的代码都是在同一个文件夹中,同一文件夹下访问其他类时可以直接通过文件名即类名访问(比如说我在测试类下可以直接创建一个Customer类型的对象,显然Customer和Test是两个文件)。但是不同文件夹下,还可以通过类名直接进行访问吗?

**不可以!**此时,HelloWorld.java在另一个文件夹下,所以我们需要后面的import机制。

public class Test01{
	public static void main(String[] args){
		// 错误: 找不到符号
		HelloWorld hw = new HelloWorld();
	}
}

1. package关键字

1. 为什么要使用package 机制

package是 Java 中的包机制。包机制使得程序的分类管理更加方便。不同功能的类分别存放在不同的包下。(按照功能划分的,不同的软件包具有不同的功能。)

2. package怎么使用

package是一个关键字,后面直接加需要访问的类名

注意:一旦使用package关键字,当前类的类名会改变,需要在原类名前加上包名

此外,package语句只能出现在Java源代码的第一行

3.包名规范问题

公司域名倒叙+项目名 + 模块名 + 功能名

4.程序编译运行问题

对于带有package的Java程序怎么编译?怎么运行?

一旦使用package关键字,当前类的类名会改变,需要在原类名前加上包名

  1. 编译

你可以选择原本的编译方式,但是运行时必须要保证类路径和包名一致,此时你需要按照包名建立文件夹,再将正常编译生成的class文件存放到正确的类路径下,才可以运行。

上述过程太麻烦,通过以下命令进行带包编译会自动生成与包名一致的类路径

javac -d . HelloWorld.java
    /*
    javac 负责编译的命令
	-d		带包编译
	 .	  代表编译之后生成的东西放到当前目录下(点代表当前目录)
HelloWorld.java  被编译的java文件名。
    */
  1. 运行

导入包后,类名已经变了

java com.study.HelloWorld

5.导包后,类名改变。什么时候可以省略包名?

当访问的类和当前类在同一包下时,新类名的前缀——包名可以省略不写。

补充:以后说类名的时候,如果带着包名描述,表示完整类名。
如果没有带包,描述的话,表示简类名。
java.util.Scanner 完整类名。
Scanner 简类名

此外,不同包下的简类名可以相同

com.Test和src.Test不一样,尽管简类名都一样,但是完整类名不一样。

package com.study;
public class Test01{
	public static void main(String[] args){
		com.study.HelloWorld hw = new com.study.HelloWorld();
		System.out.println(hw);//com.study.HelloWorld@4517d9a3
		HelloWorld hw1 = new HelloWorld();
		//这里为什么能省略包名呢?
		//这里的包名之所以可以省略,是因为HelloWorld和Test01在同一个     package下
		System.out.println(hw1);//com.study.HelloWorld@372f7a8d
	}
}

那访问不同包下的类时,包名能省略吗?

不可以 !

此时就会使得代码很复杂,所以需要导包,使用import关键字

package com;
import com.study.HelloWorld;
public class Test02{
public static void main(String[] args){
	com.study.HelloWorld hw = new com.study.HelloWorld();
	System.out.println(hw);//com.study.HelloWorld@4517d9a3
	//这里的包名能省略吗?
	//不在同一个package下,包名不可以省略
	/*
	//错误: 找不到符号
	//不能省略
	HelloWorld hw1 = new HelloWorld();
	System.out.println(hw1);
    */
	//使用import关键字导包后就可以省略包名
	HelloWorld hw1 = new HelloWorld();
	System.out.println(hw1);//com.study.HelloWorld@372f7a8d


  }
}

2. import关键字

1.什么时候不需要 import关键字

  1. java.lang包中的java文件不需要,比如 String.java就不用导包
  2. 访问同一个包中的类不需要导包
  3. 其他情况一律需要import导包

2. import怎么使用?

​ import 完整类名;
​ import 包名.星号//这个效率不低,因为编译器在编译的时候,会自动把变成具体的类名。

​ import java.util.Scanner; // 完整类名。

总结

1. package 语句会改变类的类名!

**类(class文件)路径必须和包名一致!**新的编译语句会自动生成与包名一致的类路径

2. 需要访问其他类时,当两个类不在同一包下时,一般使用import关键字导包,相当于调用访问类的字节码文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值