zoukankan      html  css  js  c++  java
  • Java基础——classpath与package

    Java Package

    Java package是将Java各种类、接口、枚举、注解组织成namespace的一种机制。package有效解决了类型重名问题,相同package的类型可以相互访问,不同package的类型访问要么使用import语句引入,要么使用包含namespace全限定名称引用。

    package实质上对应于文件系统的目录结构,编写程序时,使用package AA.BB.CC语句时,编译后,在工作目录下应有AA/BB/CC/xx.class文件结构与之对应。不使用package语句时,意味着使用默认package,即本地工作目录,编译后,会在工作目录里生成xx.class文件。

    大多是时候,我们使用IDE开发,如Eclipse,会自动调用合适的javac命令进行编译,但是如果是我们自己手动调用呢?

    如果代码使用了package语句,一定要调用合适的javac命令,生成合理的字节码文件目录。

    D:Java>javac -d . -verbose HelloWorld.java
    [解析开始时间 RegularFileObject[HelloWorld.java]]
    [解析已完成, 用时 30 毫秒]
    [源文件的搜索路径: .]
    ...
    ... D:Java>

     编译完成,在本地目录下会生成对应于package的目录结构

    使用java命令调用

    D:Java>java cn.leo.demo.HelloWorld
    Hello
    
    

    Java classpath

    classpath是Java虚拟机(Java命令)、Java编译器(javac命令)工作时的配置参数,用来指定用户自定义类型和package的位置。classpath可以在命令行临时设置,也可以配置在系统环境变量中长期保持有效。

    继续看上面的例子,因为没有设置CLASS_PATH环境变量,其实java的会在本地目录中寻找HelloWorld.class文件,cn.leo.demo.HelloWorld表示 D:/Java/cn/leo/demo/HelloWorld.class。

    如果要引用的类不在当前目录中,一定要使用-cp 或者 -classpath选项指定类搜索路劲

    D:Javacn>java cn.leo.demo.HelloWorld
    错误: 找不到或无法加载主类 cn.leo.demo.HelloWorld

    D:Javacn>java -cp ../ cn.leo.demo.HelloWorld Hello D:Javacn>

    如果要执行的类引用了当前classpath搜索路径找不到的类型,就要修改当前classpath添加可以搜索到的路径

    例如

    // HelloWorld.java
    package cn.leo.demo;
    
    import com.leo.demo.Hello;
    
    public class HelloWorld{
      public static void main(String[] args){
        Hello leo = new Hello();
        leo.say();
      }
    }
    
    // Hello.java
    package com.leo.demo;
    
    public class HelloLeo{
        public void say(){
            System.out.println("Leo");
        }
    }
    

    HelloWorld类在cn.leo.demo包中,HelloLeo类在com.leo.demo包中,HelloWorld类引用了HelloLeo类。

    首先编译HelloLeo类,再编译HelloWorld类,保证依赖解析正确

    D:Java>javac -d . Hello.java
    
    D:Java>javac -d . HelloWorld.java
    
    D:Java>java cn.leo.demo.HelloWorld
    Leo
    
    D:Java>cd ..
    
    D:>java -cp java cn.leo.demo.HelloWorld
    Leo
    
  • 相关阅读:
    代码风格
    C语言带返回值的宏
    设计模式之PIMPL模式
    打印控制之VT100
    C语言实现反射
    C语言实现函数override
    [BZOJ3669] [NOI2004] 魔法森林 LCT维护最小生成树
    [BZOJ4826] [HNOI2017] 影魔 单调栈 主席树
    [BZOJ2054]疯狂的馒头 并查集
    [BZOJ5305] [HAOI2018] 苹果树 数学 组合计数
  • 原文地址:https://www.cnblogs.com/seastar1989/p/7607656.html
Copyright © 2011-2022 走看看