C++与Java的语法区别

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

main 函数
C++

//自由浮动的函数
int main( int argc, char* argv[])
{
    printf( "Hello, world" );
}
Java
// 每个函数都必须是一个类的一部分;当java <class>运行是一个特定类的主函数会被调用
// (因此你可以让每个类都有一个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<int>::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文件中的类成<classname>.class    javac foo.java 
    // 通过调用<classname>中的静态main方法来运行
    java <classname>
    
注   释
两种语言是一样的 (// 和 /* */ 可以用)

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

C++与Java的语法区别的更多相关文章

  1. java面向对象编程——第二章 java基础语法

    第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...

  2. java基础语法笔记

    这段时间看了一些java,急了一些笔记,记下一遍以后复习用! 2016-07-24 15:12:40 java很多语法都跟C#类似,下面列举一些不同的地方******注意***** java中的系统方 ...

  3. Java基础语法(上篇)

                     Java基础语法(上篇) 知识概要: (1)关键字的表示与规范       (2)标示符              (3)注释                (4 ...

  4. Java基础语法入门01

    Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ...

  5. Java 基本语法---流程控制

    Java 基本语法---流程控制 0. 概述 三大流程控制语句:顺序.选择.循环. 选择结构: if 结构,if - else结构: 多重 if - else 语句 ; 嵌套 if - else 语句 ...

  6. C#与Java的语法差异

    C#与Java的语法差异C与Java的语法差异前言程序结构基本语法数据类型字符串变量与常量运算符判断语句循环语句访问权限方法数组结构枚举类继承多态运算符重载接口命名空间预处理器指令正则表达式异常IO泛 ...

  7. JavaSE入门学习7:Java基础语法之语句(下)

    继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...

  8. 第3天 Java基础语法

    第3天 Java基础语法 今日内容介绍 引用数据数据类型(Scanner.Random) 流程控制语句(if.for.while.dowhile.break.continue) 引用数据类型 Scan ...

  9. 第1天 Java基础语法

    Java基础语法 今日内容介绍 Java开发环境搭建 HelloWorld案例 注释.关键字.标识符 数据(数据类型.常量) Java开发环境搭建 Java概述 众所周知Java是一门编程语言,编程语 ...

随机推荐

  1. sublime text 3插件

    Package Control Messages Emmet emmet插件 Thank you for installing Emmet -- a toolkit that can greatly ...

  2. Spring AOP中pointcut expression表达式解析

    Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&am ...

  3. 什么是UART中的FIFO

    FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可以节省CPU时间.对于发送数据也一样可以把要发送的数据一起写入FIFO,串口控制器按照写入的顺 ...

  4. BIOS MCSDK 2.0 学习笔记(二)————使用Platform Library创建工程

    [TOC] Platform Library提供了一组适用于开发板的API函数.我们可以使用它来快速入手开发板. 1.启动CCS,建立一个空的工程 2.添加include路径 "C:\Pro ...

  5. Swift函数的定义

    //: Playground - noun: a place where people can play import Cocoa //基本的函数 //************************ ...

  6. JQuery validate.js 在ajax提交form时如何触发

    在使用jquery validate.js 插件时,发现,如果是用onclick事件捕获提交按钮的动作,并且ajax动态提交form,验证不会被触发,而是直接提交了form. 后来发现,需要手动调用该 ...

  7. poj 3734 Blocks

    ゲート 分析:这题过的人好多,然后大家好像是用矩阵过的(((φ(◎ロ◎;)φ))).我自己是推公式的. 对于任意的有这个式子, 就是先从里面选偶数个涂成两个指定的颜色,再在选出的里面选定涂某种颜色,选 ...

  8. 怎么把Windows主机上的目录共享到Ubuntu上

    使用Oracle VM VirtualBox在Windows主机上创建了一台Ubuntu虚拟机,怎么把宿主机上的目录共享到Ubuntu上,可使用以下方法: eg.把Windows主机上D盘里的test ...

  9. sql数据库表被锁,无法查询

    查看被锁表:   select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName    ...

  10. 基于bootstrap的后台二级垂直菜单[转]

    最近做一个后台的管理项目,用到了Twitter推出的bootstrap前端开发工具包,是一个基于css3/html5的框架.花周末时间,写了一个非常简单后台的菜单.本着开源的精神,现在把它分享出来(呵 ...