Java、C、C++在近兩年一直穩居世界編程語言排行榜前三名。Java與c++都是面向對象的語言,但Java晚於C++發布,部分語法和思想也參考了C++,只是Java 沒有頭文件、指針、運算符重載、虛基類等等,算是c++語言的“純凈版”。如果學過C++,那學起Java來就不會感覺很難了,應當注意的是Java與c++有很多不同點。
1.命名空間
c++里可以用頭文件,而Java里沒有頭文件,但是有比較類似的用法:import
Java里有package關鍵字的用法。當一個大型程序交由數個不同的程序人員開發時,很有可能用到相同的類名,所以在java程序開發中為了避免這個問題,提供了一個包的概念,只需要在寫的程序第一行使用package關鍵字來聲明一個包。包就是一個文件夾,它將源代碼文件(.java)、編譯后的文件(.class)和其他的一些用到的文件有組織的放在一起,這樣一個大型程序就算是有相同類名,這些相同名字的類在不同包內就不用擔心會出問題。
在c++里有一個經典的命名:using namespace std;這行代碼使得我們在使用cin、cout、endl……時不用加std::的前綴。而在Java里有import關鍵字的用法,它同樣能讓我們在編寫程序時省下寫前綴的力氣。import與#include有點相似但卻不一樣,編譯器會在import導入的包里選擇與類名對應的包,而#include則是編譯器將其他文件的內容載入進來。Java里有一個java.lang包,里面的類經常用到,幾乎沒有類不用它的, 所以不管有沒有寫 import java.lang,編譯器都會自動補上。
#include<iostream> //頭文件 using namespace std; //命名空間
package java.xingchen; //聲明所在包 import java.lang.*; //導包
2.代碼格式
縮進、換行和{}這些是個人代碼習慣,不算是代碼格式的差異。
C/C++程序基本上是由n個函數組成,主函數調用其他函數實現所需功能。
Java程序是由n個類、m個方法組成,某個public類的主方法調用當前類的方法,或是調用其他類的公有(public)方法實現所需功能。
Java的m個方法類似於C/C++的n個函數,只不過是將這m個方法放到n個類里,目錄結構更清晰一些。
c++程序基本格式如下:
#include<iostream> //頭文件,必寫 using namespace std; //命名空間 void hello(); //如果某個函數是在主函數之后定義的,那么必須在主函數之前聲明,主函數才能調用這個函數 int main() { hello(); return 0; } void hello() { cout << "Hello World!" << endl; }
Java程序基本格式如下:
package java.xingchen; //說明在java/xingchen這個文件夾內 import java.lang.*; //導包語句,可不寫,編譯器自動加 //Java程序運行的是public類內的主方法 //文件名必須和public類類名一樣(例如當前文件只能叫Xingchen.java),一個文件只能存在一個public類,主方法只能在public類內 //類只能由public修飾,即一個類只能是public class或class public class Xingchen { public static String out; //靜態方法(static)調用該變量,那么該變量必須為靜態變量(static) public Xingchen(){ //空參構造方法,當前類實例化時如果未傳參則執行此方法,一般空參構造方法可不寫 this.out = "World"; //this是指當前類 } public static void main(String[] args) { new Test("Hello").hello(); //Test類創建匿名對象並執行類內的public方法 Xingchen x = new Xingchen(); x.hello(); } public static void hello(){ System.out.println(out); } } class Test { String out; public Test(){} //如果一個類存在有參構造,那么必須定義空參構造方法 public Test(String str){ //有參構造方法,實例化時如果傳入指定參數,則執行當前方法 this.out = str; } public void hello(){ System.out.println(this.out); } }
3.函數(方法)的聲明與定義
聲明是用來描述變量的類型等,定義是變量的實現。
C/C++里主函數內要使用的函數必須在主函數之前有過聲明或定義,否則編譯會不通過。即C/C++主方法要么寫在所有調用函數的后面,要么在主函數之前就必須有所調用函數的聲明。
Java則比較隨意,只要語法沒問題,主方法可以寫在類內任意位置(當然肯定不能寫在別的方法里面)。
4.編譯結果
c/c++編譯的最終結果是一個程序生成一個exe文件。
Java編譯結果是一個程序中有多少類就生成多少個與類名相同的class文件。
5.錄入輸出
c++的錄入輸出靠輸入流cin,輸出流cout、cerr、clog實現,需要寫#include<iostream>。
Java語言里沒有像c++那樣一個函數就完成錄入,它的錄入使用了一些基礎類,比如:
首先導包
import java.util.Scanner;
然后在方法內使用以下語句進行錄入
Scanner sc = new Scanner(System.in); String a = sc.next(); //效果等同於String a = sc.nextLine(); int b = sc.nextInt(); float c = sc.nextFloat(); double d = sc.nextDouble(); boolean e = sc.nextBoolean(); sc.close(); //結束數據流。錄入語句結束及時釋放內存是個好習慣。
其實還有其他輸入的方法,但是這種比較常用。Scanner類中沒有nextChar方法,不能直接通過Scanner類從控制台讀取char類型的變量,不能這樣寫
Scanner sc = new Scanner(System.in); char a = sc.nextChar(); //這種方法是錯的,Scanner類中沒有nextChar方法
Java的輸出語句用法很簡單:System.out.println();或System.out.print();System.out.println語句結束后自動換行,System.out.print語句結束后不換行。
int age = 18; String name = "張三"; System.out.println(age + "歲的" + name); //18歲的張三
6.數組
c++中定義數組格式是:數據類型 數組名[數組長度];
數組靜態初始化格式:數據類型 數組名[] = {元素1,2,...};
int a[10]; double b[2] = {0.1,0.2}
在Java中,數組不是基本數據類型。
Java中定義數組格式是:數據類型[] 數組名 = new 數據類型[數組長度];
數組靜態初始化格式:數據類型[] 數組名 = new 數據類型[]{元素1,2,...};
int[] a = new int[5]; //Java定義數組 double[] b = new double[]{0.1 2.3 4.5 6.7 8.9}; //可簡寫為double[] b = {0.1 2.3 4.5 6.7 8.9};
7.字符串
C++的字符串類型使用前必須有引用,而且聲明變量類型時用的是string
#include <string> //或#include <cstring>
string a = "123";
在Java中,String字符串不是基本數據類型,它被當作類來處理,是引用數據類型。String類在java.lang包內,導包語句可忽略。創建字符串對象時用的是String
String a = new String("123"); //或簡寫成String a = "123";
8.引用和指針
c++有引用,有指針。
Java有引用,但是沒有指針。
具體差別我也有些搞不清楚,參考博客https://blog.csdn.net/alpha_love/article/details/73695435