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可以找到该路径。

     

     

  • 相关阅读:
    Android面试题
    java面试题大全
    关于索引的sql语句优化之降龙十八掌
    java动态代理的实现
    java动态代理
    进程与线程
    SqlServer聚合函数
    2015年创业中遇到的技术问题:21-30
    hadoop集群ambari搭建(2)之制作hadoop本地源
    Android录屏命令、Android录Gif、Android录视频
  • 原文地址:https://www.cnblogs.com/aristole/p/8005910.html
Copyright © 2011-2022 走看看