c文法與java文法差異:
1、識別碼: (建議學習:java課程)
C可用的標識符為數字、大小寫字母、下劃線,不能以數字開頭;
Java可用的標識符除了C的三種以外,多一種美元符號($),同樣不能以數字開頭。
2、關鍵字:
C中的關鍵字有:
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
Java中的關鍵字有:
abstract boolean break byte case catch char class continue default do double else extends false final finally float for if implements import instanceof int interface long native new null package private protected public return short this throw throws transient true try static super switch synchronized void volatile while
3、資料型別:
C中的資料型別有:
##1 )基本型別:整數型(基本整數int、短整數short[int]與長整數型long [int]以及符號型別[signed]、無符號型unsigned)、字元型別[signed/unsigned ]char、浮點型(單精度型float、雙精度型double和長雙精度long double)、枚舉類型2)構造類型:數組類型、結構體類型、共用體類型 3)指標型別4)空白型別
注意下各类型一般所占字节数:int:2位元組
short:2位元組
長長:4位元組char:1位元組
float:4位元組double:8位元組
long double:16位元組
以上儲存除char類型外,其他視系統不同略有不同,但低精度的位數不可以超過高精度的。
Java中的資料型別:
1)基本型別:字元型(char)、數值型(整數型(位元組型byte、短整型short、整數int、長整型long)、浮點型(單精度型float、雙精度型double))、布林型(boolean(true或false))
####################### ##2)複合型別:類別、介面、陣列############注意下各型別儲存所佔位元組數:#########byte:1位元組# #####short:2位元組######int:4位元組######long:8位元組######char:2位元組(Unicode編碼)### ###float:4位元組######double:8位元組######以上資料類型對應的儲存空間與平台無關,固定為該值。 #########4、常數和變數############1)常數#########Java和C中整數常數定義相同,除長整數資料在其末尾加l或L外,其他類型均直接顯示數值。 C中無符號常數在其後加u或U。對於不同進制,十進制直接顯示最高位元不能有0,八進制以0開頭,十六進位以0x或0X開頭。 ######對於浮點型,C和Java都只能採用十進位表示。可使用小數形式和指數形式,指數形式表示時小數與指數之間以e或E分隔。注意Java中要求單精確度後要加f或F,雙精確度後要加d或D以示區分。 ######字元型常數都是以單引號引起來的單一字元或轉義字符串表示。特別注意,C中字符型只能表示ASCII碼從0~255的字符,Java中使用Unicode編碼2字節存儲單元可以表示特殊字符,表示unicode編碼時使用\u加4位16進製字符串。 #########布林型別只有Java中才有,需特別注意。 #########Java中常數以關鍵字final修飾,一經賦值不可更改;C中表示不可更改的關鍵字是const,其修飾的變數(注意是變量,而不是常數)必須在定義時賦初值,另外用#define定義的巨集常數沒有型別。 #########2)變數#########Java和C中變數的定義基本上相同,即:###
数据类型变量名[ = 变量初值];###變數可賦初值也可不賦,但Java中長整數和浮點型數後要加對應辨識標誌(如l、f)。 ######特別注意:由於編譯器的不同,C申明變數要放在執行語句之前,否則可能發生編譯錯誤。 #########5、邏輯運算子和位元運算子#########C和Java中都有的邏輯運算子&&、||、!三種,且意義相同,差異在於C中運算結果為0和非0,Java中只能是ture或false。 Java中還存在&、|、^(異或),&和&&、|和||的差別在於前者是非捷徑運算子而後者是捷徑運算符,即&前後都做判斷,&&前為假不做後面的判斷,|前後都做判斷,||前為真不做後面的判斷。 ^表示兩者相同為假。 ######C和Java中都有的位元運算子是:&、|、^、~(取反)、047b84a3fbf9585a811e5d675e7d59a1>(右移),意義基本相同。負數的右移運算在C中視不同系統有所不同(可能是算術右移也可能是邏輯右移),而Java中>>表示的是算術右移,即最高位填充符號位。 Java中邏輯右移(無符號右移)運算子是>>>,採用補碼右移,高位添0。 ###
PS:有心的读者可能会发现,如果你定义了一个byte或者short类型的负数,如-10,采用>>>方法进行无符号右移后输出的结果是-5,按照上面说的高位添0应该是正数。而int或long类型的就不会是负数,这是为什么呢?
我认为这是因为Java在进行>>>运算时采用的最低数据类型是int类型,导致高位数据全为1(计算机内存储的数据是以补码存储的,所以负数的byte或short类型转成int类型高位全填充1),移位时高位的最后一个1移到低位的第一位,然后截取成我们定义的数据类型(byte或short),所以我们看到的数还是负数。从这里我们可以看出,在byte和short类型的数据做>>>运算的时候可能得不到我们想要的值,千万注意。
6、数组
C中数组的定义如下:
类型说明符数组名[常量表达式];
定义可与初始化同时进行,如:int a[10] = {0,1,2,3,4,5,6,7,8,9};中括号内的常量可以省略。
Java中数组定义有两种方式:
数据类型 数组名[];或 数据类型 []数组名;
定义和初始化可同时进行,如:int []a = {0,1,2,3,4,5,6,7,8,9};
注意Java中数组如果在定义时没有进行初始化,在进行初始化的时候需要先分配内存,即:
数组名 = new 数据类型[常量表达式];
也可在定义同时进行内存分配:
数据类型数组名[] = new 数据类型[常量表达式];
C和Java都不支持变长数组,引用的时候都是 数组名[下标]。区别是:Java的下标范围为0~数组长度-1,不在该范围会抛出数组下标越界异常,而C有效范围也是0~数组长度-1,但下标超出此界不会报错。
多维数组中,数组元素都是按行排列的。
还有一点要注意:C中定义数组不进行初始化则数组元素值是不可预知的,而Java中分配内存而不进行初始化数组中是有默认值的。
7、语句
C和Java语句区别不大,主要是:
1)方法/函数调用时C直接调用函数,Java调用方法时方法名前面要加对象名。
2)C中两个嵌套的复合语句同时定义同名变量是可以的,而Java不可以。
8、类、域、方法和全局变量、函数
1)类是C中没有的,Java中类定义如下:
[修饰符] class 类名[extends 父类名][implements 接口名] { //类体 }
其中修饰符可以为以下一个或多个访问修饰符:
abstract:抽象类。
final:最终类。
public:公共类。
2)域(成员变量)和全局变量类比:
Java中域的定义如下:
[修饰符] 类型 成员变量名;
修饰符可选以下一个或多个关键字:
public:公共成员。
protected:本类或同一个包的其他类以及其它包该类的子类可访问。
private:私有成员。
final:常量,确定后不能改变。
static:静态变量。
transient:临时变量。
volatile:备份变量。
各类型成员变量默认初始化为:
整型变量:0
浮点型变量:0.0
布尔型变量:false
字符型变量:空格
类变量:null
C中全局变量定义同一般变量:
[存储类别] 数据类型 变量表列;
其中存储类别可选:
auto:自动变量,当不申明存储类别时隐式默认该值。
static:静态变量。
register:寄存器变量。
extern:外部变量。
3)方法和函数类比:
Java中方法的定义如下:
[修饰符] 返回类型 方法名([参数表列]) { //方法体 }
修饰符可选以下一个或多个:
public:公共方法。
protected:本类或同一个包的其他类以及其它包该类的子类可访问。
private:私有方法。
abstract:抽象方法,只有方法头没有方法体。
static:静态方法。
C中函数的定义如下:
[存储类别] [数据类型] 函数名([形参表列]) { //函数体 }
存储类别可选:
extern:外部函数。
static:静态函数。
以上是c語法與java語法區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!