Beruflich Dokumente
Kultur Dokumente
Core Java
Naresh i Technologies one task. With same method call we can get multiple services from the object. Polymorphism offers flexibility and extensibility of code.
programming community treats Java as a language for Internet programming (web programming). Syntactically Java is similar to C programming language. Java was first released publicly in November 1995.
Versions of Java
Versions of Java language usually correspond to the Java Development Kit (JDK). If we want to develop, compile and execute Java programs, we need to install the Java software (JDK) in our computer. When Java was first released, its version was 1.0. Few additional features have been added with every new release (1.1, 1.2, 1.3, 1.4 etc).Even though the current version of Java is 6 (at the time writing of this book), industry is widely using J2SE 5 platform (JDK1.5 version). Therefore, we will learn Java programming language version 5.0.
that. The moment any malicious code trying to influence the system resources, java
Core Java
Naresh i Technologies programs get terminated instead of spoiling the system. Java Runtime Environment contributes here. Portable: Programs developed in Java can be compiled in a variety of operating environments without modifications to the source code. variables is the same in any environment. portability of java applications. High-Performance: - When compared to other interpreted languages, Java offers high performance. Just-in-time compiler contributes towards this. Architectural-neutral: This feature is in accordance with the Sun Microsystems slogan about java programs. Write once and run anywhere. This feature is famously known as platform independence. as JVM is available for that OS. Interpreted: Java programs are both compiled and interpreted. JVM interprets the class file into machine code. Multithreaded: Performing more than one job at a time (concurrently) is the main goal of either multitasking or multithreading. In case of multitasking, multiple processes are required to perform multiple jobs. Where as, in case of multithreading a single program performs multiple jobs concurrently. Java has built-in features to implement multithreaded applications. Javas contribution towards multithreading is that it has brought system level programming concept to application level. Distributed: computing. Java has rich libraries for network programming and distributed As java is mainly meant for Internet based programming, it is no An application is said to be distributed if the A Java Program is compiled to class Memory size of Java This is another contributing factor for the
file(s). These files can run on any machine with any host operating system as long
business objects are geographically dispersed in the network and communicating one Dynamic: Memory allocation for application objects and libraries inclusion in programs is dynamic in java.
Core Java
Data Types
Java language has 8 primitive data types. int short byte long float double char Boolean
int, short, byte and long are integral data types. All these data types are used to declare variables that can store non-decimal numbers. Data type int short byte long Memory in bytes 4 2 1 8 Range of values -21474883648 to 21474883647 -32768 to 32767 -128 to 127 -9223372036854775808 to 9223372036854775807
Numeric values that are not integral are stored in floating-point numbers. float and double are used to store decimal numbers. If we need accuracy up to 7 digits after decimal point, we use float type. If we need accuracy up to 17 digits after decimal point, we use double type. Floating-point literals are by default double type. If we want to specify a floating point literal, we should explicitly mention f or F. For example, float a=45.6F; char primitive type variable occupy 2 bytes of memory in Java. In C & C++ languages it takes only 1 byte of memory. Java supports Unicode characters. While assigning a character literal to a variable in Java, we have to enclose it in single quotes (similar to C and C++). For example, char grade=A; We can use arithmetic on char variables.
Core Java
Naresh i Technologies grade +=1;//Earlier grade holds A and now it holds B. Variables of type boolean can have only one of two values, true or false. For example, boolean ismanager=false;//ismanager variable holds false literal now.
Operators in Java
Almost all the operators in Java are similar to that of C & C++ programming languages with very few exceptions. Their meaning and functionality is similar in Java as well. Arithmetic Operators: Relational Operators: Assignment operators: Logical Operators: +, -, *, /, % ==,!=, >, < , >=, <= =, +=, -= !, ||, &&
Note: - Bitwise operators in Java are similar to that of C except unsigned right shift operator >>>. It is seldom used in applications. Variable Declaration: - In Java, variables are declared with C & C++ syntax only. <data type> variablename; Key points about variables declaration and their usage /* Program to add two numbers and display the sum Source code: - add.java */ class AddTwoNumbers { public static void main(String args[]) { int n1,n2,sum; n1=20; n2=30; We can declare variables any where within the program. The kind of restriction in C is removed. No format specifiers (unlike in C) Initializing variables, or assigning values to variables is similar to that of C. Variables declared in a method are known as local variables. Local variables must not be used without giving a value to them. No garbage values for variables in Java.
Core Java
Naresh i Technologies sum=n1+n2; System.out.println(The sum of two numbers is:+sum); } } Observations to be made 1. Plus operator acts as the string concatenation operator. To separate the string and the variable sum we use + operator in Java. 2. We did not prompt the user to enter data from the keyboard. Java supports that kind of programming (similar to printf & scanf in C). Without knowing exception handling & IO streams concepts we cannot do that in Java. /* Program to display the bigger of the two numbers Source code: - bigger.java */ class BiggerNumber { public static void main(String args[]) { int n1=23; int n2=32; if(n1>n2) System.out.println(n1+ is bigger than +n2); else System.out.println(n2+ is bigger than +n1); } } Observations to be made 1. Decision making in a Java program is similar to C programming. 2. All kinds of if conditions are available in Java. I.e. simple if, if else, if else ladder, nested if etc. /* Program to display the gross salary of an employee. Source code: - gross.java */ class GrossSalary
Core Java
Naresh i Technologies { public static void main(String args[]) { float basic=5000; float da=0.4f*basic; float hra=0.3f * basic; float gross=basic+da+hra; System.out.println(Gross salary of the employee is Rs.+gross); }//main }//class Observations to be made 1. When we use a float literal value in a Java program, by default it is treated as double value in Java. Therefore compilation error comes. To explicitly mention that it is float value, we append f or F to the decimal number. 2. Variables can be dynamically initialized in Java. In the above example, gross variable is declared and at the same time initializing it through some result of a calculation. This feature is not there in C. Program to print numbers from 1 to 5 three times, each time using a different loop. Source code: - loop.java class PrintOneToFive { public static void main(String args[]) { for(int i=1;i<=5;i++) System.out.println(i); int i=1; while(i<=5) { System.out.println(i); i++; } i=1; do { System.out.println(i);
Core Java
Naresh i Technologies i++; } while(i<=5); }//main() }//class Observations to be made 1. All kinds of loops in Java are similar to that of C as far as syntax is concerned. 2. If we write a for loop in C, the loop counter will be declared before we write the loop. In Java, within the for loop itself we can declare it and initialize it. 3. Variable declared within for loop is available in that loop only. Therefore we could declare a variable i again. /*Program that prints a multiplication table of 5 up to 10 multiples. Source code:- table.java */ class MultiplicationTable { public static void main(String args[]) { int n=5; int product; for(int i=1;i<=10;i++) { product=n*i; System.out.println(n+" X "+i+" = "+product); } }//main() }//class Output of the program 5X1=5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30
Core Java
Naresh i Technologies 5 X 7 = 35 5 X 8 = 40 5 X 9 = 45 5 X 10 = 50 Q) What is the output of the following program? class Output { public static void main(String args[]) { int i; System.out.println(i); } } The above program will not print any garbage value. It causes a compilation error. The variable i is local. We did not give proper value to it. We are trying to use it. The following compilation error is generated. variable i might not have been initialized Q) What is the output of the following program? class Output { public static void main(String args[]) { int sum; for(int i=1;i<=5;i++) sum=sum+i; System.out.println(The sum of first five natural numbers is:+sum); } } The above program also causes compilation error. The variable sum is declared locally in the main method. It is used in the for loop without proper value in it before first use. The following compilation error is generated. variable sum might not have been initialized
Core Java
Naresh i Technologies Note:- All the previous examples are meant for proving that syntax wise java is similar to C. Wherever java differs also we have seen. But the purpose of Java is not yet explored. Java is mostly used in Object oriented business system development.
Core Java
Naresh i Technologies System.out.println("The second book details"); b2.displayBookDetails(); }//main }//class Output of the above program The first book details Book Title:Complete Reference Author of the Book:Herbert Schildt Book price:Rs.310.0 The second book details Book Title:Thinking in Java Author of the Book:Bruce Euckle Book price:Rs.350.0 Observations to be made in the above program 1. In the above program we defined two classes. Book class and ExecuteBook class. The first class is defined to create a user defined data type Book. Given question is to represent 2 books information. Programmatically they are two book objects. To create an object we need a class. Hence Book class is defined. 2. ExecuteBook class defined only to encapsulate main(). We could have written main() in Book class also. But it is not a good programming practice to do so. 3. In the Book class we created 3 variables. They are the properties of each book instance. They are known as instance variables in Java(data members in C++). 4. giveDataToBook() and displayBookDetails() are the functions of Book class. In Java we should not call them functions. They are known as method. Precisely instance methods. 5. In the Book class we combined variables and code(methods) that act upon the variables. I.e. we are wrapping up of data and code in a class. Therefore we say that class is the basis of encapsulation. 6. In main method, we created 2 book objects. Syntax to create an object in Java is as follows. new classname(); With the above syntax, an object is created. But we cannot use it later in a Java program. Therefore, we write the Object creation syntax to hold the
Core Java
Naresh i Technologies reference of the object so that we can use the object later. Book b1=new Book();// b1 is the reference of the first book object. Book b2=new Book();//b2 is the reference of the second book object. 7. Using the references b1 and b2 we called 2 methods on the book objects. Q) Write a program to represent one car information. //Source code: Car.java class Car { String regno; String color; String make; float price; void giveDataToCar(String r,String c, String m,float p) { regno=r; color=c; make=m; price=p; } void displayCarDetails() { System.out.println("Registration No:"+regno); System.out.println("Color:"+color); System.out.println("Car Make:"+make); System.out.println("Price:Rs."+price); } }//Car class ExecuteCar { public static void main(String args[]) { Car c=new Car(); c.giveDataToCar("AP11Q3579","white","Maruti 800 A.C",220000);
Core Java
Naresh i Technologies System.out.println("Car details...."); c.displayCarDetails(); }main() }//class Output of the program Car details.... Registration No:AP11Q3579 Color:white Car Make:Maruti 800 A.C Price:Rs.220000.0
Constructors in Java
A constructor is a specialized method in Java whose name and class name is the same and is called automatically as soon the object is created. Primary purpose of a constructor is object initialization. If we dont write any constructor in a class, Java compiler provides a zero argument constructor for the class by default. We can write our own zero argument constructor also in a class. We can have parameterized constructor also in a class. class Student { int regno; String name; Student(int rno,String n) { regno=rno; name=n; }//Parameterised constructor Student() { regno=1001; name="Rama"; }//zero argument constructor void displayStudentDetails() { System.out.println("Student Registration No:"+regno);
Core Java
Naresh i Technologies System.out.println("Name:"+name); } } //Student class class ExecuteStudent { public static void main(String args[]) { Student s1=new Student(); System.out.println("First student details....."); s1.displayStudentDetails(); Student s2=new Student(); System.out.println("Second student details....."); s2.displayStudentDetails(); Student s3=new Student(1003,"Ravi"); System.out.println("Third student details....."); s3.displayStudentDetails(); }//main }//class Program output First student details..... Student Registration No:1001 Name:Rama Second student details..... Student Registration No:1001 Name:Rama Third student details..... Student Registration No:1003 Name:Ravi Observations to be made 1. 2. When we use zero argument constructor syntax in the object, every object is getting the same data. If we use parameterized constructor in the syntax of the object creation, we can give different data for different object.
Core Java
Naresh i Technologies Student s1=new Student();//zero argument constructor Student s2=new Student();//zero argument constructor Student s3=new Student(1003,Ravi);//Parameterized constructor Q) What is the output of the following program? class Student { int regno; String name; Student(int rno,String n) { regno=rno; name=n; }//Parameterised constructor void displayStudentDetails() { System.out.println("Student Registration No:"+regno); System.out.println("Name:"+name); } } class ExecuteStudent { public static void main(String args[]) { Student s1=new Student(); System.out.println("First student details....."); s1.displayStudentDetails(); } } The above program causes compilation error as follows. cannot resolve symbol symbol : constructor Student () location: class Student Student s1=new Student();
Core Java
Naresh i Technologies ^ 1 error Reason class has no zero argument constructor that we used in the object creation syntax. Q) What is the output of the following program? class Student { int regno; String name; Student(int regno,String name) { regno=regno; name=name; }//Parameterised constructor void displayStudentDetails() { System.out.println("Student Registration No:"+regno); System.out.println("Name:"+name); } } class ExecuteStudent { public static void main(String args[]) { Student s1=new Student(100001,"David"); System.out.println("student details....."); s1.displayStudentDetails(); } } When we compile and execute the above program the following Output is generated. student details..... Student Registration No:0 Name:null Observations to be made
Core Java
Naresh i Technologies 1. We supplied values to the constructor of the student class while creating the object. 2. Because of the name clash between instance variables and parameters, we are getting the above output. 3. To remove the name clash we have to use this keyword in the constructor. Student(int regno,String name) { this.regno=regno; this.name=name; }
Core Java
Naresh i Technologies void display() { System.out.println(a=+a); } } class Main { public static void main(String args[]) { A o=new A(10); o.a=30;//error o.display(); } } The above program raises compilation error as follows. a has private access in A Reason main method cannot directly modify a value. Main method is not the member of class A.
Method Overloading
If we define multiple methods with the same name with different signatures in a class, such concept is known as method overloading. We implement polymorphism in Java using this concept. For example, class A { void add(int a, float b) { } void add(float a, int b) { } }
Core Java
Naresh i Technologies In class A add method is overloaded. In a class, signatures of methods with same name are said to be different if at least any one of the following criteria mismatches. 1. number of parameters 2. order of parameters 3. type of parameters Q) Example program on method overloading class Car { String regno; String color; String make; float price; void giveDataToCar(String r,String c, String m,float p) { regno=r; make=m; } void giveDataToCar(float p) { price=p; } void displayCarDetails() { System.out.println("Registration No:"+regno); System.out.println("Color:"+color); System.out.println("Car Make:"+make); System.out.println("Price:Rs."+price); } }//Car class ExecuteCar { public static void main(String args[]) { Car c=new Car(); c.giveDataToCar("AP11Q3579","white","Maruti 800 A.C",22000); System.out.println("Car details...."); c.displayCarDetails(); color=c; price=p;
Core Java
Naresh i Technologies c.giveDataToCar(220000);//Overloaded method call System.out.println("Car details...."); c.displayCarDetails(); }main() }//class
Sub class inherits variables and methods of the super class. This promotes code reusability. Q) Example program on Inheritance. class Vehicle { int wheels; Vehicle() { wheels=4; } void move() { System.out.println("Every vehicle will move this way"); } }//super class class Car extends Vehicle { void display()
Core Java
Naresh i Technologies { System.out.println("car has "+ wheels+" wheels"); } }//sub class class Main { public static void main(String args[]) { Car c=new Car(); c.move();//inherited method c.display(); } } Output Every vehicle will move this way car has 4 wheels Q) Example program on inheritance class Person { protected int age; protected String name; void giveDataToAnyPerson(int age,String name) { this.age=age; this.name=name; } void displayPersonDetails() { System.out.println("Age:"+age); System.out.println("Name:"+name); } }//super class class Employee extends Person {
Core Java
Naresh i Technologies int empno; float salary; void giveDataToEmployee(int age,String name,int eno,float sal) { giveDataToAnyPerson(age,name); empno=eno; salary=sal; } void displayEmployeeDetails() { displayPersonDetails(); System.out.println("Empno:"+empno); System.out.println("Salary:Rs."+salary); } }//sub class 1 class Student extends Person { int rollno; int marks; void giveDataToStudent(int age,String name,int rno,int m) { giveDataToAnyPerson(age,name); rollno=rno; marks=m; } void displayStudentDetails() { displayPersonDetails(); System.out.println("Rollno:"+rollno); System.out.println("marks."+marks); } }//sub class 2 class InheritanceExample { public static void main(String args[])
Core Java
Naresh i Technologies { Employee e1=new Employee(); e1.giveDataToEmployee(23,"Rahim",10001,6000); System.out.println("employee details"); e1.displayEmployeeDetails(); Student s1=new Student(); s1.giveDataToStudent(18,"Rama",1,46); System.out.println("student details"); s1.displayStudentDetails(); }//main() }//class Output of the program employee details Age:23 Name:Rahim Empno:10001 Salary:Rs.6000.0 student details Age:18 Name:Rama Rollno:1 marks.46
Method overriding
Changing the definition of the parent class method in the sub class is known as method overriding. To implement method overriding we have to follow the given rules. 1. super class method and sub class method signatures should be the same. 2. Their return type should be the same. 3. sub class method should not have weaker access privileges than that of super class method 4. sub class method should not have more number of checked exceptions in the throws clause list. Note: - After implementing method overriding, if we call the method on the sub class object, sub class version only be called.
Core Java
Naresh i Technologies Q) Example program on method overriding. class Vehicle { void move() { System.out.println("Every vehicle moves this way"); }//overridden method }//super class class Car extends Vehicle { void move() { System.out.println("As a car I want to move in my own way"); }//overriding method } class OverridingExample { public static void main(String args[]) { Car c=new Car(); c.move(); } } When we execute the above program, the following output comes. As a car I want to move in my own way Some times we may have to have our own functionality and also in need of the parent given functionality. In such a case, super keyword is used as follows class Car extends Vehicle { void move() { super.move(); System.out.println("As a car I want to move in my own way"); }//overriding method
Core Java
Naresh i Technologies } When we execute the above program, the following output comes. Every vehicle moves this way As a car I want to move in my own way Note:- super keyword must be used from sub class only.
Core Java
Naresh i Technologies Observations to be made 1. Reference is of type super class 2. v is referring to sub class object 3. Using the super class reference, the call is made.
Core Java
Naresh i Technologies
Constructors in inheritance
Whenever sub class object is created, super class zero argument constructor is executed first and then sub class one executed. Whenever the sub class object is created, its constructor is called first. From there an implicit call is made to the super class zero argument constructor. If it is found, it will be executed. If not found, error will be reported. Sub class object creation fails. Q) What is the output of the following program ? class A { A() { System.out.println("super cnstr"); } } class B extends A { B() { System.out.println("sub cnstr"); } } class C { public static void main(String args[]) { B b=new B(); } } When the above program is executed, the following output is displayed. super cnstr sub cnstr
Core Java
Naresh i Technologies Q) What is the output of the following program? class A { A(int a) { System.out.println("super cnstr"); } } class B extends A { B() { System.out.println("sub cnstr"); } } class C { public static void main(String args[]) { B b=new B(); } } The above program generates compilation error. Object creation fails at compilation level itself. The reason is, in the super class there is no zero argument constructor available. To overcome this problem we have 2 options. Either defining the zero argument constructor in the super class or to make an explicit call from the sub class constructor to the super class constructor as follows. B() { super(10); System.out.println("sub cnstr"); } Note:- Call to the super class constructor should be the first statement in the sub class constructor.
Core Java
Naresh i Technologies
Modifiers in Java
static, abstract and final are three important modifiers in Java. When we apply them to the members of a class their meaning will be changed. static variables These are used to represent the whole class level information rather than individual object information. Per class only one copy of static variables is created. A static variable can be referred by class name. Q) Example program on static variable usage. class Employee { static int count; Employee() { count++; System.out.println("Employee appointed"); } void getEmpCount() { System.out.println("No. of employees appointed:"+count); } } class StaticExample { public static void main(String args[]) { System.out.println("No. of employees appointed:"+Employee.count); Employee e1=new Employee(); e1.getEmpCount(); Employee e2=new Employee(); e2.getEmpCount(); }//main() }//class
Core Java
Naresh i Technologies When the program is executed the following output comes. No. of employees appointed:0 Employee appointed No. of employees appointed:1 Employee appointed No. of employees appointed:2 static methods If a method of a class is declared static, it becomes the class method. We can call that method directly on the class. ClassName.method(); In the previous example, if count variable is made private, we cannot access it directly from main method. In such a case, getEmpCount() should have been made static. Q) Static method example class Employee { private static int count; Employee() { count++; System.out.println("Employee appointed"); } static void getEmpCount() { System.out.println("No. of employees appointed:"+count); }//static method definition } class StaticExample { public static void main(String args[]) { Employee.getEmpCount();//static method call Employee e1=new Employee(); e1.getEmpCount();
Core Java
Naresh i Technologies Employee e2=new Employee(); e2.getEmpCount(); } } Note:- Without a reference we should not reference an instance variable or an instance method in a static method. If object is available, a static method can be called using object reference also. final modifier We can associate this modifier with variables, methods and classes also. final variables: - We declare constants in java using final. Final variables must be defined. Their value cannot be changed once they are defined. For example, class A { final int a=10; } final methods:- If a method is declared final, it can be inherited but it cannot be overridden. For example, class A { final void x() { } } class B extends A { void y() { x();//allowed because final method is inherited } void (x){}//not allowed because final methods cannot be overridden. } final class: - If a class is declared final, it cannot be inherited. In a hierarchy of classes, the most specialized class can generally be declared final if we want. For example, final class A{} class B extends A{} // not allowed
Core Java
Naresh i Technologies
abstract modifier
abstract modifier is associated with methods and classes only. If a class is declared abstract, it has all the features of a non-abstract class except in one thing. We cannot create the instance of an abstract class. An abstract method has only declaration but no definition. Declaring a method abstract means that we are forcing all the sub classes to override (implement) that method. For example, abstract class Diagram { abstract void draw(); } If a method is declared abstract, the class in which it is declared also must declared abstract. In a hierarchy of classes the most generalized class is generally declared abstract. Every sub class of an abstract class must implement all the abstract methods of its super class. For example, class Square extends Diagram { void draw() { System.out.println(square is drawn); } } class Rectangle extends Diagram { void drawSquare() { } } When we compile the source code, Compiler reports an error saying that Rectangle class should be declared abstract. It is inheriting from an abstract class Diagram, but not overriding the draw() method. To rectify the error, either we have to declare the Rectangle class abstract OR implement the draw() method. Note: - We cannot declare a variable as abstract in Java.
Core Java
Naresh i Technologies
INTERFACES
An interface is a named collection of method declarations (without implementations). An interface can have only abstract methods. It also can have constants (only) also. For example, interface I1 { public static final int VALUE=10; public abstract void x(); } In the above example, VALUE is the constant. We need not use the 3 keywords for it. It is implicitly public, static and final. For the method x() public and abstract are implicitly available. A class can inherit an interface. For example, interface I2{} class A implements I2 { } In the above example, I2 is the parent and A is the sub class. If a class is inheriting from an interface, the class must implement all the abstract methods of the interface. Otherwise, the class also should be declared abstract. All the members of an interface are by default public. A class can inherit from any number of interfaces. For example, class A implements I1, I2 {} An interface reference can be created. But its instance cannot be created. Q) Example program on interface. interface I1 { void y(); } class A implements I1 { public void y() {
Core Java
Naresh i Technologies System.out.println( Some functionality); } }//sub class class InterfaceExample { public static void main(String args[]) { I1 i=new A(); i.y(); } } Observations to be made 1. I1 is acting as the parent type of class A. 2. Parent type reference can refer to the sub class object. 3. In the interface I1, y() is public and abstract. Therefore, we must override it in the sub class A. One interface can inherit from another interface. Here, extends keyword is used. If a class is implementing sub interface, the class should implement all the methods of super interface as well as the sub interface. interface I1 { void x(); } interface I2 extends I1 { void y(); } class A implements I2 { public void x() { { } }//sub class //some implementation //some implementation } void y()
Core Java
Naresh i Technologies
PACKAGES
A package is a collection of related class files. To make classes easier to locate and use, to control access and to control class-naming conflicts, we bundle collection of related classes and interfaces into packages. Packages are classified into standard and user defined. lang, util, io, net, awt, applet etc. are some of the important standard packages. In these packages library class files are stored. For every Java program lang package is automatically available. We have to include any other package explicitly into the Java program if we need any library class file from that package. For example, in order to include io package we use the import statement import java.io.*; We can create our own packages known as user defined packages. We group our own application class files into the user-defined package. In order to create our own package, in the java program we have to use the package statement as the first statement. For example, package mypack; Q) Example program that creates a user defined package. package mypack; public class A { public void x() { System.out.println(user defined package example); } } Now we compile the program as follows. javac d . A.java With the above command, mypack directory(package) is created in the current working directory. A.class file is stored in mypack. In order to use the user defined package, we need to set the classpath to the directory in which mypack is stored. Then import the mypack and make use of class A and its method. import mypack.A; class C{ public static void main(String args[]){ A a=new A(); a.x(); } }
Core Java
Naresh i Technologies
Arrays in Java
An array is a collection of homogeneous elements referred by the same name. An array is also known as sub-scripted variable. An array is created in Java with the following syntax. datatype arrayriable[]=new datatype[size]; For example, int a[]=new int[10]; The above syntax creates an integer array of size 10. In Java, arrays are internally represented as objects. Every array has property known as length that gives the size of the array. Q) Write a program to store first 5 natural numbers in an array and display them. /* source code:- ArrayExample.java */ class ArrayExample { public static void main(String[] args) { int arr[]=new int[5]; for(int i=0;i<arr.length;i++) arr[i]=i+1; System.out.println("elemtns of the array.........."); for(int i=0;i<arr.length;i++) System.out.println(arr[i]); } } Program output elemnts of the array.......... 1 2 3 4 5
Core Java
Naresh i Technologies
Core Java
Naresh i Technologies
Exception Handling
An exception is an abnormal situation that arises during program execution. I.e. an exception is a runtime error. An exception in Java is an object that describes the exceptional or abnormal event that occurred during program execution. This exception object holds information about the nature of the problem. Whenever an abnormal situation arises during program execution, the object identifying the exceptional circumstance is tossed as an argument to the exception handler. We say that the exception is thrown by the JVM and is caught by the handler. Exceptions are classified into two kinds. 1. Standard exceptions 2. User defined exceptions Pre-created exception classes are known as standard exceptions. Our own created exceptions are known as user defined exceptions. java.lang.Throwable class is the super class of all exception classes in Java. It has 2 sub classes. 1. Error 2. Exception Application developers cannot handle Java.lang.Error class and its sub classes representing abnormal conditions. Java.lang.Exception class has 2 kinds of sub classes. 1. Checked exception classes 2. Unchecked exception class Java.lang.RuntimeException and its sub classes are unchecked exception classes. Except this class, all other sub classes of Exception class are checked exceptions. Javas exception handling mechanism has provided 5 keywords to deal with exceptions. 1. try 2. catch 3. throw 4. throws 5. finally try keyword is used to keep the doubtful code under observation. catch is the exception handler. throw is used to explicitly throw exceptions. throws keyword is used to announce that a method has doubtful body. finally keyword is used to
Core Java
Naresh i Technologies create a block of statements that execute definitely in both the cases. I.e. in exception generated case and non-generated class also. Q) Example program on exception handling. //source code: - ArithmeticExample.java class ArithmeticExample { public static void main(String[] args) { int numerator,denominator,quotient; numerator=Integer.parseInt(args[0]); denominator=Integer.parseInt(args[1]); try { quotient=numerator/denominator; System.out.println(The result of division is:+quotient); } catch(ArithmeticException e) { System.out.println(please ensure that second argument is a non-zero); e.printStackTrace(); } }//main }//class Observations to be made 1. At the command prompt we give the following command to run this program. >java ArithmeticExample 12 2 2. Because of the proper input, no exceptions is raised and hence output of the program will be The result of division is 6 3. If exception is not raised, catch is not at all executed. 4. If we supply the second command line argument 0, ArithmeticException is raised in the try block and control comes to the catch block. 5. When the exception is raised, instead of program getting terminated, try block gets terminated. 6. The message in the catch block will be displayed to the end user.
Core Java
Naresh i Technologies 7. printStackTrace() displays the error type, error message and its originated place. Q) Example program on multiple catch blocks for a single try block. //source code: - MultiCatchExample.java class MultiCatchExample { public static void main(String[] args) { int numerator,denominator,quotient; try { numerator=Integer.parseInt(args[0]); denominator=Integer.parseInt(args[1]); quotient=numerator/denominator; System.out.println(The result of division is:+quotient); } catch(ArithmeticException e) { System.out.println(please ensure that second argument is a non-zero); e.printStackTrace(); } catch(NumberFormatException e) { System.out.println(Only digits as arguments please.); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(Supply 2 arguments please); } }//main }//class Observations to be made 1. Whenever try block has doubtful code that may raise different kinds of exceptions, we go for multiple catch blocks.
Core Java
Naresh i Technologies 2. Even though multiple catch blocks are there, only one catch block is executed.
Core Java
Naresh i Technologies
Multithreading
A thread is said to be a sub process. As we know, a process is nothing but a program under execution. If a process (application) has multiple sub processes (threads), such application is known as a multithreaded application. How (and why) to develop multithreaded Java applications is the goal of multithreading. A single sequential flow of control OR an independent path of execution in a process is known as a thread. In Java, a thread is an instance of a class that extends java.lang.Thread class or that implements java.lang.Runnable interface. Sometimes we create a thread by directly instantiating the Thread class.
Core Java
Naresh i Technologies Q) Write a program that performs the following two tasks concurrently (at the same time). 1. Printing hello 20 times 2. Printing hai 20 times /* Source code: - MultiThreadingEXample.java */ class MyThreadOne extends Thread { public void run() { for(int i=1;i<=20;i++) System.out.println("hello"); } } class MyThreadTwo extends Thread { public void run() { for(int i=1;i<=20;i++) System.out.println("hai"); } } class MultiThreadingExample { public static void main(String[] args) { MyThreadOne t1=new MyThreadOne(); MyThreadTwo t2=new MyThreadTwo(); t1.start(); t2.start(); } } The above program prints hello for few times and hai few times. Again hello few times and hai few times.
Core Java
Naresh i Technologies Observations to be made 1. Task performing code we write in the run method. It acts as the body of the thread. 2. When we called start method on the two threads, the threads are activated and run method is called. Concurrently two flows are executed. Q) Modify the above program using Runnable interface. /* Source code: - MultiThreadingEXampleTwo.java */ class MyThreadOne implements Runnable { public void run() { for(int i=1;i<=20;i++) System.out.println("hello"); } } class MyThreadTwo implements Runnable { public void run() { for(int i=1;i<=20;i++) System.out.println("hai"); } } class MultiThreadingExampleTwo { public static void main(String[] args) { Thread t1=new Thread(new MyThreadOne()); Thread t2=new Thread(new MyThreadTwo()); t1.start(); t2.start(); } }
Core Java
Naresh i Technologies Observations to be made 1. When our class implements Runnable interface, start method is not available to the thread object as Runnable interface has only one method run(). 2. We created threads by instantiating the Thread class and to ensure our own run method as the body of the thread, we supplied our class object as the argument for the constructor of the Thread class. Q) Program to perform multiple tasks by defining only one class that inherits from the Thread class. class MyThread extends Thread { String name; public void run() { name=getName(); if(name.equals("one")) for(int i=1;i<=20;i++) System.out.println("hello"); else for(int i=1;i<=20;i++) System.out.println("hai"); } } class MultiThreadingExampleThree { public static void main(String[] args) { MyThread t1=new MyThread(); MyThread t2=new MyThread(); t1.setName("one"); t2.setName("two"); t1.start(); t2.start(); } }
Core Java
Naresh i Technologies Observations to be made 1. When we define only one class that extends Thread class, we need to write the body of all the threads in only one run method. 2. To differentiate body of each thread, we give different names for threads by calling setName(). In the run method we retrieve the name of the current thread and associate task with that thread. Q) Program in which, task performing code writing in a separate class in different methods and call them in run method. class A { void x() { for(int i=1;i<=20;i++) System.out.println("hello"); } void y() { for(int i=1;i<=20;i++) System.out.println("hai"); } } class MyThread extends Thread { A a=new A(); String name; public void run() { name=getName(); if(name.equals("one")) a.x(); else a.y(); } }
Core Java
Naresh i Technologies class MultiThreadingExampleFour { public static void main(String[] args) { MyThread t1=new MyThread(); MyThread t2=new MyThread(); t1.setName("one"); t2.setName("two"); t1.start(); t2.start(); } }
Thread Priorities
All threads have a priority that determines which thread is executed when several threads are waiting for their turn. The possible values for thread priority are defined as public static final integer values in Thread class. 1. MIN_PRIORITY (its value is 1) 2. MAX_PRIORITY (its values is 10) 3. NORM_PRIORITY (its value is 5) The value of the default priority that is assigned to the main thread in a program is 5. When we create a thread, its priority will be same as that of the thread that created it. We can modify the priority of a thread by calling the setPriority() method on the thread object. This method takes an argument of type int that defines the new priority for the thread. This method will throw an IllegalArgumentException if we supply a value beyond the range between 1 and 10. To know the priority of a thread we can call the method getPriority(). Actual priority of a thread that we set by calling setPriority() depends upon the mapping between Java thread priorities and the underlying operating system priorities. The thread-scheduling algorithm that the Os uses also affects how our application threads execute and what proportion of the process time they are allocated. If we want to set the priority for a thread we have to do so before it is activated. For example, MyThread t=new MyThread(); t.setPriority(6); t.start();
Core Java
Naresh i Technologies Q) Example program in which priority is set for a particular thread. /* Source code: - MultiThreadingExampleFive.java */ class MyThreadOne extends Thread { public void run() { for(int i=1;i<=20;i++) { System.out.println("hello"); try { Thread.sleep(500); } catch(InterruptedException e) { e.printStackTrace(); } }//for }//run } class MyThreadTwo extends Thread { public void run() { for(int i=1;i<=20;i++) { System.out.println("hai"); try { Thread.sleep(500); } catch(InterruptedException e) {
Core Java
Naresh i Technologies e.printStackTrace(); } }//for }//run() } class MultiThreadingExampleFive { public static void main(String[] args) { MyThreadOne t1=new MyThreadOne(); MyThreadTwo t2=new MyThreadTwo(); t2.setPriority(7); t1.start(); t2.start(); } } Observations to be made 1. The thread t1 has the priority of 5. 2. We have set the priority of t2 as 7. 3. Even though t1 is activated first, thread scheduler assigns CPU cycles for t2 first as its priority is more than that of t1. 4. If priority of all the threads are the same, CPU cycles are allotted on first come first serve basis. 5. We are suspending t1 and t2 for 500 milliseconds in each iteration of the loop by calling the static method sleep(). 6. As sleep() method throws a checked exception, we must handle it.
Thread synchronization
Whenever multiple threads are trying to access the same resource, allowing only thread ways. 1. Method level synchronization 2. Block level synchronization. In both the cases we make use of the modifier synchronized. at a time is nothing but synchronization. Synchronization makes multithreaded applications thread-safe. We can implement synchronization in two
Core Java
Naresh i Technologies We define whole method as synchronized in case of method level synchronization. For example, synchronized void withdraw(float balance) { //code } Once withdraw method is called on one object in one thread, the object is locked. No other thread can call the withdraw method on that object unless withdraw method is completely executed. We can apply synchronization at block level also. synchronized(Object) { //code } When we implement block level synchronization, unless the code in that block is completely executed, no other thread can access that objects synchronized code. Dead Lock Whenever multiple threads have circular dependency on synchronized objects, a nasty bug called deadlock occurs. Improper synchronization leads to dead locks. Dead locks have to be prevented by designing the multithread application properly. Once they occur, fixing them is very difficult.
Interthread Communication
Threads communicate one another using 3 methods of java.lang.Object class. All these methods can be called only in the synchronized context. 1. wait() 2. notify() 3. notifyAll() wait():-Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution.
Core Java
Naresh i Technologies notify(): - Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the discretion of the implementation. A thread waits on an object's monitor by calling one of the wait methods. The awakened thread will not be able to proceed until the current thread relinquishes the lock on this object. The awakened thread will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened thread enjoys no reliable privilege or disadvantage in being the next thread to lock this object. A thread that is the owner of this objects monitor should only call this method. A thread becomes the owner of the object's monitor in one of three ways: 1. By executing a synchronized instance method of that object. 2. By executing the body of a synchronized statement that synchronizes on the object. 3. For objects of type Class, by executing a synchronized static method of that class. Only one thread at a time can own an object's monitor. notifyAll(): -Wakes up all threads that are waiting on this object's monitor. A thread waits on an object's monitor by calling one of the wait methods. The awakened threads will not be able to proceed until the current thread relinquishes the lock on this object. The awakened threads will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened threads enjoy no reliable privilege or disadvantage in being the next thread to lock this object. A thread that is the owner of this objects monitor should only call this method.
Core Java
Naresh i Technologies
IOStreams
Java programs perform input and output operations through streams. A stream is an object that takes information from the Java program or that gives information to the Java program. A stream is attached to a physical device. All streams behave in the same manner, even though they are connected to different devices. Therefore, we can develop device independent programs. We have 2 kinds of streams. 1. Byte streams 2. Character streams Byte streams are used to handle input and output of binary data and hence they are also known as binary streams. java.io.InputStream and java.io.OutputStream are the top level classes that represent binary or byte streams. Character streams are used to handle input and output of characters. They use Unicode and hence internationalization is possible. java.io.Reader and java.io.Writer are the top level classes that represent character streams.
Core Java
Naresh i Technologies Observations to be made 1. System.in represents the keyboard 2. This program gives warning about deprecation of readLine(). Even then it works. 3. DataInputStream is a binary stream 4. Instead of handling the IOException, we are passing it. Q) Program to read data from the keyboard using character oriented streams. import java.io.*; class Keyboard { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter book title:"); String name=br.readLine(); System.out.print("Enter author:"); String author=br.readLine(); System.out.print(Enter price:); float price=Float.parseFloat(br.readLine()); System.out.println("Book details...."); System.out.println("Title:"+name); System.out.println("Author:"+author); System.out.println(Price:Rs.+price); br.close(); } } Observations to be made 1. System.in cannot be directly supplied as argument to the BufferedReader constructior. 2. InputStreamReader converts the binary stream System.in into characteroriented stream. 3. readLine() method returns String. 4. By calling the Float.parseFloat(), we are translating the string representation of float value into actual float value.
Core Java
Naresh i Technologies
Core Java
Naresh i Technologies /* Source code: - FileReading.java */ import java.io.*; class FileReading { public static void main(String[] args) throws IOException { FileReader fr=new FileReader(args[0]); int c=fr.read(); while(c !=-1) { System.out.print((char)c); c=fr.read(); } fr.close(); }//main() }//class Observations to be made 1. FileReader is used instead of FileInputStream. 2. Reading logic remained the same when compared to FileInputStream.
Core Java
Naresh i Technologies FileReader fr=new FileReader(args[0]); BufferedReader br=new BufferedReader(fr); String line=br.readLine(); while(line !=null) { System.out.println(line); line=br.readLine(); } br.close(); }//main() }//class Observations to be made 1. readLine( ) method returns one line of text. If it encounters the end of file, it returns null. 2. Once the outer stream is closed, inner stream also will be closed.
Core Java
Naresh i Technologies byte b[]=s.getBytes(); fos.write(b); fos.close(); }//main() }//class Observations to be made 1. write() method of the FileOutputStream does not take String as the argument. It takes byte array as the argument. Therefore, by calling getBytes() method of the String class, the string is converted into byte array and is supplied as argument to it. 2. After writing operation Is over, the stream is closed. Q) Write a program to store some information into a disk file using character oriented stream. /* source code: - StoringIntoFile.java */ import java.io.*; class StoringIntoFile { public static void main(String[] args) throws IOException { FileWriter fw=new FileWriter("one.txt"); String s="This will be stored into file"; fw.write(s); fw.close(); }//main() }//class Observations to be made 1. Being a character-oriented stream, FileWriter class takes String as the argument directly. 2. If we want to append the content of the file rather than overwriting its contents, we have to supply appendability indicating true value as the second argument to the constructor of the FileWriter OR FileOutputStream
Object Serialization
Core Java
Naresh i Technologies
Object serialization is the process of storing an object state into a stream. Through serialization, objects become persistent. To implement serialization, the rule is that the class should implement java.io.Serializable interface. Q) Program to implement Object deserialization. /* source code:- ObjectDeSerialization.java */ import java.io.*; class Student implements Serializable { int rollno; Student(int rno) { rollno=rno; } void display() { System.out.println("Rollno:"+rollno); } } class ObjectSerialization { public static void main(String[] args) throws Exception { FileOutputStream fos=new FileOutputStream("student.dat"); ObjectOutputStream oos=new ObjectOutputStream(fos); Student s=new Student(1002); oos.writeObject(s); oos.close(); } }
Core Java
Naresh i Technologies /* Source code: - ObjectDeserialization.java */ import java.io.*; class Student implements Serializable { int rollno; Student(int rno) { rollno=rno; } void display() { System.out.println("Rollno:"+rollno); } } class ObjectDeSerialization { public static void main(String[] args) throws Exception { FileInputStream fis=new FileInputStream("student.dat"); ObjectInputStream ois=new ObjectInputStream(fis); Student s=(Student)ois.readObject(); s.display(); ois.close(); } }
Core Java