Java 1
Java 1
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.
Mainly used for C++ is mainly used for system Java is mainly used for
programming. application programming. It is
widely used in window, web-
based, enterprise and mobile
applications.
Design Goal C++ was designed for systems Java was designed and created
and applications programming. as an interpreter for printing
It was an extension of C systems but later extended as a
programming language. support network computing. It
was designed with a goal of
being easy to use and accessible
to a broader audience.
Goto C++ supports the goto Java doesn't support the goto
statement. statement.
Pointers C++ supports pointers. You can Java supports pointer internally.
write pointer program in C++. However, you can't write the
pointer program in java. It
means java has restricted
pointer support in Java.
Compiler and Interpreter C++ uses compiler only. C++ is Java uses compiler and
compiled and run using the interpreter both. Java source
compiler which converts source code is converted into bytecode
code into machine code so, C++ at compilation time. The
is platform dependent. interpreter executes this
bytecode at runtime and
produces output. Java is
interpreted that is why it is
platform independent.
Call by Value and Call by C++ supports both call by value Java supports call by value only.
reference and call by reference. There is no call by reference in
java.
Structure and Union C++ supports structures and Java doesn't support structures
unions. and unions.
Thread Support C++ doesn't have built-in Java has built-in thread support.
support for threads. It relies on
third-party libraries for thread
support.
Virtual Keyword C++ supports virtual keyword so Java has no virtual keyword. We
that we can decide whether or can override all non-static
not override a function. methods by default. In other
words, non-static methods are
virtual by default.
unsigned right shift >>> C++ doesn't support >>> Java supports unsigned right
operator. shift >>> operator that fills zero
at the top for the negative
numbers. For positive numbers,
it works same like >> operator.
Inheritance Tree C++ creates a new inheritance Java uses a single inheritance
tree always. tree always because all 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.
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.
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.
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++.
JVM
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
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.
More Details.
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.
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.
We can also have the hidden classes that are not visible outside and used by the package.
class Test
{
public static void main (String args[])
{
System.out.println(10 + 20 + "Javatpoint");
System.out.println("Javatpoint" + 10 + 20);
}
}
30Javatpoint
Javatpoint1020
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.
class Test
{
public static void main (String args[])
{
System.out.println(10 * 20 + "Javatpoint");
System.out.println("Javatpoint" + 10 * 20);
}
}
200Javatpoint
Javatpoint200
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.
class Test
{
public static void main (String args[])
{
for(int i=0; 0; i++)
{
System.out.println("Hello Javatpoint");
}
}
}
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.
Includes the concept like Encapsulation and abstraction which hides the complexities from the
user and show only functionality.
The examples of the object-oriented paradigm are C++, Simula, Smalltalk, Python, C#, etc.
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.
class Student3{
int id;
String name;
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.
class Test
{
int i;
public Test(int k)
{
i=k;
}
public Test(int k, int m)
{
System.out.println("Hi I am assigning the value max(k, m) to i");
if(k>m)
{
i=k;
}
else
{
i=m;
}
}
}
public class Main
{
public static void main (String args[])
{
Test test1 = new Test(10);
Test test2 = new Test(12, 15);
System.out.println(test1.i);
System.out.println(test2.i);
}
}
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
In this example, we are going to copy the values of one object into another using java constructor.
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 A method is used to expose the behavior of an
object. object.
A constructor must not have a return type. A method must have a return type.
The Java compiler provides a default constructor if The method is not provided by the compiler in
you don't have any constructor in a class. any case.
The constructor name must be same as the class The method name may or may not be same as
name. class name.
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.
class Test
{
int i;
}
public class Main
{
public static void main (String args[])
{
Test test = new Test();
System.out.println(test.i);
}
}
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.
class Test
{
int test_a, test_b;
Test(int a, int b)
{
test_a = a;
test_b = b;
}
public static void main (String args[])
{
Test test = new Test();
System.out.println(test.test_a+" "+test.test_b);
}
}
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.
class Student8{
int rollno;
String name;
static String college ="ITS";
s1.display();
s2.display();
}
}
Test it Now
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.
class A2{
static{System.out.println("static block is invoked");}
public static void main(String args[]){
System.out.println("Hello main");
}
}
Test it Now
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 A method that is not declared as static is known
the static method. as the instance method.
2)We don't need to create the objects to call the The object is required to call the instance
static methods. methods.
3)Non-static (instance) members cannot be Static and non-static variables both can be
accessed in the static context (static method, accessed in instance methods.
static block, and static nested class) directly.
4)For example: public static int cube(int n){ return For example: public void msg(){...}.
n*n*n;}
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
hi !! I am good !!
i = 102
More Details.
this can be used to return the current class instance from the method.
Output
Output
10
Output
56) What are the advantages of passing this into a method instead of the current
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.
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.
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.
class A{
void msg(){System.out.println("Hello");}
}
class B{
void msg(){System.out.println("Welcome");}
}
class C extends A,B{//suppose if it were
Test it Now
Address.java
Employee.java
void display(){
System.out.println(id+" "+name);
System.out.println(address.city+" "+address.state+" "+address.country);
}
e.display();
e2.display();
}
}
Output
111 varun
gzb UP india
112 arun
gno UP india
class Animal{
Animal(){System.out.println("animal is created");}
}
class Dog extends Animal{
Dog(){
System.out.println("dog is created");
}
}
class TestSuper4{
public static void main(String args[]){
Dog d=new Dog();
}
}
Test it Now
Output:
animal is created
dog is created
More Details.
66) How can constructor chaining be done by using the super keyword?
class Person
{
String name,address;
int age;
public Person(int age, String name, String address)
{
this.age = age;
this.name = name;
this.address = address;
}
}
class Employee extends Person
{
float salary;
public Employee(int age, String name, String address, float salary)
{
super(age,name,address);
this.salary = salary;
}
}
public class Test
{
public static void main (String args[])
{
Employee e = new Employee(22, "Mukesh", "Delhi", 90000);
System.out.println("Name: "+e.name+" Salary: "+e.salary+" Age: "+e.age+" Address: "+e.address);
}
}
Output
super can be used to refer to the immediate parent class instance variable.
68) What are the differences between this and super keyword?
There are the following differences between this and super keyword.
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.
class Person
{
public Person()
{
System.out.println("Person class constructor called");
}
}
public class Employee extends Person
{
public Employee()
{
System.out.println("Employee class constructor called");
}
public static void main (String args[])
{
Employee e = new Employee();
}
}
Output
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:
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.
class Adder{
static int add(int a,int b){return a+b;}
static double add(int a,int b){return a+b;}
}
class TestOverloading3{
public static void main(String[] args){
System.out.println(Adder.add(11,11));//ambiguity
}}
Test it Now
Output:
Compile Time Error: method add(int, int) is already defined in class Adder
More Details.
Output
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.
class OverloadingCalculation1{
void sum(int a,long b){System.out.println(a+b);}
void sum(int a,int b,int c){System.out.println(a+b+c);}
Test it Now
Output
40
60
class OverloadingCalculation3{
void sum(int a,long b){System.out.println("a method invoked");}
void sum(long a,int b){System.out.println("b method invoked");}
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.
The method must have the same name as in the parent class.
The method must have the same signature as in the parent class.
More Details.
1) Method overloading increases the readability of Method overriding provides the specific
the program. implementation of the method that is already
provided by its superclass.
2) Method overloading occurs within the class. Method overriding occurs in two classes that have
IS-A relationship between them.
3) In this case, the parameters must be different. In this case, the parameters must be the same.
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.
class Base
{
void method(int a)
{
System.out.println("Base class method called with integer a = "+a);
}
void method(double d)
{
System.out.println("Base class method called with double d ="+d);
}
}
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.
class A{
A get(){return this;}
}
class B1 extends A{
B1 get(){return this;}
void message(){System.out.println("welcome to covariant return type");}
Test it Now
More Details.
class Base
{
public void baseMethod()
{
System.out.println("BaseMethod called ...");
}
}
class Derived extends Base
{
public void baseMethod()
{
System.out.println("Derived method called ...");
}
}
public class Test
{
public static void main (String args[])
{
Base b = new Derived();
b.baseMethod();
}
}
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.
class Bike9{
final int speedlimit=90;//final variable
void run(){
speedlimit=400;
}
public static void main(String args[]){
Bike9 obj=new Bike9();
obj.run();
}
}//end of class
Test it Now
More Details.
class Bike{
final void run(){System.out.println("running");}
}
Test it Now
Test it Now
More Details.
class Student{
int id;
String name;
final String PAN_CARD_NUMBER;
...
}
More Details.
class Main {
public static void main(String args[]){
final int i;
i = 20;
System.out.println(i);
}
}
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.
class Base
{
protected final void getInfo()
{
System.out.println("method of Base class");
}
}
Output
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.