c++與java的幾個不同點


   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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM