c++和java的区别

C++Java的区别及联系有以下几点:

1  C++Java在语法上非常相似。

2  Java关注的是安全性,可移植性和快速开发;C++则更多关注性能以及与C向下兼容。

3  Java被编译成虚拟机字节码,需要由虚拟机运行;C++则被编译成本地机器码。这点使C++运行更快。

4  C++C的超集,保留了许多功能,如内存管理、指针和预处理,这是为了和C保持完全兼容。Java去除了这些功能,它用垃圾收集代替了程序员释放内存;它还放弃了运算符重载和多重继承等C++的功能;但它可以利用接口实现有限制的多重继承。

5  Java中所有对象都是按引用传递的;C++中,缺省行为是按值传递的。

6  Java中所有的方法都是虚方法,默认都是虚函数;而C++中必须显示地声明为virtual

7  Java对基本数据类型有规定的字节大小;C++中类型的字节大小取决于C++(和C)的实现。

8  当存在遗留的C代码或对性能有较大需求时,选择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() );
    }
 
    // 或, 在Java5中
    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>
    
  
两种语言是一样的 (// /* */ 可以用

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值