Java 包、包的编译

Java 包

Java 采用包的概念来对相关的类进行管理。

包可以避免名称冲突,并且通过包名进行分类后,代码的维护性会有所提高。

包本质上就是一个个文件夹

image-20220514205408210

以上都是 Java 的内置包,除了内置包,Java还支持自定义包。

Import

import 可以从指定的包中导入指定的类,如:

import java.util.Scanner;

或导入指定的包内所有内容

import java.util.*;

同个包下的类直接访问即可,无需导入。

Package

package用于声明该代码存在于哪个包的那个位置,使用Javac编译时.class就会放在相对应的位置

一个类中只能声明一次package且只能在第一行代码声明

└── root  
  └── pack_name    
    └── MyPackClass.java

如:

package pack_name;

public class MyPackClass {
    String str = "This is My Package Class";
}

包的命名规则及规范

命名规则:

  • 只能包含数字、字母、下划线、.,不能以数字开头,不能是关键字或保留字

命名规范:

  • 一般是 com.公司名称.项目名称.业务模块名如:

    • com.sina.crm.user 用户模块
    • com.sina.crm.order 订单模块
    • com.sina.crm.utils 工具类
  • 其文件分布格式是这样的:

    • └── com  
        └── sina
          └── crm
            └── user
              └── ***.java...
            └── order
              └── ***.java
            └── utils
              └── ***.java
      

编译

发现很多教学,都是直接教使用IDE进行编译,并没有对手动编译进行说明,但是作为一名初学者,现阶段不建议使用集成度过高的IDE,你可以不使用手动编译,但你必须知道如何手动编译

对于使用了自建包的代码,有必要知道如何在不使用 IDE 的情况下手动编译

编译时需要 javac 从包开始直到源文件位置 如:com/sina/user/***.java

如果不指定编译后的位置那么会将这个源文件使用到的所有包都进行编译,并存放到对应的源文件路径下,如下图

image-20220515202738285

如果使用 javac -d 指定了路径这会在指定的路径生成与源文件一样的包,里面存放编译好的 .class 文件

使用java -d编译需要手动编译每一个包里的类如:

# CLASS_PATH 为你要将编译好的 .class 文件储存的路径
java -d CLASS_PATH com/user/Test.java com/xiaoming/Dog.java com/xiaoqiang/Dog.java

这样有些麻烦

如果你是Linux系统,可以使用find命令,找出所有是.java后缀的路径,然后将输出重定向到一个文件,我们再使用javac -d CLASS_PATH @java_path.list这是另外一种解决思路,如:

# 先进入到存放包的目录
cd 存放包的上一级目录
find ./ -name *.java > java_path.list
java -d CLASS_PATH @java_path.list

图解:

进入到存放包的目录

image-20220517134530617

寻找.java源代码路径

image-20220517134743890

这就是我们找到的源代码路径

image-20220517134846542

开始编译

image-20220517135013065

可以看到,编译完成后在你指定存放类文件的路径下会生成一个目录,我们查看一下这个目录

image-20220517135150568

可以看到,它与我们原文件的储存样式是一模一样的

这是原文件

image-20220517135356846

尝试运行

我们使用java -classpath指定我们存放类文件的路径,再在后面选择你要运行的类文件

image-20220517135742364

posted @   假文艺青年。  阅读(421)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示