Java is an object oriented programming language and core of Java API is java.lang.Object class. In order to work properly in Java platform its important to learn fundamentals of Object in Java e.g. What is an Object in Java and How to use Object in Java. There are two meaning of Object in Java one which is used to refer object of Object oriented programming language or OOPS and other is java.lang.Object class. Every class in Java which explicitly doesn’t extend any class, implicitly extends java.lang.Object class. Crucial methods like finalize and wait and notify are declared in Object class, which is source of one of the java question Why wait and notify are declared in Object class and not on java.lang.Thread class. In this Java tutorial we will some important properties of Object in Java and OOPS which is worth learning for all Java programmers. By the way if you want to learn about OOPS and SOLID design principles, you can also check 10 Object oriented design principles for Java programmer.
10 points on Object in Java and OOPS
Here are some of the fundamental points to know about Object in Java and OOPS :
1) Objects are instance of Class. they represent Class at particular instance. for example "abc" is an instance of String
and "cde" is another instance of String class in Java.
2) There is also class called java.lang.Object in Java which is super class of every single class in Java, don't confuse
Object term with Object Class in Java. Similarly there is a real class called java.lang.Class , don't confuse that with term class of Object oriented programming concepts or OOPS. See What is use of java.lang.Class in Java for more details.
3) Object also known as instance of Class is created using new() operator in Java. new() will call no argument constructor of class in Java. There are some more ways to create Object in Java e.g. using reflection like Class.newInstance()
4) Object in Java are created in heap memory and they will be reclaimed by Garbage collector once there is no more live
reachable reference of them. when GC collects objects it reclaim memory allocated to it.
5) Since Java is multi-threaded language it has inbuilt synchronization mechanism. Synchronization in Java depends upon lock and every Object has one lock in Java. locks are obtained when thread enter synchronized block and returned back when thread
left synchronized block.
6) You can compare two objects in Java by using either "==" equality operator or by using equals() method in Java. "==" compares memory location of two object and returns true only if two object are same and just referenced by different reference variable, while equals() method compares two object for logical equality e.g. two String object are considered equal if both of them contains same content or characters in same order.
7) Don't confuse reference variable to Object or instance. Reference variable are used to point instance or Object located in heap. they are not object and they just contain handle of Object for performing operations on object e.g. calling method or accessing any field of class.
8) Every object in Java has finalize() method which comes from parent java.lang.Object class and gets called by Garbage collector before Object is garbage collected but this is not guaranteed by JLS.
9) Two objects can be compared using Comparable or Comparator in Java. Comparable is used to compare object in there natural order e.g. lexicographical order for String and Comparator is used to create custom ordering for Objects.
10) Except primitives like int, short, double or float most of the types e.g. String is Object in Java including Error and Exception and that's the reason Java is some time known as close to full Object Oriented language.
These are 10 points about Objects in Java and Object oriented programming language. Some time its gets confusing between object term and java.lang.Object class they are closely related because every object in Java is instance of java.lang.Object and inherit common property like lock or monitor from Object.
Other Java programming tutorials from Java67 Blog