Codes Difference BTW Java and C++
Codes Difference BTW Java and C++
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" ); } }
Compiling
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>
Comments
Same in both languages (// and /* */ both work)
Class declarations
C++
class Bar {};
Java
class Bar {}
Method declarations
Same, except that in Java, must always be part of a class, and may prefix with public/private/protected
Object declarations
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();
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
Inheritance
C++
class Foo : public Bar { ... };
Java
class Foo extends Bar { ... }
Java
Virtual functions
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();
Abstract classes
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 */ } }
Memory management
Roughly the same--new allocates, but no delete in Java since it has garbage collection.
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;
Booleans
Java is a bit more verbose: you must write boolean instead of merely bool.
C++
bool foo;
Java
boolean foo;
Const-ness
C++
const int x = 7;
Java
final int x = 7;
Throw Spec
First, Java enforce throw specs at compile time--you must document if your method can throw an exception
C++
int foo() throw (IOException)
Java
Arrays
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
Java
Iterator is just an interface. The start of the range is <collection>.iterator, and you check to see if you're at the end with itr.hasNext(). You get the next element using itr.next() (a combination of using ++ and * in 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 ); }
Templates
This is still being to be added. See http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf for a good introduction.