第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

“java”命令可以編譯 Java 程序嗎?

“java”命令可以編譯 Java 程序嗎?

神不在的星期二 2023-08-23 17:10:03
互聯(lián)網(wǎng)上的大多數(shù)網(wǎng)站都說(shuō):“使用javac命令編譯.java文件。然后使用java命令運(yùn)行它”但是今天我嘗試在沒(méi)有的情況下運(yùn)行一個(gè)java程序,javac并且得到了一個(gè)奇怪的結(jié)果。以下是名為 的文件的內(nèi)容hello.java:public class Myclass { public static void main(String[] args){    System.out.println("hello world");  }}然后我跑了:$ javac hello.java這給了我這個(gè)錯(cuò)誤:hello.java:1: error: class Myclass is public, should be declared in a file named Myclass.javapublic class Myclass {       ^1 error但是當(dāng)我在沒(méi)有javac命令的情況下運(yùn)行它時(shí),它執(zhí)行時(shí)沒(méi)有任何錯(cuò)誤。$ java hello.javahello world該java命令是否也編譯程序?如果是的話,為什么我們需要這個(gè)javac命令?我的java版本是:openjdk version "12.0.2" 2019-07-16OpenJDK Runtime Environment (build 12.0.2+10)OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode)
查看完整描述

4 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊

在 Java 11 之前,要運(yùn)行代碼,您必須首先編譯它,然后才能運(yùn)行它。這是一個(gè)例子:


javac test.java

java test

從 Java 11 開(kāi)始,您仍然可以執(zhí)行javac+操作java,或者可以java單獨(dú)運(yùn)行來(lái)編譯并自動(dòng)運(yùn)行您的代碼。請(qǐng)注意,不會(huì).class生成任何文件。這是一個(gè)例子:


java test.java

如果運(yùn)行java -help,您將看到各種允許的用法。這是我的機(jī)器上的樣子。最后一個(gè)是您遇到的情況:java [options] <sourcefile> [args]它將“執(zhí)行單個(gè)源文件程序”。


$ java -help

Usage: java [options] <mainclass> [args...]

? ? ? ? ? ?(to execute a class)

? ?or? java [options] -jar <jarfile> [args...]

? ? ? ? ? ?(to execute a jar file)

? ?or? java [options] -m <module>[/<mainclass>] [args...]

? ? ? ?java [options] --module <module>[/<mainclass>] [args...]

? ? ? ? ? ?(to execute the main class in a module)

? ?or? java [options] <sourcefile> [args]

? ? ? ? ? ?(to execute a single source-file program)


我們需要javac創(chuàng)建.class文件,以便可以像今天一樣創(chuàng)建、測(cè)試、分發(fā)、運(yùn)行、共享代碼等。JEP 330的動(dòng)機(jī)是讓“學(xué)習(xí) Java 的早期階段以及編寫(xiě)小型實(shí)用程序”變得更容易,而不改變?nèi)魏纹渌F(xiàn)有用途。


查看完整回答
反對(duì) 回復(fù) 2023-08-23
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果您運(yùn)行的是 Java 11,則有一項(xiàng)新功能允許執(zhí)行單個(gè)源文件。單源編譯器在類(lèi)名與文件名方面更加混雜,因此您可以運(yùn)行但無(wú)法成功編譯。

如果您使用的是以前版本的 Java,則當(dāng)前的 hello.java 不會(huì)編譯,因?yàn)榫幾g錯(cuò)誤,特別是類(lèi)名周?chē)腻e(cuò)誤。因此,調(diào)用 java hello.java 絕對(duì)不可能編譯您的代碼,因?yàn)樗鼰o(wú)法編譯。

看起來(lái)很可能您在執(zhí)行 java 命令時(shí)正在運(yùn)行一些先前編譯的代碼。


查看完整回答
反對(duì) 回復(fù) 2023-08-23
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

要回答出現(xiàn)此錯(cuò)誤的原因,文件的類(lèi)名必須與文件的basename.

您有兩種選擇讓此代碼適用于傳統(tǒng)的javac;java順序:

  1. 將類(lèi)重命名為public class Hello

  2. 重命名hello.javamyclass.java.

Java 11 的解釋java器沒(méi)有強(qiáng)加此要求。包含的類(lèi)main可以具有任何名稱,只要它是文件中的第一個(gè)類(lèi)即可。


查看完整回答
反對(duì) 回復(fù) 2023-08-23
?
森林海

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊

是的,但不是你想的那樣。

當(dāng)您使用該javac命令將 .java 文件編譯為 .class 文件時(shí),輸出稱為字節(jié)碼。字節(jié)碼是基于 Java 虛擬機(jī)規(guī)范的理論 CPU 的機(jī)器代碼(本機(jī)指令)。

此虛擬 CPU 規(guī)范是編寫(xiě)規(guī)范時(shí)常見(jiàn)的 CPU 類(lèi)型的平均值。因此,它接近許多不同類(lèi)型的 CPU,從而更容易在多種 CPU 類(lèi)型上運(yùn)行相同的 Java .class 文件。

當(dāng) Java 第一次啟動(dòng)時(shí),該java命令將讀取 .class 文件并一次解釋一個(gè)字節(jié)碼指令,然后將它們映射到實(shí)際運(yùn)行的 CPU 的等效本機(jī)指令。這有效但不是特別快。為了改進(jìn)這一點(diǎn),Java 運(yùn)行時(shí)中添加了即時(shí) (JIT) 編譯。

通過(guò) JIT,該java命令獲取字節(jié)碼并將其再次編譯為其運(yùn)行的 CPU 的本機(jī)指令。現(xiàn)代 Java 運(yùn)行時(shí)傾向于在后臺(tái)進(jìn)行 JIT 編譯時(shí)開(kāi)始解釋字節(jié)碼,并在準(zhǔn)備就緒時(shí)切換到已編譯的本機(jī)指令,并且還將分析正在運(yùn)行的應(yīng)用程序,然后使用不同的優(yōu)化再次重新編譯字節(jié)碼,以獲得最佳性能。

編輯(安撫反對(duì)者):

因此,在您的特定情況下(因?yàn)槟\(yùn)行的是比 v11 更新的 JRE),代碼會(huì)(至少)編譯兩次

  1. 作為字節(jié)碼的單個(gè) .java 文件

  2. 通過(guò) JIT 編譯器解釋字節(jié)碼(盡管對(duì)于 helloWorld,它實(shí)際上可能沒(méi)有時(shí)間運(yùn)行任何已編譯的本機(jī)代碼)


查看完整回答
反對(duì) 回復(fù) 2023-08-23
  • 4 回答
  • 0 關(guān)注
  • 285 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)