Core Java Interview Questions 2023
Core Java Interview Questions 2023
javatpoint.com/corejava-interview-questions
1) What is Java?
Java is the high-level, object-oriented, robust, secure programming language, platform-independent, high
performance, Multithreaded, and portable programming language. It was developed by James Gosling in June
1991. It can also be known as the platform as it provides its own JRE and API.
Duration 18:10
Loaded: 0.37%
Comparison
Index C++ Java
Mainly used C++ is mainly used for system Java is mainly used for application programming. It is
for programming. widely used in window, web-based, enterprise and
mobile applications.
Design Goal C++ was designed for systems Java was designed and created as an interpreter for
and applications programming. It printing systems but later extended as a support
was an extension of C network computing. It was designed with a goal of
programming language. being easy to use and accessible to a broader
audience.
Goto C++ supports the goto statement. Java doesn't support the goto statement.
Multiple C++ supports multiple Java doesn't support multiple inheritance through
inheritance inheritance. class. It can be achieved by interfaces in java.
Pointers C++ supports pointers. You can Java supports pointer internally. However, you can't
write pointer program in C++. write the pointer program in java. It means java has
restricted pointer support in Java.
Compiler and C++ uses compiler only. C++ is Java uses compiler and interpreter both. Java source
Interpreter compiled and run using the code is converted into bytecode at compilation time.
compiler which converts source The interpreter executes this bytecode at runtime and
code into machine code so, C++ produces output. Java is interpreted that is why it is
is platform dependent. platform independent.
1/24
Call by Value C++ supports both call by value Java supports call by value only. There is no call by
and Call by and call by reference. reference in java.
reference
Structure and C++ supports structures and Java doesn't support structures and unions.
Union unions.
Thread C++ doesn't have built-in support Java has built-in thread support.
Support for threads. It relies on third-party
libraries for thread support.
Documentation C++ doesn't support Java supports documentation comment (/** ... */) to
comment documentation comment. create documentation for java source code.
Virtual C++ supports virtual keyword so Java has no virtual keyword. We can override all non-
Keyword that we can decide whether or not static methods by default. In other words, non-static
override a function. methods are virtual by default.
unsigned right C++ doesn't support >>> Java supports unsigned right shift >>> operator that
shift >>> operator. fills zero at the top for the negative numbers. For
positive numbers, it works same like >> operator.
Inheritance C++ creates a new inheritance Java uses a single inheritance tree always because all
Tree tree always. classes are the child of Object class in java. The object
class is the root of the inheritance tree in java.
Simple: Java is easy to learn. The syntax of Java is based on C++ which makes easier to write the
program in it.
Object-Oriented: Java follows the object-oriented paradigm which allows us to maintain our code as the
combination of different type of objects that incorporates both data and behavior.
Portable: Java supports read-once-write-anywhere approach. We can execute the Java program on every
machine. Java program (.java) is converted to bytecode (.class) which can be easily run on every machine.
Platform Independent: Java is a platform independent programming language. It is different from other
programming languages like C and C++ which needs a platform to be executed. Java comes with its
platform on which its code is executed. Java doesn't depend upon the operating system to be executed.
Secured: Java is secured because it doesn't use explicit pointers. Java also provides the concept of
ByteCode and Exception handling which makes it more secured.
Robust: Java is a strong programming language as it uses strong memory management. The concepts
like Automatic garbage collection, Exception handling, etc. make it more robust.
Architecture Neutral: Java is architectural neutral as it is not dependent on the architecture. In C, the size
of data types may vary according to the architecture (32 bit or 64 bit) which doesn't exist in Java.
Interpreted: Java uses the Just-in-time (JIT) interpreter along with the compiler for the program execution.
High Performance: Java is faster than other traditional interpreted programming languages because Java
bytecode is "close" to native code. It is still a little bit slower than a compiled language (e.g., C++).
Multithreaded: We can write Java programs that deal with many tasks at once by defining multiple
threads. The main advantage of multi-threading is that it doesn't occupy memory for each thread. It shares
a common memory area. Threads are important for multi-media, Web applications, etc.
2/24
Distributed: Java is distributed because it facilitates users to create distributed applications in Java. RMI
and EJB are used for creating distributed applications. This feature of Java makes us able to access files
by calling the methods from any machine on the internet.
Dynamic: Java is a dynamic language. It supports dynamic loading of classes. It means classes are
loaded on demand. It also supports functions from its native languages, i.e., C and C++.
JVMs are available for many hardware and software platforms (so JVM is platform dependent). It is a runtime
instance which is created when we run the Java class. There are three notions of the JVM: specification,
implementation, and instance.
JRE
JRE stands for Java Runtime Environment. It is the implementation of JVM. The Java Runtime Environment is a
set of software tools which are used for developing Java applications. It is used to provide the runtime
environment. It is the implementation of JVM. It physically exists. It contains a set of libraries + other files that
JVM uses at runtime.
JDK
JDK is an acronym for Java Development Kit. It is a software development environment which is used to develop
Java applications and applets. It physically exists. It contains JRE + development tools. JDK is an
implementation of any one of the below given Java Platforms released by Oracle Corporation:
More Details.
1. Class(Method) Area: Class Area stores per-class structures such as the runtime constant pool, field,
method data, and the code for methods.
2. Heap: It is the runtime data area in which the memory is allocated to the objects
3. Stack: Java Stack stores frames. It holds local variables and partial results, and plays a part in method
invocation and return. Each thread has a private JVM stack, created at the same time as the thread. A new
frame is created each time a method is invoked. A frame is destroyed when its method invocation
completes.
4. Program Counter Register: PC (program counter) register contains the address of the Java virtual
machine instruction currently being executed.
5. Native Method Stack: It contains all the native methods used in the application.
3/24
8) What is the platform?
A platform is the hardware or software environment in which a piece of software is executed. There are two types
of platforms, software-based and hardware-based. Java provides the software-based platform.
9) What are the main differences between the Java platform and other platforms?
There are the following differences between the Java platform and other platforms.
Java is the software-based platform whereas other platforms may be the hardware platforms or software-
based platforms.
Java is executed on the top of other hardware platforms whereas other platforms can only have the
hardware components.
10) What gives Java its 'write once and run anywhere' nature?
The bytecode. Java compiler converts the Java programs into the class file (Byte Code) which is the intermediate
language between source code and machine code. This bytecode is not platform specific and can be executed
on any computer.
1. Bootstrap ClassLoader: This is the first classloader which is the superclass of Extension classloader. It
loads the rt.jar file which contains all class files of Java Standard Edition like java.lang package classes,
java.net package classes, java.util package classes, java.io package classes, java.sql package classes,
etc.
2. Extension ClassLoader: This is the child classloader of Bootstrap and parent classloader of System
classloader. It loads the jar files located inside $JAVA_HOME/jre/lib/ext directory.
3. System/Application ClassLoader: This is the child classloader of Extension classloader. It loads the class
files from the classpath. By default, the classpath is set to the current directory. You can change the
classpath using "-cp" or "-classpath" switch. It is also known as Application classloader.
run it by java A
14) If I don't provide any arguments on the command line, then what will the value stored in
the String array passed into the main() method, empty or NULL?
It is empty, but not null.
15) What if I write static public void instead of public static void?
The program compiles and runs correctly because the order of specifiers doesn't matter in Java.
4/24
Public The classes, methods, or variables which are defined as public, can be accessed by any class or
method.
Protected Protected can be accessed by the class of the same package, or by the sub-class of this class,
or within the same class.
Default Default are accessible within the package only. By default, all the classes, methods, and variables
are of default scope.
Private The private class, methods, or variables defined as private can be accessed within the class only.
For example, In the class simulating the collection of the students in a college, the name of the college is the
common attribute to all the students. Therefore, the college name will be defined as static.
Explanation
In the first case, 10 and 20 are treated as numbers and added to be 30. Now, their sum 30 is treated as the string
and concatenated with the string Javatpoint. Therefore, the output will be 30Javatpoint.
In the second case, the string Javatpoint is concatenated with 10 to be the string Javatpoint10 which will then
be concatenated with 20 to be Javatpoint1020.
Explanation
In the first case, The numbers 10 and 20 will be multiplied first and then the result 200 is treated as the string and
concatenated with the string Javatpoint to produce the output 200Javatpoint.
In the second case, The numbers 10 and 20 will be multiplied first to be 200 because the precedence of the
multiplication is higher than addition. The result 200 will be treated as the string and concatenated with the string
Javatpointto produce the output as Javatpoint200.
5/24
There is given more than 50 OOPs (Object-Oriented Programming and System) interview questions. However,
they have been categorized in many sections such as constructor interview questions, static interview questions,
Inheritance Interview questions, Abstraction interview question, Polymorphism interview questions, etc. for better
understanding.
25) What is the difference between an object-oriented programming language and object-
based programming language?
There are the following basic differences between the object-oriented language and object-based language.
Object-oriented languages follow all the concepts of OOPs whereas, the object-based language doesn't
follow all the concepts of OOPs like inheritance and polymorphism.
Object-oriented languages do not have the inbuilt objects whereas Object-based languages have the inbuilt
objects, for example, JavaScript has window object.
Examples of object-oriented programming are Java, C#, Smalltalk, etc. whereas the examples of object-
based languages are JavaScript, VBScript, etc.
26) What will be the initial value of an object reference which is defined as an instance
variable?
All object references are initialized to null in Java.
More Details.
Default Constructor: default constructor is the one which does not accept any value. The default
constructor is mainly used to initialize the instance variable with the default values. It can also be used for
performing some useful task on object creation. A default constructor is invoked implicitly by the compiler if
there is no constructor defined in the class.
Parameterized Constructor: The parameterized constructor is the one which can initialize the instance
variables with the given values. In other words, we can say that the constructors which can accept the
arguments are called parameterized constructors.
6/24
29) What is the purpose of a default constructor?
The purpose of the default constructor is to assign the default value to the objects. The java compiler creates a
default constructor implicitly if there is no constructor in the class.
1. class Student3{
2. int id;
3. String name;
4. void display(){System.out.println(id+" "+name);}
5. public static void main(String args[]){
6. Student3 s1=new Student3();
7. Student3 s2=new Student3();
8. s1.display();
9. s2.display();
10. }
11. }
Test it Now
Output:
0 null
0 null
Explanation: In the above class, you are not creating any constructor, so compiler provides you a default
constructor. Here 0 and null values are provided by default constructor.
More Details.
7/24
31)Is constructor inherited?
No, The constructor is not inherited.
1. class Test
2. {
3. int i;
4. public Test(int k)
5. {
6. i=k;
7. }
8. public Test(int k, int m)
9. {
10. System.out.println("Hi I am assigning the value max(k, m) to i");
11. if(k>m)
12. {
13. i=k;
14. }
15. else
16. {
17. i=m;
18. }
19. }
20. }
21. public class Main
22. {
23. public static void main (String args[])
24. {
25. Test test1 = new Test(10);
26. Test test2 = new Test(12, 15);
27. System.out.println(test1.i);
28. System.out.println(test2.i);
29. }
30. }
In the above program, The constructor Test is overloaded with another constructor. In the first call to the
constructor, The constructor with one argument is called, and i will be initialized with the value 10. However, In
the second call to the constructor, The constructor with the 2 arguments is called, and i will be initialized with the
value 15.
There are many ways to copy the values of one object into another in java. They are:
By constructor
By assigning the values of one object into another
By clone() method of Object class
In this example, we are going to copy the values of one object into another using java constructor.
8/24
7. id = i;
8. name = n;
9. }
10. //constructor to initialize another object
11. Student6(Student6 s){
12. id = s.id;
13. name =s.name;
14. }
15. void display(){System.out.println(id+" "+name);}
16. public static void main(String args[]){
17. Student6 s1 = new Student6(111,"Karan");
18. Student6 s2 = new Student6(s1);
19. s1.display();
20. s2.display();
21. }
22. }
Test it Now
Output:
111 Karan
111 Karan
35) What are the differences between the constructors and methods?
There are many differences between constructors and methods. They are given below.
A constructor is used to initialize the state of an object. A method is used to expose the behavior
of an object.
A constructor must not have a return type. A method must have a return type.
The Java compiler provides a default constructor if you don't have The method is not provided by the
any constructor in a class. compiler in any case.
The constructor name must be same as the class name. The method name may or may not be
same as class name.
9/24
36) What is the output of the following Java program?
Here, the data type of the variables a and b, i.e., byte gets promoted to int, and the first parameterized
constructor with the two integer parameters is called.
10/24
7. public static void main (String args[])
8. {
9. Test test = new Test();
10. System.out.println(test.i);
11. }
12. }
The output of the program is 0 because the variable i is initialized to 0 internally. As we know that a default
constructor is invoked implicitly if there is no constructor in the class, the variable i is initialized to 0 since there is
no constructor in the class.
1. class Test
2. {
3. int test_a, test_b;
4. Test(int a, int b)
5. {
6. test_a = a;
7. test_b = b;
8. }
9. public static void main (String args[])
10. {
11. Test test = new Test();
12. System.out.println(test.test_a+" "+test.test_b);
13. }
14. }
There is a compiler error in the program because there is a call to the default constructor in the main method
which is not present in the class. However, there is only one parameterized constructor in the class Test.
Therefore, no default constructor is invoked by the constructor implicitly.
Test it Now
Output:111 Karan ITS
222 Aryan ITS
11/24
More Details.
More Details.
41) What are the restrictions that are applied to the Java static methods?
Two main restrictions are applied to the static methods.
The static method can not use non-static data member or call the non-static method directly.
this and super cannot be used in static context as they are non-static.
1. class A2{
2. static{System.out.println("static block is invoked");}
3. public static void main(String args[]){
4. System.out.println("Hello main");
5. }
6. }
Test it Now
12/24
Output: static block is invoked
Hello main
More Details.
46) What if the static modifier is removed from the signature of the main method?
Program compiles. However, at runtime, It throws an error "NoSuchMethodError."
47) What is the difference between static (class) method and instance method?
1)A method that is declared as static is known as the static method. A method that is not declared as static
is known as the instance method.
2)We don't need to create the objects to call the static methods. The object is required to call the
instance methods.
3)Non-static (instance) members cannot be accessed in the static Static and non-static variables both
context (static method, static block, and static nested class) directly. can be accessed in instance methods.
4)For example: public static int cube(int n){ return n*n*n;} For example: public void msg(){...}.
50) Can we declare the static variables and methods in an abstract class?
Yes, we can declare static variables and methods in an abstract method. As we know that there is no
requirement to make the object to access the static context, therefore, we can access the static context declared
inside the abstract class by using the name of the abstract class. Consider the following example.
Output
13/24
hi !! I am good !!
i = 102
Output
Test.java:5: error: cannot assign a value to final variable this
this = null;
^
1 error
14/24
1. public class Test
2. {
3. static int i = 10;
4. public Test ()
5. {
6. System.out.println(this.i);
7. }
8. public static void main (String args[])
9. {
10. Test t = new Test();
11. }
12. }
Output
10
Output
ID: 105 Name:Vikas age:22 address: Delhi
56) What are the advantages of passing this into a method instead of the current class object
itself?
As we know, that this refers to the current class object, therefore, it must be similar to the current class object.
However, there can be two main advantages of passing this into a method instead of the current class object.
this is a final variable. Therefore, this cannot be assigned to any new value whereas the current class
object might not be final and can be changed.
this can be used in the synchronized block.
15/24
reuse methods and fields of the parent class. Moreover, you can add new methods and fields in your current
class also. Inheritance represents the IS-A relationship which is also known as a parent-child relationship.
Single-level inheritance
Multi-level inheritance
Multiple Inheritance
Hierarchical Inheritance
Hybrid Inheritance
More Details.
Inheritance provides code reusability. The derived class does not need to redefine the method of base
class unless it needs to provide the specific implementation of the method.
Runtime polymorphism cannot be achieved without using inheritance.
We can simulate the inheritance of classes with the real-time objects which makes OOPs more realistic.
Inheritance provides data hiding. The base class can hide some data from the derived class by making it
private.
Method overriding cannot be achieved without inheritance. By method overriding, we can give a specific
implementation of some basic method contained by the base class.
Since the compile-time errors are better than runtime errors, Java renders compile-time error if you inherit 2
classes. So whether you have the same method or different, there will be a compile time error.
1. class A{
2. void msg(){System.out.println("Hello");}
3. }
4. class B{
5. void msg(){System.out.println("Welcome");}
6. }
7. class C extends A,B{//suppose if it were
8. Public Static void main(String args[]){
9. C obj=new C();
10. obj.msg();//Now which msg() method would be invoked?
11. }
12. }
Test it Now
Compile Time Error
Address.java
16/24
1. public class Address {
2. String city,state,country;
3. public Address(String city, String state, String country) {
4. this.city = city;
5. this.state = state;
6. this.country = country;
7. }
8. }
Employee.java
Output
111 varun
gzb UP india
112 arun
gno UP india
1. class Animal{
2. Animal(){System.out.println("animal is created");}
17/24
3. }
4. class Dog extends Animal{
5. Dog(){
6. System.out.println("dog is created");
7. }
8. }
9. class TestSuper4{
10. public static void main(String args[]){
11. Dog d=new Dog();
12. }
13. }
Test it Now
Output:
animal is created
dog is created
More Details.
66) How can constructor chaining be done by using the super keyword?
1. class Person
2. {
3. String name,address;
4. int age;
5. public Person(int age, String name, String address)
6. {
7. this.age = age;
8. this.name = name;
9. this.address = address;
10. }
11. }
12. class Employee extends Person
13. {
14. float salary;
15. public Employee(int age, String name, String address, float salary)
16. {
17. super(age,name,address);
18. this.salary = salary;
19. }
20. }
21. public class Test
22. {
23. public static void main (String args[])
24. {
25. Employee e = new Employee(22, "Mukesh", "Delhi", 90000);
26. System.out.println("Name: "+e.name+" Salary: "+e.salary+" Age: "+e.age+" Address: "+e.address);
27. }
28. }
Output
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
super can be used to refer to the immediate parent class instance variable.
super can be used to invoke the immediate parent class method.
super() can be used to invoke immediate parent class constructor.
68) What are the differences between this and super keyword?
There are the following differences between this and super keyword.
18/24
The super keyword always points to the parent class contexts whereas this keyword always points to the
current class context.
The super keyword is primarily used for initializing the base class variables within the derived class
constructor whereas this keyword primarily used to differentiate between local and instance variables when
passed in the class constructor.
The super and this must be the first statement inside constructor otherwise the compiler will throw an error.
Explanation
The super() is implicitly invoked by the compiler if no super() or this() is included explicitly within the derived class
constructor. Therefore, in this case, The Person class constructor is called first and then the Employee class
constructor is called.
Example:
Output:
Test.java:5: error: call to this must be first statement in constructor
More Details.
Method overloading increases the readability of the program. Method overloading is performed to figure out the
program quickly.
More Details.
73) Why is method overloading not possible by changing the return type in java?
In Java, method overloading is not possible by changing the return type of the program due to avoid the
ambiguity.
1. class Adder{
2. static int add(int a,int b){return a+b;}
3. static double add(int a,int b){return a+b;}
4. }
5. class TestOverloading3{
6. public static void main(String[] args){
7. System.out.println(Adder.add(11,11));//ambiguity
8. }}
19/24
Test it Now
Output:
Compile Time Error: method add(int, int) is already defined in class Adder
More Details.
Output
Animal.java:7: error: method consume(int) is already defined in class Animal
static void consume(int a)
^
Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context
Animal.consume(20);
^
2 errors
More Details.
As displayed in the above diagram, the byte can be promoted to short, int, long, float or double. The short
datatype can be promoted to int, long, float or double. The char datatype can be promoted to int, long, float or
double and so on. Consider the following example.
1. class OverloadingCalculation1{
2. void sum(int a,long b){System.out.println(a+b);}
3. void sum(int a,int b,int c){System.out.println(a+b+c);}
4. public static void main(String args[]){
5. OverloadingCalculation1 obj=new OverloadingCalculation1();
6. obj.sum(20,20);//now second int literal will be promoted to long
20/24
7. obj.sum(20,20,20);
8. }
9. }
Test it Now
Output
40
60
Explanation
There are two methods defined with the same name, i.e., sum. The first method accepts the integer and long
type whereas the second method accepts long and the integer type. The parameter passed that are a = 20, b =
20. We can not tell that which method will be called as there is no clear differentiation mentioned between integer
literal and long literal. This is the case of ambiguity. Therefore, the compiler will throw an error.
The method must have the same name as in the parent class.
The method must have the same signature as in the parent class.
Two classes must have an IS-A relationship between them.
More Details.
1) Method overloading increases the Method overriding provides the specific implementation of the
readability of the program. method that is already provided by its superclass.
2) Method overloading occurs within Method overriding occurs in two classes that have IS-A relationship
the class. between them.
21/24
3) In this case, the parameters must In this case, the parameters must be the same.
be different.
84) Can we change the scope of the overridden method in the subclass?
Yes, we can change the scope of the overridden method in the subclass. However, we must notice that we
cannot decrease the accessibility of the method. The following point must be taken care of while changing the
accessibility of the method.
85) Can we modify the throws clause of the superclass method while overriding it in the
subclass?
Yes, we can modify the throws clause of the superclass method while overriding it in the subclass. However,
there are some rules which are to be followed while overriding in case of exception handling.
If the superclass method does not declare an exception, subclass overridden method cannot declare the
checked exception, but it can declare the unchecked exception.
If the superclass method declares an exception, subclass overridden method can declare same, subclass
exception or no exception but cannot declare parent exception.
Explanation
The method() is overloaded in class Base whereas it is derived in class Derived with the double type as the
parameter. In the method call, the integer is passed.
Test it Now
Output: welcome to covariant return type
More Details.
Output
Derived method called ...
Explanation
22/24
The method of Base class, i.e., baseMethod() is overridden in Derived class. In Test class, the reference variable
b (of type Base class) refers to the instance of the Derived class. Here, Runtime polymorphism is achieved
between class Base and Derived. At compile time, the presence of method baseMethod checked in Base class,
If it presence then the program compiled otherwise the compiler error will be shown. In this case, baseMethod is
present in Base class; therefore, it is compiled successfully. However, at runtime, It checks whether the
baseMethod has been overridden by Derived class, if so then the Derived class method is called otherwise Base
class method is called. In this case, the Derived class overrides the baseMethod; therefore, the Derived class
method is called.
Test it Now
Output:Compile Time Error
Test it Now
Output:Compile Time Error
Test it Now
Output:Compile Time Error
More Details.
23/24
Yes, if it is not static, we can initialize it in the constructor. If it is static blank final variable, it can be initialized only
in the static block. More Details.
Explanation
Since i is the blank final variable. It can be initialized only once. We have initialized it to 20. Therefore, 20 will be
printed.
Explanation
The getDetails() method is final; therefore it can not be overridden in the subclass.
100) What is the difference between the final method and abstract method?
The main difference between the final method and abstract method is that the abstract method cannot be final as
we need to override them in the subclass to give its definition.
24/24