java小编译 应该只是编译机制还不够底层

java中java文件的各种编译过程:

A.java代码如示:

package mypack;   //这句是包声明
public class A {
    String name;
    int age;
    public void setName(String _name){
        this.name =_name;
    }
    public void setAge(int _age){
        this.age = _age;
    }
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
    public static void main(String[] args){
        A a = new A();
        //a.setName("zs");
        a.name="zs";
        a.setAge(18);
        System.out.println(a.getName()+a.getAge());
    }
}

Test.java代码如示:

//package mypack1;  包声明
import mypack.A;
public class Test{
    public static void main(String[] args){
        A a = new A();
        a.setName("zs");
        //a.name="zs";
        a.setAge(18);
        System.out.println(a.getName()+a.getAge());
    }
}

所有(A.java、Test.java、mypack文件夹)都在桌面目录下,此为背景。

1.编译的文件中导入了包:

此时要编译Test.java但是有导入,所以通常的javac Test.java会出现错误:

 第一种编译方法:

使用javac命令的cp参数指定编译文件中导入包的位置   即告诉编译器我导入的这个包 你去哪儿找:

这里讲一下cp参数

cp全称:classpath   作用是编译java文件(javac -cp)或者运行字节码文件class文件(java -cp)告诉编译器到哪儿找依赖或者说需要的类  (官方叫类路径)

第二种方法: 使用javac命令的d参数  参数意思是编译完了  放哪儿  -d 后面写的是目录  告诉编译器往哪儿放

例如:

 

 因为编译的时候编译了*.java  所以也编译了A.java  而A.java中有包声明 所以mypack里也生成了mypack 那么\mypack\mypack里自然也有A.class

但是还没有这么简单:

要这样才能编译成功(目前还不是很明白为啥):

 这里讲一下目录切换:

"." 代表当前目录   这也是为啥上面参数d后面有一个点和空格 即“.  ”。

".."代表上一级目录   "\"(反斜杠)代表根目录     "d:"代表切换到D盘 余者同理。

2.编译带包声明的文件:

A.java就是带包声明的,首先:

编译成功但是无法运行class文件:

 

带有包声明的要用javac命令的d参数 :

详细补充:

 

相关理解:菜鸟 

猜你喜欢

转载自blog.csdn.net/haohao0626/article/details/84867368