Interview Questions
Interview Questions
Java C++
Goto statement is not supported by Java C++ supports the goto statement
Java doesn’t support structures and unions C++ does support unions and structures
Java is used for building applications C++ is used for system programming
Java uses both interpreter and compiler C++ uses compiler only
C- Language Java
C language was developed by Dennis M. Ritchie in Java was developed by James Gosling in
the year 1972. theyear1995.
Storage classes are supported by C Storage classes are not supported in Java
o Simple: Java is easy to learn. The syntax of Java is based on C++ which makes easier
to write the program in it.
o Interpreted: Java uses the Just-in-time (JIT) interpreter along with the compiler for
the program execution.
o 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.
JVM is an acronym for Java Virtual Machine; it is an abstract machine which provides
the runtime environment in which Java bytecode can be executed. It is a specification
which specifies the working of Java Virtual Machine. Its implementation has been
provided by Oracle and other companies. Its implementation is known as JRE.
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
o Java is the software-based platform whereas other platforms may be the hardware
platforms or software-based platforms.
o 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. //save by .java only
2. class A{
3. public static void main(String args[]){
4. System.out.println("Hello java");
5. }
6. }
7. //compile by javac .java
8. //run by java A
run it by java A
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.
16) What is the default value of the local variables?
The local variables are not initialized to any default value, neither primitives nor
object references.
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.
19) What are the advantages of Packages in Java?
There are various advantages of defining packages in Java.
1. class Test
2. {
3. public static void main (String args[])
4. {
5. System.out.println(10 + 20 + "Java");
6. System.out.println("Java" + 10 + 20);
7. }
8. }
30Java
Java1020
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 Java. Therefore, the
output will be 30Java.
1. class Test
2. {
3. public static void main (String args[])
4. {
5. System.out.println(10 * 20 + "Java");
6. System.out.println("Java" + 10 * 20);
7. }
8. }
200Java
Java200
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 Java to produce the
output 200Java.
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 Java to produce the output
as Java200.
1. class Test
2. {
3. public static void main (String args[])
4. {
5. for(int i=0; 0; i++)
6. {
7. System.out.println("Hello Javatpoint");
8. }
9. }
10. }
The above code will give the compile-time error because the for loop demands a
boolean value in the second part and we are providing an integer value, i.e., 0.
o 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.
o Object-oriented languages do not have the inbuilt objects whereas Object-based
languages have the inbuilt objects, for example, JavaScript has window object.
o Examples of object-oriented programming are Java, C#, Smalltalk, etc. whereas the
examples of object-based languages are JavaScript, VBScript, etc.
o 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.
o 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.
1. class Student3{
2. int id;
3. String name;
4.
5. void display(){System.out.println(id+" "+name);}
6.
7. public static void main(String args[]){
8. Student3 s1=new Student3();
9. Student3 s2=new Student3();
10. s1.display();
11. s2.display();
12. }
13. }
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.
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. }
31.
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:
o By constructor
o By assigning the values of one object into another
o By clone() method of Object class
In this example, we are going to copy the values of one object into another using
java constructor.
1. //Java program to initialize the values from one object to another
2. class Student6{
3. int id;
4. String name;
5. //constructor to initialize integer and string
6. Student6(int i,String n){
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.
17. public static void main(String args[]){
18. Student6 s1 = new Student6(111,"Karan");
19. Student6 s2 = new Student6(s1);
20. s1.display();
21. s2.display();
22. }
23. }
Output:
111 Karan
111 Karan
A constructor must not have a return type. A method must have a return type.
The Java compiler provides a default constructor if you The method is not provided
don't have any constructor in a class.
by the 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.
1. public class Test
2. {
3. Test(int a, int b)
4. {
5. System.out.println("a = "+a+" b = "+b);
6. }
7. Test(int a, float b)
8. {
9. System.out.println("a = "+a+" b = "+b);
10. }
11. public static void main (String args[])
12. {
13. byte a = 10;
14. byte b = 15;
15. Test test = new Test(a,b);
16. }
17. }
a = 10 b = 15
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.
1. class Test
2. {
3. int i;
4. }
5. public class Main
6. {
7. public static void main (String args[])
8. {
9. Test test = new Test();
10. System.out.println(test.i);
11. }
12. }
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.
1. //Program of static variable
2.
3. class Student8{
4. int rollno;
5. String name;
6. static String college ="ITS";
7.
8. Student8(int r,String n){
9. rollno = r;
10. name = n;
11. }
12. void display (){System.out.println(rollno+" "+name+" "+college);}
13.
14. public static void main(String args[]){
15. Student8 s1 = new Student8(111,"Karan");
16. Student8 s2 = new Student8(222,"Aryan");
17.
18. s1.display();
19. s2.display();
20. }
21. }
Test it Now
Output:111 Karan ITS
222 Aryan ITS
41) What are the restrictions that are applied to the Java static
methods?
Two main restrictions are applied to the static methods.
o The static method can not use non-static data member or call the non-static method
directly.
o 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. }
Output: static block is invoked
Hello main
45) Can we execute a program without main() method?
Ans) No, It was possible before JDK 1.7 using the static block. Since JDK 1.7, it is not
possible.
1)A method that is declared as static is known as A method that is not declared
the static method. as static is known as the
instance method.
2)We don't need to create the objects to call the The object is required to call
static methods. the instance methods.
4)For example: public static int cube(int n){ return For example: public void msg()
n*n*n;} {...}.
1. abstract class Test
2. {
3. static int i = 102;
4. static void TestMethod()
5. {
6. System.out.println("hi !! I am good !!");
7. }
8. }
9. public class TestClass extends Test
10. {
11. public static void main (String args[])
12. {
13. Test.TestMethod();
14. System.out.println("i = "+Test.i);
15. }
16. }
Output
hi !! I am good !!
i = 102
1. public class Test
2. {
3. public Test()
4. {
5. this = null;
6. System.out.println("Test class constructor called");
7. }
8. public static void main (String args[])
9. {
10. Test t = new Test();
11. }
12. }
Output
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
1. public class Employee
2. {
3. int id,age;
4. String name, address;
5. public Employee (int age)
6. {
7. this.age = age;
8. }
9. public Employee(int id, int age)
10. {
11. this(age);
12. this.id = id;
13. }
14. public Employee(int id, int age, String name, String address)
15. {
16. this(id, age);
17. this.name = name;
18. this.address = address;
19. }
20. public static void main (String args[])
21. {
22. Employee emp = new Employee(105, 22, "Vikas", "Delhi");
23. System.out.println("ID: "+emp.id+" Name:"+emp.name+" age:"+emp.age+" address: "+
emp.address);
24. }
25.
26. }
Output
o 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.
o this can be used in the synchronized block.
o Single-level inheritance
o Multi-level inheritance
o Multiple Inheritance
o Hierarchical Inheritance
o Hybrid Inheritance
More Details.
o 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.
o Runtime polymorphism cannot be achieved without using inheritance.
o We can simulate the inheritance of classes with the real-time objects which makes
OOPs more realistic.
o Inheritance provides data hiding. The base class can hide some data from the derived
class by making it private.
o 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.
9. Public Static void main(String args[]){
10. C obj=new C();
11. obj.msg();//Now which msg() method would be invoked?
12. }
13. }
Test it Now
Compile Time Error
Address.java
1. public class Address {
2. String city,state,country;
3.
4. public Address(String city, String state, String country) {
5. this.city = city;
6. this.state = state;
7. this.country = country;
8. }
9.
10. }
Employee.java
1. public class Emp {
2. int id;
3. String name;
4. Address address;
5.
6. public Emp(int id, String name,Address address) {
7. this.id = id;
8. this.name = name;
9. this.address=address;
10. }
11.
12. void display(){
13. System.out.println(id+" "+name);
14. System.out.println(address.city+" "+address.state+" "+address.country);
15. }
16.
17. public static void main(String[] args) {
18. Address address1=new Address("gzb","UP","india");
19. Address address2=new Address("gno","UP","india");
20.
21. Emp e=new Emp(111,"varun",address1);
22. Emp e2=new Emp(112,"arun",address2);
23.
24. e.display();
25. e2.display();
26.
27. }
28. }
Output
111 varun
gzb UP india
112 arun
gno UP india
1. class Animal{
2. Animal(){System.out.println("animal is created");}
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.
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
o super can be used to refer to the immediate parent class instance variable.
o super can be used to invoke the immediate parent class method.
o 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.
o The super keyword always points to the parent class contexts whereas this keyword
always points to the current class context.
o 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.
o The super and this must be the first statement inside constructor otherwise the
compiler will throw an error.
1. class Person
2. {
3. public Person()
4. {
5. System.out.println("Person class constructor called");
6. }
7. }
8. public class Employee extends Person
9. {
10. public Employee()
11. {
12. System.out.println("Employee class constructor called");
13. }
14. public static void main (String args[])
15. {
16. Employee e = new Employee();
17. }
18. }
Output
Explanation
Example:
1. public class Test{
2. Test()
3. {
4. super();
5. this();
6. System.out.println("Test class object is created");
7. }
8. public static void main(String []args){
9. Test t = new Test();
10. }
11. }
Output:
1. protected Object clone() throws CloneNotSupportedException
2.
More Details.
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. }}
Test it Now
Output:
Compile Time Error: method add(int, int) is already defined in class Adder
More Details.
1. public class Animal
2. {
3. void consume(int a)
4. {
5. System.out.println(a+" consumed!!");
6. }
7. static void consume(int a)
8. {
9. System.out.println("consumed static "+a);
10. }
11. public static void main (String args[])
12. {
13. Animal a = new Animal();
14. a.consume(10);
15. Animal.consume(20);
16. }
17. }
Output
More Details.
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.
5. public static void main(String args[]){
6. OverloadingCalculation1 obj=new OverloadingCalculation1();
7. obj.sum(20,20);//now second int literal will be promoted to long
8. obj.sum(20,20,20);
9. }
10. }
Test it Now
Output
40
60
77) What is the output of the following Java program?
1. class OverloadingCalculation3{
2. void sum(int a,long b){System.out.println("a method invoked");}
3. void sum(long a,int b){System.out.println("b method invoked");}
4.
5. public static void main(String args[]){
6. OverloadingCalculation3 obj=new OverloadingCalculation3();
7. obj.sum(20,20);//now ambiguity
8. }
9. }
Output
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.
More Details.
1) Method overloading increases the Method overriding provides the specific implementation of
readability of the program. method that is already provided by its superclass.
2) Method overloading occurs within the Method overriding occurs in two classes that have IS-A relation
class. between them.
3) In this case, the parameters must be In this case, the parameters must be the same.
different.
83) Can we override the private methods?
No, we cannot override the private methods because the scope of private methods is
limited to the class and we cannot access them outside of the class.
o If the superclass method does not declare an exception, subclass overridden method
cannot declare the checked exception, but it can declare the unchecked exception.
o If the superclass method declares an exception, subclass overridden method can
declare same, subclass exception or no exception but cannot declare parent
exception.
1. class Base
2. {
3. void method(int a)
4. {
5. System.out.println("Base class method called with integer a = "+a);
6. }
7.
8. void method(double d)
9. {
10. System.out.println("Base class method called with double d ="+d);
11. }
12. }
13.
14. class Derived extends Base
15. {
16. @Override
17. void method(double d)
18. {
19. System.out.println("Derived class method called with double d ="+d);
20. }
21. }
22.
23. public class Main
24. {
25. public static void main(String[] args)
26. {
27. new Derived().method(10);
28. }
29. }
Output
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.
1. class A{
2. A get(){return this;}
3. }
4.
5. class B1 extends A{
6. B1 get(){return this;}
7. void message(){System.out.println("welcome to covariant return type");}
8.
9. public static void main(String args[]){
10. new B1().get().message();
11. }
12. }
Test it Now
Output: welcome to covariant return type
More Details.
1. class Base
2. {
3. public void baseMethod()
4. {
5. System.out.println("BaseMethod called ...");
6. }
7. }
8. class Derived extends Base
9. {
10. public void baseMethod()
11. {
12. System.out.println("Derived method called ...");
13. }
14. }
15. public class Test
16. {
17. public static void main (String args[])
18. {
19. Base b = new Derived();
20. b.baseMethod();
21. }
22. }
Output
Explanation
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.
1. class Bike{
2. final void run(){System.out.println("running");}
3. }
4.
5. class Honda extends Bike{
6. void run(){System.out.println("running safely with 100kmph");}
7.
8. public static void main(String args[]){
9. Honda honda= new Honda();
10. honda.run();
11. }
12. }
Test it Now
Output:Compile Time Error
1. final class Bike{}
2.
3. class Honda1 extends Bike{
4. void run(){System.out.println("running safely with 100kmph");}
5.
6. public static void main(String args[]){
7. Honda1 honda= new Honda1();
8. honda.run();
9. }
10. }
Test it Now
Output:Compile Time Error
More Details.
1. class Student{
2. int id;
3. String name;
4. final String PAN_CARD_NUMBER;
5. ...
6. }
More Details.
1. class Main {
2. public static void main(String args[]){
3. final int i;
4. i = 20;
5. System.out.println(i);
6. }
7. }
Output
20
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.
1. class Base
2. {
3. protected final void getInfo()
4. {
5. System.out.println("method of Base class");
6. }
7. }
8.
9. public class Derived extends Base
10. {
11. protected final void getInfo()
12. {
13. System.out.println("method of Derived class");
14. }
15. public static void main(String[] args)
16. {
17. Base obj = new Base();
18. obj.getInfo();
19. }
20. }
Output
Explanation
The getDetails() method is final; therefore it can not be overridden in the subclass.