| 特性 | C++ | Java |
|---|---|---|
| 局部變量默認初始化 | 不初始化(含隨機值) | 強制初始化,否則編譯錯誤 |
| 全局/靜態變量 | 允許,零初始化 | 無全局變量,僅靜態字段 |
| 常量關鍵字 | const | final |
| 常量定義位置 | 任意作用域 | 必須為類的 static final 字段 |
| 類定義結構 | 聲明與實現分離(.h/.cpp) | 聲明即實現 |
| 訪問控制 | public:/private: 區塊 | 逐成員標註 public/private |
| 只讀成員函數 | const 後綴 | 無對應機制 |
const int DAYS_PER_YEAR = 365; // 編譯期常量
constexpr double PI = 3.1415926535; // C++11 constexpr,更強語義
// Point.h
class Point {
public:
Point();
Point(double x, double y);
void move(double dx, double dy);
double getX() const; // const 成員函數:承諾不修改對象狀態
double getY() const;
private:
double x_, y_;
};
// Point.cpp
#include "Point.h"
Point::Point() : x_(0), y_(0) {}
Point::Point(double x, double y) : x_(x), y_(y) {}
void Point::move(double dx, double dy) { x_ += dx; y_ += dy; }
double Point::getX() const { return x_; }
double Point::getY() const { return y_; }
C++ 用 public:、private:、protected: 標籤分區,同一區塊內成員共享訪問級別;Java 需在每個成員前單獨標註。
C++ 類定義僅含成員聲明,實現通常放在 .cpp 文件,編譯單元獨立;Java 類文件包含完整實現。
const 成員函數const 成員函數mutable 數據成員const 對象上調用,是常量正確性的基石C++ 允許全局變量,但會破壞封裝、增加耦合、難以測試。現代 C++ 建議:
extern 聲明並在單一 .cpp 定義C++ 給予程序員更大自由度(未初始化變量、全局變量、手動內存管理),但也要求更強紀律;Java 通過語言層面強制約束(確定性初始化、無全局變量、GC)降低出錯概率。理解差異有助於跨語言開發與避坑。