Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the main difference in object creation between Java and C++?

Tags:

I'm preparing for an exam in Java and one of the questions which was on a previous exam was:"What is the main difference in object creation between Java and C++?"

I think I know the basics of object creation like for example how constructors are called and what initialization blocks do in Java and what happens when constructor of one class calls a method of another class which isn't constructed yet and so on, but I can't find anything obvious. The answer is supposed to be one or two sentences, so I don't think that description of whole object creation process in Java is what they had in mind.

Any ideas?

like image 260
AndrejaKo Avatar asked Sep 29 '10 09:09

AndrejaKo


People also ask

What is object in Java and C?

In object-oriented programming technique, we design a program using objects and classes. An object in Java is the physical as well as a logical entity, whereas, a class in Java is a logical entity only.

What is difference between class in Java and structure in C?

Basically, a class combines the fields and methods(member function which defines actions) into a single unit. A structure is a collection of variables of different data types under a single unit. It is almost similar to a class because both are user-defined data types and both hold a bunch of different data types.

What is the difference between C compiler and Java compiler?

Java is a high-level language because translation of code takes place into machine language using compiler or interpreter. C is a compiled language that is it converts the code into machine language so that it could be understood by the machine or system.


2 Answers

What is the main difference in object creation between Java and C++?

Unlike Java, in C++ objects can also be created on the stack.

For example in C++ you can write

Class obj; //object created on the stack 

In Java you can write

Class obj; //obj is just a reference(not an object) obj = new Class();// obj refers to the object 
like image 85
Prasoon Saurav Avatar answered Oct 22 '22 08:10

Prasoon Saurav


In addition to other excellent answers, one thing very important, and usually ignored/forgotten, or misunderstood (which explains why I detail the process below):

  • In Java, methods are virtual, even when called from the constructor (which could lead to bugs)
  • In C++, virtual methods are not virtual when called from the constructor (which could lead to misunderstanding)

What?

  • Let's imagine a Base class, with a virtual method foo().
  • Let's imagine a Derived class, inheriting from Base, who overrides the method foo()

The difference between C++ and Java is:

  • In Java, calling foo() from the Base class constructor will call Derived.foo()
  • In C++, calling foo() from the Base class constructor will call Base.foo()

Why?

The "bugs" for each languages are different:

  • In Java, calling any method in the constructor could lead to subtle bugs, as the overridden virtual method could try to access a variable which was declared/initialized in the Derived class.

Conceptually, the constructor’s job is to bring the object into existence (which is hardly an ordinary feat). Inside any constructor, the entire object might be only partially formed – you can know only that the base-class objects have been initialized, but you cannot know which classes are inherited from you. A dynamically-bound method call, however, reaches “forward” or “outward” into the inheritance hierarchy. It calls a method in a derived class. If you do this inside a constructor, you call a method that might manipulate members that haven’t been initialized yet – a sure recipe for disaster.

Bruce Eckel, http://www.codeguru.com/java/tij/tij0082.shtml

  • In C++, one must remember a virtual won't work as expected, as only the method of the current constructed class will be called. The reason is to avoid accessing data members or even methods that do not exist yet.

During base class construction, virtual functions never go down into derived classes. Instead, the object behaves as if it were of the base type. Informally speaking, during base class construction, virtual functions aren't.

Scott Meyers, http://www.artima.com/cppsource/nevercall.html

like image 24
paercebal Avatar answered Oct 22 '22 10:10

paercebal