java cp classpath_通过例子理解java中的classpath(-cp)

本文详细探讨了Java中的classpath,包括javac和java命令如何查找类。通过实例展示了即使没有设置CLASSPATH,javac也能编译成功,因为编译器会自动查找Bootstrap和Extension类。同时,解释了Bootclasspath、USER_CLASSES的查找顺序,并通过示例演示了如何正确编译和执行带有包结构的Java程序。最后,讨论了如何在编译和执行时指定-classpath和-jar选项。
摘要由CSDN通过智能技术生成

前言

javac是用来把后缀名为java的文件编译成class文件(字节码),然后java命令把对应的class文件执行就可以看到你程序里面定义的操作了.

首先我们知道classpath顾名思义就是class文件的路径,那-cp就是我们可以指定class文件的路径.

整篇文章的目的和主题只有一个就是弄明白classpath.

先看一个例子简单了解一下.

所有代码: 源代码

例子1

我的电脑目前执行echo $CLASSPATH是空,也就是说没有设置系统CLASSPATH.

首先创建一个文件夹TestClassPath我们所有的例子都会放到这个文件夹中.然后在文件夹下创建一个Test1.java内容如下:

import java.util.ArrayList;

import java.util.Arrays;

public class Test1 {

public static void main(String[] args) {

System.out.println("in Test1");

ArrayList list = new ArrayList<>(Arrays.asList(1,2,3,4,5));

for (int i : list) System.out.println("element:" + i);

}

}

至此目录结构如下:

.

└── Test1.java

执行javac Test1.java后目录如下:

.

├── Test1.class

└── Test1.java

执行java Test1后输出

in Test1

element:1

element:2

element:3

element:4

element:5

至此一个简单的例子就结束了,通过这一个例子我们应该知道了编译和执行的过程,但是却引出了一个问题

1.为什么CLASSPATH是空的时候javac也可以编译成功?难道不需要引入java.util.ArrayList类和java.util.Arrays类编译后的class文件吗?

The Java launcher, java, initiates the Java virtual machine. The virtual machine searches for and loads classes in this order:

Bootstrap classes - Classes that comprise the Java platform, including the classes in rt.jar and several other important jar files.

Extension classes - Classes that use the Java Extension mechanism. These are bundled as .jar files located in the extensions directory.

User classes - Classes defined by developers and third parties that do not take advantage of the extension mechanism. You identify the location of these classes using the -classpath option on the command line (the preferred method) or by using the CLASSPATH environment variable.

大概意思就是分三种类型的class文件:

Bootstrap classes: 是一些在rt.jar和一些其他jar包的class文件.

Extension classes:在JAVA_HOME/jre/lib/ext中jar包的class文件.

User Classes: 这个就是我们自己编译生成的class文件或者引入的第三方的class文件. 用-classpath(缩写-cp)来表示他们的路径.

再来一段:

It is relatively difficult to accidentally "hide" or omit the bootstrap classes.

In general, you only have to speci

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值