javac和java命令详解

news2024/9/22 6:40:57

javac 是java语言编程编译器。全称java compiler。相信大家在学习java编程的时候,一定使用过javac和java这两个命令。大家在安装JDK的时候,验证是否安装成功,都会在命令行里输入java和javac命令来验证,这就是我们第一次使用java和javac命令。安装成功后,紧接着,我们会写个HelloWorld程序开始我们的java编程之旅。程序写完后,我们需要使用javac命令将源代码编译成class字节码文件,最后,再使用java命令来运行我们的字节码文件。到了这一步,我们的java之旅就正式开始了。

一:简单的命令

我们先从javac命令开始,javac命令是将源代码编程成class字节码文件,因为我们的JVM虚拟机是执行class字节码文件的,不是执行源代码,JVM虚拟机是不认识源代码的。

public class Helloworld{
	public static void main(String[] args) {
		System.out.println("hello world");
	}
}

上面是一段简单的java源代码,我们需要使用javac命令将其编程成字节码文件,才能运行,如下图:

在这里插入图片描述

执行之后,当前目录下会多出一个Helloworld.class文件,这就是字节码文件,如下图:

在这里插入图片描述

如果想运行,那么可以使用java命令来执行class字节码文件:
在这里插入图片描述

执行结束后,在控制台,输出hello world字符串。另外,需要注意,并不是每个字节码都能得到执行,只有含有main方法的class文件才能执行,因为,main方法是java程序的入口。

二:复杂的命令
当我们的java源文件有包结构的时候,再使用javac命令编译,就需要一些参数。举个例子,我有两个类,一个是Dog类,一个是Test测试类:

package com.dayuanit.animal;

public class Dog {
	public void move() {
		System.out.println("dog move");
	}
}
package com.dayuanit.test;

import com.dayuanit.animal.Dog;

public class Test {
	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.move();
	}
}

这两个类,使用javac命令编译如下:
在这里插入图片描述

我来解释下上面的命令,这个javac编译比之前的多了一个“-d”参数,这个参数是用来生成包结构的,也就是源代码声明的package目录结构,我们需要将生成的class字节码文件放在这个package下面,通过javac命令,能够帮助我们自动生成package目录,并且能够将class字节码文件放在对应目录的下面,很方便吧:

在这里插入图片描述

编译过之后,会在当前目录下生成包目录,如上图,另外,注意,“-d"参数后面有个”.",这个点代表当前目录,当然你也可以改为其他目录。

源代码已经编译好了,那么我们该如果运行呢?
在这里插入图片描述

如上图,我们使用java命令直接运行Test,发现报错了。因为此时Test有了包结构,它的全名称应该叫:com.dayuanit.test.Test,所以,我们的命令应该是:
在这里插入图片描述

如上图,我们就能够正确运行Test类了,这里强调一下,当类有了包名后,类的名字就是包名+类名了,这才是它的真实名称。

三:把编译后的字节码放在其他位置。
我们知道javac命令的-d参数能够帮助我们生成包目录结构,另外,还能指定生成包目录放在哪里,好,我们来看下如何使用。

在这里插入图片描述

如上图,-d参数后面我跟上 e:/,这代表我将编译后的包目录放在了e盘下面了:

在这里插入图片描述

好,我们将字节码放在了e盘,如何运行字节码呢?方法有两个,且看第一种方式:

在这里插入图片描述

我们可以到E盘下面,然后运行java命令即可,如上图,因为我们的包在E盘下面。

第二种方式:

在这里插入图片描述

如上图,这次我们还是在源代码目录,编译之后,字节码都在E盘下面,但是我们要在源代码目录下直接运行E盘下面的字节码,我们在java命令后面跟上了 -classpath参数,这个参数是告诉java虚拟机,到E盘下面找我们的class字节码文件,当然你也可以指定多个目录,用“;”分号隔开即可。

以上,我们分析了如何使用javac和java命令进行代码的编译和运行,有了以上的学习,我相信大家对javac和java命令会有更深刻的理解和认知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF怎么编辑注释? 5 个免费好用的 PDF 注释器

成群结队的人和组织想要注释他们的 PDF 文档的原因有很多。无论哪种情况,目标是做到近乎完美并不是完美。但是,如果您没有合适的 PDF 注释器,这又是不可能的。虽然这些 PDF 注释器工具中的许多都很昂贵,但您仍然可以使用免费的 PD…

tkintertools 模块实战一:任务清单小工具

之前我自己写了一个 tkinter 模块的辅助模块 —— tkintertools,这次试着用这个模块开发了一款可以记录任务的小工具,应该会比较实用。tkinter 模块的最强辅助模块 —— tkintertools(万字详解)_小康2022的博客-CSDN博客tkinter 模…

数字图像处理实验(直方图均衡化规定化)

图像均衡化 图像均衡化是一种图像处理技术,它的目的是改善图像的对比度。 具体来说,对于一张图像,其直方图就是统计图像中各灰度级出现的次数的图像。通常情况下,图像的直方图会呈现不平衡的状态,即图像的某些灰度级出…

SQLSERVER 的主键索引真的是物理有序吗?

一:背景 1. 讲故事 最近在看 SQL SERVER 2008 查询性能优化,书中说当一个表创建了聚集索引,那么表中的行会按照主键索引的顺序物理排列,这里有一个关键词叫:物理排列,如果不了解底层原理,真的…

5G NR标准: 第18章 射频特性

第18章 射频特性 如第 3 章所述,NR 的射频特性与 5G 的可用频谱以及在这些频谱分配中运行所需的频谱灵活性密切相关。 虽然频谱灵活性一直是前几代移动系统的基石,但对于 NR,这一点变得更加突出。 它由几个组成部分组成,包括在不…

C++11 线程异步

文章目录1. 线程异步的概念2. future2.1 共享状态2.2 常用成员函数3. promise3.1 常用成员函数3.2 promise的基本使用4. package_task4.1 常用成员函数4.2 package_task的基本使用5. async5.1 async的基本使用6. promise、package_task、async的对比与总结1. 线程异步的概念 问…

干货 | 读懂 Appium 日志,让测试效率翻倍!

Appium 服务器运行时会产生很多日志,但是很多人并不了解其中的意义,也无法掌握有用的信息。本文将详细解读如何读懂 Appium 日志,并让你的测试效率翻倍。开启服务日志第一行显示了 Appium 版本和运行地址。$ appium[Appium] Welcome to Appiu…

曾经对程序员最好的公司,倒下了

硅谷有一家公司,它发明了同时代最好的CPU,最好的操作系统,最好的编程语言,但是由于傲慢和目光短浅,在短短二十多年间就走到了尽头。它就是Sun Microsystems,硅谷最让人惋惜的公司。1Sun的出现是个巧合。80年…

运动蓝牙耳机哪个品牌好、2023年最出色运动蓝牙耳机推荐

上班通勤、娱乐和运动时间都需要一款耳机的陪伴。相信音乐是许多健身爱好者锻炼时的必备,在枯燥的运动中用音乐分散注意力,不仅可以提高运动的积极性,还能让身体产生一种非常奇妙的愉悦感。不过,想要在运动中获得更好的聆听体验&a…

【图像处理OpenCV(C++版)】——3.2 几何变换之投影变换

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

前端高频vue面试题总结

created和mounted的区别 created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。 如何从真实DOM到虚拟DOM …

springboot 全局 Date参数接收 String格式 转换异常报错

报错: .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type java.util.Date from String "2022-12-13 11:22:11": not a v…

C语言实现c++对象和私有成员

C语言实现c对象和私有成员 C语言实现c对象 类是C中面向对象编程思想中比较重要的组成部分,与结构体一样类只是一个模板只有在创建对象时才会申请内存空间,类其实是把具有共同特性的数据或方法(面向对象编程中,一般把函数称为方法…

录屏软件哪个好用?10个免费好用的「录屏软件」推荐

想知道如何录制自己的流媒体视频吗?有几个选项可以让您免费录制流媒体视频:桌面屏幕录像机、在线工具、浏览器扩展、iOS 应用程序和 Android 应用程序。 查看下表以获取有关不同直播流媒体录像机的更多信息:它们的主要用途和运行的操作系统。…

基于YOLOV5的火灾检测系统(含模型)+GUI界面

基于YOLOV5的火灾检测系统 本期我们带来的内容是基于YOLOV5的火灾检测系统,火灾检测系统还是比较有实际意义的,也方便大家在背景描述中展开。废话不多说,还是先看效果。 完整代码下载地址:基于YOLOV5的火灾检测系统(含模型&…

MySQL高级 SQL优化【limitcountupdate优化】

目录 1:SQL优化 1.1:limit优化 1.2:count优化 1.2.1:概述 1.2.2:count用法 1.3:update优化 1:SQL优化 1.1:limit优化 在数据量比较大时,如果进行limit分页查询&a…

拉伯配资|战略新兴产业火了,高增长低估值股曝光

导读:2022年,A股商场值得记录的前史性大事件不断。这一年,A股商场上市公司数量正式打破5000家,战略新兴工业上市公司数量打破2500家,占比初次打破50%大关。这一年,A股商场顶住杂乱的外部环境要素&#xff0…

一文读懂:什么是CRM?企业如何通过CRM盈利?

今天和大家分享一篇干货文章,主要探讨什么是CRM,用大白话解释企业究竟如何通过CRM盈利。文章有点长,但看完,相信你会有所收获。 一、什么是CRM CRM——客户关系管理系统,它不仅是一个系统,一个技术解决方案…

云原生安全系列 4:6个 Kubernetes 安全最佳实践

引言: Kubernetes为我们提供了一套很好的核心软件安全原则,但我们仍然需要理解并实施它们。对于 Kubernetes 集群分布式部署,攻击向量的数量也会增加,了解并尽可能限制这些攻击面的最佳实践非常重要。 即使在使用托管的 Kuberne…

以系统思维推进零信任架构演进

声明 本文是学习零信任数据动态授权桔皮书. 下载地址 http://github5.com/view/55013而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 以工程化思维推进零信任架构演进 前文所述零信任数据动态授权能力,是围绕数据本身的库、表、字段构建安…