導航:首頁 > 源碼編譯 > java在編譯的時候轉為c嗎

java在編譯的時候轉為c嗎

發布時間:2022-05-20 01:43:36

⑴ ;編譯的時候先到java文件所在的目錄,然後再使用javac命令。 怎麼做

看看下面的解釋
一、javac命令
javac 用於編譯Java文件,格式為:
java [options] [sourcefiles] [@files]
其中:
options:命令行選項;
sourcefiles:一個或多個要編譯的源文件;
@files:一個或多個對源文件進行列表的文件,有時候要編譯的文件很多,一個個敲命令會顯得很長,也不方便修改,可以把要編譯的源文件列在文件中,在文件名前加@,這樣就可以對多個文件進行編譯,對編譯一個工程很有用,方便,省事。
有幾個比較重要的選項:
-d 用於指定編譯成的class文件的存放位置,預設情況下不指定class文件的存放目錄,編譯的class文件將和源文件在同一目錄下;
-classpath 可以簡寫成-cp,用於搜索編譯所需的class文件,指出編譯所用到的class文件的位置,如jar、zip或者其他包含class文件的目錄,指定該選項會覆蓋CLASSPATH的設定;
-sourcepath用於搜索編譯所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目錄;
需要注意windows下和linux下文件路徑分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的區別:
windows下文件路徑分隔符用 \ ,文件列表分隔符用分號 ;
linux下文件路徑分隔符用 / ,文件列表分隔符用冒號 :
二、java命令
java 用於執行程序,格式如下:
java [options] classfile
options:命令行選項,一般用於 -classpath 指定要執行的文件所在的位置以及需要用到的類路徑,包括jar、zip和class文件目錄,會覆蓋CLASSPATH的設定

⑵ Java語言如何直接轉換為c語言

這個問題我只能大概的說一下,具體區別只有在你以後用的時候去比較了。
Java程序中的每個變數要麼是基本數據類型(boolean, char, byte, short, int, long, float, double),要麼是對對象的引用;
C++有許多種基本類型,額外還有struct, union, enum, 數組和指針,C++指針可以指向對象,也可以不指向對象;
Java沒有枚舉、聯合類型,因為Java認為沒有必要。將可有可無的語言元素去掉是Java對C/C++做出的一大改變,因此,普遍認為Java較C++更輕便,更精簡;
Java採用Unicode字元集,C++通常用ASCII字元集。但ASCII是Unicode的子集,對於習慣於ASCII的程序員感覺不到區別;
Java中的boolean類型不能轉換成其他類型,反之亦然。C++最近引進了bool類型,代表布爾類型,整型也作為邏輯判斷;
模板是一種「泛型編程思想」,它有別於「面向對象編程思想」。C++在很大程度上已經支持了這種新型編程方法,特別是STL的出現;
Java目前仍未支持泛型編程,不過據說Sun公司有在Java中引入模板的計劃;
C++支持「運算符的重載」,這是它的一個很重要的多態特徵,是數據抽象和泛型編程的利器。它允許直接對對象進行四則運算,正像基本數據類型那樣;
Java不支持這種多態機制,也是為降低復雜性;
兩種語言都支持方法重載(overloading)

在C++中,為了允許運行時動態決定哪個函數被調用,一個函數必須用virtual修飾。virtual關鍵字被自動繼承,用以支持多態;
凡是沒有用virtual修飾的成員函數(包括static)都是靜態綁定的,即在編譯時決定調用哪個版本
而在Java中,除了static、final、private是靜態綁定以外,所有方法一律按動態綁定處理
C++中有「拷貝構造函數」的概念,在三種情況下,自動調用它
用一個對象初始化另一對象
對象作實參進行函數調用
對象作函數的返回值
通常,當一個對象需要做「深拷貝」(錢能:《C++程序設計教程》)時,我們需要為它事先定義「拷貝構造函數」、「賦值運算符的重載函數」和「析構函數」;否則編譯器將以「按位」的形式自動生成相應的預設函數。倘若類中含有指針成員或引用成員,那麼這三個默認的函數就隱含了錯誤
Java則沒有這種語法結構和語義邏輯
C++支持inline函數,可以避免函數的堆棧調用,提高運行效率
Java無這種語義
C++中,構造函數的初始化列表是這樣使用的:首先按繼承順序調用基類的構造函數構造基類對象,然後按聲明順序調用成員對象的構造函數構造成員對象,最後對列表中出現的成員變數做初始化
Java不採用初始化列表這種構造機制
它們的構造順序基本一致:
靜態變數初始化
靜態初始化塊(Java)
調用基類的構造函數構造基類對象
實例變數的初始化
構造函數的其餘部分
Java使用abstract關鍵字修飾抽象方法或抽象類
C++的對等語法是「純虛函數」和「抽象類」
兩者都使用抽象類作為繼承層次中的基類,提供一般概念,由子類實現其抽象方法,且抽象類都不能被直接實例化為對象
Java中有final關鍵字,修飾類、方法或變數
final類不能被繼承
final方法不能被子類覆蓋
final變數就是常量
C++中沒有這個關鍵字,常量可以使用const或#define定義
const還可以修飾成員函數,即「常成員函數」,當一個const成員函數修改成員數據,或調用非const成員函數時,編譯器會報錯
我們應將不修改成員數據的函數聲明為const
Java和C++中的static關鍵字語法和語義基本相同
static成員變數又叫類變數,被類的所有對象共享
A::x (C++):必須在類體外初始化
A.x (Java):必須在類體內初始化
static成員方法又叫類方法,訪問static變數
A::f( ) (C++)
A.f( ) (Java)
兩者都有內部類和局部類的語法和語義
Java中沒有友元函數和友元類的概念,嚴格支持封裝,不允許外部方法訪問類的私有成員
而C++支持friend關鍵字,允許外部方法訪問類的私有成員,因此不是一種純面向對象的編程語言
Java中類或interface可以用public修飾,也可以不修飾;而C++類不能修飾
三種訪問許可權的語義相同,語法略有差別
C++中還有繼承許可權修飾符,Java則沒有
class A: protected B, public C (C++)
class A extends B (Java)
Java有super關鍵字,指代父類對象,通常被用於調用父類的構造方法或一般方法
C++則沒有super關鍵字
兩者都有this,指代當前對象
Java有package的概念,可以將類組織起來,便於打包和部署,也有利於類的安全。C++沒有這個概念,一個類可以被任意類訪問
Java applet可以被嵌入HTML文檔中,然後由Web瀏覽器下載和執行
Java API有對網路通訊的特別支持
C++則無內置網路功能
C++程序員必須顯式地實現動態內存管理,在析構函數中用delete運算符或free( )函數釋放對象和其他動態分配的數據空間,否則會造成「內存泄露」
而在Java中,垃圾收集是自動的。當對象的最後一個引用變數被釋放掉,這個對象就成為垃圾收集器的候選對象了
因此Java不支持析構函數
finalize( )方法主要被用來釋放先前打開的非內存資源,如文件句柄
Java源代碼被編譯成位元組碼(.class文件),位元組碼是一種只有JVM才能識別的二進制低級代碼,它與具體的處理器無關,要由安裝在OS之上的JVM解釋執行,轉換成相應平台的機器碼,因此Java是體系結構中立和跨平台的
而C++直接被編譯成底層平台的二進制機器碼,由CPU執行,是平台相關的
因此,當解釋執行時,Java程序速度更慢
Java語言支持多線程,允許並發線程的同步與互斥操作
C++則沒有這種內在機制
Javadoc.exe可以將Java程序的內容和結構轉換成HTML格式的文檔
C是面向過程的,C++和JAVA是面向對象的
主要是差別對象的概念
JAVA和C++人說的比較多的主要的是有沒有指針的差別
java簡單易學但效率不高!
c++相反有點麻煩效率高!
還有就是Java的可移植性好!能實現跨平台,即一次編寫到處適用!
C 是面向過程的程序設計語言。C++是面向對象的程序設計語言,不過C++語言保持了對C語言的兼容,也就說是在C++程序可以不用修改的插入C語言代碼。 JAVA也是面向對象的程序設計語言,主要是實現平台無關性,它的出現主要為了實現對一種智能終端的編程(有人設想在不遠的將來,你的冰箱有可能自己知道裡面的東西已經不多,按著你的需要向應的供貨商進行訂購。在你上班的時候也可以通過互聯網開啟你家裡的微波爐,回到家就好吃的東西
還有JAVA主要應用於上層,用戶使用JAVA不需要知道網路協議的細節,只需要知道如何調用相關介面就是了
C和C++主要應用於網路底層,用C和C++的程序員必須對協議有相關認識~

⑶ java如何編譯c或c++文件

  1. java是不能夠編譯C/C++文件的。他們原理完全不同。背後的運行機制也完全不一樣。

    C/C++源文件只能夠用C/C++的編譯器來編譯。

  2. 以GCC編譯器為例,整個編譯可以分為四步。
    第一步是預處理,包括語法檢查等工作。
    gcc -P abc.c
    第二步由源程序生產匯編語言代碼。
    gcc -S abc.c
    會生成abc.s文件,這個文件里就是匯編代碼。
    第三步編譯器生成目標代碼,一個源文件生成一個目標代碼。
    gcc -c abc.c
    會生成abc.o
    第四步連接器從目標代碼生成可執行文件。
    gcc abc.o
    目標代碼包括機器碼和符號表(函數及變數名)。連接器的主要作用是通過符號表在庫文件和其他模塊中找到在目標代碼中引入或未定義的符號(函數及變數名),將幾個目標代碼合成可執行文件。

⑷ java和c的編譯方式有什麼區別

我的第一次判斷失誤,請教了一位高手,理論解釋如下:
編譯器的問題,java的編譯器在遇到i++和i- -的時候會重新為變數運算分配一塊內存空間,以存放原始的值,而在完成了賦值運算之後,將這塊內存釋放掉,而C語言中的i=i++就只是完成i++的內容,所以結論會不同。

原理也可以這么說:
Java中:
int temp=i;//重新分配變數內存
i=i+1;
i=temp;

C中:
i=i;//i還是i
i++;

樓主,是不是考慮加點分,答案得來不容易啊 :-)

⑸ java代碼生成器能生成c語言代碼嗎用什麼方法能實現呢

按照我的理解,不能,我也學習過java,沒聽過這個功能。高級語言最終都要編譯成機器語言,也就是01串,為什麼會有這么多的計算機語音,就是因為各自在各自的領域比較方便。實現同一個功能,不管什麼語言都是可以的,只是難易程度的問題,因為任何語言都會有順序、選擇、循環這三種結構,如果可以的話,除非有一種這樣的程序,可以把java編譯的程序,也就是機器碼反編譯為C,這個我至今也沒聽說過,也不知道有什麼用。就我的理解來說,反編譯是非常難的一件事,而且是反編譯為原來的語言,比如微軟Windows源代碼,絕對的商業機密,應該有很多人嘗試過,你能拿到Windows的光碟(算是機器碼吧),但是你並不能提供Windows的源代碼,如果有人能提供的話,微軟就會倒閉,反編譯為其他語言,估計更是難上加難。

⑹ java的編譯程序是用c編寫的疑問

對於樓上這位的愚昧和無知,我深表同情,但更多的是悲哀

首先,我他媽的告訴你,java虛擬機的英文縮寫是JVM,而 不是JDK.

其次,我他媽還告訴你,java可以寫操作系統,SUN公司早在他媽N年前就發布了Solaris操作系統,現在都他媽到第 9版本了,你他媽還不知道。凡是C可以做的,java就可以做到。

第三,我他媽再告訴你一個常識性問題,編程語言有高級和低級之分,低級語言可以直接被機器識別,高級語言必須編譯變成機器碼才能被機器識別。C,C++,java都他媽是高級語言,不能「和硬體交互」.

下面,對於提問者,我告訴你,你的問題並不完整,你要問的是為什麼你的windows系統下,java的編譯程序是用c編寫的.我們知道,windows系統是微軟公司做的,微軟和SUN是競爭對手,微軟力推C,而SUN力推java.微軟的操作系統里當然不會用java寫啦,就像Solaris操作系統的編譯程序肯定是java 寫的一樣。
而且你所說的編譯程序也僅僅是指通過命令行來實現的編譯,其實有很多集成開發軟體的編譯程序都是其它語言寫的。

至於java的優越性問題,我想你是知道答案的。

⑺ 編譯Java程序的命令是javac 對嗎這句話

對呀,我們編譯的時候不都是使用javac加上文件名嗎

⑻ JAVA編譯的時候不是要用JAVAC嗎我用了不對啊!

應該是環境設置的問題;具體設置如下:
1:右擊「我的電腦」,點擊「屬性」:

2:選擇「高級」選項卡,點擊「環境變數」:

3:在「系統變數」中,設置3項屬性,JAVA_HOME,PATH,CLASSPATH(大小寫無所謂),若已存在則點擊「編輯」,不存在則點擊「新建」:

4:JAVA_HOME指明JDK安裝路徑,就是剛才安裝時所選擇的路徑D:\jdk1.4(後邊沒有標點不好),此路徑下包括lib,bin,jre等文件夾(此變數最好設置,因為以後運行tomcat,eclipse等都需要依靠此變數);

Path使得系統可以在任何路徑下識別java命令,設為:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; (如果後邊有其他內容,中間必須用分號和其他內容隔開)

CLASSPATH為java載入類(class or lib)路徑,只有類在classpath中,java命令才能識別,設為:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示當前路徑)

其中%JAVA_HOME%就是引用前面指定的JAVA_HOME。

最後確定,應用,

然後,開打cmd 的dos窗口:
分別鍵入三個命令開是否有提示:
java -version

java

javac

都有提示表示ok;

⑼ Java編譯過程與c/c++編譯過程有何不同

Java編譯原理
1、Java編譯過程與c/c++編譯過程不同
Java編譯程序將java源程序編譯成jvm可執行代碼--java位元組碼.
c/c++編譯過程:
當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而生成的。因此在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。
Java編譯過程:
Java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址,這樣就有效地保證了java的可移植性和安全性。
2、jvm工作原理
運行jvm字元碼的工作是由解釋器來完成的。解釋執行過程分三步進行:代碼的裝入、代碼的校驗、和代碼的執行。
裝入代碼的工作由「類裝載器classloader」完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被調
用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機的所有類都在同一地址空間中,而所有從外部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。
當裝入了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用與特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內布局,java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼的非法訪問。
隨後,被裝入的代碼由位元組碼校驗器進行檢查。校驗器可以發現操作數棧益處、非法數據類型轉化等多種錯誤。通過校驗後,代碼便開始執行了。
java位元組碼的執行有兩種方式:
1)即時編譯方式:解釋器先將位元組編譯成機器碼,然後再執行該機器碼。
2)解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成java位元組碼程序的所有操作。本節關於Java編譯的內容介紹到這里,請關注本節其他相關報道。

⑽ 在Java編程中,Java編譯器會將java程序轉換為什麼

A
一般java文件編譯過後會成為.
class文件
,這個.class文件就是
位元組碼
文件,若干個位元組碼文件構成了
Java程序

閱讀全文

與java在編譯的時候轉為c嗎相關的資料

熱點內容
hadoop解壓縮 瀏覽:421
30歲程序員生計 瀏覽:472
蘋果iOS反編譯軟體 瀏覽:460
當一個體面的程序員是什麼體驗 瀏覽:291
聯想安裝哪個編譯器 瀏覽:446
蘋果手機如何創建app組 瀏覽:40
如何知道伺服器開通了什麼埠 瀏覽:34
動態ip地址由dhcp伺服器來分配 瀏覽:800
aes128加密c 瀏覽:396
成為插畫師pdf 瀏覽:325
奧特曼系列ol為什麼進不去伺服器 瀏覽:742
盛世伺服器怎麼開啟 瀏覽:87
編譯安卓源碼修改定位 瀏覽:200
加密上市是什麼意思 瀏覽:802
一年程序員面試 瀏覽:174
多個jpg合成pdf 瀏覽:929
pdf轉word是圖片 瀏覽:941
程序員看不懂怎麼辦 瀏覽:273
linux操作系統題 瀏覽:769
單片機無符號數加法 瀏覽:231