ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Java的编译与运行

Java的编译与运行

前言

  • Java同时具有编译和解释特点,故其是混合型语言
  • Java的平台独立性依赖于JVM,能在不同的OS下运行Java程序
  • main方法就是入口方法,在class中并非必须有,标准签名如下:
    • public static void main(String[] args)
  • 源码层面来看:编译阶段依赖于“javac.exe”,运行阶段依赖于“java.exe”

首先是编译阶段

  • 开发者首先在一个工作区创建java源文件,扩展名为".java",并利用编辑器编写Java程序源码
  • 在cmd或PowerShell运行javac.exe文件,即javac命令
    • 语法:javac + 源文件的路径(相对路径和绝对路径均可)
    • 绝对路径和相对路径区别:
相对路径 绝对路径
说明 相对于当前工作目录 从根目录开始的完整路径
示例(Windows) src\Main.class C:\project\src\Main.class
  • java编译器会将java源码编译为1~n个字节码文件,取决于Java程序源码的写法(class的个数)
    注意:字节码文件不是机器码文件,不能被机器以及os直接运行

其次是运行阶段(翻译)

  • 运行java.exe文件,即java命令
    • 语法:java + 类名
    • 补充:类名即字节码文件名(无扩展名)
      • eg. test.class,"test"为类名
  • 具体过程:
    1. 首先启动JVM
    2. 其次才会启动类加载器(classloader),它会在环境变量classpath中寻找"类名.class"文件,会按照classpath的顺序依次搜索,找到第一个即停止,找不到会报错
    3. 如果用户未配置classpath,则默认当前路径下寻找,找不到则报错
    4. 最后JVM会将得到的字节码文件翻译为机器码文件,以便OS执行后与硬件平台交互

classpath和path的区别

  • classpath:字节码文件环境变量,java命令寻找类文件的死地址,支持多路径(以分号分隔) 如果用户将该路径写死了,则java命令单单只从classpath路径下寻找,找不到则报错,所以当需要引入第三方库时,才会配置classpath
    1. 未配置classpath时:
      • 默认在当前目录查找类文件
      • 例如:在C:\project目录执行java Main,会查找C:\project\Main.class
    2. 已配置classpath时:
      • 只在classpath指定的路径中查找,不会自动查找当前目录
      • 这是常见错误:配置了classpath后当前目录的类反而找不到
    3. 现代JDK(9+)补充:
      • 降低了对classpath的依赖
      • 但基本查找逻辑不变
  • path:运行窗口运行文件除当前路径外寻找的地址
    • 用户环境变量:只有当前用户登陆电脑时生效
    • 系统环境变量:登录该电脑的所有用户均生效
  • 二者主要区别:classpath是固定地址,找不到就找不到;而path找不到也会在当前目录下查找

public class与class的区别

public class class
修饰的类名必须与源文件名保持一致,一个源文件中仅有一个 可以有多个,但是不能重名
公开,其他包可访问 只能在同一个包内访问
不同包则无法访问
返回列表