zoukankan      html  css  js  c++  java
  • 当使用javac编译源文件时,如何查找import导入的类

    当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转移单元)。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件名称一致。每个编译单元只能有一个public类,否则编译器就不会接收。如果在该编译单元之中还有额外的类,那么在包之外无法看见这些类,这是因为它们不是public类,而且它们主要用来为主public类提供支持。

    java解释器的运行过程:

    1. 找出环境变量CLASSPATHCLASSPATH包含一个或多个目录,用作查找.class文件的根目录
    2. 从根目录开始,解析器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称。以cn.example.simple为例,它会转换成cnexamplesimple
    3. 得到的路径会与CLASSPATH中的各个不同的项相连接,解析器就在这些目录中查找与你所要创建的类名称相关的.class文件

    例子:

    使用包名:cn.example.simple在该名称空间下,新建两个类:

    package cn.example.simple;
    
    public class Vector{
        public Vector(){
            System.out.println("cn.example.simple.Vector");
        }
    }
    package cn.example.simple;
    
    public class List{
        public List(){
            System.out.println("cn.example.simple.List");
        }
    }

    将这两个文件置于目录:C:DOCJavaT中,设置CLASSPATH,如下:

      CLASSPATH=.;C:DOCJavaT

     一旦类路径确立,测试文件就可以放在任何目录下:

    import cn.example.simple.*;
    
    public class LibTest{
        public static void main(String[] args){
            Vector v = new Vector();
            List l = new List();
        }
    }/*output:
    cn.example.simple.Vector
    cn.example.simple.List
    */

    分析:

      当编译器碰到simple类库的import语句时,就开始在CLASSPATH所指的目录中查找,查找子目录cnexamplesimple,然后从已编译的文件中找出名称相符.class文件。

    注意:

    无论何时创建包,都已经在给定的包名称的时候隐含地指定了目录结构。这个包必须位于其名称所指定的目录之中,而该目录必须是以CLASSPATH开始的目录中可以查询到。

    编译过的代码通常放置与源代码的不同目录中,但是必须保证JVM使用CLASSPATH可以找到该路径。

     

     

  • 相关阅读:
    迁移服务器遇到django-crontab不执行定时任务问题
    纯CSS3+DIV实现小三角形边框
    mysql密码错误-ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)
    收货地址下边的平行四边形彩色线条
    小程序导航栏全屏navigationStyle自定义导航栏,小程序轮播图导航栏
    移动宽带下Github网页上不去的解决办法
    线段比例式或等积式的证明思路
    两角不等的证明思路
    线段不等的证明思路
    两角相等的证明思路
  • 原文地址:https://www.cnblogs.com/aristole/p/8005910.html
Copyright © 2011-2022 走看看