java -- 包与导包

java 包与导包

包-package

1.package 使用规范

java中使用 package 来定义包。在一个源文件中,package 最多出现一次,且必须在第一行。

// 注释
package 包名; // 顶行或第一行代码,只能出现一次
// package 包名;// 编译出错:错误: 需要 class、interface、enum 或 record
// 源代码块
2.编译package

package 是与 javac 编译命令配合使用的,为的是将java文件和class文件分开管理。

​ (1)package 后面的包名即是目录名,用 . 号分开。

package com.test.package1;

​ (2)javac 编译成功之后的类文件存放位置 由 -d 所指路径 和 package 所指包名决定:路径/包名/类.class

javac -d . PackageTest1.java //将 class 放到 ./com/test/package1 目录下
javac -d . *.java  // 编译 . 路径下所有 java 文件,并放到 .包名 路径下
3.运行package

​ 运行 含有 package 的类必须使用包名。-cp 指明包所在位置,与-d同。

java -cp 路径 包名.类名

注意:

​ 1、包名只能是 package 所指的包名

​ 2、-cp 所指地址必须与 -d 相同。

​ 3、不承认任何形式的包名路径拆分。

​ 4、否则会报错:主类找不到。

java -cp . com.test.package1.PackageTest1 //正确
java -cp com test.package1.PackageTest1  //报错:找不到主类 PackageTest1
//如果你在 .com目录下, 下面也是正确的。关键:包名、-cp所指的路径正确。
java -cp .. com.test.package1.PackageTest1

导包-import

1.import使用方法

java中使用 import 来导包。导包一般是为了简写代码,但当类名重复时,导包失效,编译时不报错,运行时报错。

使用方法:

import 导入的目标对象只能是类,导包只是一种习惯说法。而包必须是包含有类的文件夹。

import 后必须跟 包名.类名 或 包名.* (导入包中所有类)

而且包名必须是 类名源文件中 package 指定的包名

import java.util.Scanner // 导包必须写在类定义之前
// import java.util.* // 导入所有类
//import java.util // 编译报错,认为 util 是类,java 是包,报错 java 包不存在。

// 类定义
// 不使用导包
java.util.Scanner sc = new java.util.Scanner(System.in);
// 使用导包
Scanner sc = new Scanner(System.in);
2.导入系统包

​ 系统默认导入 java.lang 包下所有类。

import java.lang.*

​ 系统包的导入基本以 java 或 jdk 开头。可以查看帮助文档。

3.导入自定义包
(1)包名

包名为所导类 package 所指的完整包名。其他包名一律不承认。

// 打包
package com.test

class Import1 {}
// 导包,包名必须与 package 的一致,其他包名一律无效。
import com.test.Import1
(2)导包的编译

​ 系统寻找用户自定义包的路径由环境变量 CLASSPATH 决定。当未设置CLASSPATH,默认为当前路径,也可由 --class-path 参数指定,多个导包路径用 ; 隔开。

javac --class-path .;导包路径 java文件
(3)导包的运行

​ 编译导包语句并没有将类复制过来,class文件中还是一个导包语句。所以运行class文件仍然需要指定包所在位置。由参数 -cp 或 -classpath指定,多个导包路径用 ; 隔开。

java -cp .;.. 类名	// -cp 中必须要有运行的class文件所在路径,否则会找不到主类。

(-cp 和 -classpath 二选一,同时出现时,由位置靠后的参数决定)

总结

包的编译

javac -d . *.java //编译当前路径下所有java文件,将 class 文件放到 .包名 目录下

包的运行

java -cp 包名所在路径 包名.类名

导包的编译

javac --class-path .;导包路径 java文件

导包的运行

java -cp .;导包路径 类名

编译运行有导包的包

// 参数位置不能换
javac --class-path .;导包路径 -d . *.java //从当前路径和导包路径中导包,将 class 文件放到 .包名 目录下
java  -cp .;导包路径 包名.类名 // 从当前路径和导包路径中 导包、寻找主类

总结

三个参数

-d 决定包的存储路径

--class-path 导包的路径

-cp 主类路径、导包路径

感觉很麻烦不是吗?试想如果工程的目录结构复杂,那么项目的编译与运行得变得多么困难。

posted @ 2021-06-16 19:01  流水自净  阅读(716)  评论(0编辑  收藏  举报