FreeWebinars,Videos,andLiveTrainingMr.Jonesplanstohavefreestep-by-stepdemonstrationwebinars,videos,andlivetrainingswalkingpeoplethroughconceptsofSeleniumandQTP/UFTfromA-Z.Thematerialwillteach/trainindividualsthefundamentalsoftheprogramminglanguage,fundamentalsofSeleniumandQTP/UFT,andimportantconceptsofSeleniumandQTP/UFT.Allofthewebinars,videos,andlivetrainingwillbedirectedtowardbeginnersaswellasmid-levelautomationengineers.
SignUptoReceive
1. 3TipsToMasterSeleniumWithin30Dayshttp://tinyurl.com/3-Tips-For-Selenium
2. 3TipsToMasterQTP/UFTWithin30Dayshttp://tinyurl.com/3-Tips-For-QTP-UFT
3. FreeWebinars,Videos,andLiveTrainingshttp://tinyurl.com/Free-QTP-UFT-Selenium
RexJones’ContactInformationEmailAddress:[email protected]:https://www.linkedin.com/in/rexjones34Books:http://tinyurl.com/Rex-Allen-Jones-BooksTwitter:@RexJonesIISkype:rex.jones34
TableofContentsFREEWEBINARS,VIDEOS,ANDLIVETRAINING
REXJONES’CONTACTINFORMATION
TABLEOFCONTENTS
PREFACE
ABOUTTHEAUTHOR
COPYRIGHT,LEGALNOTICE,ANDDISCLAIMER
ACKNOWLEDGEMENTS
CHAPTER1INTRODUCTIONTOOBJECT-ORIENTEDPROGRAMMING
CLASSES,OBJECTS,ANDMETHODS
ARRAYSANDSTRINGS
INHERITANCE
PACKAGES
INTERFACES
ERRORS,EXCEPTIONS,ANDDEBUGGING
UTILIZINGINPUTANDOUTPUT
CHAPTER2CLASSES,OBJECTS,ANDMETHODS
CLASSES
OBJECTS
METHODS
THISKEYWORD
ANNOTATIONS
ACCESSMODIFIERS
STATICKEYWORD
CHAPTER3ARRAYSANDSTRINGS
SINGLE-DIMENSIONALARRAYS
MULTI-DIMENSIONALARRAYS
FOR-EACHLOOP
STRINGS
CHAPTER4INHERITANCE
FUNDAMENTALSOFINHERITANCE
SUPERCLASSOBJECT
INHERITINGPRIVATEMEMBERS
SUPERCLASSANDSUBCLASSCONSTRUCTORS
POLYMORPHISM
ABSTRACTION
KEYWORDFINAL
CHAPTER5PACKAGES
CREATEAPACKAGE
IMPORTAPACKAGE
JAVACLASSLIBRARY
CHAPTER6INTERFACES
INTERFACEIMPLEMENTATION
INTERFACEVARIABLES
MULTIPLEINHERITANCE
DEFAULTINTERFACEMETHOD
CHAPTER7ERRORS,EXCEPTIONS,ANDDEBUGGING
ERRORTYPES
THROWABLEEXCEPTIONPARENTCLASS
JAVA’SBUILT-INEXCEPTIONS
COMMONEXCEPTIONS
PRINCIPLESOFHANDLINGEXCEPTIONS
TRY/CATCHBLOCK
FINALLYBLOCK
CATCHATHROWABLEEXCEPTION
METHODSDEFINEDBYTHROWABLE
THROWVSTHROWS
DEBUGGING
CHAPTER8UTILIZINGINPUTANDOUTPUT
STREAMS
FILEINPUT/OUTPUT
CONCLUSION
RESOURCES
BOOKSBYREXJONESII
SIGNUPTORECEIVE
PrefaceAccordingtoTIOBE,Javaisthemostpopularprogramminglanguagewithintheprogrammingcommunity.ThereforeJavaisagreatlanguagetolearnintheworldofautomatingapplications.AcoresetofJavaisnecessarytobeeffectiveonautomationprojects.Part2–Java4SeleniumWebDriverprovidesacoresetofJavaplusconceptsinvolvinginheritance,packages,andmuchmore.
TargetAudience
Thetargetaudienceisprogrammerswithknowledgeofvariables,datatypes,operators,branches,andloops.ItisrecommendedtoreadPart1–Java4SeleniumWebDriver,ifanindividualneedstogainafoundationinJava.
Purpose
Thepurposeofthisbookistonotoverwhelmyouwithhundredsandhundredsofpages(knownasinformationoverload)regardingJava.Howeveritwillprovidevaluableinformationthatisconcisewithstraightforwarddefinitions,examples,andfigures.AfterreadingPart2–Java4SeleniumWebDriver,athoroughunderstandingofJavaandobject-orientedprogrammingwillbeinyourpossession.
AbouttheAuthor
RexAllenJonesIIisaQA/SoftwareTesterwithapassionforsharingknowledgeabouttestingsoftware.Hehasbeenwatchingwebinars,attendingseminars,andtestingapplicationssinceFebruary2005.Mr.JonesgraduatedfromDeVryUniversityinJune1999withaBachelor’sofSciencedegreeinComputerInformationSystems(CIS).
Currently,RexisaSr.ConsultantandformerBoardofDirectorforUserGroup:Dallas/FortWorthMercuryUserGroup(DFWMUG)andmemberofUserGroup:Dallas/FortWorthQualityAssuranceAssociation(DFWQAA).InadditiontohisUserGroupmemberships,heisaCertifiedSoftwareTesterEngineer(CSTE)andhasaTestManagementApproach(TMap)certification.
Mr.Jones’adviceforpeopleinterestedinFunctionalAutomationTestingistolearntheprogramminglanguage.Thisadviceledhimtowritebooksfourprogrammingbooks“(Part1&Part2)YouMustLearnVBScriptforQTP/UFT”and“(Part1&Part2)Java4SeleniumWebDriver”.VBScriptistheprogramminglanguageforUnifiedFunctionalTesting(UFT)formerlyknownasQuickTestProfessional(QTP)andJavaisoneoftheprogramminglanguagesforSeleniumWebDriver.
Copyright,LegalNotice,andDisclaimerThispublicationisprotectedundertheUSCopyrightActof1976.Allrightsarereservedincludingresalerightswhichappliestointernational,federal,state,andlocallaws.Thepurchaserisnotallowedtoshareorsellthisbooktoanyone.
Pleasenotethatmuchofthispublicationisbasedonpersonalexperienceandanecdotalevidence.Theauthorhasmadeeveryreasonableattempttoproduceaccuratecontentinthisbook.Heassumesnoresponsibilityforunknownerrorsoromissions.Therefore,thepurchasershouldusethisinformationashe/sheseesfit.
Anytrademarks,servicemarks,productnamesornamedfeaturesareassumedtobethepropertyoftheirrespectiveownersandusedonlyforreference.
Copyright©2016Test4Success,LLC.Allrightsreservedworldwide.
AcknowledgementsIwouldliketoexpressmygratitudetomywifeTiffany,childrenOliviaRexe’andRexIII,editorSamanthaMann,family,friends,andthemanypeoplewhoprovidedencouragement.Writingthisbooktooktimeandyoursupporthelpedpushedthisbookforward.
ThankYou,
RexAllenJonesII
Chapter1IntroductiontoObject-Oriented
ProgrammingObject-OrientedProgramming(OOP)isthemostpopularparadigminprogramming.Itisanapproachtoprogrammingthatcentersaroundobjects.Asaresult,identifyingobjectsisoneofthemostessentialprinciplesinOOP.Accordingtodictionary.com,anobjectisanythingvisibleortangible.Thereforeobjectscanbeaperson,place,orthingwherebyitisrecognizedinprogrammingliketherealworld.Allobjectshavetwocharacteristics:stateandbehavior.Stateidentifiestheobjectandbehaviorrepresenttheactionsoftheobject.
Chapter1underlinesobject-orientedprogramming(OOP)byprovidinganoverviewofthisbook“Part2–Java4SeleniumWebDriver”:
Classes,Objects,andMethods
ArraysandStrings
Inheritance
Packages
Interfaces
Errors,Exceptions,andDebugging
UtilizingInputandOutput
Classes,Objects,andMethodsJavaisanobject-orientedprogramming(OOP)languagecontainingclasses,objects,andmethods(seeClasses,Objects,andMethodsinChapter2).Aclassisablueprintforcreatinganobjectandamethodexecuteajobfortheobject.Classesincludedataandcodethatoperateonthedata.ObjectsserveasthefoundationforOOPwhilemethodsperformactions.Amethod’sresponsibilityistoinstructtheprogramwhatactiontoperformandhowtoperformtheaction.
ArraysandStringsInJava,arraysandstringsareobjects(seeArraysandStringsinChapter3).Anarrayisagroupofrelatedvariableswiththesamedatatype,samename,andfixednumberofvalues.Allitemsinthearrayareaccessedbyanindexwhichstartsatzero.Ontheotherhand,astringisagroupofunchangeablecharacters.Manymethodsareavailableforstringsthatfacilitateanoperationontheobject.
InheritanceInheritanceisahierarchicalconceptwhichallowscodeandobjectstobereused(seeInheritanceinChapter4).Eachclassallowsotherclassestoinherititscode.Asaresult,therelationshipbetweentheclassesaresuperclassandsubclass.Superclassistheparentclassandsubclassisthechildclass.Theclassesmaintainacertainamountdataincommonwhileholdinguniquecharacteristics.
PackagesApackageisacollectionofrelatedclasses(seePackagesinChapter5).Thepackageiscomparabletoafolderandtheclassesaresimilartofileswithinthefolder.Eachclasswithinthepackagecanbeaccessedbythepackagename.Itisimportanttoknowthatapackagemustbeimportedifaclasswantstousemembersfromadifferentclass.
InterfacesAninterfaceisacollectionofrelatedmethods(seeInterfacesinChapter6).Generally,mostinterfacesdonotincludethebodyofamethod.Thereforeaninterfacemethodrevealswhatactiontoperformbutnothowtoperformtheaction.Thisconceptallowsaclasstoimplementtheinterfacemethodanddecidehowtoperformtheaction.Eachclasshastheabilitytoimplementadifferentactionforthesameinterfacemethod.
Errors,Exceptions,andDebuggingErrorsareunavoidableproblemsinaprogram.Newprogrammersaswellasexperiencedprogrammerswillfaceerrors.Syntax,runtime,andlogicalarethreetypesoferrorsinJava.Syntaxerrorsstopthecodefromexecutingwhileruntimeerrorsallowcodetoexecutethengenerateanerror.Logicalerrorsarethemostdifficulterrorstodetectduetonoerrormessageduringexecution.Theprogrammermustknowwhattoexpectinordertofindandresolvealogicalerror.
Anexceptionisanerrorthatisoccursatruntime.Thistypeoferrorcanbemanagedbyablockofcodecalledanexceptionhandler.Exceptionhandlersallowtheprogramtogenerateanerrorbutcontinueexecutingaftertheerror.Debuggingisaprocessthatallowsaprogrammertoobservethencorrectanerrorand/orexception.Atoolcalleddebuggersimplifiesthetaskofresolvingerrorsduetobreakpointsanditsstep-by-stepfeatures.
Note:SeeErrors,Exceptions,andDebugginginChapter7formoreinformation
UtilizingInputandOutputJava’sInputandOutput(I/O)isaverylargesystemconsistingofmanyclasses,interfaces,andmethods(seeUtilizingInputandOutputinChapter8).Informationisreadfromaninputsourceandwrittentoanoutputdestination.Theprogramsperforminputandoutputthroughstreamswherebystreamsrepresentdata.FilesinJavaarestoredandorganizedforconvenience.Mostofthefilesarestructuredinahierarchyknownasatree.Atthetopofeverytreeistherootnodewhichcontainsfoldersandfiles.Allfoldersandfileshaveadistinctivepathwithinthetree.Thefilescanbecreated,deleted,moved,copied,andverifiedforexistence.
Chapter1providedanoverviewoftheupcomingchapters.Thesubsequentchaptersexploreclasses,objects,methods,arrays,strings,inheritance,packages,interfaces,errors,exceptions,debugging,andJava’sinput/outputsystem.Chapter2willthoroughlyexplainclasses,objects,andmethodswhichisthecornerstoneofobject-orientedprogramming.
Chapter2Classes,Objects,andMethods
Object-orientedprogramming(OOP)isaprogramminglanguagestructuredaroundobjects.Classes,objects,andmethodsareinterrelatedfundamentalswithinOOP.Anobjectisanythingthatcanbeseenorperceived.However,aclassisatemplateforobjectswhileamethodsprovideinteractionwithaclassfromvariouscomponentsoftheprogram.
Thedataandthecode(knownasstatements)thatoperateonthedataaretwomergednotionsofanobject.Asaresult,thetwomergednotionsallowaconceptcalledinformationhidingwherebydatacanbehidden.Thereforebydefaultanobject’sdatacanbeaccessedonlybymethodsholdingtheobject.Thelimitedaccesspreventotherprogramcomponentsfrominterferingandcausingerrors.Ifanothercomponentwantstochangeanobject’sdatathenthecomponentmustcallapubliclyaccessiblemethod.Thefollowingarefourtypesofmethods:
1. Instance–Amethodthatcanbeaccessedbyobjects2. Class–Amethodsharedbetweenallobjectsinaclass3. Main–Aspecialmethodusedtorunanapplication.Thistypeofmethodisnot
neededforSeleniumWebDriver.4. Constructor–Aspecialmethodusedtoinitializeobjectsofaparticularclass
Methodsandvariablesarelabeledmembersofaclasssincetheyformtheclass.Accesstobothmembersarecontrolledbyfourmodifiers:
1. public–Amodifierthatallowsaccesstocodedefinedoutsideofitsclass2. private–Amodifierthatallowsaccesstoothermemberswithinitsclass3. nomodifier–Amodifierthatallowsaccesstoallclasseswithinitspackage4. protected–Amodifierthatallowsaccesswithinitspackageandtoallsubclasses
Usually,membersofaclassareaccessedbyobjectswithinitsownclass.However,thekeyword“static”permitsamembertobeaccessedbeforeanyobjectiscreatedwithinitsclass.Methodsandvariablesaredeclaredstaticwhenthekeywordisplacedinfrontofthemember.
Chaptertwowillexplainthefollowingregardingclasses,objects,andmethods:
Classes
Objects
Methods
ThisKeyword
Annotations
AccessModifiers
StaticKeyword
ClassesClassesdefinedataandcodethatoperatesonthedata.Thedataisrepresentedbyvariableswhilethecodeisrepresentedbymethods.Bothvariablesandmethodsaremembersofaclass.Henceaclassisatemplatethatdefinesthestructureofanobject.Thereforethestructureofaclassmustbeprecise.Classesformedwithonelogicalentitymakestheclasscomplete.Itisimportanttodefineclasseswithinformationthatislogicallyconnected.Forexample,aclassthatcontainsinformationaboutanEnglishclasswouldnotcontainunrelatedinformationabouttheschoolzonespeedlimit.
Mostreal-worldclassesincludeaninstancevariableandamethodtooperateontheinstancevariable.Rememberfromthefirstbook“(Part1)AbsoluteBeginner:Java4SeleniumWebDriver”aninstancevariableisdeclaredinsideaclassbutoutsideofamethod.Asaresult,valuesofaninstancevariableareuniquetoeachobject.Thistypeofvariablecanbeusedbeforeorafteritisinitializedwithvisibilitytoallmethodswithinaclass.Thefollowingisthesyntaxfordefiningaclass:
SyntaxclassClassName
{
//DeclareInstanceVariable
variableTypevariableName1;
variableTypevariableName2;
variableTypevariableNameN;
//DeclareMethods
methodTypemethodName1()
{
//BodyoftheMethod
}
methodTypemethodName2()
{
//BodyoftheMethod
}
methodTypemethodNameN()
{
//BodyoftheMethod
}
}
ThefollowingisanexampleofadataonlyclasscalledEnglishwhichstoresthreeinstancevariables:students,weeks,anddays.
classEnglish
{
intstudents;
intweeks;
intdays;
}
Figure2.1–DataOnlyClass
Line1definestheEnglishclassandlines3–5declaretheinstancevariables.Englishisaschoolcoursewhileinstancevariablestudentsrepresentthenumberofstudentsintheclass,weeksrepresentthenumberofweeksfortheEnglishcourse,anddaysrepresentthenumberofdaysperweek.Wheneveraclassisdefined,itisconsideredanewdatatype.Inthiscase,thenewdatatype“English”istheclassname.
Note:AconventionfornamingclassesistouseanUpperCamelCasewhereeachwordintheclassnamebeginswithacapitalletter(i.e.,EnglishCourse).
ObjectsObject-Orientedprogramming(OOP)isbuiltuponobjects.Thereforeitiscrucialtounderstandhowobjectsareformedandutilized.Anobjectcanbeanything.Allobjectssharetwocharacteristics:stateandbehavior.Stateidentifiestheobjectandbehaviorrepresenttheactionsoftheobject.Forexample,adoghasastate(name,breed,color)whichidentifiesthedogandbehavior(bark,jump,fetch)whichrepresentthedog’sactions.Thestateofanobjectissupportedbyvariableswhilebehaviorisimplementedthroughmethods.Objectsarecreatedusingthekeyword“new”.Thefollowingexampleillustrateshowtocreateanobjectandhowtoaccessinstancevariables:
classEnglish
{
intstudents;
intweeks;
intdays;
}
classOneEnglishCourse
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish();
inttotalDays;
ENG101.students=10;
ENG101.weeks=4;
ENG101.days=3;
totalDays=ENG101.weeks*ENG101.days;
System.out.println(“TheEnglish101courseisatotalof“+totalDays+”days”);
}
}
Figure2.2–CreateNewObjectandAccessInstanceVariables
ProgramOutput:TheEnglish101courseisatotalof12days
Line12createsanewobject( EnglishENG101=newEnglish(); )bycombiningtwosteps.AccordingtoJavaABeginner’sGuideSixthEdition(2014),thetwostepscombinedcanberewrittenlikethefollowingtoshoweachstepindividually(page106):
1. EnglishENG101;-TheleftsideoftheassignmentwhichdeclaresavariablecalledENG101ofclasstypeEnglish
2. ENG101=newEnglish();-TherightsideoftheassignmentwhichcreatesacopyoftheobjectandgiveENG101areferencetotheobject
ENG101isacreation(knownasinstance)ofEnglishaftercreatingthenewobject.Lines15–17assignvaluestotheinstancevariablesbyaccessingthevariablesusingthedot(.)operator.Thefollowingisthesyntaxforutilizingthedotoperator:
SyntaxobjectName.MemberName;
Thedotoperatorconnectsanobjectwithamember(instancevariableormethod).Inthisexample,anobjectname(ENG101)islocatedontheleftandtheinstancevariables(students,weeks,days)arelocatedontheright.Anobjectholditsowninstancevariablecopydefinedbytheclass.Therefore,ifmultipleobjectsexist,eachobjectcanholda
differentvaluethantheotherobject.Thefollowingexampleillustrateacreationoftwoobjects(ENG101andENG202):
classEnglish
{
intstudents;
intweeks;
intdays;
}
classTwoEnglishCourses
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish();
EnglishENG202=newEnglish();
inttotalDays101;
inttotalDays202;
ENG101.students=10;
ENG101.weeks=4;
ENG101.days=3;
ENG202.students=12;
ENG202.weeks=6;
ENG202.days=3;
totalDays101=ENG101.weeks*ENG101.days;
System.out.println(“TheEnglish101coursehas“+ENG101.students+”studentsandthecourselast“+totalDays101+”days”);
totalDays202=ENG202.weeks*ENG202.days;
System.out.println(“TheEnglish202coursehas“+ENG202.students+”studentsandthecourselast“+totalDays202+”days”);
}
}
Figure2.3–TwoObjectsCreated
ProgramOutput:TheEnglish101coursehas10studentsandthecourselast12days
TheEnglish202coursehas12studentsandthecourselast18days
Lines12and13createtwoobjects(ENG101andENG202)thenassignvaluestobothobjectsinlines18–24.Recall,ifmultipleobjectsexisttheneachobjectcanholdadifferentvaluethantheotherobject.Inthisexample,adifferentvalueisassignedtovariables“studentsandweeks”butvariable“days”containsthesamevalue“3”forbothobjects.
Note:TheconventionforvariablesarelowerCamelCasewhereeachwordinthevariablenamebeginswithacapitalletterexceptthefirstword.However,ENG101andENG202isanexceptionwhichcontainsallcapitallettersbecauseschoolcoursesnormallyhaveallcapitallettersbeforeanumberintheircoursename.
MethodsAmethodisablockofcodesurroundedbycurlybracketsthatperformaspecificaction/task.Thepurposeistomanipulateandprovideaccesstodatadefinedbytheclass.Inotherwords,amethodperformsactionsonthedata.Itisbestforallmethodstocarryoutasingletask.Forexample,agoodmethodwillonlyperformasingletaskofaddingnumbersbutnotaddingnumbersandsavingdatatoafile.Theprogrammaybecomedifficulttoreadandunderstandifamethodcarriesoutmorethanonetask.
Methodsconsistofaheaderandbody.Themethodheaderincludesamethodtypeandamethodname.TheconventionformethodnameissimilartoavariablenamewhichconsistofalowerCamelCasestyle.Eachwordbeginswithacapitalletterexceptthefirstword.Succeedingthemethodnameisarequiredpairofparenthesiswhichsetsapartvariablesfrommethods.Thefollowingisthesyntaxformethod:
SyntaxmethodTypemethodName(parameter-list)
{
//MethodBody
}
ThemethodType(knownasreturntype)determinesthedatatypereturnedbythemethod.Aprogrammerisforcedtousekeyword“void”forthemethodTypeifnovaluesarereturned.ThemethodNamecanbeanynameexceptaJavakeyword.Agoodtechniquetoemployfornamingamethodisverb-nouncombinations,suchas“getOrderoraddNumbers”.Methodbodyiswherecodewillbeexecutedtocarryoutatask.Theparameterlistarevariablesthatreceiveargumentspassedtothemethod.Ifthemethodhasnoparametersthentheparameterlistmustremainempty.
Note:AmethodsignatureisthemethodNameandparameterlist.
MethodReturns
Methodreturnsareconceptsthatreturnavaluefromamethodortransfercontroloutofamethod.Bothconceptsareachievedbyusingthereturnkeyword.Executionisterminatedandsubsequentstatementswithinthemethodareskippednomatterwherethereturnkeywordislocated.Thefollowingaretwomethodreturntypes:
1. Methodsthatreturnavalue2. Methodsthatcannotreturnavalue
AccordingtoORACLE,amethodreturnstothecodethatinvokeditwhenit
completesallthestatementsinthemethod,reachesareturnstatementorthrowsanexception
whicheveroccursfirst.
Note:Usually,thereturnkeyword(alsoknownasreturnstatement)isnotusedformethodsthatcannotreturnavalue.Itisnotusedbecauseallofthecodewithinthemethodiscompletedbeforeexecutingthereturnkeyword.However,ifthereturnkeywordisused,thenitwillbeimplementedattheendofthemethodtotransfercontrol.
ReturnAValue
Mostmethodsreturnavaluewhichspecifiestheoutcomeofacalculationorresult(pass,fail,etc.)Thereturnvalueisrequiredtobethesamedatatypeasthemethodtype.Forinstance,ifthemethodtypeisan“int”datatypethenthereturntypemustbean“int”datatype.Thefollowingisasyntaxandexampleforamethodreturn:
Syntaxreturnvalue;
classEnglish
{
intstudents,weeks,days;
inttotalDays()
{
returnweeks*days;
}
}
classTwoEnglishCourses
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish();
EnglishENG202=newEnglish();
ENG101.students=10;
ENG101.weeks=4;
ENG101.days=3;
ENG202.students=12;
ENG202.weeks=6;
ENG202.days=3;
System.out.println(“TheEnglish101coursehas“+ENG101.students+”studentsandthecourselast“+ENG101.totalDays()+”days”);
System.out.println(“TheEnglish202coursehas“+ENG202.students+”studentsandthecourselast“+ENG202.totalDays()+”days”);
}
}
Figure2.4–ReturnaValue
ProgramOutput:TheEnglish101coursehas10studentsandthecourselast12days
TheEnglish202coursehas12studentsandthecourselast18days
Methodsreturnavaluetothecodethatcalledthemethod.Inthisexample,lines26and27makecallstothemethod( inttotalDays() )atline5.Thenthemethodreturnstheoutcomefromcalculation( weeks*days )backtolines26and27.Thedot(.)operatorconnectsbothobjects(ENG101andENG202)toamember(totalDays())whichisamethod.Themethodisplacedontherightsideofthedotoperatorwhiletheobjectsarelocatedontheleft:
ENG101.totalDays();ENG202.totalDays();
Line3declaresallinstancevariablesasan“int”datatype.Thereforetheinstancevariables(weeksanddays)usedforcalculationatline7isautomaticallydeclaredwithan“int”datatype.Thiswillnotcauseareturnerrorbecausethereturntype(line7)andmethodtype(line5)possessthesamedatatype.Thevaluesforeachinstancevariablearecalculatedbasedonlines19,20,23,and24.Lines19and23containvaluesforvariable“weeks”whilelines20and24containvaluesforvariable“days”.
ReturnNoValue
Methodsthatcannotreturnavaluearecalledvoidmethods.Thekeyword“void“isimplementedasthemethodTyperatherthanadatatypesuchas“int”.Anerroroccursifthereisanattempttoreturnavaluefromthevoidmethod.Thefollowingisavoidmethodexample:
classEnglish
{
intstudents,weeks,days;
voidtotalDays()
{
System.out.println(weeks*days);
}
}
classTwoEnglishCourses
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish();
EnglishENG202=newEnglish();
ENG101.students=10;
ENG101.weeks=4;
ENG101.days=3;
ENG202.students=12;
ENG202.weeks=6;
ENG202.days=3;
System.out.println(“HowmanystudentsareintheEnglish101course?“+ENG101.students);
System.out.println(“Thecourseis“+ENG101.days+”daysfor“+ENG101.weeks+”weeks.”);
System.out.print(“Thereforethecourselastthefollowingtotalnumberofdays:”);
ENG101.totalDays();
System.out.println(“\n”);
System.out.println(“HowmanystudentsareintheEnglish202course?“+ENG202.students);
System.out.println(“Thecourseis“+ENG202.days+”daysfor“+ENG202.weeks+”weeks.”);
System.out.print(“Thereforethecourselastthefollowingtotalnumberofdays:”);
ENG202.totalDays();
}
}
Figure2.5–VoidMethod
ProgramOutput:HowmanystudentsareintheEnglish101course?10
Thecourseis3daysfor4weeks.
Thereforethecourselastthefollowingtotalnumberofdays:12
HowmanystudentsareintheEnglish202course?12
Thecourseis3daysfor6weeks.
Thereforethecourselastthefollowingtotalnumberofdays:18
Line5displayskeyword“void”whichindicatesthemethodwillnotreturnanyvalues.Nevertheless,thevoidmethodonlyperformsataskofcalculatingthetotalofnumberofdays.Line7printsthetotaldaysaftermultiplyingweeksanddays.Thefollowingdisplaysanerrorwhenthevoidmethodimplementsthereturnkeywordwithavalue:
classEnglish
{
intstudents,weeks,days;
//Avoidmethodcannotreturnavalue
voidtotalDays()
{
returnweeks*days
}
}
Figure2.6–VoidMethodError
PassArgumentsToParameters
Argumentsarevaluespassedtoamethodwhileparametersreceivesthevalues.Inotherwords,parametersreceivearguments.Parametervariablesaredeclaredwithinamethod’sparenthesisandoperatelikealocalvariable.Localvariablesandparametervariablesareonlyvisibletothemethodwhereisdeclared.Itisimportanttoknowthatoneormoreargumentscanbepassedtoindividualparameters.Thefollowingisanexampleofpassingtwoargumentstotwoparameters:
classEnglish
{
inttotalDays(intwk,intd)
{
returnwk*d;
}
}
classTwoEnglishCourses
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish();
EnglishENG202=newEnglish();
System.out.println(“TheEnglish101courseisatotalof“+ENG101.totalDays(4,3)+”days”);
System.out.println(“TheEnglish202courseisatotalof“+ENG202.totalDays(6,3)+”days”);
}
}
Figure2.7–PassArgumentsToParameters
ProgramOutput:TheEnglish101courseisatotalof12days
TheEnglish202courseisatotalof18days
Line3definestwoparameters“wk,d”formethodtotalDays().MethodscanhavemorethanoneparameterbyseparatingeachparameterwithacommaLines16and17indicatesthearguments“4,3”forobject“ENG101”and“6,3”forobject“ENG202”arepassedtoparameters“wk,d”
Note:Objectscanbepassedtoamethodandreturnedfromamethod.
MethodTypes
Thefollowingarethefourtypesofmethods:
1. InstanceMethods2. ClassMethods3. MainMethod4. Constructors
InstanceMethods
Instancemethodsarecalled(knownasinvoked)byusinganobject.Thereforeaninstancemethodissimilartoaninstancevariablewherebybothmemberscanbeaccessedthroughinitializedobjects.However,instancevariablescanbeaccessedwithanobjectreferenceorwithoutanobjectreference.Thefollowingisaninstancemethodexample:
publicclassLion
{
voidsound()
{
System.out.println(“ROAR”);
}
publicstaticvoidmain(Stringargs[])
{
LionmaleLion=newLion();
maleLion.sound();
}
}
Figure2.8–InstanceMethod
ProgramOutput:ROAR
Lines3–6startsandcompletestheinstancemethod“sound”Line10createsanobject“maleLion”usingkeyword“new”Line11callstheinstancemethod“sound”throughinitializedobject“maleLion”
ClassMethods
Aclassmethod(knownasstaticmethod)issimilartoaclassvariablewherebytheyaredeclaredwithastatickeyword.Thestatickeywordmeansthememberbelongstotheclassandsharedbetweenallobjects.Classmethodscanbeaccessedviatheobjectnameorclassname.However,awarningappearswhenaccessingthemethodbyanobject.Thereforethefavoredwaytoaccessclassedmethodsisthroughclassname.Thefollowingisaclassmethodexample:classStaticAddNumbers
{
staticinta,b;
staticintaddNumbers()
{
returna+b;
}
}
classStaticExample
{
publicstaticvoidmain(String[]args)
{
StaticAddNumbersobjAdd=newStaticAddNumbers();
objAdd.a=20;
StaticAddNumbers.b=30;
System.out.println(“Theadditionofvariables‘a+b’is“+objAdd.addNumbers()+”andaccessedbyanobject”);
System.out.println(“Theadditionofvariables‘a+b’is“+StaticAddNumbers.addNumbers()+”andaccessedbyaclassname”);
}
}
Figure2.9–ClassMethod
ProgramOutput:Theadditionofvariables‘a+b’is50andaccessedbyanobject
Theadditionofvariables‘a+b’is50andaccessedbyaclassname
Line3declarestwoclass/staticvariables“a,b”Lines5–7definestheclass/staticmethod“addNumbers”Line17assigns20toclassvariable“a”.Notice,thewarningnexttoline17thatstates“ThestaticfieldStaticAddNumbers.ashouldbeaccessedinastaticway”.Thiswarningmeanstheclassvariable(knownasstaticvariable)ispreferredtobeaccessedbyclassname.Line18doesnothaveawarningbecauseclassnameprecedesthevariablename“b”Line20issimilartoline18.Awarningmessageappearsbecausethestaticmethodisaccessedviaobjectnameratherthanclassname“i.e.,line21”
Note:Classmethodscanonlyaccessclassvariablesandonlycallotherclassmethods.
MainMethod
Themainmethodisuniqueandmandatoryifaparticularclassbeginstheprogram.Thismethodisrequiredbecauseitexecutestheprogram.Thefollowingisthesyntaxformainmethod:
Syntaxpublicstaticvoidmain(String[]args)
{
//MethodBody
}
Thereareseveralexamplesofthemainmethodbutthefollowingexplainseachcomponent:
public-themethodcanbeaccessedbyallclassesstatic–themethodissharedbetweenallobjectsvoid–themethoddoesnotreturnanyvaluesString[]args–themethodreceivesaStringargumentandpasstheargumenttotheprogram
Note:ThemainmethodisexplainedinthischapterbecausePart2–Java4SeleniumWebDriverfocusesonJavaprogramming.However,SeleniumWebDriverwritesimplechecksusesatestingframeworksuchasJUnitandTestNGthatwillnotrequirethemainmethod.Thenextbook“SeleniumWebDriverforFunctionalAutomationTesting”willfocusonSeleniumanddiveintoJUnit.
Constructors
Aconstructorisaspecialmethodthathasthesamenameastheclass.Ifaconstructorisnotdefinedthenablankconstructorisautomaticallycreated.Consequentlyallclassescontainaconstructorwhichinitializeobjectsofaspecificclass.Anewobjectcallsaconstructoreverytimetheobjectiscreated.Bydefault,theinstancevariablesare
initializedtozerofornumerictypes,nullforreferencetypes,andfalseforbooleantypes.
Constructorshavetheabilitytosettheinitialvalueforaninstancevariable.Recallaninstancevariablecanbeaccessedandassignedavalueusingthedotoperator.InFigure2.4–ReturnAValue,thefollowinginstancevariableswereassignedvalues:
ENG101.students=10;
ENG101.weeks=4;
ENG101.days=3;
ENG202.students=12;
ENG202.weeks=6;
ENG202.days=3;
Constructorscontainparameterswhichreceiveargumentswhenanobjectiscreated.Thefollowingexampleillustrateshowtopassargumentstoaconstructor:
classEnglish
{
intstudents,weeks,days;
English(ints,intw,intd)
{
students=s;
weeks=w;
days=d;
}
inttotalDays()
{
returnweeks*days;
}
}
classTwoEnglishCourses
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish(10,4,3);
EnglishENG202=newEnglish(12,6,3);
System.out.println(“TheEnglish101coursehas“+ENG101.students+”studentsandthecourselast“+ENG101.totalDays()+”days”);
System.out.println(“TheEnglish202coursehas“+ENG202.students+”studentsandthecourselast“+ENG202.totalDays()+”days”);
}
}
Figure2.10–ParameterizedConstructor
ProgramOutput:TheEnglish101coursehas10studentsandthecourselast12days
TheEnglish202coursehas12studentsandthecourselast18days
Line5–10createaconstructorwhichdefinesthreeparameters“s,w,d”online5.Eachparameterisusedtoinitializetheinstancevariables“students,weeks,days”onlines7-9.Afterlines22and23areexecuted,thevalues“10,4,3”forENG101andvalues“12,6,3”forENG202areassignedtotheparameters“s,w,d”.Asaresult,thevaluesarepassedtotheEnglish()constructorwhenthekeyword“new”createseachobject“ENG101andENG202”.
Note:Constructorsarenotdefinedwithamethodtypesuchasintorvoid.Noticehowline5beginswithEnglishthendefinetheparameters.Javaallowsaclasstocontainmultiple
constructors.Thefeatureiscalledconstructoroverloadingiftheconstructorscontainadifferentparameterlist.
AccessorMethods
Accessormethodsaremethodsusedtogetandsetvaluesofprivatevariables.Privatevariablescanonlybeaccessedbycodewithinitsownclass.Thereforetheaccessormethodsaretwomethodsknownasgettersandsettersdefinedinthesameclassastheprivatevariables.
Bothmethodsaredefinedwithaprefixthatbeginswith“get”and“set”beforethemethodname.Forexample,getDays()andsetDays()areregardedasaccessormethodstogetthenumberofdaysthensetthenumberofdays.Thefollowingisanexampleofbothaccessormethods:
classEnglish
{
privateintstudents,weeks,days;
English(ints,intw,intd)
{
students=s;
weeks=w;
days=d;
}
intgetStudents()
{
returnstudents;
}
intgetWeeks()
{
returnweeks;
}
intgetDays()
{
returndays;
}
voidsetStudents(ints)
{
students=s;
}
voidsetWeeks(intw)
{
weeks=w;
}
voidsetDays(intd)
{
days=d;
}
inttotalDays()
{
returnweeks*days;
}
}
Figure2.11–AccessorMethods
Line3declaresalloftheinstancevariables“students,weeks,anddays”asprivateLines5–10istheconstructormethod
Lines12–25arethegetaccessormethods.Eachmethodonlyget/returnthenumberofstudents,weeks,anddaysLines27–40arethesetaccessmethods.Eachmethodsets/modifiesthenumberstudents,weeks,anddays
ThisKeywordTheword“this”isakeywordwhichoperatesasareferenceinsideinstancemethodsand/orconstructors.Itreferstothecurrentobjectormemberofthecurrentobjectwhosemethodisbeingcalled.Thekeyword“this”isoptionalbutusefulwhenaprogrammerdecidestohideinformation.Inaddition,thekeyword“this”preventsuncertaintyinaprogramwhenalocalvariableandinstancevariablecontainthesamename.Awarningmessagestates“Theassignmenttovariablenamehasnoeffect”ifbothvariableshavethesamename.Thefollowingexampleshowshowtousekeyword“this”whenthelocalvariableandinstancevariablecontainthesamename:
publicclassThisKeyword
{
inttestVariable=34;
voidhideInstanceVariable()
{
inttestVariable=15;
System.out.println(“WhatisthevalueofthelocalvariableNOTusingthekeyword‘this’?“+testVariable);
System.out.println(“Whatisthevalueoftheinstancevariableusingthekeyword‘this’?“+this.testVariable);
}
publicstaticvoidmain(String[]args)
{
ThisKeywordobjHide=newThisKeyword();
objHide.hideInstanceVariable();
}
}
Figure2.12–ThisKeyword
ProgramOutput:WhatisthevalueofthelocalvariableNOTusingthekeyword‘this’?15
Whatisthevalueoftheinstancevariableusingthekeyword‘this’?34
Line3declaresandinitializesaninstancevariable“testVariable”toavalueof34Line7declaresandinitializesalocalvariable“testVariable”toavalueof15Line9printamessagewhichincludesthelocalvariable“testVariable”Line10printsamessagewhichincludestheinstancevariable“this.testVariable”usingthekeyword“this”
AnnotationsAccordingtodictionary.com,annotationmeans,“acriticalorexplanatorynote.”RecallfromPart1–Java4SeleniumWebDriver,commentsarenotesthathelpprogrammersunderstandtheprogram.Anannotationissimilartoacommentwherebytheybothprovideinformation.However,commentsareignoredbythecompilerwhileannotationssupplydatatothecompiler.Annotationsprovidemetadatawhichisdatathatdescribesdata.
Allannotationsstartwithanat“@”symbolandspecifythepurposeofamethod.Someannotationscanbecustomizedtoreplacecommentsandpredefinedannotationssuchas@Override.ThefollowingareexamplesofthreeJUnitannotationsusedinSeleniumWebDriver:
1. @Before–allocateresourcesandexecuteonetimebeforeeachtest2. @Test–executesatestscript3. @After–releaseallocatedresourcesandexecuteonetimeaftereachtest
Note:DetailsoftheJUnitannotationsareusedandexplainedinthe“SeleniumWebDriver”books.
AccessModifiersAccessmodifiersarehelpfulfeaturesofobject-orientedprogramming.Theyarehelpfulbecauseoftheaccesslimitationitplacesoneveryclassandclassmembers(variablesandmethods).InJava,therearefourkindsofaccessmodifiers:
1. public–indicatesamembercanbeaccessedbyallclasses2. protected–indicatesamembercanbeaccessedbyallclassesandsubclasses(see
InheritanceinChapter4)withinitsownpackage(seePackagesinChapter5)3. nomodifier–indicatesamembercanbeaccessedbyallclasseswithinitsown
package4. private–indicatesamembercanbeaccessedwithinitsownclass
Theaccessmodifierprecedesaclass,variable,andmethoddeclaration.Classescanonlyusethepublicmodifierornomodifier.Therefore,anerroroccursifaclassmakesuseofaprivateorprotectedaccessmodifier.Thefollowingisanexampleofaclass,method,andvariablesusingapublicmodifier:
publicclassEnglish
{
publicintstudents,weeks,days;
publicinttotalDays()
{
returnweeks*days;
}
}
classTwoEnglishCourses
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish();
EnglishENG202=newEnglish();
ENG101.students=10;
ENG101.weeks=4;
ENG101.days=3;
ENG202.students=12;
ENG202.weeks=6;
ENG202.days=3;
System.out.println(“TheEnglish101coursehas“+ENG101.students+”studentsandthecourselast“+ENG101.totalDays()+”days”);
System.out.println(“TheEnglish202coursehas“+ENG202.students+”studentsandthecourselast“+ENG202.totalDays()+”days”);
}
}
Figure2.13–PublicClass,Variables,andMethod
Theclass(line1),allofthevariables(line3),andmethod(lines5-8)aredeclaredwithapublicaccessmodifier.Consequently,therearenoerrorsandthememberswithintheEnglishclasscanbeaccessedbycodefromtheclass“TwoEnglishCourses”.
Thefollowingisanexampleofaprivatemethod:
publicclassEnglish
{
publicintstudents,weeks,days;
privateinttotalDays()
{
returnweeks*days;
}
}
classTwoEnglishCourses
{
publicstaticvoidmain(Stringargs[])
{
EnglishENG101=newEnglish();
EnglishENG202=newEnglish();
ENG101.students=10;
ENG101.weeks=4;
ENG101.days=3;
ENG202.students=12;
ENG202.weeks=6;
ENG202.days=3;
System.out.println(“TheEnglish101coursehas“+ENG101.students+”studentsandthecourselast“+ENG101.totalDays()+”days”);
System.out.println(“TheEnglish202coursehas“+ENG202.students+”studentsandthecourselast“+ENG202.totalDays()+”days”);
}
}
Figure2.14–PrivateMethod
Line5declaresthemethodtotalDays()withaprivateaccessmodifier.Thatmeansonlymemberswithinitsclass“English”canaccessthemethod.Lines26and27attemptstocallmethod“totalDays()”butcannotbecausetheyarelocatedinadifferentclass“TwoEnglishCourses”.Asaresult,anerrormessagestates“ThemethodtotalDays()”fromTypeEnglishisnotvisible.Thefollowingisanexampleofoneprivatevariableandtwopublicvariables:
Figure2.15–PrivateandPublicInstanceVariables
Line3declaresinstancevariable“students”asprivatewhileline4declaresinstancevariables“weeksanddays”aspublic.Noticelines19–25,twoerrors“lines19and23”occurfortheprivatevariable“students”.Inaddition,thereisanerroronlines27and28whichstates“ThefieldEnglish.studentsisnotvisible”.TheprivatevariableisonlyvisibletotheEnglishclassbutnotvisibletotheclass“TwoEnglishCourses”.However,thepublicvariablesarevisibletobothclasses.Thefollowingareaccesslevelsforeachmodifier:
public protected nomodifier private
Class Yes Yes Yes Yes
Package Yes Yes Yes No
Subclass Yes Yes No No
World Yes No No No
Figure2.16–AccessModifierLevels
StaticKeywordThestatickeywordcanbeappliedtovariables,methods,blocks,andnestedclasses.Usually,themembersofaclassareaccessedthroughanobjectoftheclassviathedotoperator.Whenamemberisdeclaredasstatic,themembercanbeaccessedpriortocreatinganobject.Howevertoaccessastaticmember,itisbesttoprecedethestaticmemberwithaclassnameanddotoperatorratherthantheobjectnameanddotoperator.Awarningmessageappearsifthestaticmemberisprecededbyanobjectnameanddotoperator.Thefollowingisthesyntaxandexampleofastaticvariable:
SyntaxClassName.variableName;classStaticAddNumbers
{
staticinta;
intb;
intaddNumbers()
{
returna+b;
}
}
classStaticExample
{
publicstaticvoidmain(String[]args)
{
StaticAddNumbersobjAdd=newStaticAddNumbers();
objAdd.b=50;
StaticAddNumbers.a=25;
System.out.println(“Thevalueof‘objAdd.b’is“+objAdd.b);
System.out.println(“Thevalueof‘a’is“+StaticAddNumbers.a);
System.out.println(“Thetotalof‘a+b’is“+objAdd.addNumbers()+“\n”);
StaticAddNumbers.a=30;
System.out.println(“Thevalueof‘a’changedto“+StaticAddNumbers.a+”butthevalueof‘objAdd.b’remains“+objAdd.b);
System.out.println(“Thetotalof‘a+b’is“++objAdd.addNumbers());
}
}
Figure2.17–StaticVariable
ProgramOutput:Thevalueof‘objAdd.b’is50
Thevalueof‘a’is25
Thetotalof‘a+b’is75
Thevalueof‘a’changedto30butthevalueof‘objAdd.b’remains50
Thetotalof‘a+b’is80
Line3declaresastaticvariablenamed“a”withinclass“StaticAddNumbers”.Thevariable“a”isaccessedinlines19,22,25,and26byusingtheclassname,dotoperator,andstaticvariablename.Lines19and25setthevaluewhilelines22and26displaysthevalue.Staticvariablesaretreatedlikeglobalvariablesandinitializedatthestartofexecution.
Chapter2describedclasses,objects,methods,annotations,accessmodifiers,andkeywords“thisandstatic”.Aclassincorporatesdataandcodethatoperatesonthedata.Inaddition,classesprovideatemplateforobjectswhichisthefoundationforobject-orientedprogramming.Methodscarryoutaspecifictaskwhileprovidingaccesstodatadefinedbytheclass.Chapter3willdiscussarraysandstringswhichareregardedasobjectsinJava.
Chapter3ArraysandStrings
Anarrayisacollectionofvariableswiththesamedatatype,samenameandfixednumberofvalues.Thevaluesareaccessedviaanindexwhichidentifiesanitemandstartsatzero.Eachiteminthearrayiscalledanelement.Abenefitofarraysisthecapacitytodealwithalargenumberofrelatedvaluesinoneentity.Forinstance,asinglearrayhastheabilitytoholdeveryemployee’ssalary.
InJava,arraysandstringsareconsideredobjects.Astringisadatatypecontaininganimmutablesequenceofcharacters.Immutablemeansthestringcannotbemodifiedafteraninitializationstatement.However,therearemanymethodsthatcanperformactionsonthestrings.
Chapterthreewilldiscussthefollowingconcerningarraysandstrings:
Single-DimensionalArrays
Multi-DimensionalArrays
For-EachLoop
Strings
Single-DimensionalArraysSingle-Dimensionalarraysarethemostusedtypeofarrays.Itstoresalistofrelatedvaluessuchasdailytemperaturesforaspecificmonth.Inreturn,thelistofvaluescanleadtoamonthlytemperatureaverage.Alloftheinformationstoredinanarrayiseasilyaccessiblebyanindex.Thefollowingaretwosyntaxesfordefiningasingle-dimensionalarray:
SyntaxarrTypearrName[]=newarrType[arrSize];
or
arrTypearrName[];arrName=newarrType[arrSize];
Parameter Description
arrType Determinesthedatatypeofeachvalueinthearray
arrName Nameofthearray
new Allocatesmemoryforthearray
arrSize Numberofvaluesinthearray
Figure3.1–SingleDimensionSyntaxDetails
Thefollowingisanexampleofasingle-dimensionalarray:
publicclassOneDimensionalArray
{
publicstaticvoidmain(String[]args)
{
int[]tempMay=newint[3];
tempMay[0]=105;
tempMay[1]=102;
tempMay[2]=98;
System.out.println(“ThehighesttemperatureinMaywas“+tempMay[0]+”degrees”);
System.out.println(“The2ndhighesttemperatureinMaywas“+tempMay[1]+”degrees”);
System.out.println(“The3rdhighesttemperatureinMaywas“+tempMay[2]+”degrees”);
}
}
Figure3.2–Single-DimensionalArrayExample
ProgramOutput:ThehighesttemperatureinMaywas105degrees
The2ndhighesttemperatureinMaywas102degrees
The3rdhighesttemperatureinMaywas98degrees
Line5initializesthearray“tempMay”byusingthekeyword“new”.Thenumber3inbrackets[3]indicatethearraycontain3elementsLines7–9assignvaluestoeachofthearray.Thefirstvalueisstoredatindexposition0.Zeroisalwaysthestartingpositionforarrays.Inthisexample,thelastindexpositionis2.Elements0–2holdsatotalof3elements.
Arrayscanbeassignedvaluesononelinewithoutthekeyword“new”.Thefollowingisanotherwaytoassignvaluestoanarray:
publicclassOneDimensionalArray
{
publicstaticvoidmain(String[]args)
{
int[]tempMay={105,102,98};
System.out.println(“ThehighesttemperatureinMaywas“+tempMay[0]+”degrees”);
System.out.println(“The2ndhighesttemperatureinMaywas“+tempMay[1]+”degrees”);
System.out.println(“The3rdhighesttemperatureinMaywas“+tempMay[2]+”degrees”);
}
}
Figure3.3–AlternateSingle-DimensionalArrayExample
ProgramOutput:ThehighesttemperatureinMaywas105degrees
The2ndhighesttemperatureinMaywas102degrees
The3rdhighesttemperatureinMaywas98degrees
Line5initializesthearray“tempMay”andassignsthreevaluestothearray.Noticethekeyword“new”isnotusedtoinitializethearray.However,thedatatype“int”isspecifiedalongwiththearraynameandvalues.Squarebracketsindicatesanarraywhilethenumberofvalueswithinthecurlybracketsdictatethearraysize.ThefollowingisadiagramdisplayingthearrayvaluesfromFigure3.2andFigure3.3:
Figure3.4–ArrayName,Values,andIndexes
Multi-DimensionalArraysMulti-Dimensionalarraysareregardedasanarrayofarrays.Thereforetwoormorebracketsmustbeusedtodeclareamulti-dimensionalarray.Themostcommontypeofmulti-dimensionalarrayisatwo-dimensionalarray.Eachdimensioncontainsitsownsetofbrackets.Aspreadsheetwithrowsandcolumnsisagoodwaytoimagineatwo-dimensionalarray.Thefirstpairofbracketsarerowsandsecondpairofbracketsarecolumns.Thefollowingisthesyntaxandexampleforatwo-dimensionalarray:
SyntaxarrTypearrName[][]=newarrType[arrSize1][arrSize2];
publicclassTwoDimensionalArray
{
publicstaticvoidmain(String[]args)
{
introw,column;
inttestTwoDimension[][]=newint[2][3];
for(row=0;row<2;row++)
{
for(column=0;column<3;column++)
{
testTwoDimension[row][column]=(row*3)+column+1;
System.out.print(testTwoDimension[row][column]+”“);
}
System.out.println();
}
}
}
Figure3.5–Two-DimensionalArrayExample
ProgramOutput:123
456
Line7initializesthetwo-dimensionalarray“testTwoDimension”byusingthekeyword“new”.Twobracketsindicatetherearetwodimensionssimilartorowsandcolumns.Noticetheoutputproducesatotaloftworowsandthreecolumns.Line9representsthecountforrowswhileline11representsthecountforcolumnLine13calculatesthevaluesonethroughsixLine14printsthevaluesonethroughsix
Comparabletosingle-dimensionalarrays,atwo-dimensionalarraycanbedeclaredandinitializedwithoutthekeyword“new”.Thefollowingisanexampleofatwo-dimensionalarraywithoutbeinginitializedusingkeyword“new”.
publicclassTwoDimensionalArray
{
publicstaticvoidmain(String[]args)
{
introw,column;
inttestTwoDimension[][]=
{
{1,2,3},
{4,5,6}
};
for(row=0;row<2;row++)
{
for(column=0;column<3;column++)
System.out.print(testTwoDimension[row][column]+”“);
System.out.println();
}
}
}
Figure3.6–AlternateTwo-DimensionalArrayExample
ProgramOutput:123
456
Lines7–11initializethearraybysurroundingeachdimension’slistwithinaseparatesetofbrackets.Noticehoweachelementisdividedbyacommaandeachsetofbracketsrepresentarow.Theprevioustwoexamplesoutputthesameinformation.Aspecificvaluecanbeprintedbyindicatingaspecificrowandcolumn.Thefollowingexampleprintsaspecificvalueaccordingtoadefinedrowandcolumn:
publicclassTwoDimensionalArray
{
publicstaticvoidmain(String[]args)
{
introw,column;
inttestTwoDimension[][]=
{
{1,2,3},
{4,5,6}
};
for(row=0;row<2;row++)
{
for(column=0;column<3;column++)
System.out.print(testTwoDimension[row][column]+”“);
System.out.println();
}
System.out.println(“\n”+“Whatvalueislocatedinrow1-column2?“+testTwoDimension[1][2]);
}
}
Figure3.7–PrintASpecificValueFromATwo-DimensionalArray
ProgramOutput:123
456
Whatvalueislocatedinrow1-column2?6
Thefollowingillustratestheoutputinaspreadsheetformat:
Figure3.8–SpecificIndexForATwo-DimensionalArray
For-EachLoopThefor-eachloop(knownasenhancedforloop)wasestablishedtocyclethroughacollectionofobjectssuchasanarray.Thistypeofcontrolstructurepresentsthesamefunctionalityastheforloop(seeChapter4-ControlStructuresin(Part1)Java4SeleniumWebDriver)whichexecutesablockofcodeacertainnumberofiterations.However,thefor-eachloopexecutesablockofcodewhilecyclingthrougheachelementinthecollection.Thefollowingisthefor-eachloopsyntax:
Syntaxfor(collTypeitrVariable:collection){statement(s)}
SyntaxDetails
Argument Description
collType Referstothetypeofdataforthecollection
itrVariable Referstothenameoftheiterationvariablethatreceiveseachelementaftereveryiteration
collection Thecollectionsuchasarraythatwillbeiteratedorcycledthrough
statement(s) Theblockedofthatwillbeexecuted
{…} Theopeningandclosingcurlybrackets
Figure3.9–For-EachLoopSyntaxDetails
Allelementsinthefor-eachloopareretrievedandstoredintheitrVariable.Thelooprepeatsuntilallelementsarereadinindexorder.Itisimportanttoknowthatthecolltypemustbethesametypeastheobject.Inthecaseofarrays,thecollTypemustbethesametypeasthearrType.Thefollowingisanexampleoffor-eachloop:
publicclassForEachLoop
{
publicstaticvoidmain(String[]args)
{
double[]costPerItem={12.34,56.78,99.99};
doubletotalCost=0;
for(doublei:costPerItem)
{
System.out.println(“Thecostis“+i);
totalCost=totalCost+i;
}
System.out.println(“\n”+“Thetotalcostofallitemsis“+totalCost);
}
}
Figure3.10–ForEachLoopExample
ProgramOutput:Thecostis12.34
Thecostis56.78
Thecostis99.99
Thetotalcostofallitemsis169.11
Line5and6initializeandassignvaluestothearray“costPerItem”and“totalCost”Line8retrieveseachelement(12.34,56.78,99.99)inarray“costPerItem”Line10printseachelementLine11calculatesthetotalofallelements
Note:Lines8–11canbereadas”Foreachdoubledatatypeinthe“costPerItem”array,printeachelementandcalculatethetotalofallelements”.
Two-DimensionalArrayIteration
Iterationsfortwo-dimensionalarraysoperatesimilartosingle-dimensionalarrays.Theiterationvariableforatwo-dimensionalarraymustreferencethesingle-dimensionalarray.Itmustreferencethesingle-dimensionalarraybecausetwo-dimensionalarraysareconsideredarraysofarrays.Thereforeeachtwo-dimensionalarrayiterationretrievesthenextarray.Thefollowingisanexampleofatwo-dimensionalarrayiteration:
publicclassForEachLoop
{
publicstaticvoidmain(String[]args)
{
inttotalCost=0;
int[][]costPerItem=
{
{5,10},
{15,20},
{25,30}
};
for(inti[]:costPerItem)
{
for(intj:i)
{
System.out.println(“Thecostis“+j);
totalCost=totalCost+j;
}
}
System.out.println(“\n”+“Thetotalcostofallitemsis“+totalCost);
}
}
Figure3.11–Two-DimensionArrayIterationExample
ProgramOutput:Thecostis5
Thecostis10
Thecostis15
Thecostis20
Thecostis25
Thecostis30
Thetotalcostofallitemsis105
Line5initializesandassignszero“0”tototalCostLines6–11initializeandassignvaluestothetwo-dimensionalarray“costPerItem”Line13“ for(inti[]:costPerItem) ”referencesasingle-dimensionalarraywherebyeachiterationretrievesthenextarrayincostPerItemfromstarttofinish“index0toindex5”Line15“ for(intj:i) ”cyclesthrougheachelement
SearchAnArray
Arrayscanbesearchedtoretrievespecificvalues.Therearetimeswhenonlyacertainvalueisneededfromacollectionofvalues.Thefollowingexampleillustrateshowtoretrieveaspecificvaluefromanarray:
publicclassForEachLoop
{
publicstaticvoidmain(String[]args)
{
intspecificCost=20;
int[][]costPerItem=
{
{5,10},
{15,20},
{25,30}
};
for(inti[]:costPerItem)
{
for(intj:i)
{
if(j==specificCost)
{
System.out.println(“Thespecificcostof“+”’”+specificCost+”’”+”waslocatedinthecollectionofvalues”);
}
}
}
}
}
Figure3.12–SearchATwo-DimensionalArray
ProgramOutput:Thespecificcostof‘20’waslocatedinthecollectionofvalues
Line5initializesandassigns20tovariable“specificCost”Lines6–11initializeandassignvaluestothetwo-dimensionalarray“costPerItem”Line13“ for(inti[]:costPerItem) ”referencesasingle-dimensionalarraywherebyeachiterationretrievesthenextarrayincostPerItemfromstarttofinish“index0toindex5”Line15“ for(intj:i) ”cyclesthrougheachelementLine17searchesthetwo-dimensionalarrayforaspecificelement“20”viavariablespecificCost
StringsAstringisadatatypecontaininganimmutablesequenceofcharacters.Thisdatatypeisconsideredanobjectsoitwasnotdiscussedin(Part1)Java4SeleniumWebDriverwiththeotherdatatypes.Therearetwowaystocreateastring:
1. StringLiteral2. Stringusingthekeyword“new”
Thefollowingisanexampleofastringliteral:
publicclassStringObject
{
publicstaticvoidmain(String[]args)
{
StringfirstName=“Rex”;
StringlastName=“Jones”;
System.out.println(“Stringsareplacedwithinquotationmarks”);
System.out.print(“Thefirstnameis“+firstName+”andlastnameis“+lastName+“.”);
System.out.println(”Bothnamesweredeclaredandinitializedasstrings.Asequenceofcharacters”);
}
}
Figure3.13–StringExample
ProgramOutput:Stringsareplacedwithinquotationmarks
ThefirstnameisRexandlastnameisJones.Bothnamesweredeclaredandinitializedasstrings.Asequenceofcharacters
Lines5and6declareandinitializeastringdatatypeLines8–10displaysthestringliteralwithintheprintlnmethod()
Stringscanbecreatedlikeotherobjectsbyusingthekeyword“new”whichcallstheStringconstructor.ThefollowingisanexampleofaStringwiththekeyword“new”:
Stringname=newString(“RexJones”);
StringOperations
InJava,thereisaStringclasswhichcontainsmanymethodsforoperations.ThefollowingisascreenshotofseveralStringmethodsperEclipse:
Figure3.14–StringMethods
Line7displaysalistofmethodsaftertypingaperiodafterthevariable“name”Adescriptionofaspecificmethod“equals”appearswhenitishighlighted
ThefollowingarepopularStringmethods,theirdatatype,anddescription:
1. charAt(intindex):char-Returnsthecharacteratthespecifiedindex2. compareTo(str):int-Returnslessthanzeroifthecallingstringislessthanstr,
greaterthanzeroifthecallingstringisgreaterthanstr,andzeroifthestringsareequal
3. concat(Stringstr):String-Concatenatesthegivenstringattheendofthestring4. equals(ObjectanObject):boolean–Comparesthestringtoaspecificobject5. equalsIgnoreCase(Stringstring):boolean-Comparestringsandignorethecases6. indexOf(Stringstr):int-Returnstheindexofthefirstoccurrenceofaspecified
substring7. lastindexOf(Stringstr):int-Returnstheindexofthelastoccurrenceofastring8. length():int-Returnsthelengthofastring9. replace(charoldChar,charnewChar):String-Returnsthenewstringafter
changingalloccurrencesoftheoldstring10.split(Stringregex):String[]-Splitsthestringandreturnsastringarray
thatmatchesthegivenregularexpression11.toLowerCase():String-ConvertsallofthecharactersinaStringtolowercase12.toUpperCase():String-ConvertsallofthecharactersinaStringtouppercase13.trim():String-Returnsacopyofthestring,afterdeletingleadingandtrailingwhitespacesfromtheoriginalstring
Astringdatatypecannotbecombinedwithadifferentdatatypeforanoperationsuchasmultiplication,subtraction,ordivision.Forexample,astringvalueof“534000.00”appearstobeanumericvaluebutstringdoesnotallowmathematicaloperationsunlessatypewrapperconvertsthestring.Thevalue“534000.00”resemblesadoubledatatype.However,anerroroccursifcombinedwithadoubledatatype.Thefollowingexampledisplaysanerrorifastringdatatypeiscombinedwithasubtractionoperator:
publicclassStringObject
{
publicstaticvoidmain(String[]args)
{
StringgrossIncome=“534000.00”;
doublegross=534000.00;
doubletaxes=225000.00;
doublenetIncome;
netIncome=grossIncome-taxes;
netIncome=gross-taxes;
System.out.println(“Thenetincomeis“+netIncome);
}
}
Figure3.15–StringErrorDueToMathematicalOperations
Line5declaresandinitializesaStingvalue“534000.00”Line10displaysanerrorbecauseStringsdonotallowmathematicaloperations.However,noticeline11doesnotdisplayanerrorbecausebothvariables“grossandtaxes”aredeclaredasadoubledatatype“lines6and7”
TypeWrappers
Typewrappersareusedtoconvertstringsintoprimitivetypes(byte,double,float,integer,long,short).Thereforethepreviousexamplewhichdisplayedanerrorforstringvalue“534000.00”canbeconvertedintoanumber.Typewrappersareusedtowraptheprimitivetype.Thefollowingisanexampleofhowtoreturnadoublewhenthevalue“534000”isspecifiedasastring:
publicclassStringObject
{
publicstaticvoidmain(String[]args)
{
StringgrossIncome=“534000.00”;
doubletaxes=225000.00;
doublenetIncome;
netIncome=Double.parseDouble(grossIncome)-taxes;
System.out.println(“Thenetincomeis“+netIncome);
}
}
Figure3.16–ReturnsADoubleAfterReadingAStringValue
ProgramOutput:Thenetincomeis309000.00
Line5declaresandinitializesaStingvalue“534000.00”Line9parses(knownasreads)thestring“grossIncome”thenreturnadoubledatatype.Afterwards,thevariabletaxes“225000”issubtractedfromvariablegrossIncome“534000”andthevalueisassignedtovariable“netIncome”
Thefollowingisalistoftypewrappersthatconvertastringdatatype:
Wrapper ConversionMethod
Double Double.parseDouble(string)
Float Float.parseFloat(string)
Long Long.parseLong(string)
Integer Integer.parseInteger(string)
Short String.parseString(string)
Byte Byte.parseByte(string)
Figure3.17–TypeWrappers
Chapter3explainedarraysandstringswhichareobjects.Anarrayisacollectionofvariableswiththesamedatatype,samenameandfixednumberofvalues.Astringisadatatypecontaininganimmutablesequenceofcharacters.Chapter4willdefineinheritancewhichisahierarchicalconcept.Theconceptallowscodeandobjectstobereused.
Chapter4Inheritance
Inheritanceisahierarchicalconceptwhichallowsreusablecodeandobjectstobeextended.Aclassknownassuperclasscanbecreatedwithvariablesandmethodstheninheritedbyotherclasses.Theinheritedclassesarecalledsubclasses.Eachsubclassthatinheritsthesuperclassmembersarepermittedtoaddtheirownclassmembers.Forexample,adogisananimal,sotheclass“Dog”,wouldbeasubclassofAnimal.Acatisananimalandtheclass“Cat”wouldalsobeasubclassofAnimal.Inbothexamples,class“Animal”isthesuperclass.
ChapterfourwillexplainthefollowingregardingInheritance:
FundamentalofInheritance
SuperclassObject
InheritingPrivateMembers
SuperclassandSubclassConstructors
Polymorphism
Abstraction
KeywordFinal
FundamentalsofInheritanceTheconceptofinheritingclassesisanimportantfoundationwithinobject-orientedprogramming.Functionalitiesareaddedtoanexistingclasswhichpreventsthesamecodefrombeingwrittenmultipletimes.Thesubclassinheritsallclassmembersfromthesuperclass.Anotherwaytoviewsuperclassandsubclass,istothinkofsuperclassastheparentandsubclassasthechild.
Inorderforthesubclasstoinheritthesuperclass,thekeyword“extends”mustbeusedintheclassdeclaration.Keyword“extends”meansthesubclasswilladdtothesuperclass.Subclassesarenotallowedtoinheritmultiplesuperclasses.However,asubclassisallowedtobecomeasuperclassforanadditionalsubclass.Asaresult,theadditionalsubclassinheritsallclassmembersfromeachsuperclass.Thefollowingisthesyntaxforasubclassinheritingasuperclass:
SyntaxclassSubClassNameextendsSuperClassName
{
//ClassBody
}
Thefollowingisanexampleforasubclassinheritingasuperclass:
classSchool
{
intnumTeachers;
intnumStudents;
voidshowNumberOfPeople()
{
System.out.println(“Thereare“+numTeachers+”teachersand“+numStudents+”students”);
}
}
classElementarySchoolextendsSchool
{
StringprincipalName;
inttotalTeacherStudents()
{
returnnumTeachers+numStudents;
}
voiddisplayPrincipal()
{
System.out.println(“Theprincipalnameis“+principalName);
}
}
classSchoolDistrict
{
publicstaticvoidmain(String[]args)
{
ElementarySchoolBishopHeights=newElementarySchool();
ElementarySchoolAltaMesa=newElementarySchool();
BishopHeights.numTeachers=10;
BishopHeights.numStudents=130;
BishopHeights.principalName=“JoeDoe”;
System.out.println(“MyelementaryschoolisBishopHeights\n”);
BishopHeights.displayPrincipal();
BishopHeights.showNumberOfPeople();
System.out.println(“Thereforethetotalofteachersandstudentsis“+BishopHeights.totalTeacherStudents());
}
}
Figure4.1–SubclassExtendsSuperclassExample
ProgramOutput:MyelementaryschoolisBishopHeights
TheprincipalnameisJoeDoe
Thereare10teachersand130students
Thereforethetotalofteachersandstudentsis140
Line1displayssuperclass“School”Line11usesthekeyword“extends”tocreatesubclass“ElementarySchool”whichinheritssuperclass“School”Line17utilizevariables“numTeachersandnumStudents”ofthesuperclassLines29and30displaytwoobjects“BishopHeightsandAltaMesa”Lines32and33assignvalues“10and130”tovariables“numTeachersandnumStudents”whichareinheritedfromsuperclass“School”Line34assignavalue“JoeDoe”tovariable“principalName”whichisamemberofsubclass“ElementarySchool”
Thesubclass“ElementarySchool”isauniquetypeofsuperclass“School”.MoresubclassessuchasHighSchool,University,etc.caninheritsuperclass“School”.The“ElementarySchool“classinheritsallofthe“School“classmembersthenaddavariable
“principalName”andtwomethods“totalTeacherStudentsanddisplayPrincipal”.Noticehowline30createsanobjectthatwasnotutilized.ThisshowsthatmoreElementarySchoolobjectscanbecreatedtoaccessmembersofthesuperclass“School”.
Note:Objectsfromthesuperclassdonothaveknowledgeofthesubclass.Therefore,thesuperclassobjectscannotaccessthesubclass.
SuperclassObjectThesuperclass“Object”isthehighestsuperclassofallclasses.Inotherwords,thereisnoparentclassabovethe“Object”superclass.Bydefault,the“Object”superclassincludesmethodsthatareinheritedbyallsubclasses.ThefollowingisascreenshotwhichshowsObject“java.lang.Object”bydefaultastheSuperclasswhencreatinganewclass:
Figure4.2–EclipseNewClassCreationModal
InheritingPrivateMembersPrivatemembersthatareinheritedfromthesuperclassremainprivateinthesubclass.Thereforethesubclasscannotaccesstheprivatemembers.Variablesandmethodsareonlyaccessiblebycodewithinitsownclasswhichdoesnotincludesubclasses.Nevertheless,theprivatememberscanbeaccessedbyusingaccessormethods.
SuperclassandSubclassConstructorsSuperclassesandsubclassescontaintheirownconstructorswhichinitializeobjectsofitsclass.Asaresult,theconstructorsareindependentofeachother.Thesuperclassdoesnothaveaccesstothesubclassconstructorsbutthesubclasshasaccesstothesuperclassconstructors.Subclassescallasuperclass’sconstructorbyutilizingthekeyword“super”.Thefollowingisthesyntaxforasubclasscallingasuperclassconstructor:
Syntaxsuper(parameter-list)
Thefollowingisanexampleofasubclassinheritingasuperclass:
classSchool
{
privateintnumTeachers,numStudents;
School(intt,ints)
{
numTeachers=t;
numStudents=s;
}
intgetTeachers(){returnnumTeachers;}
intgetStudents(){returnnumStudents;}
voidsetTeachers(intt){numTeachers=t;}
voidsetStudents(ints){numStudents=s;}
voidshowNumberOfPeople()
{
System.out.println(“Thereare“+numTeachers+”teachersand“+numStudents+”students”);
}
}
classElementarySchoolextendsSchool
{
privateStringprincipalName;
ElementarySchool(Stringp,intt,ints)
{
super(t,s);
principalName=p;
}
inttotalTeacherStudents()
{
returngetTeachers()+getStudents();
}
voiddisplayPrincipal()
{
System.out.println(“Theprincipalnameis“+principalName);
}
}
classSchoolDistrict
{
publicstaticvoidmain(String[]args)
{
ElementarySchoolBishopHeights=newElementarySchool(“JoeDoe”,10,130);
System.out.println(“MyelementaryschoolisBishopHeights\n”);
BishopHeights.displayPrincipal();
BishopHeights.showNumberOfPeople();
System.out.println(“Thereforethetotalofteachersandstudentsis“+BishopHeights.totalTeacherStudents());
}
}
Figure4.3–SubclassInheritsSuperclassExample
ProgramOutput:MyelementaryschoolisBishopHeights
TheprincipalnameisJoeDoe
Thereare10teachersand130students
Thereforethetotalofteachersandstudentsis140
Line3declaresallofthevariables“numTeachersandnumStudents”asprivateLines5–9istheconstructorforsuperclass“School”Lines11–14aretheaccessormethods“getandset”Lines25–29isthesubclassconstructorfor“ElementarySchool”whichcallsthesuperclassconstructor“School”.Thestatement“super(t,s);”online27referstothesuperclassconstructorviakeyword“super”
Note:Asuperclassconstructorisexecutedfirstiftheprogramincludesasuperclassconstructorandsubclassconstructor.
PolymorphismPolymorphismisasignificantconceptinobject-orientedprogramming.Thisconceptallowsoneinterfacetobeutilizedbymultiplemethods.Inthecaseofsuperclassandsubclass,asuperclassprovideastructurewherebyasubclasscandefineitsownmethodoperation.Themethodsareinheritedautomaticallywhenthesubclassextendsthesuperclass.
MethodOverridingvsMethodOverloading
Methodoverridingisafeaturewhenthesubclassmethodoverridesthesuperclassmethod.Bothmethodsmusthavethesamemethoddatatypeandsignature.Amethod’ssignatureconsistsofamethod’snameandparameterlist.Thesuperclassmethodcanbecalledalthoughitisoverriddenbyasubclassmethod.Itisoverriddenifthekeyword“super”anddot(.)operatorisfollowedbythemethodname:super.methodName();
Methodoverloadingistwoormoremethodsinthesameclasswiththesamenamebutadifferentparameterlist.Theparameterlistdetermineswhichoverloadedmethodisexecutedifacallismadetothemethodname.Howeveraduplicatemethoderroroccursifmultiplemethodshavethesamesignature.Thefollowingshowsthedifferencesbetweenmethodoverridingandmethodoverloading:
MethodOverriding MethodOverloading
Definition Thesuperclassandsubclasshasamethodwiththesamemethodtypeandsignature
Aclasshasmultiplemethodswiththesamenameanddifferentparameterlist
MethodType
Thesuperclassandsubclassmethodtypesmustbecompatible
Thetypecanbethesameordifferent
Signature Thesuperclassandsubclassmusthavethesamesignature
Thesignaturesaredifferentregardingnumberofparameters,typeofparameters,andorderofparameters
Figure4.4–DifferencesBetweenMethodOverridingandOverloading
Note:An“@Override”annotationcanbeusedtoinstructthecompilerofasubclassoverridingasuperclass.Annotationsmaketheprogrameasiertoreadandletsthecompilerverifyiftheoverrideisvalid.
StaticBinding
Bindingistheconnectionbetweenamethodcallandthemethoddefinition.Staticbinding(knownasearlybinding)iswhenbindingoccursatcompiletime.Thereforebindinghappensbeforeaprogramexecutes.Thefollowingisanexampleofstaticbinding:
classBinding
{
voidprintClassName()
{
System.out.println(“ThisclassiscalledBinding”);
}
}
classBindingExtendextendsBinding
{
@Override
voidprintClassName()
{
System.out.println(“ThisclassiscalledBindingExtend”);
}
}
classBindingExamples
{
publicstaticvoidmain(String[]args)
{
BindingExtendobjBindingExtend=newBindingExtend();
objBindingExtend.printClassName();
}
}
Figure4.5–StaticBindingExample
ProgramOutput:ThisclassiscalledBindingExtend
Line11displaysanannotationwhichindicatesthesubclassmethod“printClassName()”willoverridethesuperclassmethod“printClassName()”Line12displaysaniconnexttothelinenumberwhichhasatooltipthatstates“overridesBinding.printClassName”Line22createsanobject“objBindingExtend”ofclass“BindingExtend”Line23callsthemethoddefinition“printClassName()”
Note:Forstaticbinding,thecompilerverifiesifamethoddefinition“printClassName”existinclass“BindingExtend”.
DynamicBinding
Dynamicbindingiswhenbindingoccursatruntime.Thereforethistypeofbindinghappenswhentheprogramisrunning.Unlikestaticbinding,dynamicbindingallowspolymorphism.Thereforeamethodoverrideisgoodillustrationofdynamicbinding.Thefollowingisanexampleofdynamicbinding:
classBinding
{
voidprintClassName()
{
System.out.println(“ThisclassiscalledBinding”);
}
}
classBindingExtendextendsBinding
{
@Override
voidprintClassName()
{
System.out.println(“ThisclassiscalledBindingExtend”);
}
}
classBindingExamples
{
publicstaticvoidmain(String[]args)
{
BindingobjBinding=newBinding();
objBinding.printClassName();
BindingobjBindingExtend=newBindingExtend();
objBindingExtend.printClassName();
}
}
Figure4.6–DynamicBindingExample
ProgramOutput:ThisclassiscalledBinding
ThisclassiscalledBindingExtend
Lines3and12definethesamemethodname“printClassName()”foreachclass“BindingandBindingExtend”Lines22and25createsbothobjects“objBinding”and“objBindingExtend”Lines23and26iswheredynamicbindingtakesplace.Bothcallsaremadetothesamemethodname“printClassName()”butindifferentclasses“superclassandsubclass”.Theobjects“objBinding”and“objBindingExtend”areusedforbindingatruntime.
AbstractionAbstractionappliestoclassesaswellasmethods.Thekeyword“abstract”isusedtocreateabstractclassesandmethods.Anabstractclasscannotbeinstantiatedsoitisusedasasuperclass.Abstractmethodsaredeclaredwithoutanimplementationsoitdoesnotincludeabody.Abstractclassescanincludeabstractmethodsandimplementedmethods.However,anabstractclasscannotcontainobjectsduetoincompleteimplementationofitsmethods.
Thepurposeofabstractclassesistoonlydefineageneralizedmethodthenallowasubclasstodefinethedetailsofthemethod.Therearesituationswhenasuperclasscannotcreateameaningfulmethodimplementation.Aninstancemethodcanbedeclaredabstractbutstaticmethodsandconstructorscannotbedeclaredabstract.Thefollowingisthesyntaxforanabstractclassandmethod:
Syntax–AbstractClass
abstractclassClassName{
//AbstractClassescancontainabstractmethodsandimplementedmethods
//AbstractMethod
abstractmethodTypemethodName(parameter-list);
//ImplementedMethod
methodTypemethodName(parameter-list)
{
//MethodBody
}
}
Syntax–AbstractMethod
abstractmethodTypemethodName(parameter-list);
Note:Asubclassmustbedeclaredasabstractorimplementalloftheabstractmethodsfromthesuperclass.
KeywordFinalThekeyword“final”preventsaclassormethodfrombeingoverwritten.Methodsareimplicitlydeclaredasfinaliftheclassisdeclaredfinal.RecallfromPart1–Java4SeleniumWebDriver,thekeyword“final”isusedtodeclareandinitializeconstants.Constantsareunchangeablevaluesassignedtoavariablename.Thebenefitofusingkeyword“final”istoconfirmaclassorclassmemberwillnotchangebecauseitiscriticaltotheprogram.Asaresult,anerroroccursifthereisanattempttoinheritaclassoroverrideaclassmember(methodorvariable)declaredasfinal.
Chapter4explainedinheritance,superclass,andsubclass.Inheritanceisahierarchicalconceptwhichallowsreusablecodeandobjectstobeextended.Superclassistheparentclasstosubclasswherebysubclassinheritstheclassmembers.Chapter5willdiveintopackageswhichisagroupofrelatedclasses.
Chapter5Packages
Apackageisacollectionofrelatedclasseswherebythepackageoperateslikeafoldertoorganizecode.Theclasseswithinapackageareaccessedbythepackagename.RecallfromPart1–Java4SeleniumWebDriver,thatanerroroccursifaclassmakesuseoftheprivateaccessmodifier.However,aclasscanbemadeprivateandnotaccessedbycodeoutsideofthepackagebyusingnomodifier.Apackagedefinesauniquenamespacewhichpreventsmultipleclassesofhavingthesamenamewithinapackage.InJava,thereisnoproblemwithdifferentpackagesusingthesameclassname.
Chapter5willexplainthefollowingregardingpackages:
CreateAPackage
ImportAPackage
JavaClassLibrary
CreateAPackageAprogrammercancreatetheirownpackagetogroupclasses.Allclasseshaveapackagethatisstoredinadirectory.Thefirstlineinmostsourcefilesincludesapackagestatement.However,apackagestatementisoptionalsothefirstlinecanremainblank.Ablankpackagestatementisthedefaultwhichcontainsnoname.Itisimportanttoknowthatdifferentsourcefilesareallowedtousethesamepackagestatement.Thefollowingisthesyntaxforapackagestatement:
Syntaxpackagepackagename;
Thenameofeachpackage“e.g.,packagename”iscasesensitive.InJava,itisconventionaltousealllowercaselettersforapackagename.Alllowercaselettersforapackageservesasacleardistinctionfromclassnames,methodnamesandmostvariablenames.EclipseIDEdisplaysawarningifthefirstletterwithinpackagenamebeginswithacapitalletter.Thefollowingisascreenshotwhichshowsawarningifthefirstletterisacapitalletter:
Figure5.1–PackageNamingConvention
Thefollowingisanexampleofapackagestatement:
packageexamplepackage;
classPackageTest
{
voidprintTest()
{
System.out.println(“Thisisatest”);
}
}
publicclassPackage
{
publicstaticvoidmain(Stringargs[])
{
System.out.println(“Thisisanothertest”);
}
}
Figure5.2–PackageStatement
ProgramOutput:Thisisanothertest
Line1containsthepackagestatement“packageexamplepackage”Line3beginstheclassdefinitionforclass“PackageTest”.Thisclassisacomponentofapackage“examplepackage”Line11beginstheclassdefinitionforclass“Package”.Thisclassisacomponentofapackage“examplepackage”
Thefollowingisascreenshotoftheclassesgroupedtogetherinapackagedirectory:
Figure5.3–PackageDirectoryScreenshot
ImportAPackageAJavapackageisimportedbyusingthekeyword“import”.Importsareusefulwhenaclasswantstoaccessamemberinanotherclass.Theotherclasscanbeinthesamepackageordifferentpackage.Afterimportingapackage,themembersofthepackageareuseddirectlywithoutanyadditionalsyntax.Thefollowingisthesyntaxforimportingapackage:
Syntaximportpackagename.ClassName;
Toimportaclass,thedot(.)operatorisplacedbetweenthepackagenameandclassname.Theimportstatementsmustbeenteredafterthepackagestatementbutbeforetheclassesaredeclaredinthecurrentfile.Thefollowingisanexampleofapackagestatement,importstatement,andaclassdeclaration:
packageexamplepackage;
importexamplepackage.PackageTest;
publicclassPackageOne
{
publicstaticvoidmain(Stringargs[])
{
PackageTestobjPackage=newPackageTest();
objPackage.printTest();
}
}
Figure5.4–PackageImport
ProgramOutput:Thisisatest
Line1containsthepackagestatement“packageexamplepackage;”Line2containstheimportstatement“importexamplepackage.PackageTest;”.Thepackagenameis“examplepackage”andclassnameis“PackageTest”whichislocatedinadifferentfile.Line4beginstheclassdeclaration“publicclassPackageOne”Line8createsanobject“objPackage”usingtheimportedclass“PackageTest”Line10callsthemethod“printTest();”whichislocatedinclass“PackageTest”.ViewFigure5.2-PackageStatement,toseedetailsofthemethod.
Note:Alloftheclassesfromaspecificpackagecanbeimportedbyusingthepackagenameandanasterisk:importpackagename.*;
JavaClassLibraryTheJavaClassLibraryisknownasJavaApplicationProgrammingInterface(API)whichprovidesprogrammerswithacollectionofprewrittenclasses.Eachprewrittenclasshelpssupportthelogicofaprogrambysupplyingusefulfunctions.Oneofthepackagescalledjava.langisautomaticallyimportedintoallprograms.ThereforeclassessuchasSystemisemployedautomaticallywhenusingtheprint()andprintln()methodstodisplayinformation.AccordingtoOracle,thefollowingshowsfourofmanyJavaClassLibraries:
java.lang–ProvidesclassesthatarefundamentaltothedesignoftheJavaprogramminglanguage.
java.io-Providesforsysteminputandoutputthroughdatastreams,serializationandthefilesystem.
java.math-Providesclassesforperformingarbitrary-precisionintegerarithmetic(BigInteger)andarbitrary-precisiondecimalarithmetic(BigDecimal).
java.sql-ProvidestheAPIforaccessingandprocessingdatastoredinadatasource(usuallyarelationaldatabase)usingtheJavaTMprogramminglanguage.
Note:Packagejava.langcontainsamathclasswhichisdifferentfrompackagejava.math.Themathclasswithinjava.langcontainsmethodsthatperformsbasicnumericoperations.
Chapter5describedpackagesinJava.Eachpackagecontainsagroupofrelatedclasses.Theclassesareaccessedbythepackagename.Animportstatementmustbeplacedintheprograminorderforaclasstoutilizemembersofanotherclass.Chapter6willlookintointerfaceswhichisagroupofrelatedmethods.
Chapter6Interfaces
Aninterfaceisacollectionofrelatedmethods.Interfacesarecomparabletoaclasswherebyitcontainsvariablesandmethods.Howeverbydefault,aninterface’svariableisdeclaredpublic,static,andfinalwhilethemethodisdeclaredabstract.Itispossibleforaninterfacetoperformataskbutusuallythereisnobehaviorimplementation.Inotherwords,mostmethodsinaninterfacedonotcontainabody.Thereforeaninterfacemethodwithoutabodyonlyincludesamethod’ssignature.Asaresult,theinterfacedefineswhattasktoperformbutnothowtoperformthetask.Theclasswhichimplementstheinterfacedecideshowtoperformthetask.Interfacescanextendoneormoreinterfacessimilartoasubclassextendingasuperclass.Thefollowingisthesyntaxforaninterface:
SyntaxaccessmodifierinterfaceinterfaceNameextendsinterfaceName1,interfaceName2,interfaceNameN
{
variableTypevariableName1;
variableTypevariableName2;
variableTypevariableNameN;
methodTypemethodName1(parameter-list);
methodTypemethodName2(parameter-list);
methodTypemethodNameN(parameter-list);
}
SyntaxDetails
Argument Description
accessmodifier Canbepublicornoaccessmodifier.Apublicdeclarationindicatestheinterfacecanbeusedbyanycode.Anoaccessmodifieristhedefaultwhichindicatestheinterfaceisonlyavailabletomembersofitspackage
interface Akeywordusedtodeclareaninterface
interfaceName Thenameofaninterface
extends Anoptionalkeywordthatextendsoneormoreinterfaces
interfaceName1,2,N Oneormoreinterfacesseparatedbyacommathatwillbeextended
variableTypevariableName1,2,N; Oneormoreinterfacevariables
methodTypemethodName1(parameter-list);
Oneormoreinterfacemethods
Figure6.1–InterfaceSyntaxDetails
Thefollowingisaninterfaceexample:
publicinterfaceInterfaceTest
{
publicvoidmethodOne();
publicvoidmethodTwo();
}
Figure6.2–InterfaceExample
Line3declaresaninterfacebyusingthekeyword“interface”witha“public”accessmodifier.Thereforethecodecanbeimplementedbyanyclasswithinanypackage.ThenameoftheinterfaceiscalledInterfaceTest.Lines5and6arevoidabstractmethods“methodOneandmethodTwo”.Thekeyword“abstract”isnotneededwithinaninterface.Noticethesemi-colonatthe
endofeachmethod.Thesemi-colonisplacedattheendofthemethodsbecausethereisnobody/implementation.
Chaptersixwilldiscussthefollowingregardinginterfaces:
InterfaceImplementation
InterfaceVariables
MultipleInheritance
DefaultInterfaceMethod
InterfaceImplementationInterfacesareimplementedusingkeyword“implements”andoneormoreclassesprovideimplementationforthemethods.Ifaclassdoesnotimplementamethodbyprovidingabodythentheclassmustbedeclaredasabstract.Eachclassmayimplementthesameinterfacedifferentlywhilesupportingthesamemethods.Itisimportanttoknowthatoneclasscanimplementmultipleinterfaces.Thefollowingisthesyntaxforaclassimplementinganinterface:
SyntaxclassClassNameextendsSuperClassNameimplementsinterfaceName
{
//ClassBody
}
Thefollowingisanexampleofaclassimplementinganinterface.
packageInterfaceTesting;
publicclassInterfaceExamplesimplementsInterfaceTest
{
publicvoidmethodOne()
{
System.out.println(“ThisisthebodywhichimplementsmethodOne”);
}
publicvoidmethodTwo()
{
System.out.println(“ThisisthebodywhichimplementsmethodTwo”);
}
publicstaticvoidmain(String[]args)
{
InterfaceTestobjInterface=newInterfaceExamples();
objInterface.methodTwo();
}
}
Figure6.3–ClassImplementsAnInterface
ProgramOutput:ThisisthebodywhichimplementsmethodTwo
Note:Thescreenshotdisplaysasplitimageduetotheinterfaceandclassbeinginseparatefiles.Eclipsedisplaysamessagewhichstates“interfacemustbedefinedinitsownfile”iftheinterfaceandclassislocatedinthesamefile.
Line3includesthe“implements”keywordwithintheclassdefinitionLines5–12aretheimplementedmethodswhichhasabody.Eachclassmethodmustmatchtheinterfacemethod.Thereforethemethodsaredeclared“public”,“void”methodtype,andsamesignature.Theclasswouldhavebeendeclaredasabstractifoneofthemethodswerenotimplemented.Anabstractclassresemblesthefollowingdeclaration:
abstractpublicclassInterfaceExamplesimplementsInterfaceTest
InterfaceVariablesInterfaceconstants(knownasconstants)areimplicitlydeclaredaspublic,static,andfinal.Inotherwords,interfacevariablesarebydefaultconstantsinitializedwithavalue.Constantsareunchangeablevaluesassignedtoavariablename.Thevaluesareestablishedinaninterfacewithoutamethodandsharedacrossallfiles.Aclassimplementstheinterfacevariablesinthesamemannerasmethods.Thefollowingisanexampleofaninterfacevariable:
publicinterfaceInterfaceVariable
{
intDAYS_PER_WEEK=7;
intMAX_HOURS_PER_DAY=24;
}
Figure6.4–InterfaceVariableExample
MultipleInheritanceMultipleinheritanceiswhenaninterfaceextendsanotherinterfaceoraclassimplementsmultipleinterfaces.Thekeyword“extends”isusedtoextendaninterface.Anextensionofinterfacesisbeneficialifaprogrammerelectstoaddmoremethods.Errorsaredisplayedifamethodisaddedtotheoriginalinterfaceandtheinterfacehasalreadybeenimplementedbyaclass.Alloftheclasseswhichusedtheoriginalinterfacewillbreakexistingcodebecausethereisnoimplementationofthenewlyaddedmethod.Howevertheoriginalinterfacecangetextendedtoaccommodatethenewmethodinaseparateinterface.Programmerscandecidetoeithercontinueusingtheoriginalinterfaceorstartusingtheextendedinterface.
Aclassinheritsmultipleinterfacesbyusingthekeyword“implements”followedbytheinterfaceswhichareseparatedusingacomma.Aclassmustprovideimplementationsforallmethodsiftheinterfaceinheritsanotherinterfaceortheclassimplementsmultipleinterfaces.Thefollowingisanexampleofmultipleinheritanceforaninterface:
publicinterfaceExtendInterfaceextendsInterfaceTest
{
publicvoidmethodThree();
publicvoidmethodFour();
}
Figure6.5–InterfaceExtendExample
Line3usesthe“extends”keywordtoextendsaninterface“InterfaceTest”.Theextendedinterfacecontainsabstractmethods“methodOneandmethodTwo”fromFigure6.2InterfaceExampleLines5and6displaypublicvoidabstractmethods“methodThreeandmethodFour”.Themethodsfromtheextendedinterfacearenotneededwheninheritinganinterface.Additionalinterfacescanbeextendedbyaddingtheinterfacenameandseparatingallinterfacingwithacomma
Thefollowingisanexampleofaclassimplementingmultipleinterfaces:
publicclassMultipleInterfacesimplementsInterfaceTest,ExtendInterface
{
publicvoidmethodOne()
{
System.out.println(“ThisisthebodywhichimplementsmethodOne”);
}
publicvoidmethodTwo()
{
System.out.println(“ThisisthebodywhichimplementsmethodTwo”);
}
publicvoidmethodThree()
{
System.out.println(“ThisisthebodywhichimplementsmethodThree”);
}
publicvoidmethodFour()
{
System.out.println(“ThisisthebodywhichimplementsmethodFour”);
}
publicstaticvoidmain(String[]args)
{
InterfaceTestobjInterface1=newMultipleInterfaces();
objInterface1.methodOne();
ExtendInterfaceobjInterface3=newMultipleInterfaces();
objInterface3.methodThree();
}
}
Figure6.6–ClassImplementingMultipleInterfaces
ProgramOutput:ThisisthebodywhichimplementsmethodOne
ThisisthebodywhichimplementsmethodThree
Line3usesthe“implements”keywordtoimplementmultipleinterfaces“InterfaceTestandExtendInterface”Lines5–21implementsabody/behaviorforeachmethoddefinedinbothinterfacesLines25–29createobjects“objInterface1andobjInterface3”thatisusedtocallmethods“methodOneandmethodThree”
DefaultInterfaceMethodAdefaultinterfacemethod(knownanextensionmethod)allowsaninterfacemethodtoprovideabody.Therefore,theinterfacemethodsarepermittedtoimplementabehavior.ThischangeoccurredinthereleaseofJDK8wherebyaninterfacehastheoptiontoremainabstractordefineadefaultimplementation.Defaultmethodscontaina“default”keywordwhichprecedesthemethodtype.Anadvantageofdefaultmethodsisaclassdoesnotrequireimplementation.Howeveraclassrequiresimplementationofadefaultmethodifadifferentvalueisreturned.Thefollowingisanexampleofadefaultmethodusingfigures“Figures6.2–InterfaceExampleandFigure6.5–InterfaceExtendExample”.
publicinterfaceDefaultMethod
{
publicvoidmethodOne();
publicvoidmethodTwo();
defaultpublicvoidmethodThree()
{
System.out.println(“ThisisthebodywhichimplementsmethodThree”);
}
defaultpublicvoidmethodFour()
{
System.out.println(“ThisisthebodywhichimplementsmethodFour”);
}
}
Figure6.7–DefaultMethodExample
Chapter6explainedinterfaceswhichisacollectionofrelatedmethods.Generally,the
interfacemethodsdonotcontainabody.Thereforetheinterfacemethodsdefinewhattasktoperformbutnothowtoperformthetask.However,adefaultmethodallowsaninterfacemethodtoprovideabodywhichoccurredinthereleaseofJDK8.Chapter7willdiscusserrors,exceptions,anddebugging.
Chapter7Errors,Exceptions,andDebugging
Allprogramswillincludesomekindoferror.Anerrorisanunwantedproblemintheprogram.Itcanbeanunexpectedproblemsuchasmisspellingakeyword.InJava,theerrorsaregroupedintothreetypes:
1. Syntax–preventscodefromexecuting2. Runtime–generatesanerrorwhentheprogramisexecuting3. Logical–doesnotgenerateanerrormessageduetoafaultinthecode’slogic
Logicalerrorsaredifficulttolocatebecauseanerrormessageisnotgenerated.Usually,logicalerrorsarehiddenuntilaprogrammerdebugstheirprogram.Althougherrorsareunavoidableproblems,someproblemscanbehandledatruntime.Problemshandledatruntimearecalledexceptions.Theprogrammercreatesablockofcodecalledanexceptionhandlerwhichhandleexceptionsinadisciplinedmanner.Abenefitofhandlingexceptionsistheprogramcontinuestorunaftercatchingtheexception.
Debuggingisaprocessthatallowsaprogrammertoobservethencorrectanerror.TheproblemsinaprogramcanbefoundbyusingSystem.out.print,System.out.printlnoradebugger.Adebuggerisatoolthatfollowsacode’slogic.Mostprogrammersprefertouseadebuggerinsteadofseveralprintstatementstoinvestigateaproblem.Ifprintstatementsareused,thentheprogrammermustaddtheprintstatementsandremovetheprintstatementafterresolvingtheproblem.
Chaptersevenwillexplainthefollowingregardingerrors,exceptions,anddebugging.
ErrorTypes
ThrowableExceptionParentClass
Java’sBuilt-InExceptions
CommonExceptions
PrinciplesofHandlingExceptions
Try/CatchBlock
FinallyBlock
CatchAThrowableException
MethodsDefinedByThrowable
ThrowvsThrows
Debugging
ErrorTypesInprogramming,errorsareproblemsthatresultfromamistakeinaprogrammer’scode.Theerrorsarefoundbeforeaprogramexecutes,whenaprogramexecutes,andsometimeshiddenwithinaprogram.Theerrorslocatedbeforeexecutionofaprogramarecalledsyntaxerrors.Errorsfoundduringexecutionofaprogramarecalledruntimeerrors.Thehardesterrorstodiscoverwhicharehiddeninaprogramarecalledlogicalerrors.Nevertheless,allerrorsmustberesolvedtohaveasuccessfulprogram.
SyntaxErrors
Syntaxerrors(knownascompilererrors)stopprogramsfromexecuting.Recallfromthefirstbook“Part1–Java4SeleniumWebDriver”,syntaxisasetofrulesthatspecifiesastructuredcombinationofwordsandsymbols.Ifnotstructuredcorrectly,anerroroccurstopreventthestatementsfromcompiling.Asaresult,theerrorsarenotcompiledduetoaninaccuracyintheprogrammer’scode.
Syntaxerrorsaretheeasiesterrorstolocateandresolve.AnIntegratedDevelopmentEnvironment(IDE)suchasEclipsepointsouttheerrors.Theerrorsaredisclosedbyaredunderlinebeneaththecodeand/orredXtotheleftofalinenumber.Inaddition,atooltipdisplaysamessagethatrevealstheerrorafterhoveringovertheredX.AccordingtoBeginningJava®Programming(2015),syntaxerrorsincludethefollowingexamples(page172):
Misspelledclass,variable,ormethodnames
Misspelledkeywords
Missingsemicolons
Missingreturntypeformethods
Outofplaceormismatchedparenthesesandbrackets
Undeclaredoruninitializedvariables
Incorrectformatofloops,methods,orotherstructures
Thefollowingcodehassyntaxerrorsintheprogram:
publicclassSyntaxError
{
publicstaticvoidmain(String[]args)
{
intx,y,total;
x=10;
y=6,
Total=x+y;
System.out.println(“Thetotalof10+6is“+total);
}
}
Figure7.1–SyntaxErrorExample
Line10displaysanerrorduetoacommaratherthanasemi-colonLine11displaysanerrorbecauseTotalisnotdeclared.Line7declarestotalbutthefirstletterbeginswithalowercase“t”ratherthananuppercase“T”.
ThefollowingisanexampleofEclipserevealingtheerrorafterhoveringovertheredXforline10:
Figure7.2–ErrorMessageAfterHoveringOverRedX
Theerrorstates“Syntaxerrorontoken“,”,;expected”whichmeansthecompilerexpectsasemi-colon.AgrayXwithacircleandwhitebackgroundappearsaftercorrectingthe
error.Consequently,theredunderlineandredXdisappearafterreplacingthecommawithasemi-colontocompletethestatement.
SomeerrorsdisplayayellowcirclewithasmallerredXsimilartoline11.ThiserroruncoversmultiplesolutionsthatmayresolvetheproblemafterclickingtheredX.ThefollowingisascreenshotofEclipsedisplayingpossiblesolutionstofixtheerroronline11:
Figure7.3–PossibleSolutionsAfterClickingTheRedX
SeveralsolutionsunfoldafterclickingtheredXonline11.However,thecorrectsolutionisthefirstoption“Changeto‘total’”.Eclipseautomaticallyupdatesthecodetoreflecttheselectedproposedsolution.Thereforelines10and11displayagrayXwithacircleandwhitebackground.BothX’sareremovedaftersavingthefile.
RuntimeErrors
Runtimeerrorsaredetectedwhenaprogramexecutesaninvalidaction.Invalidactionsareoperationssuchasdividebyzero.Thesyntaxiscorrectsotheprogramrunsbutaproblemoccursduringruntime.Thefollowingisanexampleofaruntimeerror:
publicclassRuntimeError
{
publicstaticvoidmain(String[]args)
{
inta,b,x,y;
intresult,sum;
a=x=10;
b=y=0;
result=a/b;
sum=x+y;
System.out.println(“Whatis10/0?”+result);
System.out.println(“Whatis10+0?”+sum);
}
}
Figure7.4–RuntimeErrorExample
ProgramOutput:Exceptioninthread“main”java.lang.ArithmeticException:/byzero
atErrors.RuntimeError.main(RuntimeError.java:13)
Figure7.5–Console/ProgramOutputScreenshot
Line7declaresfourvariables“a,b,x,y”Line8declarestwovariables“result,sum”Line10initializetwoofthevariables“aandb”to10Line11initializetwoofthevariables“xandy”to0Line13initializevariable“result”todivide‘a’by‘b’Line14initializevariablesumtoadd‘x’plus‘y’
Theprogramexecutesbutaruntimeerroroccursduetoline13.Thereforeexecutionimmediatelystopsanddoesnotexecutelines14–17.Although,line14isavalidoperation,thecompilerwillnotexecutethestatement.TheProgramOutputdisplaysamessagewhichinformstheprogrammeroftheproblem.Firstlineindicatesaproblembyshowing“/byzero”meaninganumberwasdividedbyzero.Secondlinespecifieswheretheproblemoccurredbyshowingthepackagename“Errors”,classname“RuntimeError”,methodname“main”,andlinenumber“13”.
LogicalErrors
Logicalerrorsexecutewithoutanerrorbutlogicallyperformsthewrongtask.Asaresult,thistypeoferrorischallengingunlessaprogrammerknowswhattoexpect.Theactualresultsarecomparedtotheexpectedresultstoverifywhatwentwrong.Logicalerrorssuchasusinganoperatorprecedenceincorrectlyormisplacingasemicolonwillexecuteandproduceimproperresults.Thefollowingareexamplesoflogicalerrors:
publicclassLogicalErrors
{
publicstaticvoidmain(String[]args)
{
inttotal1=(9+(8*7))/6;
inttotal2=(9+8)*(7/6);
inttotal3=9+8*7/6;
inttotal4=(9+8)*7/6;
System.out.println(“Whatistheresultoftotal1:“+total1);
System.out.println(“Whatistheresultoftotal2:“+total2);
System.out.println(“Whatistheresultoftotal3:“+total3);
System.out.println(“Whatistheresultoftotal4:“+total4);
}
}
Figure7.6–OperatorPrecedenceLogicalErrorExample
ProgramOutput:Whatistheresultoftotal1:10
Whatistheresultoftotal2:17
Whatistheresultoftotal3:18
Whatistheresultoftotal4:19
Lines7–10initializeeachvariable“total1,total2,total3,total4”withadifferentoperatorprecedence.Eachvariableproduceadifferentvaluealthoughthevalues“9,8,7,6”arethesame.Thefollowingisanexampleofmisplacingasemicolon:
publicclassLogicalErrors2
{
publicstaticvoidmain(String[]args)
{
inti;
for(i=0;i<5;i++);
{
System.out.println(“Theloopcontrolvariableis“+i);
}
}
}
Figure7.7–MisplacedSemicolonLogicalErrorExample
ProgramOutput:Theloopcontrolvariableis5
Line9incorrectlyplacesasemicolonattheendoftheforloop.Thereforetheprogramoutputs5ratherthan0,1,2,3,4.
ThrowableExceptionParentClassAnexceptionisaJavaclasswherebyjava.lang.Throwableistheparentclass.Therefore,theThrowableexceptionrepresentsallexceptionclasses.Anobjectofaparticularexceptionclassisgeneratedwhenanexceptionisthrowninaprogram.TherearetwomainsubclassesderivingfromtheThrowableparentclass:
1. Error–containsseriousexceptionsthatoccurintheJavaVirtualMachine(JVM).JVMisamachinewithinamachinewhichsolvesproblemsandhelpstheprogramremainsecure.AnErrorsubclassisnotmanagedbytheprogrammer.
2. Exception–containsexceptionsthatoccurintheprogram.AnExceptionsubclassismanagedbytheprogrammer.
Thisbook“Part2–Java4SeleniumWebDriver”willexplaintheExceptionsubclass.Exceptionsfromsubclass“Error”arebeyondaprogrammer’scontrol.ThefollowingisadiagramfromProgramCreekwhichshowsahierarchyofJavaExceptionclasses:
Figure7.8–JavaExceptionClassHierarchy
Java’sBuilt-InExceptionsInJava,thereisarespectableamountofexceptionclassesdefinedinsidethejava.langstandardpackage.Thereforesomeexceptionsareautomaticallyavailableduetoanimplicitimportofjava.langintoeveryprogram.MostoftheexceptionsaresubclassesthatoriginatefromastandardtypecalledRuntimeException.RuntimeExceptioncontainsexceptionsthatarenotcheckedbythecompiler.Allotherexceptionsarecheckedbythecompilerandmustbeincludedinamethod’sthrowslist.Thefollowingisalistofuncheckedandcheckedexceptionsdefinedinthejava.langpackage:
UncheckedExceptions Description
ArithmeticException Arithmeticerror,suchasdivide-by-zero.
ArrayIndexOutOfBoundsException Arrayindexisout-of-bounds.
ArrayStoreException Assignmenttoanarrayelementofanincompatibletype.
ClassCastException Invalidcast.
EnumConstantNotPresentException Anattemptismadetouseanundefinedenumerationvalue.
IllegalArgumentException Illegalargumentusedtoinvokeamethod.
IllegalMonitorStateException Illegalmonitoroperation,suchaswaitingonanunlockedthread.
IllegalStateException Environmentorapplicationisinincorrectstate.
IllegalThreadStateException Requestedoperationnotcompatiblewithcurrentthreadstate.
IndexOutOfBoundsException Sometypeofindexisout-of-bounds.
NegativeArraySizeException Arraycreatedwithanegativesize.
NullPointerException Invaliduseofanullreference.
NumberFormatException Invalidconversionofastringtoanumericformat.
SecurityException Attempttoviolatesecurity.
StringIndexOutOfBoundsException Attempttoindexoutsidetheboundsofastring.
TypeNotPresentException Typenotfound.
UnsupportedOperationException Anunsupportedoperationwasencountered.
Figure7.9–JavaUncheckedExceptions
CheckedExceptions Description
ClassNotFoundException Classnotfound.
CloneNotSupportedException AttempttocloneanobjectthatdoesnotimplementtheCloneableinterface.
IllegalAccessException Accesstoaclassisdenied.
InstantiationException Attempttocreateanobjectofanabstractclassorinterface.
InterruptedException Onethreadhasbeeninterruptedbyanotherthread.
NoSuchFieldException Arequestedfielddoesnotexist.
NoSuchMethodException Arequestedmethoddoesnotexist.
ReflectiveOperationException Superclassofreflection-relatedexceptions.
Figure7.10–JavaCheckedExceptions
Note:Inadditiontojava.lang,thefollowingpackagesincludeexceptions:
java.awt java.net
java.awt.color java.rmi
java.awt.datatransfer java.security
java.beans java.text
Figure7.11–PackagesThatIncludeExceptions
CommonExceptionsCommonexceptionsareexceptionsthatoccurfrequentlyinaprogram.Thesetypeofexceptionhappenstonewprogrammersaswellasexperiencedprogrammers.Thefollowingisalistofcommonexceptionsinalphabeticalorder:
ArrayIndexOutOfBoundsExceptionClassCastExceptionIllegalArgumentExceptionIllegalStateExceptionNullPointerExceptionNumberFormatExceptionOutOfMemoryErrorStackOverFlowError
Arraysstartatindexpositionzerowhichstoresthefirstvalue.Thereforethelastindexpositionisonelessthesizeofthecompletearray.AnArrayIndexOutOfBoundsExceptionisthrownwhenaprogramattemptstoaccessanindexoutsidetheboundariesofthearray.ThefollowingisanArrayIndexOutOfBoundsException:
publicclassCommonException
{
publicstaticvoidmain(String[]args)
{
String[]continents=newString[7];
continents[0]=“Africa”;
continents[1]=“Antarctica”;
continents[2]=“Asia”;
continents[3]=“Australia”;
continents[4]=“Europe”;
continents[5]=“NorthAmerica”;
continents[6]=“SouthAmerica”;
continents[7]=“America”;
System.out.println(“Thereare“+continents.length+”countries”);
}
}
Figure7.12–ArrayIndexOutOfBoundsException/CommonExceptionExample
Line8createsanarraywith7elements“String[]continents=newString[7];”Line17whichcontains“continents[7]=“America”;”isoutofboundsforthearray“continents”Line19isnotexecutedbecausetheerrorcausestheprogramtostop
ProgramOutput:Exceptioninthread“main”java.lang.ArrayIndexOutOfBoundsException:7
atExceptionHandling.CommonException.main(CommonException.java:17)
AccordingtotheProgramOutput,theoutofboundsindexis“7”locatedatline17.Thefirstlineindicatesthereisanexceptionthenshowstheexceptiontype“ java.lang.ArrayIndexOutOfBoundsException ”.Number7specifiestheindexwhichcausestheexception.Thesecondlinedisplayswheretheexceptionislocated” atExceptionHandling.CommonException.main(CommonException.java:17) ”.Thefollowingisatranslationofthesecondline:
Anexceptionoccurredinpackagename”ExceptionHandling”,classname“CommonException”,methodname“main”,atlinenumber17.
PrinciplesofHandlingExceptionsItisunderstoodthatexceptionsareproblemsthatoccuratruntime(duringprogramexecution).Javaallowsanexceptionhandlertohandleexceptionswhichincludebenefits.RemembertheruntimeerrorexamplefromFigure7.4,whereexecutionstoppedduetoadivisionbyzero.Abenefitofhandlingexceptionsistheprogramwillcontinueexecutingafterrespondingtoanerror.Thereforeanerrordoesnotstopprogramexecutionbuttheexceptionhandlerpermitstheprogramtocontinuerunning.InJava,therearefiveinterrelatedkeywordsthatfacilitatethemanagementofhandlingexceptions.Thefollowingisadescriptionofeachkeyword:
1. try–monitorscodewhereanexceptionmightoccur2. catch–handlestheexceptionwhenanerroroccurs3. throw–manuallythrowsacustomexception4. throws–throwsanexceptionthatoccurredfromamethod5. finally–automaticallyexecutescodeafterexitingatryblock
TheJavaVirtualMachine(JVM)catchesallexceptionsiftheexceptionhandlerdoesnotcatchtheexception.JVMdisplaysanerrormessagewhichisgoodfordebuggingbutnotforhandlingexceptions.Itisnotgoodforhandlingexceptionsduetoterminationoftheprogram.
Try/CatchBlockThetry/catchblockallowscodetobetriedtoverifywhetheranexceptionoccurs.Ifanexceptionoccursthentheexceptioniscaughttospecifywhatshouldhappen.Thekeywords“tryandcatch”operatetogetherwhenhandlingexceptions.Tryisusedtocontainthecodethatmaycauseanexceptionwhilecatchmanagestheexception.Bothkeywords“tryandcatch”arecentraltohandlingexceptions.Atryblockisprovidedalongwithoneormorecatchblocks.Itisimportanttoknowthatthetryblockandallcatchblocksarebypassedifnoexceptionoccurs.Thefollowingisthetry/catchblocksyntaxforhandlingexceptions:
Syntaxtry
{
//Codemonitoredbytryblock
}
catch(ExceptionType1excObject)
{
//ExceptionHandlerforExceptionType1
}catch(ExceptionType2excObject)
{
//ExceptionHandlerforExceptionType2
}
Thefollowingisthesyntaxdetailsfortryandcatchblock:
Arguments Description
try Monitorsablockofcodeforanexception
catch Handlesandprocessestheexception
ExceptionType1ExceptionType2
TypeofexceptionthatmustbethenameofaclassinheritedfromtheThrowableclass
excObject Receivesthevalueofanexceptioncaughtbythe
handler.
Figure7.13–SyntaxDetails
Thefollowingisanexampleofatryandcatchexceptionhandler:
publicclassTryCatchBlock
{
publicstaticvoidmain(String[]args)
{
String[]continents=newString[7];
try
{
System.out.println(“Anexceptionhasnotbeenthrown”);
continents[0]=“Africa”;
continents[1]=“Antarctica”;
continents[2]=“Asia”;
continents[3]=“Australia”;
continents[4]=“Europe”;
continents[5]=“NorthAmerica”;
continents[6]=“SouthAmerica”;
continents[7]=“America”;
System.out.println(“Thereare“+continents.length+”continents”);
}
catch(ArrayIndexOutOfBoundsExceptionexc)
{
System.out.println(“Exception!!!-ArrayIndexOutofBounds.Notavalidcontinent”);
}
System.out.println(“Thislineexecutesautomaticallywhetheranexceptionoccursornot”);
}}
Figure7.14–TryandCatchBlockExample
ProgramOutput:Anexceptionhasnotbeenthrown
Exception!!!-ArrayIndexOutofBounds.Notavalidcontinent
Thislineexecutesautomaticallywhetheranexceptionoccursornot
Line8startsthecodemonitoringprocessforerrorsusingthetryblockLine19forcesanexceptionwhendefiningindexposition7whichisoutsideofthearrayboundaries.ThereforethetryblockisterminatedandtheprogramtransferscontroltothecatchblockLine21doesnotexecuteduetotheexceptionatline19Line23startstheexceptionhandlingprocessbylistingtheexceptiontype“ArrayIndexOutOfBoundsException”withinthecatchblockLine25isexecutedwithinthecatchblockaftertheexceptioniscaughtLine27isexecutedfollowingthecatchblock.Thislineexecutesautomaticallywhetheranexceptionoccursornot.
AcommonpracticeinJavaistoassociatemultiplecatchblockswithatryblock.Eachcatchblockmustincludeauniqueexceptiontypesuchasarithmeticexception,arrayindexoutofboundsexception,etc.Theexceptiontypedetermineswhichcatchblockisexecutedaftercreatingmultiplecatchblocks.Thereforeifthearithmeticexceptiontypeisexecutedthenthearrayindexoutofboundsexceptiontypeisbypassed.Thefollowingisanexampleofatryblockwithmultiplecatchblocks:
publicclassMultipleCatchBlocks
{
publicstaticvoidmain(String[]args)
{
intoddNumbers[]={11,33,55,77,99,111};
intevenNumbers[]={0,2,4,6,8};
for(inti=0;i<oddNumbers.length;i++)
{
try
{
System.out.println(“Whatis“+oddNumbers[i]+“/”+evenNumbers[i]+“?“
+””+oddNumbers[i]/evenNumbers[i]);
}
catch(ArithmeticExceptionexcept)
{
System.out.println(“Exception!!!-Cannotdivideanumberbyzero”);
}
catch(ArrayIndexOutOfBoundsExceptionexcept)
{
System.out.println(“Exception!!!-Cannotlocatetheindex”);
}
}
}
}
Figure7.15–MultipleCatchBlocks
ProgramOutput:Exception!!!-Cannotdivideanumberbyzero
Whatis33/2?16
Whatis55/4?13
Whatis77/6?12
Whatis99/8?12
Exception!!!-Cannotlocatetheindex
Line17displaysthefirstcatchblockwhichcontainsanarithmeticexception.Catchblocksareevaluatedaccordingtotheirorderofassociationtothetryblock.Thereforethiscatchblockisevaluatedfirstsinceitoccursfirstintheprogram.Theothercatchblockisignoredwhenamatchisfoundforthisexceptiontype.Line19isexecutedwhenthecodereacheszero“0”inarray“evenNumbers[]”Line21displaysthesecondcatchblockwhichcontainsanarrayindexoutofboundsexceptionLine23isexecutedwhenthecodesearchesforanindexthatisnotavailableinarray“evenNumbers[]”.Theothercatchblockisignoredwhenamatchisfoundforthisexceptiontype.
FinallyBlockThefinallyblockisanextensionoftry/catchblock.Thisblockconfirmscertainactionssuchaswritingdatatoafileisperformedwhetheranexceptionoccursornot.Javaallowsthesameactiontobeplacedwithinthetryblockandcatchblock.Ontheotherhand,placingthesamecodeinbothblocks“tryblockandcatchblock”createsduplicatecode.
Forexample,whathappensifthereisnoexceptionanddataneedstobewrittentoafile.Inthisscenario,thetryblockexecutesthecodewhilethecatchblockisbypassed.However,ifthereisanexception,thecatchblockexecutesthecodewhilethetryblockisbypassed.Therefore,aprogrammermustplacecodeinthetryandcatchblockforcertaintythatdataiswrittentoafile.Inprogramming,itisdifficulttoreadandmaintainduplicatecode.Afinallyblockisnotrequiredbutitwillcertainlywritedatatothefilewhenanexceptionisthrownandwhenitisnotthrown.Thefollowingisthesyntaxofatry/catch/finallyblock:
Syntaxtry
{
//Codemonitoredbytryblock
}
catch(ExceptionType1excObject)
{
//ExceptionHandlerforExceptionType1
}catch(ExceptionType2excObject)
{
//ExceptionHandlerforExceptionType2
}finally
{
//Executecodeifexceptionoccursornot
}
Thefollowingisanexampleusingthetry/catch/finallyblock:
publicclassFinallyBlock
{
publicstaticvoidmain(String[]args)
{
intoddNumbers[]={11,33,55,77,99,111};
intevenNumbers[]={0,2,4,6,8};
for(inti=0;i<oddNumbers.length;i++)
{
try
{
System.out.println(“Whatis“+oddNumbers[i]+“/”+evenNumbers[i]+“?“
+””+oddNumbers[i]/evenNumbers[i]);
}
catch(ArithmeticExceptionexcept)
{
System.out.println(“Exception!!!-Cannotdivideanumberbyzero”);
}
catch(ArrayIndexOutOfBoundsExceptionexcept)
{
System.out.println(“Exception!!!-Cannotlocatetheindex”);
}
finally
{
System.out.println(“PerformanAction”);
}
}
}
}
Figure7.16–FinallyBlock
ProgramOutput:Exception!!!-Cannotdivideanumberbyzero
PerformanAction
Whatis33/2?16
PerformanAction
Whatis55/4?13
PerformanAction
Whatis77/6?12
PerformanAction
Whatis99/8?12
PerformanAction
Exception!!!-Cannotlocatetheindex
PerformanAction
Line25startsthefinallyblockattheendofthetry/catchblockLine27isexecutedautomaticallywhenanexceptionisthrownandwhenanexceptionisnotthrown
CatchAThrowableExceptionAThrowableexceptioncanbeutilizedtocatchallexceptionssinceitistheparentclass.ThesuperclassThrowablematchesallofitssubclasseswhichincludesRuntimeException.Inordertocatchexceptionsforbothclasses,thesuperclassandsubclassmustbeimplementedintheirrespectivecatchblock.ThefollowingisaThrowablesuperclassandArithmeticExceptionsubclassexampleusingcodefromFigure7.15:
publicclassSuperSubClassException
{
publicstaticvoidmain(String[]args)
{
intoddNumbers[]={11,33,55,77,99,111};
intevenNumbers[]={0,2,4,6,8};
for(inti=0;i<oddNumbers.length;i++)
{
try
{
System.out.println(“Whatis“+oddNumbers[i]+“/”+evenNumbers[i]+“?“
+””+oddNumbers[i]/evenNumbers[i]);
}
catch(ArithmeticExceptionexcept)
{
System.out.println(“Exception!!!-Cannotdivideanumberbyzero”);
}
catch(Throwableexcept)
{
System.out.println(“Exception!!!-TheThrowableExceptioncaughtanerror”);
}
}
}
}
Figure7.17–ThrowableandArithmeticExceptionExample
ProgramOutput:Exception!!!-Cannotdivideanumberbyzero
Whatis33/2?16
Whatis55/4?13
Whatis77/6?12
Whatis99/8?12
Exception!!!-TheThrowableExceptioncaughtanerror
Line18implementsthesubclassexception“ArithmeticException”insidethefirstcatchblockLine20isexecutedwhenthecodereacheszero“0”inarray“evenNumbers[]”Line22implementstheThrowableexceptioninsidethesecondcatchblockLine24isexecutedwhenthecodesearchesforanindexthatisnotavailableinarray“evenNumbers[]”
TheThrowablesuperclassandsubclassareallowedtocatchexceptionsbyplacingthesubclassinthefirstcatchblock.AnerroroccursiftheThrowableexceptionisimplementedinthefirstblock.Theerrormessagestates“UnreachablecatchblockforArithmeticException.ItisalreadyhandledbythecatchblockforThrowable”.
MethodsDefinedByThrowableAsmentioned,Throwableisasuperclassofeveryexceptionsubclass.ThereforeallexceptionssupportmethodsdefinedbyThrowable.AnexceptioncanbecaughtbyaThrowableexceptionbutitisagenericcatch.ItisbesttouseaspecificexceptionsuchasArithmeticExceptionwhenhandlingexceptions.However,someofthemethodsdefinedbyThrowablecanhelpthesuperclassbemorespecificwhenhandlingexceptions.ThefollowingisalistofThrowablemethods:
Method Description
fillInStackTrace() Fillsinthecompletedexecutionstacktrace
getLocalizedMessage() CreatesalocalizeddescriptionoftheThrowableexception
getMessage() ReturnsadetailmessageoftheThrowableexception
printStackTrace() Printsthestacktrace
printStackTrace(PrintStream) Printsthestacktracetothespecifiedprintstream
printStackTrace(PrintWriter) Printsthestacktracetothespecifiedprintwriter
toString() Returnsashortexceptiondescriptionafterbeingcalledbyprintln()method
Figure7.18–MethodsDefinedbyThrowable
OneofthemostcommonmethodsdefinedbyThrowableistheprintStackTrace()method.Thismethodprintsthestacktrace“standarderrormessage”.ThefollowingisanexampleofprintStackTrace()method:
publicclassThrowableMethod
{
publicstaticvoidmain(String[]args)
{
intoddNumbers[]={11,33,55,77,99,111};
intevenNumbers[]={0,2,4,6,8};
for(inti=0;i<oddNumbers.length;i++)
{
try
{
System.out.println(“Whatis“+oddNumbers[i]+“/”+evenNumbers[i]+“?“
+””+oddNumbers[i]/evenNumbers[i]);
}
catch(ArithmeticExceptionexceptName)
{
System.out.println(“Exception!!!-Cannotdivideanumberbyzero”);
}
catch(ThrowableexceptName)
{
System.out.println(“Exception!!!-TheThrowableExceptioncaughtthefollowingerror:”+“\n”);
exceptName.printStackTrace();
}
}
}
}
Figure7.19–PrintStackTraceMethod
ProgramOutput:Exception!!!-Cannotdivideanumberbyzero
Whatis33/2?16
Whatis55/4?13
Whatis77/6?12
Whatis99/8?12
Exception!!!-TheThrowableExceptioncaughtthefollowingerror:
java.lang.ArrayIndexOutOfBoundsException:5
atExceptionHandling.ThrowableMethod.main(ThrowableMethod.java:14)
Line21definesthesecondcatchblockwithanexceptionobject“exceptName”thatwillbeusedtodisplaytheexceptionvalueLine24createstheprintStackTrace()methodbyusingtheexceptionobjectfollowedbythedotoperator
ThrowvsThrowsThekeyword“throw”isusedtoexplicitlythrowanexception.AnobjectoftheexceptionparentclassThrowablemustbecreatedtothrowanexception.Therearetwowaystomanuallythrowanexception:
1. Useaparameterinthecatchblock2. Createanobjectusingthenewoperator
Thefollowingisthesyntaxformanually/explicitlythrowinganexception:
SyntaxthrowexcObject
Thefollowingisanexampleofthrowinganexceptionusingthenewoperator:
publicclassThrowTest
{
intDivideByZero(intnum1,intnum2)
{
if(num2==0)
{
System.out.println(“Anerrorhasnotbeenthrown”);
thrownewArithmeticException(“Exception!!!-Cannotdivideanumberbyzero”);
}
else
{
returnnum1/num2;
}
}
publicstaticvoidmain(String[]args)
{
try
{
ThrowTestobjThrow=newThrowTest();
System.out.println(objThrow.DivideByZero(34,0));
}
catch(Exceptionexc)
{
System.out.println(exc.getMessage());
}
finally
{
System.out.println(“Performanactionifexceptionthrownornot“);
}
}
}
Figure7.20–ThrowExceptionExample
ProgramOutput:Anerrorhasnotbeenthrown
Exception!!!-Cannotdivideanumberbyzero
Performanactionifexceptionthrownornot
Line10createsanexplicitexceptionusingkeywords“throw”and“new”.Thekeyword“new”isusedtoconstructaninstanceof“ArithmeticException”withaStringparameter.Line24passesthevalues“34and0”tomethod“DivideByZero”whichstartsatline5.Parametervariable“num2”receiveszero“0”whichcausestheexceptionLine28displaysthestringparameterfromline10bycallingmethod“getMessage”
Thekeyword“throws”isusedtoexplicitlydefineexceptionsthatamethodmightthrow.Therefore,amethodcallmusthandlealloftheexceptionsifadeclaredmethodhasoneormoreexceptionsusingthekeyword“throws”.Thefollowingisanexampleusing“throws”todefineanexceptionlist:
SyntaxmethodTypemethodName(parameter-list)throwsexc-list{//MethodBody}
Thefollowingisanexampleusing“throws”todefineanexception:
publicclassThrowsKeywordTest
{
staticvoidthrowMethod()throwsNullPointerException
{
System.out.println(“Anerrorhasnotbeenthrown”);
thrownewNullPointerException(“Exception!!!-NullPointer”);
}
publicstaticvoidmain(String[]args)
{
try
{
throwMethod();
}
catch(NullPointerExceptionexc)
{
System.out.println(“ExceptionType“+exc);
}
}
}
Figure7.21–ThrowsExceptionExample
Line5definesanexception“NullPointerException”usingthekeyword“throws”.Multipleexceptionscanbecreatedbywayofacomma-separatedlistofexceptionsthatthemethodmightthrow.Line15callsmethod“throwMethod”whichhasanexceptionLine19displaystheNullPointerException
Thefollowingdescribesthedifferencesbetweenthrowandthrows:
Throw Throws
Canthrowoneexception Candeclaremultipleexceptions
Followedbyaninstance Followedbyanexceptionclass
Usedwithinamethod’sbody Usedwithinamethod’ssignature
Figure7.22–ThrowvsThrows
DebuggingAtsomepointwhiledevelopingaprogram,theprogramwillconsistoferrorsand/orexceptions.Thekeyforeveryprogrammeristolearnhowtodebugtheprogram.Debuggingistheprocessofdetectingandremovingunexpectedconditionsfromtheprogram.AnIDEsuchasEclipseprovidesadebuggertoolwhichfacilitatethedebuggingprocess.Thetoolallowsaprogrammertoexecutetheircodeline-by-linetoviewwhatishappeningoneachline.
Breakpoints
Tostartthedebuggingprocess,abreakpointmustbeplacedintheprogram.Thepurposeofbreakpointsistopauseexecutionoftheprogram.Asaresult,theprogramrunsuptothebreakpointuntilthedebuggerreceivesadditionalinstructionsonwhattodonext.Aprogramcanhaveseveralbreakpointssetorclearedatanytime.Thefollowingisalistofwaystosetorclearabreakpoint:
1. Double-clicktheleftofthedesiredlinenumber2. Movethecursortotheleftofthedesiredlinenumber,right-clickthemouse,then
selectToggleBreakpoint3. Movethecursortothedesiredlineandpressshortcutkeys(Ctrl+Shift+B)
Abluedotislocatednexttothelinenumberaftersettingthebreakpoint.Next,theprogrammermustopentheDebugperspectivewhichprovidesacombinationofviewsandeditorstodebugaprogram.TheDebugperspectivecanbeopenedthefollowingways:
1. PressF112. Right-clickinsidetheprogram,selectDebugAs,thenJava3. ClickRunthenselectDebugAs,thenJavaApplication4. Shortcutkeys(Alt+Shift+D,J)
Note:SelectYeswhenEclipsedisplaysaConfirmPerspectiveSwitchdialogue.
Figure7.23–ConfirmPerspectiveSwitchScreenshot
ThefollowingisascreenshotoftheDebugperspective:
Figure7.24–DebugPerspectiveScreenshot
StepThroughTheProgram
Steppingthroughtheprogramiswhenthedebuggersteps/executesalineofcodeonelineatatime.Theprocessofsteppinghelpstheprogrammerunderstandhowthelogicworks.FunctionkeysF5,F6,F7,andF8controlexecutionofsteppingthroughtheprogram.
StepInto(F5)–Executesonlythecurrentcodeline.Thedebuggerpausesateverylineofcodethatissteppedintoincludingacalledmethod.StepOver(F6)–Executesthecurrentmethodwithoutdisplayingeverystep.Thedebuggerstaysinthemainroutinewhilethesubroutinesexecuteinthebackground.StepReturn(F7)–Executesthecurrentmethodinthebackgroundwhilereturningtothemethodthatwassteppedinto.Resume(F8)–Executesuntilthenextbreakpoint
Chapter7discussederrors,exceptions,anddebugging.Anerrorisaproblemintheprogram.Thethreetypesoferrorsaresyntax,runtime,andlogical.Exceptionsareerrorsthatoccuratruntime.However,anexceptionhandlerallowsablockofcodetomanagetheexceptions.Thereforetheexceptionallowsexecutiontocontinueafterrespondingtotheproblem.Debuggingisaprocessthatpermitsaprogrammertodetectandresolveallerrors.Chapter8isanintroductionJava’sinput/outputsystem.
Chapter8UtilizingInputandOutput
Java’sInput/Output(I/O)package“java.io”containsmanyclasses,interfaces,andmethods.Thepackageprovidesinputandoutputstreamsthatreads/writesdata.Dataisreadfromaninputsourceandwrittentoanoutputdestination.Aninputsourceandoutputdestinationisanythingthatcontainsinformationsuchasafile,string,ormemory.Inputisdatareceivedbytheprogramandoutputisdatasentfromtheprogram.Aprogramcanbeawebbrowserwhichreceivesandsendsdata.
ChaptereightisanintroductionwhichcoversthefollowingregardingJava’slargeInput/Outputsystem:
Streams
FileInput/Output
StreamsProgramsinJavaperforminputandoutputthroughstreams.Streamsrepresentasequenceofdatathatisreadorwritten.Thereforestreamshavetheabilitytopassdataorperformtransformationsondata.AccordingtoOracle,theInputStreamclassisanabstractsuperclassofallclassesrepresentinganinputstreamofbytes.TheOutputStreamclassisanabstractsuperclassofallclassesrepresentinganoutputstreamofbytes.ThereforetheI/Oclassesisanabstractionthatsuppliesorconsumesinformation.Streamsprovideavarietyofdataformats.
ByteStreams
BytestreamclassesarederivedfromanInputStreamandOutputStream.Programsusingbytestreamsprovidefunctionalityandmanagedetailsofreading/writing.Thefollowingisalistofbytestreamclasses.
ByteStream Description
BufferedInputStream Addsfunctionalitytoanotherinputstream-namely,theabilitytobuffertheinputandtosupportthemarkandresetmethods
BufferedOutputStream Implementsabufferedoutputstream
ByteArrayInputStream Inputstreamthatreadsfromabytearray
ByteArrayOutputStream Outputstreamthatwritestoabytearray
DataInputStream AninputstreamthatincludesmethodsforreadingtheJavastandarddatatypes
DataOutputStream AnoutputstreamthatincludesmethodsforwritingtheJavastandarddatatypes
FileInputStream Inputstreamthatreadsfromafile
FileOutputStream Outputstreamthatwritestoafile
InputStream Abstractclassthatisthesuperclassofallclassesrepresentinganinputstreamofbytes
ObjectInputStream Inputstreamforobjects
ObjectOutputStream Outputstreamforobjects
OutputStream Abstractclassthatisthesuperclassofallclassesrepresentinganoutputstreamofbytes
PipedInputStream Providesdatabytesthatarewrittentothepipedoutputstream
PipedOutputStream Connectedtoapipedinputstreamtocreateacommunicationspipe
PrintStream Outputstreamthatcontainsprint()andprintln()
PushbackInputStream Inputstreamthatallowsbytestobereturnedtothestream
SequenceInputStream Representsthelogicalconcatenationofotherinputstreams.
Figure8.1–ByteStream
ThefollowingisalistofInputStreammethods:
InputStreamMethod Description
abstractintread() Readsthenextbyteofdatafromtheinputstream
booleanmarkSupported() Testsifthisinputstreamsupportsthemarkandresetmethods
intavailable() Returnsanestimateofthenumberofbytesthatcanberead(orskippedover)fromthisinputstreamwithoutblockingbythenextinvocationofamethodforthisinputstream
intread(byte[]b) Readssomenumberofbytesfromtheinputstreamandstoresthemintothebufferarrayb
intread(byte[]b,intoff,intlen)
Readsuptolenbytesofdatafromtheinputstreamintoanarrayofbytes
longskip(longn) Skipsoveranddiscardsnbytesofdatafromthisinputstream
voidclose() Closesthisinputstreamandreleasesanysystemresourcesassociatedwiththestream
voidmark(intreadLimit) Marksthecurrentpositioninthisinputstream
voidreset() Repositionsthisstreamtothepositionatthetimethemarkmethodwaslastcalledonthisinputstream
Figure8.2–InputStreamMethods
ThefollowingisalistofOutputStreammethods:
OutputStreamMethods
Description
abstractvoidwrite(intb)
Writesthespecifiedbytetothisoutputstream
voidclose() Closesthisoutputstreamandreleasesanysystemresourcesassociatedwiththisstream
voidflush() Flushesthisoutputstreamandforcesanybufferedoutputbytestobewrittenout
voidwrite(byte[]b) Writesb.lengthbytesfromthespecifiedbytearraytothisoutputstream
voidwrite(byte[]b,intoff,intlen)
Writeslenbytesfromthespecifiedbytearraystartingatoffsetofftothisoutputstream
Figure8.3–OutputStreamMethods
CharacterStream
CharacterstreamclassesarederivedfromReaderandWriterwhichoffersimilarmethodsasInputStreamandOutputStream.ThecharacterstreamclassmanagesI/Oparallelingthebytestreamclass.Unicodecharactersaretranslatedfromcharacterstreamclasses.Thefollowingisalistofcharacterstreamclasses:
CharacterStream Description
BufferedReader Readstextfromacharacter-inputstream,bufferingcharacterssoastoprovidefortheefficientreadingofcharacters,arrays,andlines.
BufferedWriter Writestexttoacharacter-outputstream,bufferingcharacterssoastoprovidefortheefficientwritingofsinglecharacters,arrays,andstrings.
CharArrayReader Thisclassimplementsacharacterbufferthatcanbeusedasacharacter-inputstream.
CharArrayWriter ThisclassimplementsacharacterbufferthatcanbeusedasanWriter.
FileReader Convenienceclassforreadingcharacterfiles.
FileWriter Convenienceclassforwritingcharacterfiles.
FilterReader Abstractclassforreadingfilteredcharacterstreams
FilterWriter Abstractclassforwritingfilteredcharacterstreams
InputStreamReader AnInputStreamReaderisabridgefrombytestreamstocharacterstreams:Itreadsbytesanddecodesthemintocharactersusingaspecifiedcharset
LineNumberReader Abufferedcharacter-inputstreamthatkeepstrackoflinenumbers
OutputStreamWriter AnOutputStreamWriterisabridgefromcharacterstreamstobytestreams:Characterswrittentoitareencodedintobytesusinga
specifiedcharset
PipedReader Pipedcharacter-inputstreams
PipedWriter Pipedcharacter-outputstreams.
PrintWriter Printsformattedrepresentationsofobjectstoatext-outputstream.
PushbackReader Acharacter-streamreaderthatallowscharacterstobepushedbackintothestream.
Reader Abstractclassforreadingcharacterstreams
StringReader Acharacterstreamwhosesourceisastring.
StringWriter Acharacterstreamthatcollectsitsoutputinastringbuffer,whichcanthenbeusedtoconstructastring
Writer Abstractclassforwritingtocharacterstreams
Figure8.4–CharacterStream
BufferedStreams
Bufferedinputstreamsreaddatafromamemoryareaknownasabuffer.Ontheotherhand,bufferedoutputstreamswritedatatoabuffer.InJava,majorityofthestreamsareunbufferedmeaningeachreadorwriterequestismanageddirectlybytheoperatingsystem(OS).AmanagementrequestbyanOSmakeprogramslessefficientduetoarequesttriggeringanexpensiveoperation.
BufferedI/Ostreamsisimplementedtoreduceoverheadbyadministeringadedicatedspaceinmemory.Thededicatedspacestoresdatainanefficientmanner.Forinstance,thebufferedinputstreamisonlycalledwhenthebufferisemptyandbufferedoutputstreamsareonlycalledwhenthebufferisfull.Therefore,thefourfollowingbufferclassescanbeusedtowraparoundabyteorcharacterI/Ostream:
BufferClasses Description
BufferedInputStream Suppliesbufferingtooutputstreams
BufferedOutputStream Suppliesbufferingtoinputstreams
BufferedReader Readstextfromacharacterinputstream
BufferedWriter Writestexttoacharacteroutputstream
Figure8.5–BufferedStreams
DataStreams
DatastreamsserveasafoundationforStringvalues,binaryinput,andoutputofprimitivedatatypessuchasboolean,byte,char,double,float,int,long,andshort.ADataInputorDataOutputinterfaceisimplementedbyallofthedatastreams.TheDataInputinterfaceprovidesmethodsforreadingwhileDataOutputinterfaceprovidesmethodsforwritingallofJava’sprimitivetypes.DataInputStreamimplementstheDataInputinterfaceandDataOutputStreamimplementstheDataOutputinterface.ThefollowingisalistofmethodsforDataInputStreamandDataOutputStream:
DataInputStreamMethod Description
booleanreadBoolean() Readsabooleaninputfromthefile
bytereadByte() Readsabyteinputfromthefile
charreadChar() Readsacharinputfromthefile
doublereadDouble() Readsadoubleinputfromthefile
floatreadFloat() Readsafloatinputfromthefile
intreadInt() Readsaintinputfromthefile
longreadLong() Readsalonginputfromthefile
shortreadShort() Readsashortinputfromthefile
Figure8.6–DataInputStreamMethods
DataOutputStreamMethod
Description
voidwriteBoolean(booleanv)
Writesabooleanoutputtothefile
voidwriteByte(intv) Writesabyteoutputtothefile
voidwriteChar(intv) Writesacharoutputtothefile
voidwriteDouble(doublev) Writesadoubleoutputtothefile
voidwriteFloat(floatv) Writesafloatoutputtothefile
voidwriteInt(intv) Writesaintoutputtothefile
voidwriteLong(longv) Writesalongoutputtothefile
voidwriteShort(intv) Writesashortoutputtothefile
Figure8.7–DataOutputStreamMethods
StandardStreams
JavaprovidessupportforstandardI/Osoaprogramreceivesinputfromakeyboardandproduceoutputontothecomputermonitor.AclasscalledSystemwithinthejava.langpackageincludesthreestandardstreamvariables:in,out,anderr.System.inisanInputStreamobjectwhileSystem.outandSystem.errarePrintStreamobjects.PrintStreamallowsformatteddatatobewrittentoanOutputStream.Thefollowingisadescriptionofthestandardstreams:
StandardStream Description
StandardInput (System.in)/BydefaultthekeyboardStandardInputcontrolswheretheprogramreceivesinput
StandardOutput (System.out)/BydefaulttheconsoleStandardOutputcontrolswheretheprogramsendsoutput
StandardError (System.err)/BydefaulttheconsoleStandardErrorusedtooutputanerrorsuppliedbytheprogram
Figure8.8–StandardStreams
FileInput/OutputFilesarestoredandorganizedsotheycanberetrievedandaccessedinaconvenientmanner.InJava,therearetwopackages“java.io.fileandjava.nio.fio”setasideforfiles.Package“java.nio.file”isthenewerfilesystemlabeledNIO2meaning“NewInput/Output2”.NIO2identifiesinterfacesandclassestoaccessfiles,fileattributes,andfilesystems.
Path
Mostfilesarearrangedinahierarchical(knownastree)structure.Therootnode(i.e.,C:\)islocatedatthetopofthehierarchyfollowedbyfoldersandfiles.Allfoldershavetheabilitytoincludeadditionalfoldersandfiles.Auniquepathidentifiesaspecificresource(fileorfolder)withinatree.Thereforethepath“C:\java4selenium\input_output\test.txt”indicatesafilenamed“test”islocatedinafoldernamed“input_output”withinanotherfoldernamed“java4selenium”.ThefollowingarecommonPathInterfacemethodsforJava’sfilesystem:
PathConversion
toAbsolutePath()ReturnsaPathobjectcharacterizingtheabsolutepathtoRealPath(LinkOption…options)ReturnstherealpathofanexistingfiletoUri()ReturnsaURItocharacterizethispath
RetrievePathInformation
getFileName()ReturnsthenameofthefileorlastelementinthePathobjectgetName(intindex)ReturnsthePathelementcorrespondingtothespecifiedindexgetNameCount()ReturnsthenumberofnameelementsinthepathgetParent()ReturnstheparentpathornullgetRoot()Returnsthepath’srootnormalize()Returnsapathwithredundantnameelementseliminated
resolve(Pathother)Resolvethespecifiedpathagainstthispathrelativize(Pathother)ConstructsarelativepathbetweenthispathandaspecifiedpathsubPath(intbeginIndex,intendIndex)ReturnsthesubsequenceofthePathindicatedbystartingandendingindicestoStringReturnsthepath’sstringrepresentation
Files
Filescanbecreated,deleted,moved,copied,andverifiedforexistence.Bothpackages“java.io.fileandjava.nio.fio”includemethodswhichread,write,andmanipulatefilesandfolders.ThefollowingarecommonmethodswithinbothpackagesforJava’sfilesystem:
CheckExistenceMethods
exists(Pathpath,LinkOption…options)TestsiftheresourceexistnotExists(Pathpath,LinkOption…options)Testsiftheresourcelocatedbythispathdoesnotexist
CheckStatusMethods
isDirectory(Pathpath,LinkOption…options)TestsiftheresourceisadirectoryisExecutable(Pathpath)TestsiftheresourceisexecutableisFile()TestsiftheresourceindicatedbythisabstractpathnameisanormalresourceisReadable(Pathpath)TestsiftheresourceisreadableisSameFile(Pathpath,Pathpath2)TestsiftworesourceslocatethesameresourceisWritable(Pathpath)Testsiftheresourceiswritable
CopyMethod
copy(Pathsource,Pathtarget,CopyOption…options)Copytheresourcetoaspecifiedtarget
CreateMethod
createFile(Pathpath,FileAttribute<?>…attrs)Createsanewandemptyresource
DeleteMethod
Delete(Pathpath)Deletestheresource
Note:Foldersmustbeemptybeforeitcanbedeleted
DirectoryMethods
list()ReturnsanarrayofstringsnamingtheresourcesanddirectoriesinthedirectoryindicatedbythisabstractpathnamelistFiles()Returnsanarrayofabstractpathnamesindicatingthefilesinthedirectoryindicatedbythisabstractpathname
MoveMethod
move(Pathsource,Pathtarget,CopyOption…options)Moveorrenametheresourcetoatarget
ReadMethods
readAllBytes(Pathpath)ReadsallthebytesfromtheresourcereadAllLines(Pathpath,Charsetcs)Readalllinesfromtheresource
SpaceMethods
length()ReturnsthelengthoftheresourceindicatedbythisabstractpathnamegetFreeSpace()ReturnsthenumberofunallocatedbytesinthepartitionnamedbythisabstractpathnamegetTotalSpace()ReturnsthesizeofthepartitionnamedbythisabstractpathnamegetUsableSpace()Returnsthenumberofbytesavailabletothisvirtualmachineonthepartitionnamedbythisabstractpathname
WriteMethods
write(Pathpath,byte[]bytes,OpenOption…options)Writesbytestotheresourcewrite(Pathpath,Iterable<?extendsCharSequence>linesCharsetcs,OpenOption…options)Writelinesoftexttotheresource
ConclusionJavaisapopularobject-orientedprogramming(OOP)languagecenteredaroundobjects.Thegoalof“Part2–Java4SeleniumWebDriver”wastoprovidedeepconceptsofJava.OneofthebenefitsofJavaistheabilitytoreusecode.Thefollowingaretake-awaytopicsfromthisbook:
Classes:Aclassisatemplateforobjectswhichcontainsdataandcodethatoperatesonthedata.
Objects:Objectsarethefoundationtoobject-orientedprogramming.Itconsistsoftwocharacteristics:stateandbehavior.Stateidentifiestheobjectandbehaviorrepresenttheactionsoftheobject.
Methods:Amethodisablockofcodethatperformaspecifictask.
Inheritance:Inheritanceisahierarchicalconceptwhichallowsreusablecodeandobjectstobeextended.
Package:Apackageisacollectionofrelatedclasses.
Interface:Aninterfaceisacollectionofrelatedmethods.
Error:Anerrorisanunavoidableprobleminaprogram.
Exceptions:Anexceptionisanerrorthatoccursatruntime
Debugging:Debuggingistheprocessofdetectingandremovingunexpectedconditionsfromtheprogram.
Resources1.BeginningJava®ProgrammingTheObject-OrientedApproachBartBaesens,AiméeBackiel,SeppevandenBroucke
2.JavaABeginner’sGuideSixthEditionCreate,Compile,andRunJavaProgramsTodayHerbertSchildt
3.ORACLEJavaDocumentationTheJavaTMTutorialshttps://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.htmlhttps://docs.oracle.com/javase/7/docs/api/https://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html#package_description
4.ProgramCreekhttp://www.programcreek.com/2009/02/diagram-for-hierarchy-of-exception-classes/
5.TIOBEhttp://www.tiobe.com/tiobe_index
6.Dictionary.comhttp://www.dictionary.com/browse/object?s=thttp://www.dictionary.com/browse/annotation?s=t
BooksbyRexJonesII1. FreeBookAbsoluteBeginner
(Part1)YouMustLearnVBScriptforQTP/UFTDon’tIgnoreTheLanguageForFunctionalAutomationTesting
2. (Part2)YouMustLearnVBScriptforQTP/UFTDon’tIgnoreTheLanguageForFunctionalAutomationTesting
3. FreeBookAbsoluteBeginner(Part1)Java4SeleniumWebDriverComeLearnHowToProgramForAutomationTesting
4. (Part2)Java4SeleniumWebDriverComeLearnHowToProgramForAutomationTesting
ComingSoon
5. FreeBookAbsoluteBeginner(Part1)SeleniumWebDriverforFunctionalAutomationTestingYourBeginnersGuideToBecomeGood
6. (Part2)SeleniumWebDriverforFunctionalAutomationTestingYourGuideToStayEffective
SignUpToReceive1. 3TipsToMasterSeleniumWithin30Days
http://tinyurl.com/3-Tips-For-Selenium
2. 3TipsToMasterQTP/UFTWithin30Dayshttp://tinyurl.com/3-Tips-For-QTP-UFT
3. FreeWebinars,Videos,andLiveTrainingshttp://tinyurl.com/Free-QTP-UFT-Selenium