Java$Basics$ 
Dr. Shahid Raza! 1!
Three Java Editions 
• Java Platform, Standard Edition (Java SE) 
• Java Platform, Enterprise Edition (Java EE) 
• Java Platform, Micro Edition (Java ME) 
Lecture 2: Overview: Java Peculiarities 3
The Java Platform, Standard Edition 
(Java SE) 
Lecture 2: Overview: Java Peculiarities 4
Java Platform, Enterprise Edition 
(Java EE) 
• Enterprise Application 
Technologies 
– Enterprise JavaBeans (EJB) 
– J2EE Connector Architecture 
– Java Message Service (JMS) 
• Web Application 
Technologies 
– Java Servlet 
– JavaServer Pages (JSP) 
– JavaServer Faces (JSF) 
– Java Persistence API (JSR) 
• Provides a POJO persistence 
model for object-relational 
mapping. Developed and use 
for EJB, but can be used 
directly 
– Java Transaction API (JTA) 
– JavaMail 
• Management and Security 
Technologies 
– J2EE Application 
Deployment 
– J2EE Management 
– Java Authorization Contract 
for Containers 
Lecture 2: Overview: Java Peculiarities 5
Object.Oriented$Nomenclature$ 
• Class$means$a$category$of$things$ 
– A$class$name$can$be$used$in$Java$as$the$type$of$a$field$or$ 
local$variable$or$as$the$return$type$of$a$func?on$(method)$ 
• Object$means$a$par?cular$item$that$belongs$to$a$ 
class$ 
– Also$called$an$instance$ 
• For$example,$consider$the$following$line:$ 
$ $$ $$$$String s1 = Hello;$ 
– Here,$String$is$the$class,$s1$is$an$instance$variable$of$class$ 
String,$whose$value$is$the$String$object$Hello$$ 
Dr. Shahid Raza! 2!
Example$1:$Instance$Variables$ 
(Fields$or$Data$Members)$ 
class Ship1 { 
public double x, y, speed, direction; 
public String name; 
} 
public class Test1 { 
public static void main(String[] args) { 
Ship1 s1 = new Ship1(); 
s1.x = 0.0; 
s1.y = 0.0; 
s1.speed = 1.0; 
s1.direction = 0.0; // East 
s1.name = Ship1; 
System.out.println(s1.name +  is initially at ( 
+ s1.x + , + s1.y + ).); 
s1.x = s1.x + s1.speed 
* Math.cos(s1.direction * Math.PI / 180.0); 
s1.y = s1.y + s1.speed 
* Math.sin(s1.direction * Math.PI / 180.0); 
System.out.println(s1.name +  has moved to ( 
+ s1.x + , + s1.y + ).); 
} 
} 
Dr. Shahid Raza! 3!
Instance$Variables:$Results$ 
• Compiling$and$Running:$ 
javac Test1.java 
java Test1 
Output:$ 
Ship1 is initially at (1,0). 
Ship2 has moved to (-1.41421,1.41421). 
Dr. Shahid Raza! 4!
Primitive Data Types 
• Much like in C 
– byte 
– short 
– char 
Lecture 2: Overview: Java Peculiarities 21 
– int 
– long 
– float 
– double 
• See Examples in Exercise 0.
Widening Primitive Conversions 
• Do not lose information about the overall 
magnitude of a numeric value. 
From To 
byte short, int, long, float, double 
short int, long, float, double 
char int, long, float, double 
int long, float, double 
long float, double 
float double 
Lecture 2: Overview: Java Peculiarities 22
Narrowing Primitive Conversions 
• May lose information about the overall magnitude of 
a numeric value and may also lose precision. 
From To 
byte char 
short byte, char 
char byte, short 
int byte, short, char 
long byte, short, char, int 
float byte, short, char, int, long 
double byte, short, char, int, long, float 
Lecture 2: Overview: Java Peculiarities 23
Example$1:$Major$Points$ 
• Java$naming$conven?on$ 
• Format$of$class$defini?ons$ 
• Crea?ng$classes$with$new$ 
• Accessing$fields$with$ 
variableName.fieldName$ 
Dr. Shahid Raza! 5!
Java$Naming$Conven?ons$ 
• Leading$uppercase$leTer$in$class$name$ 
public class MyClass { 
... 
} 
• Leading$lowercase$leTer$in$field,$local$ 
variable,$and$method$(func?on)$names$ 
– myField,myVar,myMethod 
Dr. Shahid Raza! 6!
First$Look$at$Java$Classes$ 
• The$general$form$of$a$simple$class$is$ 
modifier class Classname { 
modifier data-type field1; 
modifier data-type field2; 
... 
modifier data-type fieldN; 
modifier Return-Type methodName1(parameters) { 
//statements 
} 
... 
modifier Return-Type methodName2(parameters) { 
//statements 
} 
} 
Dr. Shahid Raza! 7!
Objects$and$References$ 
• Once$a$class$is$defined,$you$can$easily$declare$a$ 
variable$(object$reference)$of$the$class$ 
Ship s1, s2; 
Point start; 
Color blue; 
• Object$references$are$ini?ally$null$$$ 
– The$null$value$is$a$dis?nct$type$in$Java$and$should$ 
not$be$considered$equal$to$zero$$ 
– A$primi?ve$data$type$cannot$be$cast$to$an$object$(use$ 
wrapper$classes)$ 
• The$new$operator$is$required$to$explicitly$create$ 
the$object$that$is$referenced$ 
ClassName variableName = new ClassName();$ 
Dr. Shahid Raza! 8!
Accessing$Instance$Variables$ 
• Use$a$dot$between$the$variable$name$and$the$field$ 
name,$as$follows:$ 
variableName.fieldName$$ 
• For$example,$Java$has$a$built.in$class$called$Point$that$ 
has$x$and$y$fields$ 
Point p = new Point(2, 3); // Build a Point object 
int xSquared = p.x * p.x; // xSquared is 4 
p.x = 7; 
• One$major$excep?on$applies$to$the$access$fields$ 
through$varName.fieldName$rule$ 
– Methods$can$access$fields$of$current$object$without$varName$ 
– This$will$be$explained$when$methods$(func?ons)$are$discussed$ 
Dr. Shahid Raza! 9!
Example$2:$Methods$ 
class Ship2 { 
public double x=0.0, y=0.0, speed=1.0, direction=0.0; 
public String name = UnnamedShip; 
private double degreesToRadians(double degrees) { 
return(degrees * Math.PI / 180.0); 
} 
public void move() { 
double angle = degreesToRadians(direction); 
x = x + speed * Math.cos(angle); 
y = y + speed * Math.sin(angle); 
} 
public void printLocation() { 
System.out.println(name +  is at ( 
+ x + , + y + ).); 
} 
} 
Dr. Shahid Raza! 10!
Methods$(Con?nued)$ 
public class Test2 { 
public static void main(String[] args) { 
Ship2 s1 = new Ship2(); 
s1.name = Ship1; 
Ship2 s2 = new Ship2(); 
s2.direction = 135.0; // Northwest 
s2.speed = 2.0; 
s2.name = Ship2; 
s1.move(); 
s2.move(); 
s1.printLocation(); 
s2.printLocation(); 
} 
} 
• Compiling$and$Running:$ 
javac Test2.java 
java Test2 
• Output:$ 
Ship1 is at (1,0). 
Ship2 is at (-1.41421,1.41421). 
Dr. Shahid Raza! 11!
Example$2:$Major$Points$ 
• Format$of$method$defini?ons$ 
• Methods$that$access$local$fields$ 
• Calling$methods$ 
• Sta?c$methods$ 
• Default$values$for$fields$ 
• public/private$dis?nc?on$ 
Dr. Shahid Raza! 12!
Defining$Methods$ 
(Func?ons$Inside$Classes)$ 
• Basic$method$declara?on:$ 
p u b l i c R e t u r n T y p e m e t h o d N a m e ( ttyyppee12 aarrgg12,, ...) { 
... 
return(something of ReturnType); 
} 
• Excep?on$to$this$format:$if$you$declare$the$return$ 
type$as$void 
– This$special$syntax$that$means$this$method$isnt$ 
going$to$return$a$value$–$it$is$just$going$to$do$some$ 
side$effect$like$prin?ng$on$the$screen$$ 
– In$such$a$case$you$do$not$need$(in$fact,$are$not$ 
permiTed),$a$return$statement$that$includes$a$ 
value$to$be$returned$ 
Dr. Shahid Raza! 13!
Examples$of$Defining$Methods$ 
• Here$are$two$examples:$ 
– The$first$squares$an$integer$$ 
– The$second$returns$the$faster$of$two$Ship$objects,$assuming$that$a$ 
class$called$Ship$has$been$defined$that$has$a$field$named$speed$$ 
// Example function call: 
// int val = square(7); 
public int square(int x) { 
return(x*x); 
} 
// Example function call: 
// Ship faster = fasterShip(someShip, someOtherShip); 
public Ship fasterShip(Ship ship1, Ship ship2) { 
if (ship1.speed  ship2.speed) { 
return(ship1); 
} else { 
return(ship2); 
} 
}$ 
Dr. Shahid Raza! 14!
Excep?on$to$the$Field$Access$with$ 
Dots$Rule$ 
• Normally$access$a$field$via: variableName.fieldName $ 
$ 
but$an$excep?on$is$when$a$method$of$a$class$wants$to$access$ 
fields$of$that$same$class$$ 
– In$that$case,$omit$the$variable$name$and$the$dot$ 
– For$example,$a$move$method$within$the$Ship$class$might$do:$ 
public void move() { 
x = x + speed * Math.cos(direction); 
... 
} 
• Here,$x,$speed,$and$direction$are$all$fields$within$the$class$that$ 
the$move$method$belongs$to,$so$move$can$refer$to$the$fields$directly$ 
$ 
– As$well$see$later,$you$s?ll$can$use$the$variableName.fieldName$ 
approach,$and$Java$invents$a$variable$called$this$that$can$be$used$for$ 
that$purpose$ 
Dr. Shahid Raza! 15!
Sta?c$Methods$ 
• Sta?c$func?ons$are$like$global$func?ons$in$other$ 
languages$ 
$ 
• You$can$call$a$sta?c$method$through$the$class$name$ 
ClassName.functionName(arguments); 
– For$example,$the$Math$class$has$a$sta?c$method$called$cos$ 
that$expects$a$double$precision$number$as$an$argument$ 
• So$you$can$call$Math.cos(3.5)$without$ever$having$any$object$ 
(instance)$of$the$Math$class$ 
Dr. Shahid Raza! 16!
Method$Visibility$ 
• public/private$dis?nc?on$ 
– A$declara?on$of$private$means$that$outside$methods$ 
cant$call$it$..$only$methods$within$the$same$class$can$ 
• Thus,$for$example,$the$main$method$of$the$Test2$class$could$ 
not$have$done$$ 
double x = s1.degreesToRadians(2.2); 
– ATemp?ng$to$do$so$would$have$resulted$in$an$error$at$compile$?me$$ 
– Only$say$public$for$methods$that$you$want%to%guarantee% 
your%class%will%make%available%to%users$$ 
– You$are$free$to$change$or$eliminate$private$methods$ 
without$telling$users$of$your$class$about$ 
$$$ 
Dr. Shahid Raza! 17!
Example$3:$Constructors$ 
class Ship3 { 
public double x, y, speed, direction; 
public String name; 
public Ship3(double x, double y, 
double speed, double direction, 
String name) { 
this.x = x; // this differentiates instance vars 
this.y = y; // from local vars. 
this.speed = speed; 
this.direction = direction; 
this.name = name; 
} 
private double degreesToRadians(double degrees) { 
return(degrees * Math.PI / 180.0); 
} 
... 
Dr. Shahid Raza! 18!
Constructors$(Con?nued)$ 
public void move() { 
double angle = degreesToRadians(direction); 
x = x + speed * Math.cos(angle); 
y = y + speed * Math.sin(angle); 
} 
public void printLocation() { 
System.out.println(name +  is at ( 
+ x + , + y + ).); 
} 
} 
public class Test3 { 
public static void main(String[] args) { 
Ship3 s1 = new Ship3(0.0, 0.0, 1.0, 0.0, Ship1); 
Ship3 s2 = new Ship3(0.0, 0.0, 2.0, 135.0, Ship2); 
s1.move(); 
s2.move(); 
s1.printLocation(); 
s2.printLocation(); 
} 
}$ 
Dr. Shahid Raza! 19!
Constructor$Example:$Results$ 
• Compiling$and$Running: 
javac Test3.java 
java Test3 
• Output:$ 
Ship1 is at (1,0). 
Ship2 is at (-1.41421,1.41421). 
Dr. Shahid Raza! 20!
Example$3:$Major$Points$ 
• Format$of$constructor$defini?ons$ 
• The$this$reference$ 
• Destructors$(not!)$ 
Dr. Shahid Raza! 21!
Constructors$ 
• Constructors$are$special$func?ons$called$when$a$class$is$ 
created$with$new$ 
– Constructors$are$especially$useful$for$supplying$values$of$fields$ 
– Constructors$are$declared$through:$ 
public ClassName(args) { 
... 
} 
– No?ce$that$the$constructor$name$must$exactly$match$the$class$ 
name$ 
– Constructors$have$no$return$type$(not$even$void),$unlike$a$ 
regular$method$ 
– Java$automa?cally$provides$a$zero.argument$only$if$the$class$doesnt$define$its$own$constcrouncstotrru$$ctor$if$and$ 
• Thats$why$you$could$say$ 
Ship1 s1 = new Ship1(); 
$$$in$the$first$example,$even$though$a$constructor$was$never$defined$ 
Dr. Shahid Raza! 22!
The$this$Variable$ 
• The$this$object$reference$can$be$used$inside$any$non.sta?c$ 
method$to$refer$to$the$current$object$ 
• The$common$uses$of$the$this$reference$are:$ 
1. To$pass$a$reference$to$the$current$object$as$a$parameter$to$other$ 
methods$ 
someMethod(this); 
2. To$resolve$name$conflicts$ 
• Using$this$permits$the$use$of$instance$variables$in$methods$that$ 
have$local$variables$with$the$same$name$ 
– Note$that$it$is$only$necessary$to$say$this.fieldName$when$you$ 
have$a$local$variable$and$a$class$field$with$the$same$name;$otherwise$ 
just$use$fieldName$with$no$this 
Dr. Shahid Raza! 23!
Destructors$ 
This Page Intentionally Left Blank 
Dr. Shahid Raza! 24!
Summary$ 
• Class$names$should$start$with$uppercase;$method$names$ 
with$lowercase$ 
• Methods$must$define$a$return$type$or$void$if$no$result$ 
is$returned$ 
• If$a$method$accepts$no$arguments,$the$arg.list$in$the$ 
method$declara?on$is$empty$instead$of$void$as$in$C$ 
• Sta?c$methods$do$not$require$an$instance$of$the$class;$ 
sta?c$methods$can$be$accessed$through$the$class$name$ 
• The$this$reference$in$a$class$refers$to$the$current$ 
object$$ 
• Class$constructors$do$not$declare$a$return$type$ 
• Java$performs$its$own$memory$management$and$ 
requires$no$destructors$ 
$$$ 
Dr. Shahid Raza! 25!

Java basics

  • 1.
  • 2.
    Three Java Editions • Java Platform, Standard Edition (Java SE) • Java Platform, Enterprise Edition (Java EE) • Java Platform, Micro Edition (Java ME) Lecture 2: Overview: Java Peculiarities 3
  • 3.
    The Java Platform,Standard Edition (Java SE) Lecture 2: Overview: Java Peculiarities 4
  • 4.
    Java Platform, EnterpriseEdition (Java EE) • Enterprise Application Technologies – Enterprise JavaBeans (EJB) – J2EE Connector Architecture – Java Message Service (JMS) • Web Application Technologies – Java Servlet – JavaServer Pages (JSP) – JavaServer Faces (JSF) – Java Persistence API (JSR) • Provides a POJO persistence model for object-relational mapping. Developed and use for EJB, but can be used directly – Java Transaction API (JTA) – JavaMail • Management and Security Technologies – J2EE Application Deployment – J2EE Management – Java Authorization Contract for Containers Lecture 2: Overview: Java Peculiarities 5
  • 5.
    Object.Oriented$Nomenclature$ • Class$means$a$category$of$things$ – A$class$name$can$be$used$in$Java$as$the$type$of$a$field$or$ local$variable$or$as$the$return$type$of$a$func?on$(method)$ • Object$means$a$par?cular$item$that$belongs$to$a$ class$ – Also$called$an$instance$ • For$example,$consider$the$following$line:$ $ $$ $$$$String s1 = Hello;$ – Here,$String$is$the$class,$s1$is$an$instance$variable$of$class$ String,$whose$value$is$the$String$object$Hello$$ Dr. Shahid Raza! 2!
  • 6.
    Example$1:$Instance$Variables$ (Fields$or$Data$Members)$ classShip1 { public double x, y, speed, direction; public String name; } public class Test1 { public static void main(String[] args) { Ship1 s1 = new Ship1(); s1.x = 0.0; s1.y = 0.0; s1.speed = 1.0; s1.direction = 0.0; // East s1.name = Ship1; System.out.println(s1.name + is initially at ( + s1.x + , + s1.y + ).); s1.x = s1.x + s1.speed * Math.cos(s1.direction * Math.PI / 180.0); s1.y = s1.y + s1.speed * Math.sin(s1.direction * Math.PI / 180.0); System.out.println(s1.name + has moved to ( + s1.x + , + s1.y + ).); } } Dr. Shahid Raza! 3!
  • 7.
    Instance$Variables:$Results$ • Compiling$and$Running:$ javac Test1.java java Test1 Output:$ Ship1 is initially at (1,0). Ship2 has moved to (-1.41421,1.41421). Dr. Shahid Raza! 4!
  • 8.
    Primitive Data Types • Much like in C – byte – short – char Lecture 2: Overview: Java Peculiarities 21 – int – long – float – double • See Examples in Exercise 0.
  • 9.
    Widening Primitive Conversions • Do not lose information about the overall magnitude of a numeric value. From To byte short, int, long, float, double short int, long, float, double char int, long, float, double int long, float, double long float, double float double Lecture 2: Overview: Java Peculiarities 22
  • 10.
    Narrowing Primitive Conversions • May lose information about the overall magnitude of a numeric value and may also lose precision. From To byte char short byte, char char byte, short int byte, short, char long byte, short, char, int float byte, short, char, int, long double byte, short, char, int, long, float Lecture 2: Overview: Java Peculiarities 23
  • 11.
    Example$1:$Major$Points$ • Java$naming$conven?on$ • Format$of$class$defini?ons$ • Crea?ng$classes$with$new$ • Accessing$fields$with$ variableName.fieldName$ Dr. Shahid Raza! 5!
  • 12.
    Java$Naming$Conven?ons$ • Leading$uppercase$leTer$in$class$name$ public class MyClass { ... } • Leading$lowercase$leTer$in$field,$local$ variable,$and$method$(func?on)$names$ – myField,myVar,myMethod Dr. Shahid Raza! 6!
  • 13.
    First$Look$at$Java$Classes$ • The$general$form$of$a$simple$class$is$ modifier class Classname { modifier data-type field1; modifier data-type field2; ... modifier data-type fieldN; modifier Return-Type methodName1(parameters) { //statements } ... modifier Return-Type methodName2(parameters) { //statements } } Dr. Shahid Raza! 7!
  • 14.
    Objects$and$References$ • Once$a$class$is$defined,$you$can$easily$declare$a$ variable$(object$reference)$of$the$class$ Ship s1, s2; Point start; Color blue; • Object$references$are$ini?ally$null$$$ – The$null$value$is$a$dis?nct$type$in$Java$and$should$ not$be$considered$equal$to$zero$$ – A$primi?ve$data$type$cannot$be$cast$to$an$object$(use$ wrapper$classes)$ • The$new$operator$is$required$to$explicitly$create$ the$object$that$is$referenced$ ClassName variableName = new ClassName();$ Dr. Shahid Raza! 8!
  • 15.
    Accessing$Instance$Variables$ • Use$a$dot$between$the$variable$name$and$the$field$ name,$as$follows:$ variableName.fieldName$$ • For$example,$Java$has$a$built.in$class$called$Point$that$ has$x$and$y$fields$ Point p = new Point(2, 3); // Build a Point object int xSquared = p.x * p.x; // xSquared is 4 p.x = 7; • One$major$excep?on$applies$to$the$access$fields$ through$varName.fieldName$rule$ – Methods$can$access$fields$of$current$object$without$varName$ – This$will$be$explained$when$methods$(func?ons)$are$discussed$ Dr. Shahid Raza! 9!
  • 16.
    Example$2:$Methods$ class Ship2{ public double x=0.0, y=0.0, speed=1.0, direction=0.0; public String name = UnnamedShip; private double degreesToRadians(double degrees) { return(degrees * Math.PI / 180.0); } public void move() { double angle = degreesToRadians(direction); x = x + speed * Math.cos(angle); y = y + speed * Math.sin(angle); } public void printLocation() { System.out.println(name + is at ( + x + , + y + ).); } } Dr. Shahid Raza! 10!
  • 17.
    Methods$(Con?nued)$ public classTest2 { public static void main(String[] args) { Ship2 s1 = new Ship2(); s1.name = Ship1; Ship2 s2 = new Ship2(); s2.direction = 135.0; // Northwest s2.speed = 2.0; s2.name = Ship2; s1.move(); s2.move(); s1.printLocation(); s2.printLocation(); } } • Compiling$and$Running:$ javac Test2.java java Test2 • Output:$ Ship1 is at (1,0). Ship2 is at (-1.41421,1.41421). Dr. Shahid Raza! 11!
  • 18.
    Example$2:$Major$Points$ • Format$of$method$defini?ons$ • Methods$that$access$local$fields$ • Calling$methods$ • Sta?c$methods$ • Default$values$for$fields$ • public/private$dis?nc?on$ Dr. Shahid Raza! 12!
  • 19.
    Defining$Methods$ (Func?ons$Inside$Classes)$ •Basic$method$declara?on:$ p u b l i c R e t u r n T y p e m e t h o d N a m e ( ttyyppee12 aarrgg12,, ...) { ... return(something of ReturnType); } • Excep?on$to$this$format:$if$you$declare$the$return$ type$as$void – This$special$syntax$that$means$this$method$isnt$ going$to$return$a$value$–$it$is$just$going$to$do$some$ side$effect$like$prin?ng$on$the$screen$$ – In$such$a$case$you$do$not$need$(in$fact,$are$not$ permiTed),$a$return$statement$that$includes$a$ value$to$be$returned$ Dr. Shahid Raza! 13!
  • 20.
    Examples$of$Defining$Methods$ • Here$are$two$examples:$ – The$first$squares$an$integer$$ – The$second$returns$the$faster$of$two$Ship$objects,$assuming$that$a$ class$called$Ship$has$been$defined$that$has$a$field$named$speed$$ // Example function call: // int val = square(7); public int square(int x) { return(x*x); } // Example function call: // Ship faster = fasterShip(someShip, someOtherShip); public Ship fasterShip(Ship ship1, Ship ship2) { if (ship1.speed ship2.speed) { return(ship1); } else { return(ship2); } }$ Dr. Shahid Raza! 14!
  • 21.
    Excep?on$to$the$Field$Access$with$ Dots$Rule$ •Normally$access$a$field$via: variableName.fieldName $ $ but$an$excep?on$is$when$a$method$of$a$class$wants$to$access$ fields$of$that$same$class$$ – In$that$case,$omit$the$variable$name$and$the$dot$ – For$example,$a$move$method$within$the$Ship$class$might$do:$ public void move() { x = x + speed * Math.cos(direction); ... } • Here,$x,$speed,$and$direction$are$all$fields$within$the$class$that$ the$move$method$belongs$to,$so$move$can$refer$to$the$fields$directly$ $ – As$well$see$later,$you$s?ll$can$use$the$variableName.fieldName$ approach,$and$Java$invents$a$variable$called$this$that$can$be$used$for$ that$purpose$ Dr. Shahid Raza! 15!
  • 22.
    Sta?c$Methods$ • Sta?c$func?ons$are$like$global$func?ons$in$other$ languages$ $ • You$can$call$a$sta?c$method$through$the$class$name$ ClassName.functionName(arguments); – For$example,$the$Math$class$has$a$sta?c$method$called$cos$ that$expects$a$double$precision$number$as$an$argument$ • So$you$can$call$Math.cos(3.5)$without$ever$having$any$object$ (instance)$of$the$Math$class$ Dr. Shahid Raza! 16!
  • 23.
    Method$Visibility$ • public/private$dis?nc?on$ – A$declara?on$of$private$means$that$outside$methods$ cant$call$it$..$only$methods$within$the$same$class$can$ • Thus,$for$example,$the$main$method$of$the$Test2$class$could$ not$have$done$$ double x = s1.degreesToRadians(2.2); – ATemp?ng$to$do$so$would$have$resulted$in$an$error$at$compile$?me$$ – Only$say$public$for$methods$that$you$want%to%guarantee% your%class%will%make%available%to%users$$ – You$are$free$to$change$or$eliminate$private$methods$ without$telling$users$of$your$class$about$ $$$ Dr. Shahid Raza! 17!
  • 24.
    Example$3:$Constructors$ class Ship3{ public double x, y, speed, direction; public String name; public Ship3(double x, double y, double speed, double direction, String name) { this.x = x; // this differentiates instance vars this.y = y; // from local vars. this.speed = speed; this.direction = direction; this.name = name; } private double degreesToRadians(double degrees) { return(degrees * Math.PI / 180.0); } ... Dr. Shahid Raza! 18!
  • 25.
    Constructors$(Con?nued)$ public voidmove() { double angle = degreesToRadians(direction); x = x + speed * Math.cos(angle); y = y + speed * Math.sin(angle); } public void printLocation() { System.out.println(name + is at ( + x + , + y + ).); } } public class Test3 { public static void main(String[] args) { Ship3 s1 = new Ship3(0.0, 0.0, 1.0, 0.0, Ship1); Ship3 s2 = new Ship3(0.0, 0.0, 2.0, 135.0, Ship2); s1.move(); s2.move(); s1.printLocation(); s2.printLocation(); } }$ Dr. Shahid Raza! 19!
  • 26.
    Constructor$Example:$Results$ • Compiling$and$Running: javac Test3.java java Test3 • Output:$ Ship1 is at (1,0). Ship2 is at (-1.41421,1.41421). Dr. Shahid Raza! 20!
  • 27.
    Example$3:$Major$Points$ • Format$of$constructor$defini?ons$ • The$this$reference$ • Destructors$(not!)$ Dr. Shahid Raza! 21!
  • 28.
    Constructors$ • Constructors$are$special$func?ons$called$when$a$class$is$ created$with$new$ – Constructors$are$especially$useful$for$supplying$values$of$fields$ – Constructors$are$declared$through:$ public ClassName(args) { ... } – No?ce$that$the$constructor$name$must$exactly$match$the$class$ name$ – Constructors$have$no$return$type$(not$even$void),$unlike$a$ regular$method$ – Java$automa?cally$provides$a$zero.argument$only$if$the$class$doesnt$define$its$own$constcrouncstotrru$$ctor$if$and$ • Thats$why$you$could$say$ Ship1 s1 = new Ship1(); $$$in$the$first$example,$even$though$a$constructor$was$never$defined$ Dr. Shahid Raza! 22!
  • 29.
    The$this$Variable$ • The$this$object$reference$can$be$used$inside$any$non.sta?c$ method$to$refer$to$the$current$object$ • The$common$uses$of$the$this$reference$are:$ 1. To$pass$a$reference$to$the$current$object$as$a$parameter$to$other$ methods$ someMethod(this); 2. To$resolve$name$conflicts$ • Using$this$permits$the$use$of$instance$variables$in$methods$that$ have$local$variables$with$the$same$name$ – Note$that$it$is$only$necessary$to$say$this.fieldName$when$you$ have$a$local$variable$and$a$class$field$with$the$same$name;$otherwise$ just$use$fieldName$with$no$this Dr. Shahid Raza! 23!
  • 30.
    Destructors$ This PageIntentionally Left Blank Dr. Shahid Raza! 24!
  • 31.
    Summary$ • Class$names$should$start$with$uppercase;$method$names$ with$lowercase$ • Methods$must$define$a$return$type$or$void$if$no$result$ is$returned$ • If$a$method$accepts$no$arguments,$the$arg.list$in$the$ method$declara?on$is$empty$instead$of$void$as$in$C$ • Sta?c$methods$do$not$require$an$instance$of$the$class;$ sta?c$methods$can$be$accessed$through$the$class$name$ • The$this$reference$in$a$class$refers$to$the$current$ object$$ • Class$constructors$do$not$declare$a$return$type$ • Java$performs$its$own$memory$management$and$ requires$no$destructors$ $$$ Dr. Shahid Raza! 25!