c 与java语法区别_C++与Java的语法区别

C++与Java的语法区别

首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别。

main 函数

C++

//自由浮动的函数

int main( int argc, char* argv[])

{

printf( "Hello, world" );

}

Java

// 每个函数都必须是一个类的一部分;当java 运行是一个特定类的主函数会被调用

// (因此你可以让每个类都有一个main函数,这在写单元测试是很有用)

class HelloWorld

{

public static void main(String args[])

{

System.out.println( "Hello, World" );

}

}

类的声明

除了 Java 不要求用分号外几乎是相同的。

C++

class Bar {};

Java

class Bar {}

方法声明

都相同的, 除了在Java,方法必须总是 某个类的一部分并且可能public/private/protected 作为修饰

构造函数和析构函数构造函数都是相同的 (即类的名字), Java没有准确意义上的的析构函数

静态成员函数和变量

方法声明是相同的, 但 Java 提供静态初始化块来来初始化静态变量 (不需要在源文件中声明):

class Foo

{

static private int x;

// 静态初始化块

{ x = 5; }

}

对象的声明

C++

// 在栈中

myClass x;

//或者在堆中

myClass *x = new myClass;

Java   // 总是在对堆中声明

myClass x = new myClass();

继   承

C++ class Foo : public Bar

{ ... };

Java    class Foo extends Bar

{ ... }

访问级别 (abstraction barriers)C++

public:

void foo();

void bar();

Java    public void foo();

public void bar();

虚函数

C++

virtual int foo(); // 或者非虚函数写作 int foo();

Java

// 函数默认的就是虚函数; 用final关键字防止重载

int foo(); // 或者, final int foo();

内存管理大体上是相同的--new 来分配, 但是 Java没有 delete,因为它有垃圾回收器。

NULL vs null

C++

// 初始化一个指针为 NULL

int *x = NULL;

Java

// 编译器将捕获使用未初始化的引用

//但是如果你因需要初始化一个引用而赋一个null,那么这是无效的

myClass x = null;

布尔型

Java有一点罗嗦: 你必须写 boolean而不止是 bool.

C++bool foo;Java

boolean foo;

常   量

C++

const int x = 7;

Java

final int x = 7;

抛异常

首先,Java在编译器强制抛异常—如果你的方法可能会抛异常你必需明确报告

C++

int foo() throw (IOException)

Java

int foo() throws IOException

数     组

C++

int x[10];

// 或

int *x = new x[10];

// 使用 x,然后归还内存

delete[] x;

Java    int[] x = new int[10];

// 使用 x, 内存有垃圾回收器回收或

//或在程序生命周期尽头归还给系统

集合和迭代器C++

迭代器是类的成员。范围的开始是.begin(), 结束是 .end()。 用++ 操作符递增,  用 *操作符访。

vector myVec;

for ( vector::iterator itr = myVec.begin();

itr != myVec.end();

++itr )

{

cout << *itr;

}

Java

迭代器只是一个接口。 范围的开始是 .iterator,你必须用itr.hasNext()来查看是否到达集合尾。 使用itr.next()(是在C++中使用操作符++ 和*操作的结合)来获得下一个元素。

ArrayList myArrayList = new ArrayList();

Iterator itr = myArrayList.iterator();

while ( itr.hasNext() )

{

System.out.println( itr.next() );

}

// 或, 在Java 5中

ArrayList myArrayList = new ArrayList();

for( Object o : myArrayList ) {

System.out.println( o );

}

抽象类

C++    // 只需要包含一个纯虚函数

class Bar { public: virtual void foo() = 0; };

Java

// 语法上允许显示的声明!

abstract class Bar { public abstract void foo(); }

// 或者你也可以声明一个接口

interface Bar { public void foo(); }

// 然后让一个类继承这个接口:

class Chocolate implements Bar

{

public void foo() { /* do something */ }

}

引用 vs  指针

C++

//引用不可改变,通过使用指针来获得更多的灵活性

int bar = 7, qux = 6;

int& foo = bar;

Java

// 引用是可变的,仅存储对象地址;

//没有指针类型

myClass x;

x.foo(); // error, x is a null ``pointer''

// 注意你要总是用 . 来访问域

编  译

C++

// 编译

g++ foo.cc -o outfile

// 运行

./outfile

Java   // 编译foo.java文件中的类成.class    javac foo.java

// 通过调用中的静态main方法来运行

java

注   释

两种语言是一样的 (// 和 /* */ 可以用)

转载自:http://blog.csdn.net/xylary/article/details/1678413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值