Unit 1 PDF
Unit 1 PDF
Unit 1 PDF
UNIT-I
● JAVA BASICS
● History of Java
● Java buzzwords
● Data types
● Variables
● Simple java program
● scope and life time of variables
● Operators, expressions, control statements
● Type conversion and casting
● Arrays
● Classes and objects – concepts of classes, objects
● Constructors, methods
● Access control
● This keyword
● Garbage collection
● Overloading methods and constructors
● Parameter passing
● Recursion
● String handling .
History of Java
● Java started out as a research project.
JAVA SE 8 - 2012 -
Java Platforms
There are three main platforms for Java:
Java
Byte
codes Java Just-in-time
Java
move Interpreter Compiler
Compiler
locally or
through
n/w Run Time System
MAC Others
Hardware
The Architecture of the Java Virtual Machine
Java Virtual Machine
● Class loader subsystem: A mechanism for loading
types (classes and interfaces) given fully qualified
names.
As the program runs, the virtual machine places all objects the
program instantiates onto the heap.
As each new thread comes into existence, it gets its own pc register
(program counter) and Java stack.
●Objects
●Classes
●Data abstraction and Encapsulation
●Inheritance
●Polymorphism
●Dynamic Binding
A class is collection of objects of similar type or it is a template.
Ex: fruit mango;
class object
Objects are instances of the type class.
The wrapping up of data and functions into a single unit ( called class) is known
as encapsulation. Data encapsulation is the most striking features of a class.
Inheritance is the process by which objects of one class acquire the properties
of another class. The concept of inheritance provides the reusability.
Polymorphism:
It allows the single method to perform different actions based on the
parameters.
●Through inheritance, we can eliminate redundant code and extend the use of
existing classes.
●The principle of data hiding helps the programmer to build secure programs.
● Real-time systems
● Object-oriented databases
● CAD/CAM systems
➢ What is the Difference b/w OO and OB Languages?
In Object based languages inheritance is not supported so
that dynamic polymorphism also not supported.
E.g. VB,VC++.
● Object Oriented
● Focus on the data (objects) and methods manipulating the data
● All methods are associated with objects
● Potentially better code organization and reuse
Java Features
● Compile, Interpreted and High Performance
● Java compiler generate byte-codes, not native machine code
● The compiled byte-codes are platform-independent
● Java byte codes are translated on the fly to machine
readable instructions in runtime (Java Virtual Machine)
● Easy to translate directly into native machine code by using a
just-in-time compiler.
● Portable
● Same application runs on all platforms
● The sizes of the primitive data types are always the same
● The libraries define portable interfaces
Java Features
● Reliable/Robust
● Extensive compile-time and runtime error checking
● No pointers but real arrays. Memory corruptions or
unauthorized memory accesses are impossible
● Automatic garbage collection tracks objects usage over
time
● Secure
● Java’s robustness features makes java secure.
● Access restrictions are forced (private, public)
Java Features
● Multithreaded
● It supports multithreaded programming.
● Need not wait for the application to finish one task before
beginning another one.
● Dynamic
● Libraries can freely add new methods and instance
variables without any effect on their clients
● Interfaces promote flexibility and reusability in code by
specifying a set of methods an object can perform, but
leaves open how these methods should be implemented .
Java Features
● Distributed
● Java is designed for the distributed environment of the
Internet, because it handles TCP/IP protocols.
● Allows objects on two different computers to execute
procedures remotely by using package called Remote
Method Invocation (RMI).
● Architecture-Neutral
● Goal of java designers is “write once; run anywhere,
any time, forever.”
Keywords
floa doubl
t e
float f1 = Float.MAX_VALUE;
float f2 = Float.MIN_VALUE ;
double d1 = Double.MAX_VALUE;
double d2 = Double.MIN_VALUE ;
int f1 = Character.MAX_VALUE;
long f2 = Character.MIN_VALUE ;
Types
➢ Instance Variable
➢ Class Variable
➢ Local Variable
➢ Parameters
Local variables :
• Local variables are declared in methods, constructors, or blocks.
• Local variables are created when the method, constructor or block
is entered and the variable will be destroyed once it exits the
method, constructor or block.
• Access modifiers cannot be used for local variables.
• Local variables are visible only within the declared method,
constructor or block.
• There is no default value for local variables so local variables
should be declared and an initial value should be assigned before
the first use.
Instance variables :
• Instance variables are declared in a class, but outside a method,
constructor or any block.
• Instance variables are created when an object is created with the use of
the key word 'new' and destroyed when the object is destroyed.
• Access modifiers can be given for instance variables.
• The instance variables are visible for all methods, constructors and block
in the class.
• Instance variables have default values.
• Instance variables can be accessed directly by calling the variable name
inside the class.
• However within static methods and different class ( when instance
variables are given accessibility) that should be called using the fully
qualified name ObjectReference.VariableName
Class/Static variables :
• Class variables also known as static variables are declared with the static
keyword in a class, but outside a method, constructor or a block.
• There would only be one copy of each class variable per class,
regardless of how many objects are created from it.
• Static variables are stored in static memory.
• Static variables are created when the program starts and destroyed when
the program stops.
• Visibility is similar to instance variables.
• Default values are same as instance variables.
• Static variables can be accessed by calling with the class name
ClassName.VariableName
class Variables{
int i; System.out.println("i value is: "+v1.i);
public int j System.out.println("i value is: "+v2.i);
static long l=10; System.out.println("i value is: "+v3.i);
public static float f; System.out.println("i value is: "+v1.j);
char c; v1.l=20;
boolean b; v2.l=30;
void display(int a){ v3.l=40;
i=a;
System.out.println("l value is: "+v1.l);
System.out.println("l value is: "+v2.l);
System.out.println("i value in display: "+i);
System.out.println("l value is: "+v3.l);
}
public static void main(String args[]){ System.out.println("f value is: "+f);
double d=0.0; System.out.println("c value is: "+v1.c);
//public double d=0.0; invalid System.out.println("b value is: "+v1.b);
Variables v1=new Variables();
Variables v2=new Variables(); System.out.println("d value is: "+d);
Variables v3=new Variables(); }
v1.display(100); }
v1.i=2;
v2.i=3;
v3.i=4;
class Variables{
int i;//instance variable System.out.println("i value is: "+v1.i);
public int j ;//instance variable System.out.println("i value is: "+v2.i);
static long l=10;//class variable System.out.println("i value is: "+v3.i);
public static float f;//class variable System.out.println("i value is: "+v1.j);
char c;//instance variable v1.l=20;
boolean b;//instance variable v2.l=30;
void display(int a){ v3.l=40;
i=a;
System.out.println("l value is: "+v1.l);
System.out.println("l value is: "+v2.l);
System.out.println("i value in display: "+i);
System.out.println("l value is: "+v3.l);
}
public static void main(String args[]){ System.out.println("f value is: "+f);
double d=0.0;//local varible System.out.println("c value is: "+v1.c);
//public double d=0.0; invalid System.out.println("b value is: "+v1.b);
Variables v1=new Variables();
Variables v2=new Variables(); System.out.println("d value is: "+d);
Variables v3=new Variables(); }
v1.display(100); }
v1.i=2;
v2.i=3;
v3.i=4;
Sample Program
class HelloWorld {
public static void main (String args []) {
System.out.println (“Welcome to Java
Programming…..”);
}
}
}
void display(){
System.out.println("display:main");
}
}
The Scope and Lifetime of Variables
Scope
The scope of a declared element is the portion of the program where the
element is visible.
Lifetime
The lifetime of a declared element is the period of time during which it is
alive.
➢ A block begins with an opening curly brace and ends by a closing curly
brace.
● Variables declared inside a scope are not accessible to code
outside.
● Scopes can be nested. The outer scope encloses the inner scope.
● Variables declared in the outer scope are visible to the inner
scope.
● Variables declared in the inner scope are not visible to the
outside scope.
public class Scope
{
public static void main(String args[]){
int x; //know to all code within main
x=10;
if(x==10){ // starts new scope
int y=20; //Known only to this block
//x and y both known here
System.out.println("x and y: "+x+" "+y);
x=y+2;
}
// y=100; // error ! y not known here
//x is still known here
System.out.println("x is "+x);
}
}
Operators
● Arithmetic Operators
● Bitwise Operators
● Relational Operators
● Boolean Logical Operators
Arithmetic Operators(1)
Operator Result
+ Addition
– Subtraction
* Multiplication
/ Division
% Modulus
Arithmetic Operators(2)
Operator Result
++ Increment
+= Addition assignment
–= Subtraction
assignment
*= Multiplication
assignment
/= Division
assignment
%= Modulus
assignment
Example:
class IncDec{
public static void main(String args[]){
int a = 1;
int b = 2;
int c,d;
c = ++b;
d = a++;
c++;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
}
}
class OpEquals{
public static void main(String args[]){
int a = 1;
int b = 2;
int c = 3;
a += 5;
b *= 4;
c += a * b;
c %= 6;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
Bitwise Operators(1)
➢ bitwise operators can be applied to the integer types,
long, int, short, byte and char.
➢ These operators act upon the individual bits of their
operands.
Operator Result
~ Bitwise unary NOT
& Bitwise AND
| Bitwise OR
^ Bitwise exclusive OR
>> Shift right
>>> Shift right zero fill
<< Shift left
Bitwise Operators(2)
Operator Result
|= Bitwise OR assignment
^= Bitwise exclusive OR
assignment
Operator Result
== Equal to
!= Not equal to
> Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
Example:
Operator Result
class Test{
public static void main(String args[]){
int denom=0,num=20;
if (denom != 0 && num / denom > 10)
System.out.println("Hi");
}
}
Boolean Logical Operators(2)
Operator Result
&= AND assignment
|= OR assignment
^= XOR assignment
== Equal to
!= Not equal to
?: Ternary if-then-else
public class TernaryOperatorDemo
{
public static void main(String args[])
{
int x=10,y=12;
int z;
z= x > y ? x : y;
System.out.println(“Z=“+z);
}
Operator Precedence
Expressions
● An expression is a combination of
constants (like 10), operators ( like +),
variables(section of memory) and
parentheses ( like “(” and “)” ) used to
calculate a value.
Ex1: x = 1;
Ex2: y = 100 + x;
Ex3: x = (32 - y) / (x + 5)
Control Statements
do
while(conditi {
on) // body of
{ loop
// body of } while
loop (condition);
} for(initialization; condition;
iteration)
{
// body
}
Jump Statements
label:
----
----
break label; //it’s like goto
statement
● Types of Conversions:
1.Widening conversion
2.Narrowing conversion
Widening Conversion
Ex: char and boolean are not compatible with each other.
class Widening{
public static void main(String args[]){
short s;
int i1,i2;
byte b1=10,b2=20;
s=b1; //byte to short
i1=b2; //byte to int
System.out.println("byte to short conversion");
System.out.println(b1+ " " + s);
System.out.println("byte to int conversion");
System.out.println(b2+" "+i1);
char c='a';
i2=c; //char to int
System.out.println("char to int conversion");
System.out.println(c+" "+i2);
}
}
Narrowing Conversion
● In general, the narrowing primitive conversion can occur in
these cases:
short to byte or char
char to byte or short
int to byte, short, or char
long to byte, short, or char
float to byte, short, char, int, or long
double to byte, short, char, int, long, or float
Initialization:
● int x[] = {1, 2, 3, 4};
● char []c = {‘a’, ‘b’, ‘c’};
● double d[][]= {
{1.0,2.0,3.0},
{4.0,5.0,6.0},
{7.0,8.0,9.0}
};
Jagged Array:
● int [][] x = new int[3][];
import java.util.Scanner;
class ArrayEx{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int a[]={10,20,30,40,50};
char []c={'a','b','c','d','e'};
int b[]=new int[5];
for(int i=0;i<5;i++){
System.out.print(a[i]+" ");
System.out.println(c[i]+" ");
}
for(int i=0;i<5;i++){
b[i]=input.nextInt();
}
for(int i=0;i<5;i++){
System.out.print(b[i]+" ");
}
}
}
Concepts of Classes, Objects
General Form of Class
class classname {
type instance-variable1;
//...
type instance-variableN;
static type variable1;
type methodname1(parameter-list) {
// body of method
}
// ...
type methodnameN(parameter-list){
// body of method
}
}
class Box{ Declaring an Object
double width;
double height;
double depth;
}
Representation 1:
Box mybox;
mybox=new
Box();
Representation 2:
Box mybox=new
Box();
Representation 3: Assigning Object Reference Variables
Box b1 = new Box();
Box b2 = b1;
package import java.util.Scanner;
packagename; class Demon{
import statement; int i;
class classname{ static double d;
//instance variables; public static void main(String args[]){
//class or static char c=‘a’;
variables; Demon obj=new Demon();
/*methods(paramet Scanner s=new
ers){ Scanner(System.in);
//local variables; d=s.nextDouble();
//object System.out.println(obj.i);
creation System.out.println(d);
//statements; System.out.println(c);
}*/ }
} }
class classname{ class Test{
//instance variables; char c='a';
//class or static variables; static float f;
/*methods(parameters){ void display(){
//local variables; int i=10;
//statements;
}*/ System.out.println("Test:display()");
} System.out.println(“c value: “+c);
class MainCLass{ System.out.println(“i value: “+i);
public static void main(String args[]) System.out.println(“f value: “+f);
{ }
//object creation }
//invoking methods class Demo{
//statements public static void main(String args[]){
} Test t=new Test();
} t.display();
System.out.println("Demo:main()");
}
}
Constructors and Methods
● A constructor is a special member function whose task is to initialize an
object immediately upon creation.
● A constructor has the same name as the class in which it resides and is
syntactically similar to a method.
default :
▪ When no access specifier is used, then by default the
member of a class is public within its own package, but
cannot be accessed outside of its package.
private:
▪ A private member is accessible only to the class in which it is
defined.
▪ Use private keyword to create private members.
public:
▪ Any class, in any package has access to a class's public
members.
▪ To declare a public member, use the keyword public.
protected:
▪ Allows the class itself, subclasses, and all classes in the same
package to access the members.
▪ To declare a protected member, use the keyword protected.
//Example for access control
class AccessTest {
class Test {
int a; // default access public static void main(String args[]) {
public int b; // public
access Test ob = new Test();
private int c; // private
// These are OK, a and b may be accessed directly
access
ob.a = 10;
/*protected applies only ob.b = 20;
when inheritance is involved*/
// This is not OK and will cause an error
// methods to access c //ob.c = 100; // Error!
● But you can have formal parameters to methods, which overlap with the
names of the class’ instance variables.
● this can be used to resolve any name collisions that might occur between
instance variables and formal variables.
● When a formal variable has the same name as an instance variable, the formal
variable hides the instance variable.
● String
Once an object is created, no modifications can be done on that.
● StringBuffer
Modifications can be allowed on created object.
● StringTokenizer
Used to divide the string into substrings based on tokens.
● Once a String object has been created, we can not change the characters that
comprise in the string.
● Strings are unchangeable once they are created so they are called as
immutable.
● You can still perform all types of string operations. But, a new String object
is created that contains the modifications. The original string is left
unchanged.
● String(char chars[])
● String(String strobj)
● String( char chars[], int startIndex, int numChars) //To create a string by specifying
positions from an array of characters
char chars[]={‘a’,’b’,’c’,’d’,’e’,’f’};
String s=new String(chars,2,3); //This initializes s with characters “cde”.
Java Output:
Java
ABCDEF
CDE
String Length
boolean startsWith(String str, int startIndex) //to specifies the index into
the invoking string at which point the search will begin.
equals( ) Versus ==
// It compares the characters inside a String object
//To compare two object references to see whether they refer to the same
instance.
String Comparison
// equals() vs ==
class EqualsNotEqualTo {
public static void main(String args[]) {
String s1 = "Hello";
String s2 = new String(s1);
//String s2 = s1;
System.out.println(s1.equals(s2));
System.out.println( s1 == s2);
}
}
Output:
true
false
String Comparison
int compareTo(String str)
Value Meaning
Less than zero The invoking string is less than str.
Greater than zero The invoking string is greater than str.
Zero The two strings are equal.
In all cases, the methods return the index at which the character or substring
was found, or –1 on failure.
// Demonstrate indexOf() and lastIndexOf().
class indexOfDemo { Here is the output of this program:
public static void main(String args[]) { Now is the time for all good men
String s = "Now is the time for all good men " +"to to come to the aid of their country.
come to the aid of their country."; indexOf(t) = 7
System.out.println(s); lastIndexOf(t) = 65
indexOf(the) = 7
System.out.println("indexOf(t) = " +s.indexOf('t')); lastIndexOf(the) = 55
System.out.println("lastIndexOf(t) = " +s.lastIndexOf('t')); indexOf(t, 10) = 11
lastIndexOf(t, 60) = 55
System.out.println("indexOf(the) = " +s.indexOf("the")); indexOf(the, 10) = 44
System.out.println("lastIndexOf(the) = " +s.lastIndexOf("the")); lastIndexOf(the, 60) = 55
// Substring replacement.
class StringReplace {
public static void main(String args[]) {
String org = "This is a test. This is, too.";
String result = org.substring(0, 2);
System.out.println(result);
}
}
Output:
Th
String concat(String str)
//To concatenate two strings, concat( ) performs the same function as +.
String s1 = "one";
String s2 = s1.concat("two");
String s1 = "one";
String s2 = s1 + "two";
● StringBuffer(int size)
// accepts an integer argument that explicitly sets the size
of the buffer.
● StringBuffer(String str)
// str + reserves room for 16 more characters without
reallocation.
Methods
● length( ) and capacity( )
● setLength( )
● charAt( ) and setCharAt( )
● getChars( )
● append( )
● insert( )
● reverse( )
● delete( ) and deleteCharAt( )
● replace( )
● substring( )
int length( ) //The current length of a StringBuffer can be found via the length( ) method
int capacity( ) //The total allocated capacity can be found through the capacity( ) method.
// Demonstrate insert().
class insertDemo {
public static void main(String args[]) {
StringBuffer sb = new StringBuffer("I Java!");
sb.insert(2, "like ");
System.out.println(sb);
}
}
Output:
I like Java!
StringBuffer reverse( )
// reverse the characters within a StringBuffer object using reverse( )
// Using reverse() to reverse a StringBuffer.
class ReverseDemo {
public static void main(String args[]) {
StringBuffer s = new StringBuffer("abcdef");
System.out.println(s);
s.reverse();
System.out.println(s);
}
}
Output:
abcdef
fedcba
StringBuffer delete(int startIndex, int endIndex) // to delete characters.
StringBuffer deleteCharAt(int loc)
// Demonstrate delete() and deleteCharAt()
class deleteDemo {
public static void main(String args[]) {
StringBuffer sb = new StringBuffer("This is a test.");
sb.delete(4, 7);
System.out.println("After delete: " + sb);
sb.deleteCharAt(0);
System.out.println("After deleteCharAt: " + sb);
}
}
Output:
After delete: This a test.
After deleteCharAt: his a test.
StringBuffer replace(int startIndex, int endIndex, String str);
//It replaces one set of characters with another set inside a StringBuffer object.
// The replacement string is passed in str.
// Demonstrate replace()
class replaceDemo {
public static void main(String args[]) {
StringBuffer sb = new StringBuffer("This is a test.");
sb.replace(5, 7, "was");
System.out.println("After replace: " + sb);
}
}
Output: After replace: This was a test.
To use StringTokenizer
● Specify an input string and a delimiter string.
● StringTokenizer(String str)
Methods
● int countTokens( ) //returns number of tokens in the string.
● boolean hasMoreTokens( ) //checks whether tokens are there or
not
● String nextToken( ) //returns the token in the string
// Demonstrate StringTokenizer.
import java.util.StringTokenizer;
class STDemo{
//static String str = "Hello Welcome to Java Programming";
static String str = "Hello,Welcome,to,Java,Programming";
public static void main(String args[]) {
//StringTokenizer st = new StringTokenizer(str);
//StringTokenizer st = new StringTokenizer(str,",");
StringTokenizer st = new StringTokenizer(str,",",true);
Output:
while(st.hasMoreTokens()) { Hello
String tokens = st.nextToken(); ,
System.out.println(tokens + "\n"); Welcome
} ,
to
}
,
} Java
,
Programming
Exercise1:
Output:
Enter sum of integers: 10+20+30+40
Sum of 10+20+30+40 is: 100