(remedial) Java - lri.franab/teaching/remedialJava/Session-1.pdf · Remedial Java - Basics 20/08/18...

31
Remedial Java - Basics 20/08/18 Anastasia Bezerianos 1 (remedial) Java [email protected] Remedial Java class ! Objective: ! Cover the fundamentals of the Java programming language. ! Designed for students with some programming experience, but … ! Practical info: contact Anastasia by email, using [RJ] in the title www.lri.fr/~anab/teaching/remedial-java/ ! 6 sessions of 3h (theory + practice): ! Language basics (Mon 4/9, am) ! Object oriented programming (Mon 4/9 pm) ! Inheritance (Tue 5/9 am) ! Packages and Exceptions (Tue 5/9 am) ! Independent work (Wed 6/9 – no class) ! I/O (Thu 7/9 am) ! 7/9 pm: undecided for now, either exercises or Threads (parallel)

Transcript of (remedial) Java - lri.franab/teaching/remedialJava/Session-1.pdf · Remedial Java - Basics 20/08/18...

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 1

(remedial)Java

[email protected]

RemedialJavaclass!  Objective:

!  CoverthefundamentalsoftheJavaprogramminglanguage.!  Designedforstudentswithsomeprogrammingexperience,but…

!  Practicalinfo: contactAnastasiabyemail,using[RJ]inthetitle www.lri.fr/~anab/teaching/remedial-java/

!  6sessionsof3h(theory+practice):!  Languagebasics(Mon4/9,am)!  Objectorientedprogramming(Mon4/9pm)!  Inheritance(Tue5/9am)!  PackagesandExceptions(Tue5/9am)!  Independentwork(Wed6/9–noclass)!  I/O(Thu7/9am)!  7/9pm:undecidedfornow,eitherexercisesorThreads(parallel)

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 2

Java! Multi-platform“Pure”object-orientedlanguageandapplicationruntimeenvironment

!  LanguagesyntaxbasedonC/C++tobefamiliar! withsimplifications:nounsignedvalues,pointers,…! developersnotresponsibleformemorymanagement

!  Pureobject-orientedlanguage:! buildfromthegroundupwithOOPdesigninmind! programsarecompletelyconstructedwithobjects(asopposedtoBolt-onlanguages,likeC++,whereOOstructuresareanenhancementtothelanguage,andthereisamixofproceduralandOO)

Javabasics

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 3

Java! Multi-platform“Pure”object-orientedlanguageandapplicationruntimeenvironment

!  LanguagesyntaxbasedonC/C++tobefamiliar! withsimplifications:nounsignedvalues,pointers,…! developersnotresponsibleformemorymanagement

!  Pureobject-orientedlanguage:! buildfromthegroundupwithOOPdesigninmind! programsarecompletelyconstructedwithobjects(asopposedtoBolt-onlanguages,likeC++,whereOOstructuresareanenhancementtothelanguage,andthereisamixofproceduralandOO)

JavaandJVM! CodeinJavadoesnotcompiletomachinecodedirectly,buttoaspecifictypeofBytecode! Bytecodeexecutableonanyarchitecture! Writeonce,runanywhere(WORA)

!  JavabytecoderunsthroughaJavaVirtualMachine(JVM),achievingcross-platformsupport

! DifferentplatformshavetheirimplementationoftheJVM(includedintheJavaRuntimeEnvironmentsJRE).TheJavaDevelopmentKit(JDK)alsoincludestheJavaJRE.

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 4

ThecostofWORA! ExecutiontimeslowerthatC/C++

! costofrunningbytecodeonJVM

! newerimplementationstrytoimprovethis

! Programs(particularlyapplets)runverybuggyandtendtocrash! again,improvementsovertime

! Completecross-platformnotaseasyasimplied…

JavaandJavaScript! Notrelated!!!

! Differentdevelopers(Java:SunnowOracle,JavaScript:Netscape)

! Namemaybeamarketingploy(JSoriginallynamedLiveScript)

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 5

CompilingJava

Sourcecode(.java)

javacBytecode(.class)

java

JavaArchieve(.jar)

FirstJavaprogramInasimpletexteditor(Notepad,TextEdit,Emacs)writethefollowingandsaveinHelloWorld.java

class HelloWorld {

public static void main (String[] arguments){

System.out.println("Hello World !");

}}

Thisisaclassdeclaration,moreonthatlater.Mainmethod:entrypointtotheprogram(public+static)andneedstobeinsideaclass

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 6

FirstJavaprogramInasimpletexteditor(Notepad,TextEdit,Emacs)writethefollowingandsaveinHelloWorld.java

class HelloWorld {

public static void main (String[] arguments){

System.out.println("Hello World !");

}}

Systemisaclass,thatcallsoutthatrepresentsthestdout(hereoutputtoconsole).Methodprintlnprintsthetextargument,andaddsanewlinecharacter.

FirstJavaprogramInasimpletexteditor(Notepad,TextEdit,Emacs)writethefollowingandsaveinHelloWorld.java

class HelloWorld {

public static void main (String[] arguments){

System.out.println("Hello World !");

}}

Letscompileandrunit!

>javacHelloWorld.java>javaHelloWorld

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 7

Programstructure

class CLASSNAME {

public static void main (String[] arguments){

STATEMENTS// comments

}}

MainfunctionisneededtorunaprogramItisalwaysinsideaclassItisalwayspublicstatic

Let’smovetoourIDE!  RunEclipse,andFile→New→JavaProject

!  Nameyourproject:RemedialJavaandclickfinish

!  SelectinthePackageExploreryourprojectRemedialJava,andFile→New→Package!  Nameyourpackage: session1.introduction

!  Finally,selectyourpackageinthePackageExplorer, File→New→JavaClass

!  NameyourclassHelloWorld

!  CopypastethecodefromHelloWoldexample

!  Project→BuildandRun→Runyourcode(orselecttheHelloWorldclassandRun→RunAs→JavaApplication)

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 8

Types! Asinallprogramminglanguages,Javahassomebasictypes,thekindsofvaluesthatcanbestoredandmanipulated:

boolean:Truthvalue(trueorfalse).

int:Integer(0,1,-30).

double:Realnumber(3.14,2.0,-4.1).

String:Text(“hello”,“cat”).

Variables! Variable:locationthatstoresavalueofatype.

Theformis:TYPENAME;

e.g., String cat;

! Weuse=tomakevariableassignments.e.g., String cat;

cat = “Garfield”;

! Cancombinedeclarationandassignmente.g., String cat = “Garfield”;

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 9

VariablesofdifferentTypes! example

class HelloWorld {

public static void main (String[] arguments){

System.out.println("Hello World !");

String cat = "Garfield";int age = 3;

System.out.println("My cat is " + cat + ” and he is " + age);

}}

Operators! Symbols:

Assignment:=

Operators:+,-,*,/,% Combined:+=,-=,*=,/=

! Ordering: 1.lefttoright,()increase precedence

2.multiplication/division

3.addition/substraction class SomeMath {

public static void main (String[] arguments){double calculate = 1.0 + 2.0 * 3.0;// different from (1.0 + 2.0) * 3.0 System.out.println(calculate); calculate = calculate * 2.0;// calculate *= 2.0; would work too

System.out.println(calculate); }

}

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 10

Division! Division(“/”)operatesdifferentlyonintegersanddoubles

Example

double a = 5.0/2.0; // a = 2.5

int b = 4/2; // b = 2 int c = 5/2; // c = 2double d = 5/2; // d = 2.0

types!  Javaverifiesthattypesmatch:

Stringfive=5;//ERROR!

! Canconverttypesbycastingint a = 2; // a = 2 double a = 2; // a = 2.0 (Implicit)

int a = 18.7; // ERROR int a = (int)18.7; // a = 18

double a = 2/3; // a = 0.0

double a = (double)2/3; // a = 0.6666...

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 11

Stringconcatenation! BasicconcatenationString text = "hello" + " world,";

text = text + " times " + 6; // text = "hello world, times 6"

! Canalsocreateformattedstrings

String text = String.format(”Printing a string variable %s, and an integer one %d”,

stringVar, intVar);

! Tocheckequality:string1.equals(string2)! Manymethodsavailable!!!

Exercise1www.lri.fr/~anab/teaching/remedialJava/ex-session1.pdf

Reminder:!  Types(boolean,int,double,String)!  Operators+,-,*,/,%!  Assignment=,+=,*=,-=,/=!  StandardoutputSystem.out.println(“some text”);

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 12

! Amethodissimilartoafunction! Asectionofaprogramthatisgivenaname,andthatthatperformsaspecifictask

!  Itmaytakesomeinputparametersandmayreturnavalue

!  Itcanbecalledfromelsewhereintheprogramtobeexecuted

Methods

Methods

public static void main(String[] arguments){System.out.println(“hi”);

}

public static void NAME (TYPENAME) {STATEMENTS;

}

Tocallamethod: NAME (EXPRESSION);

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 13

Methodsexample(1)

class Square {

public static void printSquare (int x) {System.out.println (x * x);

}

public static void main(String[] arguments){int value = 2;printSquare (value);printSquare(value*2); printSquare(3);

}}

Methodsexample(2)

class Square {

public static void printSquare (int x) {System.out.println (x * x);

}

public static void main(String[] arguments){printSquare ("HelloWorld");printSquare(5.5);

}}

Whatiswronghere?

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 14

Methodsexample(3)

class Square {

public static void printSquare (double x) {System.out.println (x * x);

}

public static void main(String[] arguments){printSquare(5);

}}

Whatiswronghere?

Methodsexample(4)

class Square {

public static void printSquare (double x) {System.out.println (x * x);

}public static void printSquare (String x) {

System.out.println (x + x);}

public static void main(String[] arguments){printSquare(5.0);printSquare("Hello");

}}

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 15

Methodsexample(4)

class Square {

public static void printSquare (double x) {System.out.println (x * x);

}public static void printSquare (String x) {

System.out.println (x + x);}

public static void main(String[] arguments){printSquare(5.0);printSquare("Hello");

}}

Methodoverloading:aclasscanhavetwoormoremethodshavingsamename,iftheirargumentlistsaredifferent.

Methodreturnvalues

public static TYPE NAME (TYPENAME,TYPENAME,…) {STATEMENTS;return EXPRESSION;

}

!  voidmeans“notype”,ienothingreturned

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 16

Methodsexample(5)

class Square {

public static double square (double x) {return x * x;

}

public static void main(String[] arguments){System.out.println( square(5) );

}}

VariableScope

!  Variablesliveintheblock{}wheretheyaredefined(scope)

! Methodinputparametersarelikedefininganewvariableinthemethod

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 17

Variablescopeexample(1)

class SquareChange {

public static void printSquare(int x) {System.out.println("printSquare x = " + x); x = x * x; System.out.println("printSquare x = " + x);

}

public static void main(String[] arguments) { int x = 5; System.out.println("main x = " + x); printSquare(x); System.out.println("main x = " + x);

} }

Note:thisisforbasictypes…

Methods

Youshouldknowthis,butrepetitionisgood☺

!  Bigprogramsarebuiltoutofsmallmethods

! Methodscanbeindividuallydeveloped,testedandreused

!  Theuserofmethoddoesnotneedtoknowhowitworks(thisiscalled“abstraction”)

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 18

Conditionals

if(CONDITION){ STATEMENTS

}

if(CONDITION){ STATEMENTS1

}else{ STATEMENTS2

}

if(CONDITION){ STATEMENTS1

}elseif(CONDITION){ STATEMENTS2

}elseif(CONDITION){

STATEMENTS3}else{

STATEMENTS4}

Conditions…

Areacombinationof:

!  Comparisonoperators: x>y,x>=y :xisgreaterthany,xisgreaterorequaltoyx<y,x<=y :xislessthany,xislessthanorequaltoy

x==y :xequalsy(equality:==,assignment:=) (NOTforStrings,nonbasictypesordoubles)

!  Booleanoperators:&& :logicalAND

|| :logicalOR! :logicalNOT

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 19

Conditions…

!  Comparisonoperators:!  Donotcall==forString

Stringisanobject,soJavawilllookatitsmemory(morelater)

Insteaduseequals(e.g.,s1.equals(s2))

!  Donotcall==fordoubles double a = Math.cos (Math.PI / 2);

double b = 0.0; a=6.123233995736766E-17

a == b willreturnFALSE

useMath.abs(a-b)<somethingSmall

ConditionalSwitch…switch(variable){

casevalue1: STATEMENTS

break; casevalue2:

STATEMENTS

break; …

default: STATEMENTS

break;}

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 20

Exercise2www.lri.fr/~anab/teaching/remedialJava/ex-session1.pdf

Reminder:!  if(cond){ }elseif(cond){ }else{ }

!  Conditionoperators:x>y,x>=y,x<y,x<=y,x==y!  Booleanoperators:&&(AND),||(OR),!(NOT)

Loops(1)

while(CONDITION){ do{ STATEMENTS STATEMENTS

} }while(CONDITION)

int i = 0; while (i < 3) {

System.out.println(“Counting #“ + i);i += 1;

}

! Makesurethatyourloophasachancetofinish (especiallyifyoucannotcounta-priori)

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 21

Loops(2)

for(intialization;CONDITION;update){ STATEMENTS

}

for(int i = 0; i < 5; i=i+1) {System.out.println(“Counting #“ + i);

}

!  Note:i=i+1maybereplacedbyi++(or++i)

Loops(3)

Embededloopsfor(int i = 0; i < 5; i=i+1) {

for (int j = 0; j < 7; j=j+1) {System.out.println(i + “ “ + j);

} }

!  Scopeofvariablesdefinedinsideloopexistintherespectiveforblock

!  Scopeoftheiteratingvariable(e.g.,i,j)definedintheinitialization(alsoexistintherespectiveforblock)

! 

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 22

Loops(4)Jumpingloops(brunchingstatements):! Youcanterminatealoopbyusingbreak,thiswillmovetothefirstinstructionaftertheloop

! Youcanskipthecurrentiterationofaloopusingcontinue,whichmovesyoutothenextiterationfor(int i = 0; i < 5; i=i+1) {

for (int j = 0; j < 7; j=j+1) {if (j == 3) continue; // go to j 4if (j == 5) break; // stop the inner loop System.out.println(i + “ “ + j);

} }

Exercise3www.lri.fr/~anab/teaching/remedialJava/ex-session1.pdf

Reminder:!  for(i=1;i<=10;++i){…}!  doublea=(double)1/2;

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 23

Javabasics,Arrays

Arrays

! Anarrayisanindexedlistofvalues.! Youcanmakeanarrayofanytype

! int,double,String,etc.

! Allelementsofanarraymusthavethesametype.

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 24

Arrays

Arrays

Example:double[]

5.0 1.5 2.33 0.0 -3.1

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 25

Arrays

! Theindexstartsatzeroandendsatlength-1.Example:int[] values = new int[5]; values[0] = 1; // CORRECT values[3] = 1; // CORRECT values[5] = 1; // WRONG!! compiles but

// throws an Exception // at run-time

Arrays

! AnarrayisdefinedasTYPE[].! Theyarethemselvesjustanothertype(moreadvanced)

int[] values; // array of int

int[][] values; // array of int[] // (array of arrays)

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 26

Arrays

! Arraysofaspecificsizecreatedusingnew:

! Orusingavariable:

! Orusing{}toinitializethearrayvalues.Thiscanonlybeusedinthearraydeclaration:

int arraySize = 5;int[] values = new int[arraySize];

int[] values = new int[5];

int[] values = {2, 5, 3, 6, 6};

ArrayAccess

! Youcanaccesselementsinthearraywith

Example:int[] values = {2, 5, 3, 6, 6};values[2] = 12; // assign value at position 2

// {2,5,12,6,6}int x = values[3]/2; // read value at pos 3

// {2,5,3,6,6}

arrayName[index]

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 27

ArrayAccess

! Arrayshavealengthvariablebuild-inExample:int[] values = new int[5]; int arraySize = values.length; // 5

int[] values2 = {2, 5, 3, 6, 6};int arraySize2 = values2.length; // 5

public static void main (String[] arguments){if(arguments.lengh > 0)

System.out.println(“Passed ” + arguments.length + “ arguments”);

}

LoopingoverArrays

int[] values = {2, 5, 3, 6, 6};for (int i=0; i<values.length; ++i)

values[i]= values[i]*values[i];

int[] values2 = new int[5];int i = 0;while (i < values2.length){

values[i] = i;++i;

}

Examples:

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 28

Exercise5www.lri.fr/~anab/teaching/remedial-java/ex-session1.pdfReminders/aid:int[] values = {2, 5, 3, 6, 6};int[] values = new int[SIZE];

array[index]accessesvalueatindexposition,withindexstartingat0

array.lengthgivesthearraysize

for(intialization;CONDITION;update){ STATEMENTS}YoucangetthemaxpossibleinwithInteger.MAX_VALUE;

Commonproblems

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 29

Commonproblems(1)

! ArrayIndexvsArrayValue

! Curlybraces{…}afterif/else,while/for

Output?

int[] values = {2, 5, 3, 6, 6};System.out.println(values[0]); // 2

for (int i = 0; i < 5; i++) System.out.println(“Hi”); System.out.println(“Bye”);

Commonproblems(2)

! Variableinitialization

Whatifvals={1,2,3}?

Setmin = Integer.MAX_VALUE orvals[0]

int getMinValue(int[] vals) { int min = 0; for (int i = 0; i < vals.length; i++) {

if (vals[i] < min) { min = vals[i];

}}

}

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 30

Commonproblems(2)

! Definingmethodwithinmethod

! Generalcomment:! UseSystem.out.printlnthroughoutyourcode

public static void main (String[] args) { public static void foo (){

…}

}

(aside,inourIDE)!  Ctrl-Shift-L:showlistofkeyboardshortcuts!  Ctrl-S:save!  Ctrl-Shift-F:alignscode!  Ctrl-O:opensanautocompletewindowtojumptoamember

definitionforallmembersoftheopentype

!  Ctrl-Shift-O:organizeimportsautomatically

!  Ctrl-Shift-T:opensawindowtoopenatypeviaautocompletion!  Ctrl-Shift-R:opensanautocompletewindowforresources(files)

!  F3:jumptodefinition

(OnaMac,replaceCtrlabovewithCmd.)

RemedialJava-Basics 20/08/18

AnastasiaBezerianos 31

JavaresourcesManyresourcesonline…

https://docs.oracle.com/javase/tutorial/tutorialLearningPaths.html

«ThinkinginJava»byBruceEckel(olderversionsofthebookavailableonline)

Exercises4,6,7

Homework(togetherwithanythingelseyoudidnotfinishinclass)

www.lri.fr/~anab/teaching/remedial-java/ex-session1.pdf