隨便轉,c是面向過程的,沒有Java中類的概念,編程思想很重要,有了思想,實現並不難,語法要先學會
② 求幫忙把JAVA代碼轉成C++代碼,在線等
這個你自己就可以轉啊,兩者的代碼邏輯差不多,改下import的包路徑,類的定義格式,變數的定義,網上找一找兩者的差異,對應著改唄
③ 給一段JAVA語言可以改成C語言嗎
我雖然沒有具體學習過 JAVA 語言,但是也學習過別的程序設計語言。你的程序大致功能是:有 6 個面板(p1 - p6)、6 個按鈕(b1 - b6)、7 個文本區域(out1 - out7),在初始化子函數中,分別為 p1 - p4 開辟一塊新的存儲區域(利用 new 實現),並將 p1 - p4 的背景色的顏色設置成灰色(setBackground(Color.gray))。
我估計 p5、p6 的情況也應該同 p1 - p4。
理論上講,任何不同類型的程序設計語言都可以相互轉換,只不過是實現的語句不同罷了。比如說,你如需要在 C 語言中實現你現在同樣的JAVA程序功能, C 語言程序語句不可能完全一樣,但是肯定可以找到功能和 JAVA 一樣的程序語句。
④ java代碼轉c語言
有一個軟體叫「exe4j」,雖然不能把java程序轉成C代碼但是可以轉成.exe文件,在沒裝JDK的電腦上也能運行,你要想把java的代碼轉成C代碼估計不太現實。C都沒類這個概念
⑤ 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語言代碼嗎用什麼方法能實現呢
按照我的理解,不能,我也學習過java,沒聽過這個功能。高級語言最終都要編譯成機器語言,也就是01串,為什麼會有這么多的計算機語音,就是因為各自在各自的領域比較方便。實現同一個功能,不管什麼語言都是可以的,只是難易程度的問題,因為任何語言都會有順序、選擇、循環這三種結構,如果可以的話,除非有一種這樣的程序,可以把java編譯的程序,也就是機器碼反編譯為C,這個我至今也沒聽說過,也不知道有什麼用。就我的理解來說,反編譯是非常難的一件事,而且是反編譯為原來的語言,比如微軟Windows源代碼,絕對的商業機密,應該有很多人嘗試過,你能拿到Windows的光碟(算是機器碼吧),但是你並不能提供Windows的源代碼,如果有人能提供的話,微軟就會倒閉,反編譯為其他語言,估計更是難上加難。
⑦ 求助!想把一個java代碼轉成c#但沒學過,為什麼用java就可以在類里對這些欄位直接操作
圖一java相關操作是在靜態塊中,像:
static
{
//相關操作
}
是可以的。因為在java中,靜態塊相當於c#的靜態構造函數,只會在類第一次載入時執行一次。
所以,應該將圖二c#相關操作放入靜態構造函數中。
像圖二那樣在類中使用賦值語句而不是初始化語句(帶類型的賦值語句),在java和c#中都是錯的。
⑧ 寫一段java代碼,調用c程序,都有什麼辦法
JAVA以其跨平台的特性深受人們喜愛,而又正由於它的跨平台的目的,使得它和本地機器的各種內部聯系變得很少,約束了它的功能。解決JAVA對本地操作的一種方法就是JNI。
JAVA通過JNI調用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX機器上是SO文件形式)。通過調用本地的庫文件的內部方法,使JAVA可以實現和本地機器的緊密聯系,調用系統級的各介面方法。
簡單介紹及應用如下:
一、JAVA中所需要做的工作
在JAVA程序中,首先需要在類中聲明所調用的庫名稱,如下:
static
{
System.loadLibrary(「goodluck」);
}
在這里,庫的擴展名字可以不用寫出來,究竟是DLL還是SO,由系統自己判斷。
還需要對將要調用的方法做本地聲明,關鍵字為native。並且只需要聲明,而不需要具體實現。如下:
public
native
static
void
set(int
i);
public
native
static
int
get();
然後編譯該JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就會生成C/C++的頭文件。
例如程序testdll.java,內容為:
public
class
testdll
{
static
{
System.loadLibrary("goodluck");
}
public
native
static
int
get();
public
native
static
void
set(int
i);
public
static
void
main(String[]
args)
{
testdll
test
=
new
testdll();
test.set(10);
System.out.println(test.get());
}
}
用javac
testdll.java編譯它,會生成testdll.class。
再用javah
testdll,則會在當前目錄下生成testdll.h文件,這個文件需要被C/C++程序調用來生成所需的庫文件。
二、C/C++中所需要做的工作
對於已生成的.h頭文件,C/C++所需要做的,就是把它的各個方法具體的實現。然後編譯連接成庫文件即可。再把庫文件拷貝到JAVA程序的路徑下面,就可以用JAVA調用C/C++所實現的功能了。
接上例子。我們先看一下testdll.h文件的內容:
/*
DO
NOT
EDIT
THIS
FILE
-
it
is
machine
generated
*/
#include
<jni.h>
/*
Header
for
class
testdll
*/
#ifndef
_Included_testdll
#define
_Included_testdll
#ifdef
__cplusplus
extern
"C"
{
#endif
/*
*
Class:
testdll
*
Method:
get
*
Signature:
()I
*/
JNIEXPORT
jint
JNICALL
Java_testdll_get
(JNIEnv
*,
jclass);
/*
*
Class:
testdll
*
Method:
set
*
Signature:
(I)V
*/
JNIEXPORT
void
JNICALL
Java_testdll_set
(JNIEnv
*,
jclass,
jint);
#ifdef
__cplusplus
}
#endif
#endif
在具體實現的時候,我們只關心兩個函數原型
JNIEXPORT
jint
JNICALL
Java_testdll_get
(JNIEnv
*,
jclass);
和
JNIEXPORT
void
JNICALL
Java_testdll_set
(JNIEnv
*,
jclass,
jint);
這里JNIEXPORT和JNICALL都是JNI的關鍵字,表示此函數是要被JNI調用的。而jint是以JNI為中介使JAVA的int類型與本地的int溝通的一種類型,我們可以視而不見,就當做int使用。函數的名稱是JAVA_再加上java程序的package路徑再加函數名組成的。參數中,我們也只需要關心在JAVA程序中存在的參數,至於JNIEnv*和jclass我們一般沒有必要去碰它。
好,下面我們用testdll.cpp文件具體實現這兩個函數:
#include
"testdll.h"
int
i
=
0;
JNIEXPORT
jint
JNICALL
Java_testdll_get
(JNIEnv
*,
jclass)
{
return
i;
}
JNIEXPORT
void
JNICALL
Java_testdll_set
(JNIEnv
*,
jclass,
jint
j)
{
i
=
j;
}
編譯連接成庫文件,本例是在WINDOWS下做的,生成的是DLL文件。並且名稱要與JAVA中需要調用的一致,這里就是goodluck.dll
把goodluck.dll拷貝到testdll.class的目錄下,java
testdll運行它,就可以觀察到結果了。
⑨ java代碼轉c代碼
額。。C的話,用數組吧。
⑩ 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成員函數時,編譯器會報錯我們應將不修改成員數據的函數聲明為constJava和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, pu