欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【外文翻译】C++和 Java 语法差异对照表,可以贴在电脑旁

程序员文章站 2022-04-26 17:09:35
...

首先是两件大事-主要功能以及如何编译它,然后有很多微小差异。

main function

C++


// free-floating function
int main( int argc, char* argv[])
{
    printf( "Hello, world" );
}

Java



// every function must be part of a class; the main function for a particular
// class file is invoked when java <class> is run (so you can have one
// main function per class--useful for writing unit tests for a class)
class HelloWorld
{
    public static void main(String args[])
    {
        System.out.println( "Hello, World" );
    }
}

编译

C++

    // compile as
    g++ foo.cc -o outfile
    // run with
    ./outfile

Java

    // compile classes in foo.java to <classname>.class
    javac foo.java 

    // run by invoking static main method in <classname>
    java <classname>

注释

两种语言相同(//和/ * * /都可以)

类的声明

几乎相同,但是Java不需要分号

C++

    class Bar {};

Java

    class Bar {}

方法声明

相同,除了在Java中,必须始终是类的一部分,并且可以以public / private / protected开头

构造函数和析构函数

构造函数在两者(类名)中具有相同的语法,Java没有与析构函数完全等效的语法

静态成员函数和变量

与方法声明相同,但是Java提供了一个_静态_初始化_块_来初始化静态变量(而不是将定义加入源代码文件中):

class Foo 
{
    static private int x;
    // static initialization block
    { x = 5; }
}

确定静态方法和命名空间的作用域

C++

如果您有一个类并希望引用一个静态方法,则使用Class :: method形式。

class MyClass
{
    public:
    static doStuff();
};

// now it's used like this
MyClass::doStuff();

Java

Java中的所有作用域都使用。再次,就像访问一个类的分段一样,它也更常规一些:

class MyClass
{
    public static doStuff()
    {
        // do stuff
    }
}

// now it's used like this
MyClass.doStuff();

对象声明

C++

    // on the stack
    myClass x;

    // or on the heap
    myClass *x = new myClass;

Java

    // always allocated on the heap (also, always need parens for constructor)
    myClass x = new myClass();

访问对象字段

C++

如果您使用的是基于常规的对象,则可以使用点来访问其细分:

myClass x;
x.my_field; // ok

但是在使用指针时,您可以使用箭头运算符(->)访问类的细分:

myClass x = new MyClass;
x->my_field; // ok

Java

您始终使用引用(至少指针,请参见下一段),因此始终使用点:

myClass x = new MyClass();
x.my_field; // ok

引用与指针

C++

    // references are immutable, use pointers for more flexibility
    int bar = 7, qux = 6;
    int& foo = bar;

Java

    // references are mutable and store addresses only to objects; there are
    // no raw pointers
    myClass x;
    x.foo(); // error, x is a null ``pointer''

    // note that you always use . to access a field

继承

C++

    class Foo : public Bar
    { ... };

Java

    class Foo extends Bar
    { ... }

访问修饰符

C++

    public:
        void foo();
        void bar();

Java

    public void foo();
    public void bar();

虚函数

C++

    virtual int foo(); // or, non-virtually as simply int foo();

Java

    // functions are virtual by default; use final to prevent overriding
    int foo(); // or, final int foo();

抽象类

C++

    // just need to include a pure virtual function
    class Bar { public: virtual void foo() = 0; };

Java

    // syntax allows you to be explicit!
    abstract class Bar { public abstract void foo(); }

    // or you might even want to specify an interface
    interface Bar { public void foo(); }

    // and later, have a class _implement_ the interface:
    class Chocolate implements Bar
    {
        public void foo() { /* do something */ }
    }

内存管理

大致相同--u new_2;allocates,但在Java中没有_delete_,因为它有垃圾回收。

null的区别

C++

    // initialize pointer to NULL
    int *x = NULL;

Java

    // the compiler will catch the use of uninitialized references, but if you
    // need to initialize a reference so it's known to be invalid, assign null
    myClass x = null;

Boolean类型

Java有点冗长:必须编写boolean而不仅仅是bool。

C++

bool foo;

Java

boolean foo;

Const-ness

C++

    const int x = 7;

Java

    final int x = 7;

抛出异常

C++

int foo() throw (IOException)

Java

int foo() throws IOException

数组

C++

    int x[10];
    // or 
    int *x = new x[10];
    // use x, then reclaim memory
    delete[] x;

Java

    int[] x = new int[10];
    // use x, memory reclaimed by the garbage collector or returned to the
    // system at the end of the program's lifetime

集合与迭代

C++

迭代器是类的成员。范围的开始是.begin(),结束是 < container> .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() );
    }

    // or, in Java 5
    ArrayList myArrayList = new ArrayList();
    for( Object o : myArrayList ) {
        System.out.println( o );
    }

===myJavaKeKeArticleKeyId:202011110003===

作者:Alex Allain

来源链接:

https://www.cprogramming.com/tutorial/java/syntax-differences-java-c++.html

【外文翻译】C++和 Java 语法差异对照表,可以贴在电脑旁