Java和C++基本类型与语法的区别
Java概述
?
Java是Sun Stanford Universiy Network 斯坦福大學網絡公司1995推出。
?
Java語言的三種架構:
J2EE企業版 Java 2 Platform Enterprise Edition??? 用于WEB應用開發
J2SE標準版 Java 2 Plaftorm Standard Edition ? 用于桌面應用開發
J2ME小型版 Java 2 Platform Micro Edition ??? 用于小型嵌入式設備等開發
?
JRE Java Runtime Environm Ent? Java運行環境
包括Java虛擬機JVM Java Virtual Machine和Java程序所需的核心類庫等,如果想要運行一個開發好的Java程序,計算機中只需要安裝JRE即可。
?
JDK Java Development Kit? Java開發工具
JDK是提供給Java開發人員使用的,其中包含了Java的開發工具,也包括了JRE。所以安裝了JDK就不用再安裝JRE,其中的開發工具如,編譯工具:Java.exe 打包工具:Jar.exe。
?
?
數據類型
?
八種基本類型 boolean, byte, char, short, int, long, float, double。 類型可以在類成員位置上指定默認值,如果不指定默認值為0,而非C++中的隨機值,其值全部以二進制為0的形式被初始化,引用變量為null。
?
java中舍去了無符號修飾符unsigned所以byte的取值范圍只能在127到-128之間(byte代表IP地址段還要做負數轉換暈倒)所有類型最大取值范圍瞬間減少一半啊。
?
bool被加了三個字母boolean有點不順手。
?
char2個字節,這點挺爽的不用再折騰惡心的字符集了,告別_T _W。
?
基本類型之間轉換內存排列順序一樣的可以從bit少的類型直接轉為bit多的類型。如byte char short int 轉向long,float轉向double。
?
java中將boolean內置為一個特殊的字符串,并非C++中非0為真,0為假的位設定,所以boolean不可以與任何類型之間做轉換,這點挺不好的。
?
不同類型之間運算會自動提升為其中字節占位最高的類型,就是short num = 1;num = num + 1;都不行因為 num + 1 結果會自動提升為int 再賦值給short時jvm不給通過。須要num = (short)(num + 1)有點煩。好在++ -- += -= 之類的可以用。
?
所有記錄對象的均為引用類型,三種引用類型分別是,類,接口和數組。java中的引用非C++引用,引用不再是常量指針,指向是可以被修改的。java中無法進行傳址操作,引用被傳遞進函數后為其復本。
?
class本身,以及java中的interface類型,還有void在java中也被看做是一個類型。一個數組也是以對象的形勢出現的。
?
基本語法
有必要提一下的就是break與continue可以在java中直接跳到外層循環,方法為外循環前面制定標記符,如:
?
switchr的條件值默認為int所以能夠自動提供為int的類型都可做為判斷條件,如long double不可直接提升為int所以不能做為判斷條件。
?
final代替了const用法上也有差異,可以寫在class前類不被繼承,寫在函數返回類型前函數不可被子類覆蓋,寫在引用類型前,該引用指向不可變,但指向的對象內容可以變,也就是說不再存在C++中的指向變量的常指針。C++中的修飾函數體后確保函數內不可改變成員變量的特性被剔除。
?
除了保留C++中的this外多了一個super父類關鍵詞,用法基本同C++但其為引用,而不是指針。
?
java中的異常格式。try異常產生區,catch異常處理區,finally異常必定執行區。throw異常拋出作用在函數體內。throws異常拋出作用在函數名后,將函數體內產生的異常拋出到調用處。
?
package必須為程序第一行,定義文件所在包。import用于導入一個包。java中的包應該是為了解決namespace命名空間問題的。將類的劃分更精細包與包之間的訪問取決于類的public或是默認修飾符。
?
高級for循環,Java中對數組或集合定義了一種循環的簡便寫法,定義一個變量每循環一次接收數組或集合中一個元素的拷貝到變量中,并將位置下移,直到數組或集合為空。這種循環在內部使用的是Iterable迭代器專用接口,而Iterable內部使用的其實還是Iterator。注意條件中的是:而不是;。雖然簡化了寫法,但每次都要做無謂的臨時變量拷貝,得不償失,只能用在一些特定的時刻下才值得。
Integer[] arrs = {1,2,3,4,5};for(Integer arr : arrs){//這里對temp的操作不影響數組本身,除非arr是個引用類型//那么通過該引用的復本可以改變引用指向對象的成員}
可變參數,Java在1.5版本更新后加入了函數可變參數設置,其原理只是將可變參數自動封裝成一個數組類型,所以傳遞參數時也可以直接傳遞一個數組。定義如下:
void func(int ... arr){//在這里可以對arr操作如同操作數組一樣}?
與C++不同的是,Java中函數可變參數可以單獨存在,也就是說可以只有一個可變參數,而且可以不為可變參數傳遞任何東西,視為傳遞了0個元素的數組。
?
如果有其它參數,必須在可變參數左邊
?
命名與注釋命
?
名規則同C++,命名規范(開始有點蛋痛...現在已經習慣了哈哈)如下:
?
包名: 多單詞組成時所有字節小寫。
?
類與接口: 多單詞組成時所有單詞首字母大寫。
?
變量名函數名:多單詞組成時第一個單詞字母小寫后面的單詞首字母大寫(最蛋痛的,一個變量名num相應的函數名getNum(),一個num一個Num很容易誤解為獲取的不是num的值而是Num的值)
?
常量名: 所有字符大寫,單詞以下劃線分隔。
?
除了C++注釋處還有一個 /** 文字*/ 文檔注釋。主要是可以被javadoc工具提取。另外有注釋類,相應的以@開頭。可使用/** 文字*/為 類注釋,也可為函數注釋,然后使用javadoc工具生成html格式的class幫助文檔。
?
要生成幫助文檔的類必須是public修飾
//類區域可使用 @author 作者 @version 版本//函數區域可使用@throws 該函數拋出的異常@param 參數名參數作用類型描述等信息@return 返回值類型作用描述等信息?
運算符
字符串可以與任意八種基本類型相加,基本類型會自動提升為字符串,這個挺爽。如:
?
位運算多了一個>>>無符號右移,也就是位移中缺位以0補,而非以原有位補。這個挺好對于位移運算方便很多
?
因為Java中剔除了運算符重載和指針概念,兩個對象間的邏輯比較靈活性很差。Java中使用equals方法用來比較兩個對象是否相等,equals方法被定義在Object類中,因此Java中所有類均擁有該方法,覆蓋該方法后,即可建立對象獨有的比較過程。該方法在Object中的聲明原型為 public boolean equals(Object obj)? 。我覺得Object內應該再有一個compare方法是最好的,可惜沒有,只有一個Comparable外部接口類,想要類具備比較性,需要實現于這個接口!
?
Java中的引用類型支持 == 與 != 運算符,用C++的說法就是內置重載了的== 與 != 運算符。用指針的說法就是,左右兩邊是否都指向上同一塊內存地址,其實就是比較兩個引用的值。因為Java中屏蔽一切指針地址操作,所以無法對地址做基本運算除了== 與 !=其它運算符在引用類型上無效。
?
instanceof用來比較左值對象是否屬于右值類型的實例(類型包括對象的所有基類)
???
?
其它須要注意的部分
?
?
函數沒有默認參數值,有參數的函數必須接受相應參數。
?
成員數據可以初始化,為對象建立時成員數據默認值。
?
總結:從基本類型和語法上來看,java更嚴謹更快捷,但占用內存上就有點郁悶了,至今沒發現有內存對齊的方法,以空間換時間吧。
?
總結
以上是生活随笔為你收集整理的Java和C++基本类型与语法的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端屏幕尺寸和分辨率_屏幕尺寸、分辨率、
- 下一篇: 微信小程序使用MQTT远程控制单片机——