You are on page 1of 303

Learning Java

Java Developer Class


မင#$လ&င#
Java Developer Class

Preview 6
Program ဆiuတ+ဘ+လ- 6
Java ဆiuတ+ဘ+လ- 7
Object Oriented Programming 7
Strong Type Programming 8
Java ဟ+ဘယ#လiu eပ2eပ3က#လ+ခ-6သလ- 8

Java န-9 ဘ+eတ&eရ$လiuရလ- 8


Java Standard Edition (Java SE) 9
Java Enterprise Edition (Java EE) 9
Java Micro Edition (Java ME) 9
Java ကiueရ$ဖiuဘ+eတ&လiuအပ#လ- 9
ဒ?စ+အuပ#န-9 ဘ+eတ&ကiueလ6လ+Aiuင#မလ- 10
References 11
Language Fundamentals 12
What is Class 12
Anatomy of a Class 13
Minimum Requirements 13
Class Declaration 14
Class Members 15
Visibility and Accessibility 35
Packages 35
Access Modifiers 40
Java Data Types 44
Primitive Data Types 44
Reference Data Types 51
Wrapper Classes of Primitives 54
Arrays 59
ဘ+လiu Array eတ&ကiuအသuB$Cပuဖiuလiuအပ#ခ-6တ+လ- 59
Declaring Arrays 60
Accessing Array Elements 62
Multi Dimension Arrays 64
Operators 68
Assignment Operator 69

Learning Java 2 မင#$လ&င#


Java Developer Class
Arithmetic Operators 71
Relational Operator 75
Logical Operators 78
Statements 82
Declaration Statements 83
Expression Statements 84
Control Flow Statements 85
Object Oriented Programming 99
About OOP 100
Encapsulation 102
Encapsulation မCဖစ#တ-6အတ&က# Cဖစ#တတ#တ-6Cပဿန+ 102
Encapsulation Cဖစ#eအ+င# ဘယ#လiueရ$မလ- 103
Encapsulation eFက+င#6 ရAiuင#တ-6 အကGiu$မG+$ 107

Inheritance 108
Inheritance ဆiuတ+ဘ+လ- 108
Inheritance လuပ#လiuရတ+eတ&ကဘ+eတ&လ- 110
Usage of Inheritance 114
Composition 115
Using Composition 116
Abstraction 117
ဘ+eFကင#6 Abstraction ကiu အသuB$Cပuရတ+လ- 117
Abstraction Cဖစ#eအ+င#ဘယ#လiueရ$မလ- 119
Abstraction ကiu သuB$တ-6အတ&က# ဘ+Cဖစ#မလ- 124

Polymorphism 125
Object တစ#ခuကiu Reference အမGiu$မGiu$ကeန Reference လuပ#eနAiuင#Cခင#$ 125
Override eFက+င#6 Object ပuBစBအမGiu$မGiu$eရ$သ+$Aiuင#Cခင#$ 126
မHန#ကန#eသ+ Override Rules မG+$ 130
Override AHင#6 Overload 132
Polymorphism ရ-I အကGiu$မG+$ 135

Java 5 Features 139


Annotation 140
Using Annotations 141
Writing Annotation 145

Learning Java 3 မင#$လ&င#


Java Developer Class

Enum 152
Before Enum 152
After Enum 153
What can we do with Enum? 154
Generics 169
Before Generics 169
After Generics 173
Writing Generics 177
Using Generics Type Objects 186
How Generics Work! 192
Generics မH+ လuပ#လiuမရeသ+ အရ+မG+$ 199

Essential Java API 205


Exceptions Handling 206
What is Exception? 207
Types of Exception 210
Handling Exceptions 211
Custom Exception 218
Benefit of Exception 220
Method Overriding 221
Using Strings 222
About String 222
Manipulating Strings 227
Composing String 234
Formatting Strings 237
Dates & Calendar 255
Creation Of Date 255
Interpretation of Calendar Values 258
Calculating Date & Time 262
Formatting Date 263
Date & Times API 265
Why Java need new Date API? 265
Types of Dates 265
Usages of Date and Times 265
Collections Framework 266
Collection Interface 266
Learning Java 4 မင#$လ&င#
Java Developer Class
Set Interface 268
List Interface 271
Utility Classes for Collection 275
Java IO 276
java.io.File 277
IO Streams 283
Serialization 293
NiO2 296
Java 8 New Features 297
Lambda Expression 298
Lambda Expression ဆiuတ+ဘ+လ- 298
ဘ+6eFက+င#6 Lambda Expression ကiu လiuအပ#ခ-6ရတ+လ- 298
Lambda Expression ကiu ဘယ#လiu eရ$သ+$ရသလ- 298
Lambda Expression eFက+င#6 ဘ+eတ& eက+င#$သ&+$လ- 298
ဘယ#လiueနရ+eတ&မH+ Lambda Expression ကiu အသuB$Cပuသင#6သလ- 298
Java ဟ+ Functional လ+$ OOP လ+$ 298

Method References 299


Changes in Interfaces 300
Streams API 301
Java 9 New Features 302
JShell 302
Modularity In Java 302
Changes in Streams API 302
HTTP 2 Client 302

Learning Java 5 မင#$လ&င#


Java Developer Class

Preview
Programming တစ#ခuကiu eလ6လ+မယ#ဆiuရင# အရင#ဆuB$FကuBeတ&JရမH+က ဘယ#ကeန ဘယ#လiu စKပ?$ eလ6လ+သင#6
တယ#ဆiuတ+ကiu eဝခ&-ရခက#တ-6အပiuင#$ပ-Cဖစ#ပ3တယ#။ အထO$သCဖင#6 Java ကiu eလ6လ+ရင# ဒ?Cပဿန+ကiu ပiuKပ?$ FကuBeတ&J
ရမH+ပ3။ ဘ+လiuလ-ဆiueတ+6 Java န-9 eရ$သ+$လiuရတ-6အပiuင#$eတ& အမG+$Pက?$Qiတ-6အတ&က# စ+အuပ#eတ&လ- အမG+$Pက?$Qi
သလiu၊ Framework eတ&လ- အမG+$Pက?$ပ-။ အ-6ဒ?eတ+6 ဘ+Kပ?$ရင# ဘယ#လiueလ6လ+ရမယ#ဆiuတ+ အမတန# အခက#
eတ&Jမည#6အရ+eတ& Cဖစ#ပ3တယ#။

ဒ?စ+အuပ#ဟ+ Programming ဆiuတ+ ဘ+မHန#$ကiuမသiတ-6 သOတစ#eယ+က#က


Java ကiu eလ6လ+ဖiuလiuလ+Kပ?ဆiuရင# အကOအည?eပ$Aiuင#တ-6 စ+အuပ#တစ#အuပ#
အCဖစ# အသuB$CပuAiuင#ရန# ရည#ရ&ယ#Kပ?$ eရ$သ+$ပ3မယ#။ ဒ?စ+အuပ#ကiu eလ6လ+Cခင#$
အ+$Cဖင#6 Java Programming န-9 ပတ#သက#တ-6 အeCခခBeတ&ကiu eလ6လ+သ&+$
Aiuင#ပ3လiမ#6မယ#။

ဒ?အခန#$ထ-မH+eတ+6 eအ+က#ပ3 အခGက#eတ&ကiu eရ$သ+$သ&+$ပ3မယ#။

Program ဆiuတ+ဘ+လ-
Java ဆiuတ+ဘ+လ-
Java န-9 ဘ+eတ& eရ$လiuရလ-
Java ကiu eရ$ဖiuဘ+eတ&လiuအပ#လ-
ဒ?စ+အuပ#န-9 ဘ+eတ&eလ6လ+Aiuင#မH+လ-

Program ဆiuတ+ဘ+လ-
IT န-9ပတ#သက#တ-6 အရ+eတ&ကiu eလ6လ+ဖO$သOeတ& အတ&က#ကeတ+6 မထO$ဆန#$eပမ-6 ဒ?eလ+ကထ-က လOeတ&
မဟuတ#ရင#eတ+6 မသieသ$တ+Cဖစ#Aiuင#ပ3တယ#။ Program ဆiuတ+က အစ?အစT#ပ3။ ဒ3eပမ-6 ဒ?eနရ+မH+ eCပ+eနတ+
က Computer Program တစ#ခuကiueCပ+တ+ပ3။ Computer ကiu ဘ+eတ&လuပ#ရမယ#လiu ခiuင#$eစAiuင#တ-6 အမiန#9eပ$
ခGက#eတ&ကiu စuစည#$eရ$သ+$ထ+$တ-6 အစ?အစT#တစ#မGiu$ Cဖစ#ပ3မယ#။

အလ&ယ#တကOeCပ+ရမယ#ဆiuရင# Web Browser တစ#ခuဟ+လ- Program တစ#ခuCဖစ#ပ3တယ#။ Desktop eပ2မH+Qiတ-6


Firefox Icon ကiu Duoble Click လuပ#လiuက#ရင# Computer ကeန Firefox Browser ကiu ဖ&င#6eပ$ပ3မယ#။ အ-6ဒ?လiu
Cဖစ#ရတ+ကလ- ဒ?လiuလuပ#လ+ရင# Browser ကiu ဖ&င#6eပ$ဖiu Computer ကiu အမiန#9eပ$ခGက#eတ& eရ$သ+$ထ+$လiuCဖစ#
တယ#။

တဖန# Search Box ထ-ကeန Q+ eဖ&ခGင#တ-6 Keyword ကiu Uiuက#Kပ?$ Enter Key ကiu Uiuက#လiuက#ရင# သက#ဆiuင#ရ+
Search Engine ကiu သuB$Kပ?$ Q+eဖ&eတ&JQiခGက#eတ&ကiu Bowser eပ2မH+ လ+Cပeပ$မH+ Cဖစ#ပ3တယ#။ ဒ3လ- Internet
ထ-မH+ Qiတ-6 Web Resources eတ&ကiu Q+eဖ&Kပ?$ Browser eပ2မH+ လ+Kပ?$ CပသAiuင#eအ+င# အမiန#9eပ$စ+eတ&ကiu
eရ$သ+$ ထ+$လiuCဖစ#ပ3တယ#။

User ဆ?ကeနလ+တ-6 Input eတ&ပ2မH+ မOတည#Kပ?$ Computer ကiu ဘယ#လiuလuပ#eပ$ရမယ#ဆiuတ-6 အစ?အစT#eတ&ကiu


eရ$သ+$ထ+$တ+က Program Cဖစ#တယ#လiu အလ&ယ#တကOမHတ#သ+$Aiuင#မယ#ထင#ပ3တယ#။

ဒ3ဆiuရင# Computer ကiu အမiန#eပ$Aiuင#eအ+င# ဘယ#လiueရ$ရမလ-ဆiuတ+ eမ$စရ+Cဖစ#လ+ပ3မယ#။ အ-6ဒ3ဆiuရင#


Computer eတ&က ဘယ#လiueရ$ထ+$တ+eတ&ကiu န+$လည#သလ- ဆiuတ+ကiu eတ&$မiမH+ Cဖစ#ပ3တယ#။ Computer
eတ&ဟ+ Machine eတ&Cဖစ#Fကပ3တယ#။

Learning Java 6 မင#$လ&င#


Java Developer Class

အeCခခBအ+$Cဖင#6eတ+6 User န-9 Interact လuပ#ဖiu Input / Output Device eတ&Qiမယ#။ Kပ?$ရင# အတ&င#$ပiuင#$မH+ အလuပ#
လuပ#ဖiuအတ&က# CPU တiu RAM တiuQiမယ#၊ အခGက#အလက#eတ&ကiu သiမ#$ထ+$Aiuင#ဖiu HDD eတ&ပ3QiFကပ3မယ#။

Program တစ#ခuဟ+ အလuပ#လuပ#eနKပ? ဆiuရင# အ-6ဒ? အမiန#9eတ&ဟ+ RAM အeပ2ကiu eရ+က#Qiလ+Kပ?$ User Input
eတ&အeပ2မH+ မOတည#Kပ?$ ဘယ#လiuလuပ#ရမယ#ဆiuတ+ကiu CPU ကeနတဆင#6 သက#ဆiuင#ရ+ Device eတ&ကiu Handle
လuပ#Kပ?$ ခiuင#$eစeပ$မH+ Cဖစ#ပ3တယ#။

CPU eတ&ဟ+ Machine Language eတ&Cဖစ#တ-6 Binary Code eတ&ကiuသ+ န+$လည#တ+Cဖစ#ပ3တယ#။ အ-6ဒ?
အတ&က# CPU eတ&ကiu ခiuင#$eစမယ#ဆiuရင#eတ+6 Machine Language eတ&န-9 ခiuင#$eစရမH+ Cဖစ#ပ3တယ#။ အ-6ဒ?လiu
လOက န+$လည#ရခက#ခ-တ-6 eရ$သ+$ထ+$တ-6 Programming Language eတ&ကiu Low Level Language eတ&လiu
eခ2ပ3တယ#။

အ-6ဒ?လiu Machine Language eတ&ကiueရ$သ+$ရတ+ အမတန#ခက#ခ-ပ3တယ#။ ဒ3eFက+င#6 eန+က#ပiuင#$မH+ လOကန+$


လည#လ&ယ#တ-6 Program eတ&ကiu eရ$သ+$Kပ?$၊ အ-6ဒ3eတ&ကiu ဘ+သ+Cပန#eပ$Aiuင#တ-6 Interpreter eတ&၊ လOန+$လည#
လ&ယ#တ-6 eရ$သ+$နည#$န-9 eရ$သ+$ထ+$တ-6 Program eတ&ကiu Machine Language eတ&အCဖစ# Compile လuပ#eပ$
Aiuင#တ-6 Language eတ& eပ2eပ3က#လ+ခ-6ပ3တယ#။

အ-6ဒ?လiu Programming Language eတ&ကiueတ+6 High Level Language eတ&လiueခ2Fကပ3တယ#။ Java ဟ+လ-
လOကန+$လည#လ&ယ#တ-6 eရ$သ+$ပuBeတ&န-9 eရ$သ+$Aiuင#တ-6 High Level Programming Language တစ#မGiu$Cဖစ#ပ3
တယ#။

Java ဆiuတ+ဘ+လ-
Java ဆiuတ+ လOကန+$လည#ရလ&ယ#တ-6 eရ$သ+$ပuBန-9 eရ$သ+$ထ+$တ-6 High Level Programming Language
အမGiu$အစ+$တစ#ခuCဖစ#ပ3တယ#။ eန+က#Kပ?$ Object Oriented Programming (OOP) ကiu အeCခခBထ+$တ-6
Programming Language တစ#ခuလ- Cဖစ#ပ3တယ#။ Kပ?$eတ+6 Strong Type Programming Language လiuလ-
eCပ+eလ6Qiပ3တယ#။ Kပ?$eတ+6 Java Programming ဆiuတ+ ဘယ#လiu eပ2eပ3က#လ+ခ-6ရသလ- ဆiuတ+ကiu eဖ2Cပသ&+$
ပ3မယ#။

Object Oriented Programming


Object Oriented Programming ကiu OOP လiuလ-eခ2FကKပ?$ Program ထ-မH+ပ3တ-6 Programming Unit eတ&ကiu
Object eတ&လiuCမင#Kပ?$ eရ$သ+$ရတ-6 Programming eရ$သ+$ပuB eရ$သ+$နည#$ Concept တစ#ခuCဖစ#ပ3တယ#။

ပuBမHန#အ+$Cဖင#6eတ+ Program တစ#ခuမH+ Data eတ&န-9 Function eတ&ပ3ဝင#တယ#လiu မHတ#Aiuင#မH+ Cဖစ#တယ#။ ဒ3eပမ-6
OOP မH+eတ+6 Data eတ& Function eတ&လiu မCမင#ပ- Object eတ&လiu သတ#မHတ#Kပ?$ အသuB$Cပuပ3တယ#။ Kပ?$eတ+6 အ-6
ဒ? Object eတ&အခGင#$ခGင#$ Communicate လuပ#Cခင#$အ+$Cဖင#6 မiမiလiuအပ#တ-6 Application ကiu Cဖစ#eအ+င# eရ$သ+$
သ&+$တ+ပ- Cဖစ#ပ3တယ#။

အCပင#eလ+ကမH+Qiတ-6 Object eတ&ကiu Model လuပ#Kပ?$eရ$သ+ရတ-6အတ&က# န+$လည#ရလ&ယ#ကOeစKပ?$ တစ#ခ3eရ$


Kပ?$သ+$ Object eတ&ကiu တစ#Cခ+$ eနရ+eတ&မH+လ- Cပန#Kပ?$ အသuB$CပuAiuင#မH+ Cဖစ#တ-6အတ&က# Reusable ကiuလ-
တiu$တက#eစAiuင#ပ3တယ#။ ဒ36eFက+င#6 လက#Qi Programming Language အeတ+#မG+$မG+$ဟ+လ- OOP ကiu အeCခခB
ထ+$Fကတ+မG+$ပ3တယ#။ Java Programming ဟ+လ- OOP ကiu အeCခခBထ+$တ-6 Programming Language
တစ#ခuCဖစ#ပ3တယ#။

eန+က#ပiuင#$အခန#$eတ&မH+ OOP န-9 ပတ#သက#Kပ?$ အeသ$စiတ# eဖ2Cပသ&+$ပ3မယ#။

Learning Java 7 မင#$လ&င#


Java Developer Class

Strong Type Programming


Programming အမGiu$အစ+$eတ&ကiu အသuB$Cပueနတ-6 Data eတ&ရ-I Type အeပ2မOတည#Kပ?$ ခ&-Cခ+$eလ6လ-QiFကပ3
တယ#။ Java Programming ဟ+ Data eတ&ရ-I Type ကiu တiတiကGကG သတ#မHတ#eပ$ရန#လiuအပ#ပ3တယ#။ အသuB$Cပu
eတ+6မယ#ဆiuရင# ဘယ#လiu Type မGiu$လ- ဆiuတ+ကiu eဖ2Cပeရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ ထiuက-6သiu Type ကiu အတiအကG
သတ#မHတ#eဖ2Cပရန#လiuအပ#eသ+ Programming အမGiu$အစ+$မGiu$ကiu Strong Type Programming လiueခ2ပ3
တယ#။

တစ#ခGiueသ+ Language eတ&က Type ကiu အeထ&အထO$သတ#မHတ#eရ$သ+$စရ+မလiuအပ#ပ3ဘO$။ အလuပ#လuပ#eနစT#


အခ3မH Runtime ထ-မH+ Type ကiu သတ#မHတ#eပ$သ&+$Aiuင#eအ+င#Cပင#ဆင#ထ+$တ-6 အတ&က#Cဖစ#ပ3တယ#။ အ-6ဒ?လiu
Language မGiu$ကiu Dynamic Type Programming လiueခ2eလ6Qiပ3တယ#။ PHP လiu javascript လiu Language
eတ&ဟ+ Dynamic Type Programming eတ& Cဖစ#Fကပ3တယ#။

Strong Type န-9 Dynamic Type ဘယ#ဟ+ ပiueက+င#$လ-လiu အCငင#$ပ&+$စရ+Qiပ3တယ#။ ဘယ#အရ+မဆiu eက+င#$
တ+eတ&လ-Qiသလiu မeက+င#$တ-6အခGက#eတ&လ- QieနKမ-ပ3ပ-။ Dynamic Type eတ&ဟ+ Type eတ&ကiu သတ#မHတ#စရ+
မလiuတ-6အတ&က# eရ$သ+ရလ&ယ#ကOတတ#တ-6 အခGက#Qiပ3တယ#။ ဒ3eပမ-6 Type မH+$Kပ?$ သuB$မiရင# Runtime ကGမH သiရ
eလ6Qiတ-6အတ&က# Release လuပ#Kပ?$မH မH+$မHန#$သiAiuင#တ-6 အ+$နည#$ခGက#Qiပ3တယ#။

Strong Type eတ&ဟ+ eရ$သ+$ရခက#ခ-တယ#ဆiueပမ-6 Compile Time မH+ကထ-က Type မH+$eနတ+ကiu သiAiuင#တ-6
အတ&က# Runtime အခGiန#ကGမH Type မH+$တယ#ဆiuတ+ Cဖစ#စရ+မQiပ3ဘO$။ အ-6ဒ?လiu Type ကiu အeသအခG+ သတ#မHတ#
Kပ?$ အသuB$Cပuရတ-6အတ&က# အလuပ#လuပ#eနခGiန#မH+ Memory ကiu ဘယ#eလ+က# သuB$ရမယ#ဆiuတ+ကiu အတiအကG
တ&က#ခGက#eပ$Aiuင#တ-6အတ&က# Performance မH+ ပiueက+င#$မ&န#eစAiuင#ပ3တယ#။

Java ဟ"ဘယ%လiu eပ+eပ,က%လ"ခ/0သလ/


Java Programming Language ကiueက+ Java Platform ကiuပ3 1990 ကeန Sun Microsystem ကuမWဏ?မH
တ?ထ&င#ခ-6တ+Cဖစ#ပ3တယ#။ Low Power Electric Device eတ&မH+ အသuB$Cပuမည#6 C++ Library ကiu တည#ထ&င#ရန#
ရည#ရ&ယ#Kပ?$ စတင#ခ-6Fကတ+Cဖစ#ပ3တယ#။

ဒ3eပမ-6 အ-6ဒ?လiueရ$သ+$ရင#$ C++ ဟ+ Electric Power ကiu အမတန#လiuအပ#တ-6အတ&က# OOP ကiu အeCခခBတ-6
eန+က#ထပ# Language အသစ#တစ#ခu eရ$သ+$ခ-6FကCခင#$Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Java ရ-I eရ$သ+$ပuBအeတ+#မG+$
မG+$ဟ+ Cညည န-9 ဆင#တOeနFကတ+Cဖစ#ပ3တယ#။ Java ကiu စတင#eရ$သ+$စT#က OAK လiueခ2ဆiuခ-6Fကeပမ-6 OAK
ဆiuတ-6 Product ဟ+ အCခ+$တeနရ+မH+ အသuB$Cပueနတ+Qiတ-6အတ&က# Java လiueCပ+င#$Kပ?$ eခ2ဆiuခ-6Fကတ+Cဖစ#ပ3
တယ#။

1991 ခuAHစ#ကထ-က OAK ဆiuတ-6အမည#န-9 စတင#ခ-6တ-6 Java ဟ+ 1996 ခuAHစ#မH+ တရ+$ဝင# Release လuပ#လ+Aiuင#ခ-6
ပ3တယ#။ လက#Qi 2017 ခu 2 လပiuင#$အခGiန#မH+eတ+6 Java Version ဟ+ 1.8 Cဖစ#Kပ?$ ဒ?AHစ#ထ-မH+ပ- 1.9 ကiu Release
လuပ#မယ#လiu eFက+#Cင+ထ+$ပ3တယ#။

Java န-9 ဘ+eတ&eရ$လiuရလ-


Java ကiu စတင#eလ6လ+သOတiuင#$ ဒ?အခGက#ကiu သiခGင#eနFကမH+ Cဖစ#တယ#။ Java ကiu မiမiအသuB$Cပuလiuတ-6 ပတ#ဝန#$ကGင#
အလiuက# Edition eတ&ကiu ၃ မGiu$ခ&-Cခ+$ထ+$ပ3တယ#။

Learning Java 8 မင#$လ&င#


Java Developer Class

Java Standard Edition (Java SE)


Java SE လiuလ- eခ2eလ6QiFကKပ?$၊ Java Programming ရ-I အeCခခB Edition တစ#ခuCဖစ#ပ3တယ#။ Java
Programming ကiu eလ6လ+မယ#ဆiuရင# မCဖစ#မeန Java SE ကiu eလ6လ+ရမH+ Cဖစ#ပ3တယ#။ အ-6ဒ? အထ-မH+ Java
Programming ကiu ဘယ#လiu eရ$သ+$ရမယ#ဆiuတ-6အခGက#eတ& Desktop Application တစ#ခuကiu eရ$သ+$မယ#ဆiuရင#
လiuအပ#တ-6 အeCခခB API eတ&ကiu စuစည#$eပ$ထ+$ပ3တယ#။

Java SE ကiueလ6လ+Kပ?$ရင# Desktop Application တစ#ခuကiu eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။ ဒ?စ+အuပ#ထ-မH+eတ+6


Java SE 8 ကiu အeCခခBKပ?$ eရ$သ+$ထ+$ပ3တယ#။

Java Enterprise Edition (Java EE)


Java EE လiuလ- eခ2eလ6Qiပ3တယ#။ Enterprise Application တစ#ခuကiu eရ$သ+$ရန#အတ&က#လiuအပ#တ-6 Service
မG+$ကiu Server အeပ2မH+ စuစည#$eပ$ထ+$Kပ?$ အလ&ယ#တကO အသuB$CပuAiuင#ရန# Cပင#ဆင#eပ$ထ+$တ-6 စueပ3င#$
ပတ#ဝန#$ကGင#လ- Cဖစ#ပ3တယ#။

Enterprise Application တစ#ခuရ-I အeCခခBလiuအပ#ခGက#eတ& Cဖစ#Fကတ-6 Security, Transaction, Concurrency,


Messaging, Remote Access, Web Services အစQiတ-6 Service မG+$ကiu Server အeပ2မH+ ထည#6သ&င#$eပ$
ထ+$Kပ?$ Application မG+$ထ-မHeန အလ&ယ#တကOအသuB$CပuAiuင#eအ+င# Cပင#ဆင#ထ+$ပ3တယ#။

Java EE ကiu eလ6လ+Kပ?$ Web Application eတ& Cooperation eတ&မH+ သuB$မည#6 Enterprise Application eတ&
ကiu eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။ Java EE ကiu eလ6လ+မယ#ဆiuရင# အရင#ဆuB$ Java SE ကiu eလ6လ+ထ+$မH Cဖစ#ပ3
မယ#။

Java Micro Edition (Java ME)


Java ME လiuလ-eခ2ဆiueလ6QiKပ?$ Embedded System eတ&ရ-I Application eတ&ကiueရ$သ+$Aiuင#ဖiuCပင#ထ+$တ-6
Edition လ- Cဖစ#ပ3တယ#။ လZပ#စစ#မ?$ဖiuတiu၊ TV - Video Player တiu၊ Car Computer Box တiuလiu Embedded
System တiuမH+ eရ$သ+$ဖiuအတ&က# Cပင#ဆင#ထ+$တ-6 Edition လ-Cဖစ#ပ3တယ#။ Java ME ကiu eရ$သ+$မယ#ဆiuရင#လ-
Java SE ကiu သiQiKပ?$မHသ+ eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Android မeပ2ခင# eခတ#စ+$ခ-6တ-6 Java Phone ရ-I Application eတ&ကiu eရ$သ+$မယ#ဆiuရင#လ- Java ME ကiu
အသuB$CပuရမH+ Cဖစ#ပ3တယ#။

တဖန# Android ဟ+လ- Android Platform eပ2မH+ အလuပ#လuပ#တ+ဆiueပမ-6 eရ$သ+$ထ+$တ-6 Language eနရ+မH+
Java ကiu အသuB$Cပuထ+$တ+ Cဖစ#တ-6အတ&က# Android Application eတ&ကiu eရ$သ+$မယ#ဆiuရင#လ- Java SE ကiu ပiuင#
ပiuင#Aiuင#Aiuင#သiQiထ+$ဖiuလiuအပ#ပ3တယ#။

ဒ3eFက+င#6 Java SE ကiu eလ6လ+ထ+$ရင# Desktop Application မGiu$ကiu eရ$သ+$Aiuင#မH+Cဖစ#Kပ?$ Web Application
eတ& Enterprise Application eတ&၊ Embedded Application eတ&န-9 Android Application တiuကiu ဆက#လက#
eလ6လ+Aiuင#eစရန# အeထ+က#အကOCပuမH+ Cဖစ#ပ3တယ#။

Java ကiueရ$ဖiuဘ+eတ&လiuအပ#လ-
Java ကiueရ$ဖiuဘ+eတ&လiuအပ#သလ- ဆiuတ-6အခGက#ကiu မသ&+$eသ$ခင# Java Program ကiu ဘယ#လiueရ$Kပ?$ ဘယ#လiu
အလuပ#လuပ#eစတ+လ- ဆiuတ+ကiu အရင#eလ6လ+သ&+$ပ3မယ#။

Learning Java 9 မင#$လ&င#


Java Developer Class
အရင#ဆuB$ Java Program တစ#ခuကiueရ$သ+$မယ#ဆiuင# Text File အeနန-9ပ- eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ အ-6ဒ? File ရ-I
Extension ကiueတ+6 java ဆiuKပ?$ သiမ#$eပ$ရပ3မယ#။ Cပင#ပမH+Qiတ-6 အရ+eတ&ကiu နမOန+CပuKပ?$ Java Program eတ&
ကiu eရ$သ+$eလ6Qiပ3တယ#။ eအ+က#ပ3အတiuင#$ Person.java ဆiuKပ?$ eရ$သ+$ သiမ#$ဆည#$Aiuင#မH+ Cဖစ#ပ3တယ#။ အ-6ဒ?
File ကiueတ+6 Java Source Code File လiueခ2ပ3တယ#။

eရ$သ+$ထ+$တ-6 Source File eတ&ကiu Java Compiler ကiu အသuB$CပuKပ?$ Compile လuပ#ရပ3မယ#။ Compile လuပ#Kပ?$
တ-6အခ3မH+ class file eတ&ကiuရQiပ3မယ#။ class file eတ&ဟ+ java byte code eတ&န-9eရ$သ+$ထ+$တ+Cဖစ#Kပ?$ လO
ကeတ+6 ဖတ#Kပ?$ န+$လည#မH+ မဟuတ#eတ+6ပ3ဘO$။

ရQiလ+တ-6 Class File eတ&ကiu Java Virtual Machine (JVM) eတ&eပ2မH+ အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။ Java
Class File eတ&ဟ+ OS eပ2မH+ တiuက#Uiuက# အလuပ#လuပ#တ+မဟuတ#ပ-၊ JVM eတ&eပ2မH+ အလuပ#လuပ#Kပ?$ JVM က
တဆင#6 OS ကiu ခiuင#$eစမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 JVM သ+Qiမယ#ဆiuရင# Java Class File eတ&ဟ+ ဘယ# OS
eပ2မH+ မဆiuအလuပ#လuပ#မH+ Cဖစ#ပ3တယ#။

ဒ?အခGက#eFက+င#6 Java ဟ+ “Write Once Run Anywhere” ဆiuKပ?$ Programming eလ+ကမH+ eအ+င#Cမင#လ+ခ-6ရ
Cခင#$လ-Cဖစ#ပ3တယ#။

ဆက#လက#Kပ?$ Java ကiu eရ$သ+$ရန#လiuအပ#တ-6


Java Platform eတ&ကiu eလ6လ+Fကည#6Fက
ရeအ+င#။ Java Program eတ&ကiu အလuပ#လuပ#eစဖiu
JVM ဆiuတ+ လiuအပ#ပ3တယ#။

အ-6ဒ3အCပင# Program eရ$သ+$ရ+မH+ အလ&ယ#တကO


အသuB$CပuAiuင#ဖiu Java Platform ထ-မH+ Standard
API eတ&ကiu Cပင#ဆင#ထ+$ပ3တယ#။

ဒ36eFက+င#6 Java Program တစ#ခuကiu အလuပ#လuပ#eစ


ဖiuဆiuရင# JVM န-9 Standard Java API eတ&လiuအပ#
ပ3တယ#။ အ-6ဒ3eတ&ကiu စuစည#$Kပ?$ Java Runtime
Emvironment (JRE) လiueခ2ပ3တယ#။

JRE Qiရင# eရ$ထ+$တ-6 Java Program eတ&ကiu အလuပ#လuပ#eစAiuင#မH+ မHန#eသ+#လည#$ eရ$သ+$ထ+$eသ+


Program eတ&ကiu Compile လuပ#ဖiuကeတ+6 Java Compiler QiမH Cဖစ#မH+ပ3။ JRE ရယ#၊ Java Compiler ရယ#
အCခ+$ အသuB$ဝင#တ-6 Tools eတ&ကiu စuစည#$Kပ?$ Java Development Kit (JDK) လiueခ2ဆiuပ3တယ#။

JRE eက+ JDK ပ3 Oracle ရ-I တရ+$ဝင# Web Site ကeန Download လuပ#လiuရAiuင#ပ3တယ#။

ဒ?စ+အuပ#န-9 ဘ+eတ&ကiueလ6လ+Aiuင#မလ-
Easy Java ဟ+ Java ကiu စတင#eလ6လ+သOeတ&ကiu အလ&ယ#တကOeလ6လ+Aiuင#eအ+င# ရည#ရ&ယ#Kပ?$ eရ$သ+$ထ+$တ-6
စ+အuပ#တစ#အuပ#Cဖစ#ပ3တယ#။ ပ3ဝင#မည#6 အeFက+င#$အရ+eတ&ကeတ+6 eအ+က#ပ3 အတiuင#$ Cဖစ#ပ3တယ#။

Language Fundamentals
အ-6ဒ?အတ&က# Java ကiu eရ$သ+$ရ+မH+ မQiမCဖစ#လiuအပ#တ-6 Language eရ$သ+$ပuBစည#$မGT#$eတ&ကiu စuစည#$ eဖ2Cပ
သ&+$ပ3မယ#။ Class ဆiuတ+ဘ+လ-။ Object ဆiuတ+ဘ+လ-။ Kပ?$eတ+6 Class တစ#ခuကiu ဘယ#လiueရ$ရသလ-။ Kပ?$

Learning Java 10 မင#$လ&င#


Java Developer Class
eတ+6 Java Data Type eတ& Java Statement eတ&ကiu ဘယ#လiu eရ$သ+$ရမယ#ဆiuတ+ကiu eလ6လ+Aiuင#မH+ Cဖစ#ပ3
တယ#။

Object Oriented Programming


Java Programming Language ဟ+ Object Oriented Programming (OOP) ကiu အeCခခBထ+$တ-6
Language တစ#ခuCဖစ#ပ3တယ#။ အ-6ဒ?အတ&က# Language Fundamentals ကiu သiQiKပ?$တ-6 eန+က#မH+ Java မH+
အသuB$Cပuထ+$တ-6 OOP ရ-I Feature eတ&Cဖစ#Fကတ-6 Inheritance, Encapsulation, Abstraction, Composition န-9
Polymorphism တiuအeFက+င#$ကiu eလ6လ+Fကပ3မယ#။ အ-6ဒ3အCပင# Object eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ သတiထ+$
သင#6တ-6 Object Design Principles eတ&ကiuလ-6 eလ6လ+သ&+$Aiuင#ပ3မယ#။

Essential Java API


Language Fundamentals န-9 OOP တiuကiu eလ6လ+Kပ?$တ-6အခ3မH+ Java Language န-9 Application eတ&ကiu
eရ$သ+$ရ+မH+ အသင#6 အသuB$CပuAiuင#တ-6 Java API eတ&ကiu eလ6လ+သ&+$Fကပ3မယ#။ ဒ?eနရ+မH+eတ+6 Exception
Handling, Numbers, Strings, Dates, Collections Framework, File I/O, NiO2 န-9 Streams API တiuကiu
eလ6လ+သ&+$Fကပ3မယ#။

Environment Preparation
Java Programming eရ$သ+$ဖiuအတ&က# လiuအပ#တ-6 ပတ#ဝန#$ကGင# Cပင#ဆင#မ[eတ&ကiu eဖ2Cပသ&+$ပ3မယ#။ က\န#eတ+#
တiu ဒ?စ+အuပ#မH+eတ+6 Eclipse IDE ကiu အသuB$CပuKပ?$ ပတ#ဝန#$ကGင#ကiu ဘယ#လiuCပင#ဆင#မယ#။ Kပ?$eတ+6 IDE ရ-I
အသuB$ဝင#eတ+6 Short Cut eတ&ရ-I အသuB$CပuပuBeတ&၊ Template eတ&ကiu ကiuယ#တiuင#eရ$သ+$ အသuB$CပuပuBeတ&ကiu eဖ2Cပ
သ&+$ပ3မယ#။

References
ဒ?စ+အuပ#လiu eရ$သ+$ရ+မH+ အသuB$Cပuခ-6တ-6 References စ+အuပ#eတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။


Learning Java 11 မင#$လ&င#


Java Developer Class

Language Fundamentals
ပတ#ဝန#$ကGင# Cပင#ဆင#မ[အeFက+င#$ကiu eလ6လ+Kပ?$တ-6eန+က#မH+ ဆက#လက#Kပ?$ Java Programming ကiu ဘယ#လiu
eရ$သ+$ရတယ#ဆiuတ-6 အပiuင#$ကiu eလ6လ+သ&+$Fကပ3မယ#။ Java န-9 Programming ကiu eရ$သ+$တ-6 eနရ+မH+
eရ$သ+$Aiuင#တ-6 Class eတ&၊ Method eတ& Variable eတ& Kပ?$eတ+6 Enum eတ& Generics eတ&Qiပ3တယ#။ တဖန#
Programming Logic ကiu eရ$သ+$ဖiuအတ&က# လiuအပ#တ-6 Operators eတ& Kပ?$eတ+6 Statement လ- Qiပ3တယ#။ ဒ3
eတ&ကiu ဒ?အခန#$မH+ eလ6လ+သ&+$Aiuင#ပ3တယ#။

Java Programming မH+ ဘ+eတ& eရ$လiuရ


တယ#၊ Kပ?$eတ+6 မမH+$eအ+င# eရ$ဖiu ဘယ#လiu
eရ$ရမယ#ဆiuတ+ကiu ဒ?eနရ+မH+ သiQiသ&+$eစ
ခGင#ပ3တယ#။ ပ3ဝင#မည#6 အeFက+င#$အရ+eတ&
ကeတ+6 eအ+က#ပ3အတiuင#$ Cဖစ#ပ3တယ#။

What is A Class
Anatomy of a Class
Visibility and Accessibility
Java Data Types
Using Arrays
Operators
Statements

What is Class
Class ဆiuတ+ Programming Unit တစ#ခuCဖစ#ပ3တယ#။ လiuအပ#တ-6 Function eတ&ကiu eရ$သ+$လiuတ-6အခ3မH+လ-
Class ကiu eရ$Kပ?$ အ-6ဒ? Class ထ-မH+ Function eတ&ကiueရ$သ+$ရပ3မယ#။ Java Programming မH+ Function
eတ&ကiu Method လiueခ2eလ6Qiပ3တယ#။

တဖန# Class eတ&ဟ+ Object တစ#ခuမH+ပ3တ-6 State eတ&န-9 Behavior eတ&ကiu သတ#မHတ#eပ$Aiuင#ပ3တယ#။ Object
ထ-မH+ ပ3သင#6တ-6 State eတ&ကiu Variable eတ&န-9 သတ#မHတ#Kပ?$ Behavior eတ&ကiueတ+6 Method eတ&န-9 eရ$သ+$
eဖ2CပရမH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Class တစ#ခuကiu eရ$ရတ-6 ရည#ရ&ယ#ခGက#ဟ+ ၂ ခuQiမH+ Cဖစ#ပ3တယ#။ ပထမရည#ရ&ယ#ခGက#ကeတ+6 Utility


Function eတ&ကiu eရ$သ+$လiuတ-6အခ3မH+လ- Class ကiueရ$သ+$Kပ?$မH Function eတ&ကiu Static Method eတ& အeန
န-9 eရ$သ+$ရပ3မယ#။ eန+က#ရည#ရ&ယ#ခGက#တစ#ခuကeတ+6 Object eတ&ကiu တည#eဆ+က#တ-6အခ3မH+ လiuအပ#တ-6
State eတ&န-9 Behavior eတ&ကiu သတ#မHတ#eပ$ဖiu Class eတ&ကiu eရ$ရမH+Cဖစ#ပ3တယ#။

Learning Java 12 မင#$လ&င#


Java Developer Class

Anatomy of a Class
Java Programming ကiu စKပ?$eရ$သ+$eတ+6မယ#ဆiuရင# Class ကeန စKပ?$ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ က\န#eတ+#
တiu ဒ?eနရ+မH+ Java Class တစ#ခuကiu ဘယ#လiu eရ$သ+$ရမယ#ဆiuတ+ကiu eလ6လ+သ&+$မH+ Cဖစ#ပ3တယ#။ အရင#ဆuB$
Class တစ#ခuကiu မမH+$eအ+င# ဘယ#လiueရ$သ+$ရမလ- ဆiuတ+ကiu eလ6လ+သ&+$Kပ?$၊ Class ထ-မH+ ဘ+eတ& eရ$လiuရ
တယ#၊ Kပ?$eတ+6 ဘယ#လiu အသuB$Cပuရတယ#ဆiueတ+ကiu eလ6လ+သ&+$ပ3မယ#။

Minimum Requirements
Class တစ#ခuကiu မမH+$eအ+င#eရ$တယ#ဆiuတ+က Compile လuပ#လiuက#တ-6အခ3မH+ Error မCဖစ#eအ+င# eရ$Aiuင#တ+ကiu
ဆiuလiuတ+ Cဖစ#ပ3တယ#။

Class တစ#ခuကiu eရ$သ+$မယ#ဆiuရင# eဖ2Cပပ3 အတiuင#$


eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။ အန-ဆuB$eအ+က#ပ3
အခGက#အလက#eတ&ကiu eရ$သ+$ထ+$ရင# Compileလuပ#တ-6
အခ3မH+ Error တက#မH+ မဟuတ#ပ3ဘO$။

class keyword
class keyword ဟ+ Class တစ#ခuCဖစ#eFက+င#$ကiu သတ#မHတ#eပ$eနတ-6 keyword Cဖစ#ပ3တယ#။ Class တစ#ခuကiu
eရ$သ+$ရ+မH+ မCဖစ#မeနပ3ဝင#ရမည#6 အရ+တစ#ခuCဖစ#ပ3တယ#။ Java ဘ+သ+ရပ#ဟ+ Case Sensitive Cဖစ#တ-6
အတ&က# Lower Case eတ&Cဖစ#တ-6 class လiuသ+eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Class လiueရ$သ+$မယ#ဆiuရင#
keyword အeနန-9 အသiအမHတ#CပuမH+ မဟuတ#ပ3ဘO$။ Kပ?$eတ+6 CLASS လiuလ- eရ$သ+$လiuမရပ3ဘO$။

Identifier
HelloJava ကeတ+6 Class Name Cဖစ#Kပ?$ Identifier လiueခ2ပ3တယ#။ Class ကiu ဘယ#လiueခ2eဝ2မလ- ဆiuတ+ကiu
သတ#မHတ#eပ$တ+ပ3။ အCခခBအ+$Cဖင#6eတ+6 Class Name eတ&ကiu Noun eတ&ကiu အသuB$CပuKပ?$ eရ$သ+$eလ6Qiပ3
တယ#။ Upper Case န-9 စKပ?$eရ$သ+$eပ$ရပ3မယ#။ Noun eတ&ကiu ၂ ခuတ&-Kပ?$ eရ$သ+$မယ#ဆiuရင#eတ+6 (Hello န-9
Java) ဒuတiယ Noun ရ-I အစစ+လuB$ကiu Upper Case န-9 eရ$သ+$သင#6ပ3တယ#။ Camel Case eရ$သ+$ပuBလiu eခ2
eလ6Qiပ3တယ#။

Class Name ကiu Lower Case ကiu သuB$လiuမရဘO$လ+$။ Camel Case န-9 မeရ$လiuမရဘO$လ+$ဆiueတ+6 မeရ$ရင#လ-
ရပ3တယ#။ Compiler Error တက#မH+ မဟuတ#ပ3ဘO$။ ဒ3eပမ-6 စနစ#ကGတ-6 eရ$သ+$ပuBeတ+6 မဟuတ#ပ3ဘO$။ Team
Development လuပ#တ-6 အခ3eတ&မH+ ဆiuရင# သတ#မHတ#ထ+$တ-6 စည#$ကမ#$eတ&ကiu လiuက#န+Kပ?$eရ$သ+$တ+ဟ+
eက+င#$တ-6 အကGင#6Cဖစ#ပ3တယ#။

Class Name Identifier eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Java ရ-I Keyword eတ&ကiu အသuB$Cပuလiuမရပ3ဘO$။
Unicode Charactor eတ&၊ Currency Code eတ&၊ Number eတ&န-9 Under Score ကiu အသuB$CပuKပ?$ eရ$သ+$Aiuင#ပ3
တယ#။ ဒ3eပမ-6 Number eတ&န-9 စKပ?$ eရ$သ+$လiuမရပ3ဘO$။

Class Body
အတ&န#9က&င#$ အဖ&င#6န-9 အပiတ#ကeတ+6 Class Body Cဖစ#ပ3တယ#။ class တစ#ခuကiu eရ$သ+$တ-6 အခ3မH+ Class Body
ကiu မCဖစ#မeနeရ$သ+$ရပ3မယ#။ Class Body အတ&င#$မH+eတ+6 Class ထ-မH+ ပ3eစခGင#တ-6 အရ+eတ&ကiu eရ$သ+$ရ
မH+ Cဖစ#ပ3တယ#။

Learning Java 13 မင#$လ&င#


Java Developer Class

Class Declaration

အထက#eဖ2Cပပ3အတiuင#$ keyword, Class name Identifier န-9 Class Body တiuသ+ပ3မယ#ဆiuရင# Java Compiler
ကeန မHန#ကန#တ-6 Class တစ#ခuအCဖစ# အသiအမHတ#CပuမH+ Cဖစ#ပ3တယ#။ ဒ?eဖ2CပပuBကeတ+6 Class တစ#ခuအတ&က# အ
န-ဆuB$လiuအပ#ခGက#eတ& Cဖစ#Fကပ3တယ#။ ဒ3eပမ-6 Class တစ#ခuမH+ eရ$သ+$မယ#ဆiuရင# အCခ+$eရ$သ+$Aiuင#တ+eတ&Qiပ3
eသ$တယ#၊ ဆက#လက#Kပ?$ eလ6လ+သ&+$Fကပ3မယ#။

public final class Student extends Person implements Runnable {}

Modifiers Extends Other Implements


Class Interface

Java Class တစ#ခuမH+ eရ$လiuရသမZကiu eရ$သ+$ထ+$တ-6 နမOန+ ပuBစBCဖစ#ပ3တယ#။ e^မH+ eလ6လ+လ+ခ-6သလiuဆiuရင#


မCဖစ#မeနeရ$သ+$ရန#လiuအပ#eသ+ ပuBစBမH+ class Student {} သ+Cဖစ#ပ3တယ#။ ကGန#တ+eတ&ကeတ+6 လiuအပ#တ-6
အခ3မH+ ထည#6eရ$သ+$ရeသ+ အရ+မG+$Cဖစ#Fကပ3တယ#။

Modifiers
အထက#ပ3ပuBတ&င#ပ3ဝင#eသ+ public န-9 final တiuဟ+ Modifier eတ&Cဖစ#Fကပ3တယ#။ Modifier ဆiuတ+ဟ+ Default
အရည#အeသ&$eတ&ကiu CပuCပင#လiuတ-6အခ3 (Modify) အသuB$CပuAiuင#eသ+ အရ+မG+$Cဖစ#ပ3တယ#။ Modifier eတ&ကiu
Access Modifier န-9 Non Access Modifier ဆiuKပ?$ ၂ မGiu$ခ&-Cခ+$Aiuင#ပ3တယ#။ နမOန+ထ-တ&င#ပ3ဝင#eသ+ public ဆiu
တ+ဟ+ Access Modifier တစ#ခuCဖစ#Kပ?$ Student Class ကiu မည#သည#6 eနရ+မHမဆiu အသuB$CပuAiuင#eFက+င#$
သတ#မHတ#eပ$eနပ3တယ#။

✴ Access Modifier န-9 ပတ#သက#Kပ?$ Modifier အခန#$AHင#6 OOP ရ-I Encapsulation အခန#$တiuမH+ အeသ$စiတ#
eဖ2Cပသ&+$ပ3မယ#။

final ဆiuတ+ကလ- Non Access Modifier တစ#ခuCဖစ#ပ3တယ#။ final လiueရ$သ+$လiuက#တ+န-9 Student Class ဟ+
final class Cဖစ#သ&+$Kပ?$ Student Class ကiu အCခ+$ Class eတ&ကလ+Kပ?$ Extends လuပ#လiuရeတ+6မH+ မဟuတ#ပ3
ဘO$။

✴ Non Access Modifier eတ&ကiuလ- Modifier အခန#$မH+ အeသ$စiတ#eဖ2Cပသ&+$ပ3မယ#

Learning Java 14 မင#$လ&င#


Java Developer Class

Extends Other Class


Class တစ#ခuဟ+ လiuအပ#ရင# အCခ+$ Class တစ#ခuကiu Extends Cပuလuပ#ပiuင#ခ&င#6Qiပ3တယ#။ ဒ?လiu Extends လuပ#လiuက#Cခင#$အ+$Cဖင#
Class eတ&Fက+$မH+ IS A Relationship ကiu Cဖစ#eပ2eစKပ?$ Super Class ထ-မH+Qiတ-6 private ကလ&-တ-6 Method eတ&
Variable eတ&ကiu အသuB$Cပuလiuရသ&+$ပ3မယ#။

အထက#ပ3ပuBမH+ Student extends Person လiueရ$သ+$ထ+$တ-6အတ&က# Student ဟ+ Person Class ကiu Extends လuပ#ထ+$
တယ#လiu eဖ2Cပထ+$ပ3တယ#။ ဒ36eFက+င#6 Student is A Person Cဖစ#သ&+$ပ3မယ#။

✴ OOP အခန#$မH+ အeသ$စiတ#eဖ2Cပသ&+$ပ3မယ#။

Implements Interface
Class တစ#ခuဟ+ Interface eတ&ကiu Implement လuပ#Aiuင#Kပ?$ implements keyword eန+က#မH+ Implement လuပ#လiuတ-6
Interface eတ&ကiu eက+#မ+ ခBKပ?$eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။ Interface Implementation eတ&ကiu အKမ-တမ#$ Class
Extension eတ&ရ-Ieန+က#မH+ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Class တစ#ခuဟ+ Class တစ#ခuထ-ကiuသ+ Exends လuပ#ပiuင#ခ&င#6Qieပမ-6
Interface eတ&ကiueတ+6 တစ#ခuထက#မက Implements လuပ#ပiuင#ခ&င#6Qiပ3တယ#။

အထက#eဖ2Cပပ3ပuBမH+ implements Runnable လiueရ$သ+$ထ+$တ+ဟ+ Student Class ဟ+ Runnable Interface ကiu


Implement လuပ#ထ+$တယ#ဆiuတ+ကiu eဖ2Cပeနတ+ Cဖစ#ပ3တယ#။

✴ Types of Class AHင#6 OOP အခန#$မH+ အeသ$စiတ#eဖ2Cပသ&+$ပ3မယ#။

Class Members
Class Body အတ&င#$မH+ eရ$သ+$လiuရတ-6အရ+eတ&ကeတ+6 Class Members eတ&Cဖစ#ပ3တယ#။ ဒ3Cဖင#6 Class
Body ထ-မH+ ဘ+eတ&eရ$လiuရလ-။

1. Variables
2. Methods
3. Constructors
4. Nested Classes and Interfaces
5. Nested Enums

Nested Member (No.4 , No.5)eတ&န-9ပတ#သက#Kပ?$ Types of Classes မH+လ- eဖ2Cပသ&+$ပ3မယ#။ ဒ36eFက+င#6 ဒ?


eနရ+မH+eတ+6 Variables, Methods န-9 Constructors eတ&အeFက+င#$ကiuပ- အဓiကထ+$Kပ?$ eဖ2Cပသ&+$ပ3မယ#။

Variables
Variable ဟ+ဘ+လ-လiueCပ+ရမယ#ဆiuရင# က\န#eတ+#တiu အလယ#တန#$eလ+က#မH+ သင#ခ-6ဘO$တ-6 မသiကiန#$ တစ#ခuန-9
တOပ3တယ#။ မသiတ-6 ကiန#$တစ#ခuကiu x လiueပ$Kပ?$ x eနရ+ကiu 10 လiueပ$လiuက#ရင# x ကiu 10 လiuထ+$Kပ?$ တ&က#ခ-6Fကတ+
ကiu မHတ#မiပ3ဦ$မယ#။ Java ရ-I variable ဟ+လ- ဒ?သeဘ+ပ3ပ-။ ဒ3eပမ-6 Java မH+က Variable ကiu အသuB$CပuခGင#ရင#
သuB$ပ3မယ#ဆiuKပ?$ eဖ2Cပeပ$ရပ3တယ#။ အ-6ဒ3ကiu Variable Declaration လiu eခ2ပ3တယ#။ Variable တစ#ခuကiu
Declare လuပ#တ-6 eနရ+မH+ Variable Type ရယ# Variable Name ကiu eဖ+#Cပeပ$ဖiuလiuအပ#ပ3တယ#။

eန+က#Kပ?$ Java Class eတ&ထ-မH+ Variable eတ&ကiu Pကiuက#တ-6 eနရ+မH+ Declare လuပ#Kပ?$ အသuB$CပuAiuင#ပ3တယ#။
က\န#eတ+#တiu Variable eတ&ကiu eလ6လ+တ-6eနရ+မH+ eအ+က#ပ3အခGက#eတ&ကiu သiထ+$ဖiuလiuအပ#ပ3တယ#။

Learning Java 15 မင#$လ&င#


Java Developer Class
✴ Variable ကiu ဘယ#လiu eရ$ရမလ-
✴ Variable အမGiu$အစ+$eတ&ဟ+ ဘယ#လiuQiလ-
✴ Variable eတ&ကui ဘယ#လiuသuB$ရမလ-

Variable ကiu ဘယ#လiueရ$ရမလ-

Variable eတ&ကiu Class ထ-က Pကiuက#တ-6eနရ+မH+ မဆiu eရ$သ+$Aiuင#ပ3တယ#။ eရ$သ+$ထ+$တ-6 eနရ+အeပ2မOတည#


Kပ?$ အမGiu$အစ+$တOမH+ မဟuတ#ပ3ဘO$။ အ-6ဒ?အeFက+င#$န-9 ပတ#သက#Kပ?$ Variable Types eတ&အeFက+င#$eCပ+တ-6အခ3
မHပ- အeသ$စiတ# eCပ+Cပပ3မယ#။

ဒ?eနရ+မH+eတ+6 Variable တစ#ခuကiu ဘယ#လiueရ$ရင#မHန#မလ- ဆiuတ+ကiu က\န#eတ+#တiu eလ6လ+သ&+$Fကရeအ+င#။

[Type] [Variable Name];

Variable eတ&ကiu Program ထ-မH+ အသuB$Cပueတ+6မယ#ဆiuရင# အရင#ဆuB$ Declare လuပ#ထ+$ဖiuလiuအပ#ပ3တယ#။


Variable eတ&ကiu Declare လuပ#တ-6eနရ+မH+ အထက#ပ3အတiuင#$ Type န-9 Variable Name ကiu eရ$လiuက#ရင# ရပ3Kပ?။
တနည#$eCပ+ရမယ#ဆiuရင# Java ဘ+သ+ရပ#မH+ Variable eတ&ကiu Declare လuပ#မယ#ဆiuရင# အ-6ဒ? Variable ရ-I Type
ကiu မသတ#မHတ#ပ- eရ$လiuမရပ3ဘO$။ ဒ36eFက+င#6 Java Programming Language ကiu Strong Type Language လiu
လ- eခ2eလ6Qiပ3တယ#။

int တiu char တiuလiu Primitive Data Type eတ&ကiuလ- Type အCဖစ# အသuB$CပuAiuင#သလiu String တiuလiu Java API က
Cပင#ဆင#ထ+$တ-6 Class eတ&ကiuလ- Type အCဖစ#အသuB$CပuAiuင#ပ3တယ#။ ဒ36အCပင# User က eရ$သ+$ထ+$တ-6 Class
eတ&ကiuလ- Type အCဖစ# အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

int count; // primitive data type


String name; // Predefined Type
Account account; // User Defined Class

Variable အမGiu$အစ+$eတ&ဟ+ ဘယ#လiuQiလ-

Variable eတ&ကiu ဘယ#လiueရ$ရမယ#ဆiuတ+ကiu eလ6လ+Kပ?$တ-6 eန+က#မH+ Variable အမGiu$အစ+$eတ& ဘယ#လiuQiလ-


ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။ Variable eတ&ကiu eရ$သ+$လiuက#တ-6eနရ+အeပ2မH+ မOတည#Kပ?$ အမGiu$အစ+$လ-
ခ&-Cခ+$Aiuင#ပ3တယ#။ အ-6ဒ3အCပင# Non Access Modifier eတ&ကiu eရ$သ+$Cခင#$Cဖင#6လ- အမGi$အစ+$eတ&ကiu သတ#မHတ#
လiuရပ3တယ#။

အရင#ဆuB$eရ$သ+$ထ+$တ-6eနရ+အeပ2မH+ မOတည#Kပ?$ အမGiu$အစ+$ခ&-Cခ+$ပuBကeန စKပ?$ eလ6လ+သ&+$Fကရeအ+င#။ မiမi


eရ$သ+$ထ+$တ-6 eနရ+အeပ2မH+ မOတည#Kပ?$ Variable eတ&ကiu အသuB$CပuAiuင#တ-6 Scope eတ&ဟ+ က&-Cပ+$Fကပ3တယ#။

Learning Java 16 မင#$လ&င#


Java Developer Class
eရ$သ+$ထ+$တ-6 eနရ+အeပ2မOတည#Kပ?$ Variable eတ&ကiu Global Variable န-9 Local Variable ဆiuKပ?$ ခ&-Cခ+$Aiuင#ပ3
တယ#။

Global Variables
Class Body eအ+က#တည#6တည#6မH+ eရ$ထ+$တ-6 Variable eတ&ဟ+ Global Variable eတ&Cဖစ#Fကပ3တယ#။ အ-6ဒ?
Variable eတ&ကiu Class အတ&င#$Pကiuက#တ-6eနရ+မH+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ဒ?eနရ+မH+ အ-6ဒ? Variable eတ&ကiu
အသuB$CပuAiuင#တ-6 အခGiန# အတiuင#$အတ+ဆiuတ+ကiuလ- သiဖiuလiuအပ#ပ3တယ#။ ဒ3ကiueတ+6 eန+က#မH+ ဆက#Kပ?$ Qင#$Cပသ&+$
ပ3မယ#။

class Student {

String name;

public void showName() {


System.out.println(name);
}
}

အထက#ပ3အတiuင#$ Student Class ရ-I Class Body eအ+က#မH+ String name လiueရ$ထ+$တ+ဟ+ String Type
Variable Cဖစ#တ-6 name ဆiuတ-6 Variable တစ#ခuကiu eရ$သ+$လiuက#တ+ပ3ပ-။ Class Body eအ+က#မH+ eရ$သ+$ထ+$
တ+ Cဖစ#တ-6 အတ&က# ဒ3ဟ+ Global Variable Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 name variable ကiu showName method ထ-ကeနလ- အသuB$CပueနAiuင#တ+ Cဖစ#ပ3တယ#။ Global
Variable eတ&ကiuဆiuရင# Class တစ#ခuလuB$ကeန အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Global Variable eတ&မH+ Value ကiu သတ#မHတ#မထ+$ဘO$ဆiuရင# Compiler ကeန Default တန#ဖiu$ကiu သတ#မHတ#
eပ$မH+ Cဖစ#ပ3တယ#။ Number eတ&ရ-I Default တန#ဖiu$ဟ+ 0 Cဖစ#Kပ?$၊ boolean eတ&ရ-I Default တန#ဖiu$ဟ+ false
Cဖစ#ပ3တယ#။ Object eတ&ရ-I Default တန#ဖiu$ကeတ+6 null Cဖစ#ပ3တယ#။

Global Variable eတ&ကiuထပ#Kပ?$ ဘယ#eနရ+မH+ သuB$ခGင#တ+လ- ဆiuတ-6 ရည#ရ&ယ#ခGက#န-9 ထပ#Kပ?$ ခ&-Cခ+$Aiuင#ပ3တယ#။


What is Class ဆiuတ+ကiuQင#$Cပရင#$န-9 Class တစ#ခuကiu eရ$သ+$ရCခင#$ ရည#ရ&ယ#ခGက# ၂ ခuQiတယ#လiueCပ+ခ-6ပ3တယ#။
အ-6ဒ3eတ&ကeတ+6 Class ကeန တဆင#6 Object ကiuတည#eဆ+က#ဖiuရည#ရ&ယ#ခGက#န-9 Utility Function eတ&ကiu
eရ$သ+$ဖiuရည#ရ&ယ#ခGက#ပ3။

အ-6ဒ? ရည#ရ&ယ#ခGက#eတ&အeပ2မOတည#Kပ?$ Variable eတ&ကiuလ- Object eတ&မH+သuB$ခGင#တ-6 Varable eတ&န-9 Class ထ-


မH+ ထ+$Kပ?$ Function eတ&ထ-မH+ အသuB$CပuခGင#တ-6 Variable eတ&ဆiuKပ?$ ခ&-Cခ+$Aiuင#ပ3တယ#။

Instance Variable
Instance Variable eတ&ဆiuတ+ကeတ+6 Object eတ&မH+ အသuB$CပuခGင#တ-6 Variable eတ&Cဖစ#ပ3တယ#။ Class တစ#ခu
ကiu eရ$သ+$ရတ-6 အဓiက ရည#ရ&ယ#ခGက#ဟ+ Object eဆ+က#ဖiuဆiuတ+ Cဖစ#တ-6 အတ&က# Default အတiuင#$ဆiuရင#
Global Variable eတ&ဟ+ Instance Variable eတ& Cဖစ#Fကပ3တယ#။

Learning Java 17 မင#$လ&င#


Java Developer Class
အထက#ပ3 နမOန+ထ-မH+ဆiuရင# String name; လiu Class Body eအ+က#မH+ eရ$သ+$ထ+$တ-6 အတ&က# name ဟ+
String type Variable Cဖစ#တယ#။ Kပ?$eတ+6 Global Variable လ-Cဖစ#Kပ?$ Instance Variable တစ#ခuCဖစ#တယ#လiu
သiAiuင#မH+ Cဖစ#ပ3တယ#။

Global Variable Cဖစ#Kပ?$ value ကiu ဘ+မH မeရ$ထ+$တ-6 အတ&က# Default တန#ဖiu$ဟ+ null Cဖစ#eနမယ#ဆiuတ+ကiu
သieနAiuင#ပ3တယ#။ Kပ?$eတ+6 Instance Variable တစ#ခuCဖစ#တယ#ဆiuတ+ကiuလ- သiAiuင#ပ3တယ#။ e^မH+လ-eCပ+ခ-6Kပ?$
Cဖစ#ပ3တယ#။ Instance Variable eတ&ဟ+ Class ထ-မH+ ထ+$Kပ?$သuB$တ-6 Variable eတ&မဟuတ#ပ- အ-6ဒ? Class ကeန
Object ကiu တည#eဆ+က#တ-6အခ3မH+ အ-6ဒ? Object eတ&မH+ ပiuင#ဆiuင#သင#6တ-6 State eတ&ကiu သiမ#$eပ$ထ+$ဖiuအတ&က#
သuB$Cပuပ3တယ#။

ဒ36eFက+င#6 Instance Variable eတ&ဟ+ Object တစ#ခuခGင#$ဆ?န-9 သက#ဆiuင#တ-6 Variable eတ& Cဖစ#Fကပ3တယ#။
Class တစ#ခuကeန Object ဘယ#AHစ#ခueဆ+က#Aiuင#လ-ဆiuရင# အPကiမ#Pကiမ#တည#eဆ+က#Aiuင#ပ3တယ#။ Kပ?$eတ+6 အ-6ဒ?
Object တစ#ခuခGင#$စ?ဟ+လ- သ?$Cခ+$စ?ရပ#တည#eနတ+Cဖစ#ပ3တယ#။

class StudentTest {

public static void main(String [] args) {


Student s1 = new Student();
s1.name = “Aung Aung”;

Student s2 = new Student();


s2.name = “Thidar”;
}

Student s1 = new Student() လiueရ$ထ+$တ+ဟ+ အရင#ဆuB$ Stack Memory eပ2မH+ s1 ဆiuတ-6 အမည#န-9
Student Type Variable တစ#ခuကiu သ&+$eဆ+က#ပ3တယ#။ Kပ?$မH new Student() လiueရ$တ-6 ကuဒ#ကiu Evaluate လuပ#
Kပ?$ Heap Memory eပ2မH+ Student Object ကiu သ&+$eဆ+က#ပ3တယ#။ ဒ?လiu Object eဆ+က#တ-6အခ3မH+ Student
Class ထ-မH+Qiတ-6 instance variable eတ&ကiu Copy ကO$သ&+$Kပ?$ ယOသ&+$ပ3တယ#။ ဒ36eFက+င#6 Student Object ထ-
မH+ name ဆiuတ-6 Instance Variable လ- ပ3သ&+$ပ3တယ#။

Kပ?$မH s1 eနရ+ကiu တည#eဆ+က#ထ+$တ-6 Object ရ-I Memory Address ကiu အစ+$ထiu$ပ3တယ#။ ဒ?လiuပ- s2 Variable
ကiuလ- တည#eဆ+က#သ&+$တ+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 s1 ရ-I name န-9 s2 ရ-I name eတ&ဟ+ သ?$Cခ+$စ? Cဖစ#eနမH+
Cဖစ#ပ3တယ#။ s1.name = “Aung Aung” လiu eရ$လiuက#တယ#ဆiuရင# s1 ရ-I name သ+ Aung Aung Cဖစ#သ&+$မH+ Cဖစ#
Kပ?$ s2 ရ-I name န-9 သက#ဆiuင#Cခင#$ QiမH+ မဟuတ#ပ3ဘO$။ အလ+$တO s2.name = “Thidar” လiueရ$လiuက#ရင#လ- s2 ရ-I
name သ+ တန#ဖiu$eCပ+င#$သ&+$တ+ Cဖစ#Kပ?$ s1 ရ-I name န-9 ပတ#သက#မ[QiမH+ မဟuတ#ပ3ဘO$။

Instance Variable eတ&ဟ+ Object eတ&အတ&က# eရ$ထ+$တ-6 Variable eတ& Cဖစ#တ-6 အတ&က# Instance
Variable eတ&ကiu Object Variable eတ&လiuလ- eခ2eလ6Qiပ3တယ#။ ဒ36eFက+င#6 Instance Variable eတ&ကiu Access
လuပ#ခGင#တ-6 အခ3မH+ Owner Cဖစ#တ-6 Object က တဆင#6 objectName.variableName လiu eရ$သ+$ရတ+ Cဖစ#ပ3
တယ#။ 


Learning Java 18 မင#$လ&င#


Java Developer Class

Static Variable
Java ဘ+သ+ရပ#မH+ Class eတ&ကiu eရ$သ+$တ+ဟ+ Object eဆ+က#ဖiu Pက?$ပ- မဟuတ#ပ3ဘO$။ Java မH+ Class မပ3
ပ- ကuဒ#eတ&ကiu eရ$သ+$လiu မရAiuင#ပ3ဘO$။ ဒ36eFက+င#6 Utility Function eတ&ကiu eရ$သ+$မယ#ဆiuရင#eတ+င#မH Class
ထ-မH+ပ- eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ အ-6ဒ?လiu Class ထ-မH+ပ-ထ+$Kပ?$ အသuB$CပuခGင#တ-6 Method eတ&ကiueတ+6 Static
Method လiueခ2ပ3တယ#။ တဖန# အ-6ဒ? Method eတ&အFက+$မH+ ဘuBအeနန-9 ထ+$Kပ?$ သiမ#ထ+$ခGင#တ-6 တန#ဖiu$eတ&
အတ&က# Variable eတ&လiuအပ#လ+ပ3တယ#။ Object မH+ သuB$ဖiu မဟuတ#ပ- Class ထ-မH+ပ- ထ+$Kပ?$ အသuB$CပuခGင#တ-6
Variable eတ&ကiueတ+6 Static Variable eတ&လiu eခ2Fကပ3တယ#။

က- ဒ?eနရ+ကစKပ?$ Static Variable eတ&ကiu ဘယ#လiueရ$ရမယ#၊ Kပ?$eတ+6 Static Variable eတ&ရ-I ထO$Cခ+$ခGက#eတ&
န-9 Static Variable eတ&ကiu ဘယ#လiu အသuB$Cပuရမယ# ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

Static Variable eတ&ကiuဘယ#လiueရ$Fကမလ-

Global Variable eတ&ကiu ဒ?အတiuင#$ eရ$ထ+$ရင# Instance Variable eတ&Cဖစ#ပ3တယ#။ တနည#$ eCပ+ရမယ#ဆ?uရင#
Global Variable eတ&ဟ+ Default အတiuင#$ဆiuလiuကeတ+6 Object eတ&မH+ သuB$မည#6 Instance Variable eတ& Cဖစ#
eနမH+ပ3ပ-။ Static Variable အCဖစ# အသuB$Cပuလiuတ-6အခ3မH+ static ဆiuတ-6 Non Access Modifier ကiu Variable
Type ရ-I e^မH+ eရ$သ+$Kပ?$ Static Variable Cဖစ#eFက+င#$ eဖ2CပAiuင#မH+ Cဖစ#ပ3တယ#။

class Student {

static int count;


String name;

void show() {
System.out.println(“Count : “ + count);
System.out.println(“Name : “ + name);
}

အထက#ပ3 Student Class ထ-မH+ Global Variable ၂ ခuQiပ3တယ#။ count န-9 name ပ3။ count ဟ+ int type Cဖစ#
Kပ?$ static လiueရ$ထ+$တ-6 အတ&က# static variable Cဖစ#ပ3တယ#။ Kပ?$eတ+6 name ကeတ+6 Type အCပင# ဘ+မH မ
eရ$ထ+$တ-6 အတ&က# Instance Variable Cဖစ#ပ3တယ#။

Static Variable eတ&ရ-I ထO$Cခ+$ခGက#eတ&


Instance Variable eတ&ဟ+ Object eတ& အတ&က# Cဖစ#တ-6 အတ&က# Class ကeန Object eဆ+က#တ-6 အခ3မH+
eက+#ပ?ကO$သ&+$Kပ?$ Object ထ-မH+ State eတ&ကiu သiမ#$ထ+$ဖiu အတ&က# အသuB$Cပuပ3တယ#။ ဒ3eပမ-6 Static Variable
eတ&ကeတ+6 Utility Function eတ&အFက+$မH+ State eတ&ကiu Share လuပ#Kပ?$ အသuB$Cပuဖiu အတ&က# Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Object eဆ+က#တ-6 အခ3မH+ Static Variable eတ&ကiu Copy ကO$Kပ?$ ယOမသ&+$ပ3ဘO$။ Class ထ-မH+ပ- ခGန#
ထ+$ခ-6ပ3တယ#။ Utility Function eတ&အFက+$မH+ အသuB$Cပuဖiu ထ+$တ-6 Variable eတ&Cဖစ#တ-6 အတ&က# Static
Variable eတ&ဟ+ Class ထ-မH+ပ- QieနမH+ Cဖစ#ပ3တယ#။ Kပ?$eတ+6 Class eတ&ဟ+ JVM eပ2မH+ တစ#ခuထ-သ+Qiတ-6

Learning Java 19 မင#$လ&င#


Java Developer Class

class Student {

static int count;


String name;

void show() {
System.out.println(“Count : “ + count);
System.out.println(“Name : “ + name);
}

void countUp() {
count ++;
}

public static void main(String [] args) {


Student s1 = new Student();
s1.countUp();
s1.name = “Aung Aung”;
s1.show();

Student s2 = new Student();


s2.countUp();
s2.name = “Thidar”;
s2.show();
}

အတ&က# Static Variable eတ&ဟ+လ- JVM မH+ တစ#ခuထ-သ+Qiတ-6 Variable eတ&အeနန-9 ရပ#တည#မH+ Cဖစ#ပ3တယ#။
ဒ?eနရ+မH+ Static Variable eတ&ရ-I ထO$Cခ+$ခGက#ကiu သieအ+င# eအ+က#ပ3 Code eတ&န-9 စမ#$Fကည#6Fကရeအ+င#။
အထက#ပ3 ကuဒ#ထ-မH+ countUp ဆiuတ-6 Method ထ-မH+ count ++ ဆiuKပ?$ static variable ကiu တစ#တiu$ထ+$ပ3တယ#။

Kပ?$eတ+6 main method ထ-ကiu Fကည#6Fကရeအ+င#။ အရင#ဆuB$. s1 ဆiuတ-6 Object တစ#ခuကiu eဆ+က#တယ#။ s1 ရ-I
countUp method ကiu invoke လuပ#ပ3တယ#။ ဒ3ဆiuရင# ဘ+Cဖစ#သ&+$လ- ဆiuတ+ကiu Fကည#6Fကရeအ+င#။ count ဆiuတ-6
variable ကiu တစ#တiu$ပ3မယ#။ ဒ36eFက+င#6 count ရ-I တန#ဖiu$ဟ+ 1 Cဖစ#သ&+$မယ#။

Kပ?$eတ+6 ဆက#Kပ?$ s1.show() ကiu eခ2ပ3တယ#။ ဒ?eနရ+မH+ s1 ရ-I count န-9 name ကiu Console eပ2မH+ Cပeပ$ပ3
မယ#။ သတiထ+$ဖiuလiuတ+က count ဟ+ Static Variable Cဖစ#Kပ?$eတ+6 name ဟ+ Instance Variable Cဖစ#eနတ+
ကiuပ3ပ-။ ဆက#Kပ?$ s1 ဆiuတ-6 န+မည#န-9 Object တစ#ခuကiu eဆ+က#Cပန#ပ3တယ#။ Kပ?$eတ+6 countUp() method ကiu eခ2
Cပန#တယ#။ Kပ?$မH s2 ရ-I name ကiu Thidar လiu အစ+$ထiu$Kပ?$ s2 ရ-I show() Method ကiu eခ2Cပန#တယ#။

S1 ရ-I show() Method ကiu eခ2တuန#$က အeCဖဘယ#လiuCပKပ?$ s2 ရ-I show() Method eခ2eတ+6 အeCဖဘယ#လiu
ထ&က#မယ#ဆiuတ+ကiu သတiထ+$မieစခGင#ပ3တယ#။

Learning Java 20 မင#$လ&င#


Java Developer Class
Count : 1
Name : Aung Aung
Count : 2
Name : Thidar

အထက#ပ3 အတiuင#$ အeCဖထ&က#ပ3မယ#။ s1.show() ကiu eခ2ခ-6တuန#$က count ရ-I တန#ဖiu$ဟ+ 1 Cဖစ#ပ3တယ#။ show()
method ကiu မeခ2ခင# countUp() Method ကiu eခ2ခ-6တယ#။ ဒ36eFက+င#6 count ဟ+ 1 Cဖစ#သ&+$ပ3တယ#။

ဒuတiယ အPကiမ# s2.countUp() ကiu eခ2Cပန#တယ#။ count ကiu တစ#Cပန#တiu$ပ3တယ#။ တကယ#လiuသ+ count ဟ+
Object eတ&eဆ+က#တiuင#$ Copy ကO$သ&+$ရင# အ-6ဒ?eနရ+မH+လ- count ကiu s2 က ပiuင#မH+ Cဖစ#တ-6 အတ&က# တန#ဖiu$ဟ+
၁ ပ-Cဖစ#မH+ပ3။ ဒ3eပမ-6 count ဟ+ Static Variable Cဖစ#တယ#။ ဒ36eFက+င#6 s2 ဟ+ JVM တစစ#ခuလuB$မH+ တစ#ခuထ-သ+
Qiပ3တယ#။ s1 က သiတ-6 count eက+ s2 ကသiတ-6 count ပ3 တစ#eနရ+ထ-မH+ Qiတ-6 count ကiu Cမင#eနတ+ Cဖစ#
တယ#။ ဒ36eFက+င#6 s1 ရ-I count ကiu တစ#တiu$လiuက#eတ+6 count ရ-I တန#ဖiu$ဟ+ 1 Cဖစ#လ+Kပ?$၊ eန+က#တစ#Pကiမ# s2
ကeန count ကiu တစ#Cပန#တiu$eတ+6 တန#ဖiu$ဟ+ 2 Cဖစ#သ&+$တ+ Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+ Static Variable eတ&ဟ+ JVM eပ2မH+ တစ#ခuထ-သ+ QiမH+ Cဖစ#တ-6 အတ&က# ဘယ# Object ကပ- သuB$သuB$
တစ#ခuထ-ကiu သuB$eနတယ#ဆiuတ+ကiu သieစခGင#ပ3တယ#။

Static Variable eတ3ကiu ဘယ%လiueနရ"မ7iu9eတ3မ:" အသu<9=ပu>ကမလ/


ဒ3ကeတ+6 Static Variable eတ&ရ-I ထO$Cခ+$ခGက#ကiu Fကည#6ရင# သiAiuင#ပ3လiမ#6မယ#။ Static Variable eတ&ကiu Utility
Function eတ&အFက+$မH+ State eတ&ကiu ဘuBအeနန-9 အသuB$CပuခGင#တ-6 အခ3မGiu$မH+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။
eန+က#တစ#ခuက မiမiရ-I Application တစ#ခuလuB$မH+ Share လuပ#Kပ?$ သuB$ခGင#တ-6 Data မGiu$eတ&မH+လ- Static Variable
eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

ဒ36eFက+င# Desktop Application eတ&မH+ Login User ရ-I Information eတ&ကiu Application တစ#ခuလuB$မH+ ဘuBအeန
န-9 Share လuပ#Kပ?$ အသuB$Cပuလiuတ-6 အခ3မGiu$မH+ Static Variable eတ&ကiu အသuB$CပuFကတ+ကiu eတ&Jရပ3မယ#။ Kပ?$eတ+6
Application တစ#ခuလuB$မH+ Object တစ#ခuထ-သ+ Qieစလiuတ-6 Singleton Design Patterns မGiu$မH+လ- Static
Variable eတ&ကiu အသuB$Cပuတ+ကiu eတ&Jရပ3တယ#။

OOP ကiu သင#Fက+$Kပ?$တ-6 အခ3မH+ Design Patterns eတ&အeFက+င#$ကiu Class Design eတ&န-9 လက#eတ&J
Cပဿန+eတ&ကiu ဘယ#လiu eCဖQင#$တယ#ဆiuတ+ကiu eဖ2Cပသ&+$ပ3မယ#။ အ-6ဒ? အခန#$eရ+က#ရင# Singleton Pattern
အeFက+င#$ကiu အeFက+င#$ကiu ဆက#Kပ?$ eဖ2Cပသ&+$ပ3မယ#။


Learning Java 21 မင#$လ&င#


Java Developer Class

Local Variables
Code Block တစ#ခuခuအတ&င#$မH+ စ+Kပ?$ Declare လuပ#ထ+$တ-6 Variable eတ&ဟ+ Local Variable eတ& Cဖစ#Fကပ3
တယ#။ Code Block လiueCပ+တ-6eနရ+မH+ အတ&န#9က&င#6 { Cဖစ#6စKပ?$ အတ&န#9က&င#$ အပiတ#န-9 } ဆuB$တ-6 Code eတ&ကiu
ဆiuလiuတ+ပ3။ Instance Block eတ&၊ Static Block eတ&၊ Method Body eတ&၊ if / else statement Block eတ&၊
For န-9 While Block eတ&ဟ+ Code Block eတ&Cဖစ#Fကပ3တယ#။

တဖန# Method Arguments eတ&န-9 for loop ထ-မH+ eရ$ထ+$တ-6 Variable eတ&ကလ- Local Variable eတ& Cဖစ#Fက
ပ3တယ#။ Local Variable eတ&ဟ+ သOတiuကiu စKပ?$eရ$ထ+$တ-6 eနရ+ကeန စKပ?$ သOတiuကiu eရ$ထ+$တ-6 Block ဆuB$တ-6
အထi အသuB$Cပuလiuရပ3တယ#။ Local Variable eတ&ဟ+ Global Variable eတ&န-9 မတOပ- Default တန#ဖiu$ကiu
Compiler က ထည#6မeပ$Aiuင#ပ3ဘO$။ ဒ36eFက+င#6 Local Variable eတ&ကiu အသuB$Cပueတ+6မယ#ဆiuရင# တန#ဖiu$ တစ#ခuခu
ကiu Assign လuပ#Kပ?$မH+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ တကယ#လiu တန#ဖiu$ကiu အစ+$မထiu$ပ- အ-6ဒ? Local Variable တစ#
ခuကiu Access လuပ#ရင# Compile Time မH+ Error တက#မH+ Cဖစ#ပ3တယ#။

Local Variables in Blocks

class LocalVariablesInBlocks {

{
// Instance Block
int data = 10;
}

static {
// static block
int data = 11;
}
}

Class Body အတ&င#$မH+ { န-9စKပ?$ } န-9 ဆuB$ထ+$တ+ဟ+ Instance Block eတ&Cဖစ#ပ3တယ#။ Instance Block eတ&
ဟ+ Class ကeန Object ကiuထည#eဆ+က#တ-6အခ3မH+ Constructor ကiu အလuပ#မလuပ#ခင# တစ#Pကiမ# အလuပ#လuပ#eစ
ပ3တယ#။ အထက#ပ3အတiuင#$ Instance Block ထ-မH+ int data = 10 လiueရ$ထ+$တ-6 အတ&က# data ဟ+ Local
Variable တစ#ခuCဖစ#Kပ?$ } eနရ+အထi အ-ဒ? data ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

တဖန# static { } လiueရ$ထ+$တ+ကeတ+6 static block Cဖစ#ပ3တယ#။ JVM eပ2ကiu အ-6ဒ? Class ကiu Load လuပ#Kပ?$
တ+န-9 static block ထ-မH+Qiတ-6 ကuဒ#eတ&ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။

Local Variable in Methods


Method တစ#ခuအတ&င#$မH+ eရ$သ+$ထ+$တ-6 Variable eတ&ဟ+လ- Local Variable eတ& Cဖစ#Fကပ3တယ#။ အ-6ဒ?
Variable eတ&ဟ+လ- စKပ?$ Declare လuပ#တ-6 eနရ+ကeနစKပ?$ Method Body ဆuB$တ-6 အထiသ+ အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။ Method အထ-မH+ Local Variable eတ&ကiu ၂ eနရ+မH+ eတ&JAiuင#ပ3တယ#။

Learning Java 22 မင#$လ&င#


Java Developer Class
ပထမဆuB$eတ&JAiuင#တ+ကeတ+6 Method Body.အတ&င#$မH+ Declare လuပ#ထ+$တ-6 Variable eတ&ပ3။ eန+က#တစ#ခu
ကeတ+6 Method Argument eတ&မH+ eရ$သ+$ထ+$တ-6 Variable eတ&ပ- Cဖစ#Fကပ3တယ#။

class LocalVariablesInMethod {

void someMethod() {
// declare in method
int data = 10;
}

void takeArgument(int data) {


// can use data in method body
}
}

အထက#ပ3 နမOန+ထ-မH+ someMethod() ထ-မH+ int data = 10 ဆiuKပ?$eရ$ထ+$ပ3တယ#။ Type ကiu တ&-eရ$Kပ?ဆiuတ+န-9
ဒ3ဟ+ Variable တစ#ခuကiu လ+Kပ?$ Declare လuပ#တယ#ဆiuတ+ကiu သeဘ+ပ3က#ဖiuလiuပ3တယ#။ Method Body ထ-မH+
စKပ?$ Declare လuပ#ထ+$တ-6 အတ&က# ဒ3ဟ+ Local Variable Cဖစ#ပ3တယ#။ အ-6ဒ? Variable ကiu Declare လuပ#တ-6
eနရ+ရ-I eန+က#ကeနစKပ?$ Method ဆuB$တ-6 အထi အသuB$CပuAiuင#ပ3တယ#။

eန+က# Method တစ#ခuကeတ+6 takeArgument(int data) လiueရ$ထ+$ပ3တယ#။ Method Argument အeနန-9 int
data ကiu eရ$သ+$ထ+$ပ3တယ#။ ဒ?eနရ+မH+လ- Type န-9 အတOeရ$ထ+$တ+ Cဖစ#တ-6 အတ&က# Local Variable Cဖစ#ပ3
တယ#။ အ-6ဒ? Variable ကiu takeArgument method အတ&င#$မH+ပ- အသuB$Cပuလiu ရမH+ Cဖစ#ပ3တယ#။ ဒ?eနရ+မH+
someMethod ထ-က int data န-9 takeArgument ထ-က int data eတ&ဟ+ Type န-9 Name ဟ+ တOeနeပမ-6
အသuB$CပuAiuင#တ-6 eနရ+ (Scope) ဟ+ မတOပ3ဘO$။ ဒ3eFက+င#6 သ?$Cခ+$ Variable eတ& Cဖစ#Fကပ3တယ#။

Local Variable in Statements

for(int i=0; i < 10; i++) {


String str = “Count is “;
System.out.println(str + i);
}

Decision Statement eတ&န-9 Looping Statement eတ&ထ-မH+ eရ$သ+$ထ+$တ-6 Variable eတ&ဟ+လ- Local
Variable eတ& Cဖစ#Fကပ3တယ#။ အထက#ပ3 နမOန+ထ-မH+ Local Variable ၂ ခu ပ3ဝင#ပ3တယ#။ int i = 0 လiu eရ$ထ+$
တ-6 အတ&က# ဒ3ဟ+လ- Local Variable Cဖစ#ပ3တယ#။ Kပ?$eတ+6 String str လiu eရ$ထ+$တ+လ- Local Variable Cဖစ#
ပ3တယ#။

Local Variable eတ&ဟ+ သOတiuကiu စeရ$ထ+$တ-6 eနရ+ကeနစKပ?$ သOတiuQieနတ-6 Block ဆuB$တ-6 အထi အသuB$CပuAiuင#
မH+Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 for(int i = 0; i < 10; i ++) ဆiuKပ?$ i ကiu Cပန#Kပ?$ အသuB$CပueနAiuင#တ+ Cဖစ#ပ3တယ#။

Learning Java 23 မင#$လ&င#


Java Developer Class

Variable Hidings
က\န#eတ+#တiu Variable eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ တစ#ခuသတiထ+$ဖiuလiuတ+က Scope တစ#ခuအတ&င#$မH+
န+မည#တO Variable eတ&ကiu eရ$သ+$လiu မရAiuင#ပ3ဘO$။ Scope မတOရင#eတ+6 န+မည#တO Variable eတ&ကiueရ$သ+$
Aiuင#ပ3တယ#။

Local Variable eတ&အခGင#$ခGင#$ Scope မတOတ+က Cပဿန+မQieပမ-6 Global Scope ထ-က Variable န-9 Local
Scope ထ-က Variable eတ&မH+ န+မည#တOခ-6ရင# Local Scope ထ-မH+eတ+6 Local Scope ထ-က Variable ကiuပ-
အသuB$Cပuသ&+$မH+ Cဖစ#ပ3တယ#။ ဒ?လiu Local Scope ထ-က Variable က Global Scope ထ-က Variable ကiu သ&+$Kပ?$
ဖuန#$က&ယ#သလiu Cဖစ#သ&+$တ+ကiu Variable Hiding လiueခ2ပ3တယ#။

Global Variable eတ&မH+ Instance Variable န-9 Static Variable ဆiuKပ?$ Qiပ3တယ#။ အ-6ဒ?အတ&က# Variable
Hiding Cဖစ#Aiuင#တ-6 ပuBစBeတ&ကiu Fကည#6Fကည#6ရeအ+င#။

public class VariableHiding {

String name;
static int count;

public void setValues(String name, int count) {


name = name;
count = count;
}
}

အထက#ပ3နမOန+ကiu Fကည#6ရင# Global Scope ထ-မH+ Instance Variable name ဆiuတ+QiKပ?$ Static Variable
count ဆiuတ+Qiပ3တယ#။ Kပ?$eတ+6 setValues method ထ-မH+လ- Argument အeနန-9 name န-9 count ကiu ယOထ+$
ပ3တယ#။ ဒ?လiu eရ$လiuက#တ+န-9 Global Scope ထ-က Variable eတ&န-9 Local Scope ထ-က Variable eတ&ဟ+
န+မည#တOသ&+$ပ3Kပ?။

ဒ36eFက+င#6 အ-6ဒ? Scope ထ-မH+ name လiu Access လuပ#ရင# Local Scope ထ-က Variable eတ&ကiuပ- အသuB$Cပueတ+6
မH+ Cဖစ#ပ3တယ#။ အ-6ဒ?လiuပ- count လiueရ$လiuက#ရင#လ- Local Scope ထ-က Variable ကiuပ- အသuB$Cပueတ+6မH+ပ3။
ဒ36eFက+င#6 ဒ?eနရ+မH+ name = name ဆiuရင# Local Variable name ကiu Local Variable name န-9 အစ+$eနeတ+6
မH+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6 ဒ? Method က Argument အeနန-9 ယOထ+$တ-6 တန#ဖiu$eတ&န-9 Global Scope ထ-က Variable eတ&ကiu
သတ#မHတ#eပ$eနတ+ Cဖစ#ပ3တယ#။ အ-6ဒ?လiueနရ+မGiu$မH+ Global Scope ထ-က Variable ကiu အသuB$Cပuလiuပ3က
Owner.variable လiu eရ$eပ$ရမH+ Cဖစ#ပ3တယ#။

Global Variable name ဟ+ Instance Variable Cဖစ#တ-6အတ&က# သbရ-I Owner Cဖစ#တ-6 this ကiu e^မH+ eရ$eပ$ရ
မH+ Cဖစ#Kပ?$ this.name = name လiueရ$eပ$ရမH+ Cဖစ#ပ3တယ#။ တဖန# count ဟ+ Static Variable Cဖစ#Kပ?$ Owner
ဟ+ Class Cဖစ#တ-6 အတ&က# VariableHiding.count = count လiu eရ$eပ$ရမH+ Cဖစ#ပ3တယ#။

Variable Hiding မCဖစ#တ-6 eနရ+eတ&မH+ ဆiuရင#eတ+6 Class တစ#ခuထ-က Variable eတ&ကiu Owner ထည#6Kပ?$ မeရ$
လ- ရeနမH+ Cဖစ#Kပ?$၊ Variable Hiding Cဖစ#မHသ+ Owner ကiu ထည#6Kပ?$ eရ$eပ$ရမH+ Cဖစ#ပ3တယ#။

Learning Java 24 မင#$လ&င#


Java Developer Class

Methods
Java ဘ+သ+ရပ#မH+ Utility Function eတ&၊ Object eတ&ရ-I Behavior eတ&ကiu eဖ2Cပဖiuအတ&က# Method eတ&ကiu
အသuB$Cပuပ3တယ#။ Variable eတ&တuန#$ကလiuပ- Method eတ&မH+လ- Class eတ&မH+ သuB$မH+လ+$ Object eတ&မH+ သuB$
မH+လ+$ဆiuKပ?$ Static Method န-9 Instance Method eတ&ဆiuKပ?$ ခ&-Cခ+$ထ+$ပ3တယ#။

အရင#ဆuB$ Method တစ#ခuကiu မHန#eအ+င# ဘယ#လiueရ$ရမယ#ဆiuတ-6 အeFက+င#$ကeန စတင# eလ6လ+သ&+$Fက


ရeအ+င#။

public class MethodDemo {


// method
void sayHello() {} 4. Method Body
}

1. Return Type

2. Method Name

3. Argument List

Method eတ&ကiu eရ$သ+$တ-6eနရ+မH+ Class Body အထ-မH+eရ$သ+$ရပ3တယ#။ Java ဘ+သ+ရပ#မH+ Class eတ&
ရ-I အCပင#မH+ Method eတ&ကiu eရ$သ+$လiu မရပ3ဘO$။ ဒ36အCပင# အCခ+$eသ+ Code Block eတ&ထ-မH+လ- Method
eတ&ကiu eရ$သ+$လiu မရAiuင#ပ3ဘO$။

eရ$သ+$မယ#ဆiuရင# [1. Return Type] [2. Method Name] [3. Argument List] [4. Method Body] ဆiuKပ?$
eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ အန-ဆuB$ အထက#ပ3အခGက#eတ&ပ3တယ#ဆiuရင# Method အeနန-9 Compiler ကeန
အသiအမHတ#CပuမH+ Cဖစ#ပ3တယ#။ ဒ?eနရ+မH+ Method Name ကeတ+6 Method ရ-I န+မည#Cဖစ#Kပ?$ Method Body
ကeတ+6 လuပ#eဆ+င#ခGက#eတ&ကiu eရ$သ+$ရမH+ Cဖစ#တ-6 အတ&က# အeထ&အထO$ မeဖ2Cပeတ+6ပ- Return Type န-9
Argument List အeFက+င#$ကiuပ- eဖ+#Cပသ&+$ပ3မယ#။

Return Type

Method eတ&ကiu eရ$သ+$တ-6 အခ3မH+ အ-6ဒ? Method ကiu Invoke လuပ#တ-6အခ3မH+ ဘ+ကiu Cပန#eပ$ရမလ- ဆiuတ-6
Return Type ကiu သတ#မHတ#eပ$ဖiuလiuအပ#ပ3တယ#။ တကယ#လiu Method တစ#ခuကiu Invoke လuပ#Kပ?$တ-6 အခ3မH+ int
type ကiu Cပန#Kပ?$ လiuခGင#တယ#ဆiuရင# Return Type eနရ+မH+ int လiueရ$ရKပ?$ String ကiu လiuခGင#တယ#ဆiuရင# String
လiueရ$ရပ3မယ#။

Kပ?$eတ+6 Method ထ-က eန+က#ဆuB$ Statement ရ-I eန+က#မH+ return ဆiuKပ?$ သတ#မHတ#ထ+$တ-6 Type ရ-I တန#ဖiu$ကiu
Return လuပ#eပ$ရမH+ Cဖစ#ပ3တယ#။ အ-6ဒ? Statement ကiu Return Statement လiu eခ2ပ3တယ#။ Method ထ-က
Return Statement ရ-I eန+က#မH+ ဘ+ကuဒ#မH eရ$သ+$လiu မရAiuင#ပ3ဘO$။

Learning Java 25 မင#$လ&င#


Java Developer Class
တကယ#လiu မiမieရ$သ+$ထ+$တ-6 Method ဟ+ Return Cပန#စရ+မလiuဘO$ဆiuရင# Return Type eနရ+ကiu void လiu
eရ$သ+$eပ$ရပ3မယ#။ ဒ3ဆiuရင# အ-6ဒ? Method ထ-မH+ ဘ+တန#ဖiu$မH Return လuပ#စရ+မလiueတ+6ပ3ဘO$။

ဆက#လက#Kပ?$ ဘယ#လiu Method eတ&က Return လuပ#ဖiuလiuKပ?$ ဘယ#လiu Method eတ&က Return လuပ#စရ+မလiuဘO$
လ- ဆiuတ+ကiu ဆက#လက#Kပ?$ စT#$စ+$သ&+$Fကရeအ+င#။ Utility Function ပ-eCပ+eCပ+ Object ရ-I Behavior လiuပ-
eCပ+eCပ+ Method eတ&ဆiuတ+ လuပ#eဆ+င#မ[eတ&ကiu eဆ+င#ရ&က#eပ$Aiuင#တ-6 အစiတ#အပiuင#$eတ& Cဖစ#ပ3တယ#။
က\န#eတ+#တiu Student Object ကiu အသuB$CပuAiuင#ဖiu Student Class ကiu eရ$သ+$eနတယ# ဆiuFကပ3စiu။ အ-6ဒ? Class
ထ-မH+ Instance Variable အeနန-9 String Type name ဆiuတ-6 Variable Qiပ3တယ#။

ဒ?eနရ+မH+ Student Object ကeန name ကiu Cပန#eပ$Aiuင#တ-6 Behavior န-9 Student Object ကiu မiတ#ဆက#စ+ကiu
Console eပ2မH+ Print လuပ#Aiuင#တ-6 Behavior eတ&ကiu ထည#6eပ$ဖiuလiuလ+တ-6 အခ3ကiu စT#$စ+$Fကည#6ပ3။ က\န#eတ+#တiu
Method eတ&ကiu eရ$ဖiu လiuအပ#လ+ပ3Kပ?။

public class Student {

private String name;

public String getName() {


return name;
}

public void printGreeting() {


System.out.println(“Hello, I am “ + name);
}
}

အထက#ပ3 အတiuင#$ Student Object ရ-I name ကiu Cပန#eပ$စရ+လiuတ-6 getName() Method မH+eတ+6 Return
Type eနရ+မH+ name ရ-I Type Cဖစ#တ-6 String ကiu eရ$သ+$ထ+$ရပ3တယ#။ eန+က#Kပ?$ Console eပ2မH+ Greeting
ကiu Print လuပ#UuBသ+လiuတ-6 printGreeting() Method မH+eတ+6 Return Cပန#စရ+မလiuတ-6 အတ&က# void လiu eရ$သ+$
eပ$ဖiuလiuအပ#ပ3တယ#။ တစ#Cခ+$ Language eတ&မH+လiu Return Cပန#စရ+မလiuတ-6 အတ&က# ဘ+မH မeရ$ပ-ထ+$လiu မရ
ပ3ဘO$။ မCပန#ဘO$ဆiuရင#လ- void ဆiuKပ?$ eရ$eပ$ရမH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Method eတ&ကiu eရ$သ+$တ-6 အခ3မH+ အ-6ဒ? Method ကiu သuB$Kပ?$တ-6 အခ3မH+ တစ#ခuခuကiu Cပန#ရခGင#တ+လ+$
ဆiuတ+ကiu အရင#ဆuB$ စT#$စ+$ရပ3မယ#။ Cပန#လiuခGင#တယ#ဆiuရင#လ- ဘယ# Type မGiu$ကiu လiuခGင#တ+လ-ဆiuတ+ကiu ဆuB$Cဖတ#
ရပ3မယ#။ Kပ?$မH လiuခGင#တ-6 Type ကiu Return Type အeနန-9 သတ#မHတ#eပ$ရပ3မယ#။ Return Cပန#မလiuခGင#eတ+6ဘO$ဆiu
ရင#eတ+6 void ကiu Return Type အeနန-9 eရ$သ+$eပ$ရမH+ပ3။

Return Statement ကiu eရ$သ+$တ-6eနရ+မH+လ- သတ#မHတ#ထ+$တ-6 Return Type န-9 ထပ#တOဒ3မHမဟuတ# Sub Type
eတ&ဆiuရင# Return Value အeနန-9 အသuB$CပuAiuင#ပ3တယ#။ ဆiuFကပ3စiu Student Class ဟ+ Person Class ရ-I Sub
Class ဆiuရင# Person Type ကiu Return Cပန#လiuတ-6 Method ထ-မH+ Student Type ကiu Return Value အeနန-9
အသuB$CပuAiuင#ပ3တယ#။ အ-6ဒ?လiu Sub Type ကiu Return Cပန#Aiuင#တ+က Covariant Return လiueခ2Kပ?$ Java SE 5
ကeန စတင# အသuB$Cပuလ+Aiuင#တ+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6 လuB$ဝ Type မတOတ-6 Value ကiueတ+6 Return Cပန#လiuမရပ3ဘO$။

Learning Java 26 မင#$လ&င#


Java Developer Class

Argument List

Method တစ#ခuရ-I Argument ဆiuတ+ဟ+ အ-6ဒ? Method ထ-ကeန အသuB$Cပuဖiu အတ&က#လiuအပ#တ-6 eဒတ+eတ&ကiu
ရယOAiuင#ဖiu အတ&က# eရ$သ+$ရတ-6 Variable eတ& Cဖစ#Fကပ3တယ#။ ဆiuFကပ3စiu၊ က\န#eတ+#တiu int ၂ ခuကiu eပ3င#$Kပ?$
ရလဒ#ကiu Cပန#eပ$Aiuင#တ-6 Method တစ#ခuကiu eရ$eနတ-6 အခ3မH+ int variable ၂ ခuကiu Method ထ-ကeန မသiAiuင#ရင#
eရ$လiu ရမH+ မဟuတ#ပ3ဘO$။ အ-6ဒ? int AHစ#ခuကiu Method Argument အeနန-9 eရ$သ+$Kပ?$ Method ထ-ကeန အသuB$Cပu
Aiuင#မH+ Cဖစ#ပ3တယ#။

ဆက#လက#Kပ?$eတ+6 Method Argument eတ&ကiu ဘယ#လiu eရ$ရတယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။


method name ရ-I eန+က#မH+ () လiueရ$ထ+$တ-6 eနရ+Qiပ3တယ#။ အ-6ဒ? “(“ န-9 “)” Fက+$မH+ Method အတ&င#$မH+
အသuB$Cပuလiuတ-6 Argument eတ&ကiu Variable အeနန-9 Declare လuပ#eပ$ရပ3မယ#။ Method Argument eတ&ကiuလ-
မလiuအပ#ပ3က မeရ$ပ-eနAiuင#သလiu၊ လiuအပ#ပ3က တစ#ခuထက#မက Comma ခBKပ?$ eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

public class ArgumentDemo {

void noArgument() { // codes }

double makeDouble(double d) {
return d * 2;
}

double add(double a, double b) {


return a + b;
}
}

အထက#ပ3နမOန+ထ-မH+ အတiuင#$ Argument eတ&ကiu လiuအပ#သလiu eရ$သ+$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Method Signature and Method Overloading

Method တစ#ခuမH+ အန-ဆuB$eရ$သ+$ဖiu လiuအပ#တ-6 အစiတ#အပiuင#$eတ&ကiu eလ6လ+Kပ?$တ-6 eန+က#မH+ ဆက#လက#Kပ?$


Java Compiler န-9 Java Runtime မH+ Method တစ#ခuကiu ဘယ#လiu သieနလ- ဆiuတ+ကiu eလ6လ+သ&+$Fကပ3မယ#။
Variable မH+တuန#$က Scope တစ#ခuအတ&င#$မH+ Name တOတ-6 Variable eတ&ကiu eရ$သ+$လiu မရAiuင#ဘO$ဆiuတ+ကiu
eလ6လ+ခ-6FကရမH+ပ3။ ဘ+လiuလ- ဆiueတ+6 Java Compiler န-9 Java Runtime မH+ Variable ရ-I Name ကiu Fကည#6Kပ?$
Identifined လuပ#eနတ-6 အတ&က# Cဖစ#ပ3တယ#။

ဒ3Cဖင#6ရင# Method eတ&ကiueက+ ဘယ#လiu Identified လuပ#eနတ+လ- ဆiuတ+ကiu ဆက#Kပ?$ eလ6လ+သ&+$Fကရeအ+င#။


Class တစ#ခuထ-မH+ န+မည#တOတ-6 Method eတ& eရ$လiuရပ3တယ#။ ဒ36eFက+င#6 Java Compiler န-9 Runtime က
Method တစ#ခuကiu ကiu န+မည# တစ#ခuထ-န-9 သတ#မHတ#eနတ+ မဟuတ#ပ3ဘO$ ဆiuတ+ကiu သiAiuင#ပ3တယ#။

Learning Java 27 မင#$လ&င#


Java Developer Class

Compiler န-9 Runtime ကeန Method ကiu Identified လuပ#eနတ-6 အစiတ# အပiuင#$eတ&ကiu Method Signature လiu
eခ2ပ3တယ#။ Method Signature မH+ Method Name န-9 Argument List တiu ပ3ဝင#Fကပ3တယ#။ Java ဘ+သ+ရပ#
မH+က Method Name တOeပမ-6 Method Signature မတOရင# Method တစ#ခuစ?လiu သတ#မHတ#ပ3တယ#။

public class OverloadDemo {

public void takeNote(Memo memo) {


// codes to write note in memo
}

public void takeNote(Tablet tablet) {


// code to write note in tablet
}
}

အထက#ပ3 နမOန+ထ-မH+ Method AHစ#ခuလuB$ န+မည#တOeပမ-6 Argument eတ&မတOပ3ဘO$ ဒ36eFက+င#6 Java Compiler
က Method တစ#ခuစ?လiu Cမင#ပ3တယ#။ ဒ3ကeတ+6 Method Argument Type မတOတ-6အတ&က# Method Signature
မတOဘO$လiu သတ#မHတ#သ&+$တ+ပ3။

public class OverloadDemo {

public void takeNote(Memo memo) {


// codes to write note in memo
}

public void takeNote(Memo memo, Pen pen) {


// code to write note in tablet
}
}

အထက#ပ3အတiuင#$ Argument List အeရအတ&က# မတOရင#လ- Method Signature မတOဘO$လiu သတ#မHတ#ပ3တယ#။


ဤက-6သiu Method Name တOKပ?$ Argument List မတOတ-6 Method eတ&ကiu eရ$သ+$Cခင#$ကiu Method
Overloading လiueခ2ဆiuပ3တယ#။

JRE ထ-မH+ပ3တ-6 Java Standard API eတ&မH+လ- Method Overloading ကiu အမG+$အCပ+$ အသuB$Cပueရ$သ+$ထ+$
တ+ကiu eတ&Jရပ3တယ#။

Learning Java 28 မင#$လ&င#


Java Developer Class

Type of Methods

Method eတ&ကiu အသuB$Cပuလiuတ-6 ရည#ရ&ယ#ခGက#အeပ2မOတည#Kပ?$ အမGiu$အစ+$ခ&-Cခ+$Aiuင#ပ3တယ#။ Global Variable


eတ&မH+တuန#$ကလiuပ- Object eတ&ရ-I Behavior အeနန-9 အသuB$Cပuလiuတ-6 Method eတ&ကiueတ+6 Instance Method
လiu eခ2Kပ?$၊ Class ထ-မH+ပ-ထ+$Kပ?$ Utility Function eတ&အeနန-9 အသuB$Cပuလiuတ-6 Method eတ&ကiueတ+6 Static
Method eတ&လiueခ2ပ3တယ#။

Instance Method
Instance Method eတ&ဟ+ Object eတ&ရ-I Behavior အeနန-9 အသuB$Cပuလiuတ-6 အခ3မH+ eရ$သ+$ရတ-6 Method
eတ& Cဖစ#ပ3တယ#။ Class တစ#ခuကiu eရ$သ+$ရတ-6 အဓiက ရည#ရ&ယ#ခGက#ဟ+ Object eဆ+က#ဖiu Cဖစ#တ-6 အတ&က#
Variable eတ&တuန#$ကလiuပ- Class တစ#ခuအတ&င#$မH+ Default အတiuင#$eရ$သ+$ထ+$တ-6 Method eတ&ဟ+
Instance Method eတ& Cဖစ#Fကပ3တယ#။

Instance Method eတ&ဟ+ Object eတ&န-9 သက#ဆiuင#တ-6 Method eတ& Cဖစ#တ-6 အတ&က# အသuB$Cပuလiuတ-6 အခ3မH+
Object eတ&ကတဆင#6 အသuB$CပuရမH+ Cဖစ#ပ3တယ#။ ထiuအCပင# Object eတ&ရ-I ကiuယ#ပiuင# State eတ&Cဖစ#တ-6 Instance
Variable eတ&ကiuလ- Instance Method ထ-ကeန Access လuပ#Kပ?$ အသuB$CပuAiuင#ပ3တယ#။ တဖန# Class တစ#ခu
အတ&င#$မH+Qiတ-6 Instance Method အခGင#$ခGင#$လ- အသuB$CပuAiuင#ပ3တယ#။

public class InstanceMethodDemo {

private String format = “Hello %s%n”;

public void showMessage(String name) {


System.out.format(format, name);
}

public void showMessages(String [] names) {


for(String name : names) {
showMessage(name);
}
}

public static void main(String [] args) {


InstanceMethodDemo demo = new InstanceMethodDemo();
demo.showMessage(“Java”);

String [] array = {“Java”, “Programming”};


demo.showMessages(array);
}

Learning Java 29 မင#$လ&င#


Java Developer Class
အထက#ပ3 InstanceMethodDemo Class ထ-မH+ eရ$သ+$ထ+$တ-6 showMessage() Method န-9
showMessages() Method eတ&ဟ+ static ဆiuတ-6 Non Access Modifier မပ3တ-6 အတ&က# Instance Method
eတ& Cဖစ#Fကပ3တယ#။ တဖန# main method မH+eတ+6 static ဆiuတ-6 Non Access Modifier ပ3တ-6 အတ&က# Static
Method Cဖစ#ပ3တယ#။ Static Method န-9 ပတ#သက#Kပ?$ eန+က# အခန#$မH+ အeသ$စiတ# eဖ2Cပသ&+$ပ3မယ#။

ဒ?eနရ+မH+eတ+6 Instance Method eတ&ကiu ဘယ#လiu eရ$ရမယ#ဆiuတ+န-9 Instance eတ&ကiu ဘယ#လiu eခ2သuB$ရမယ#
(Invoke) ဆiuတ+ကiuပ- eလ6လ+သ&+$Fကပ3မယ#။ Instance Method eတ&ဟ+ Object eတ&န-9 ဆiuင#တ-6 Method eတ&
Cဖစ#တ-6 အတ&က# အCခ+$ Class ထ-ကeခ2တ-6အခ3၊ ဒ3မHမဟuတ# Main Method လiu Static Method ထ-ကeန eခ2ခGင#
တ-6 အခ3eတ&မH+ Object eဆ+က#Kပ?$ Object ကeနပ- eခ2လiuရမH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 အထက#ပ3 နမOန+ထ-မH+ Instance Method eတ&ကiu Main Method ထ-ကeန Invoke လuပ#ခGင#တ-6
အတ&က# demo ဆiuတ-6 Object ကiu အရင#တည#eဆ+က#Kပ?$က+မH demo.showMessage(“Java”) ဆiuKပ?$ Invoke
လuပ#eနတ+Cဖစ#ပ3တယ#။ demo.showMessages(array) လiu eရ$ထ+$တ+လ- Instance Method Cဖစ#တ-6 အတ&က#
Object ကeန Invoke လuပ#eနရတ+Cဖစ#ပ3တယ#။

ဒ3eပမ-6 Class တစ#ခuထ-မH+Qiတ-6 Instance Method အခGင#$ခGင#$ Invoke လuပ#လiuတ-6အခ3မH+eတ+6 Object တစ#ခuထ-
မH+ သuB$မည#6 Method အခGင#$ခGင#$ Cဖစ#တ-6အတ&က# Object eဆ+က#စရ+မလiuအပ#ပ- အသuB$Cပuလiuရeနတ+Cဖစ#တယ#။
showMessages() Method ထ-မH+ showMessage(name) လiueခ2တ-6အခ3မH+ Object eဆ+က#စရ+မလiuတ+ကiu
eတ&Jရပ3မယ#။

ဆက#လက#Kပ?$ Instance Method ထ-ကeနဘ+eတ&ကiu Access လuပ#လiuရလ-ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

public class AccessDemo {


private static String FORMAT = “Hello %s”;
private String name;


public void setName(String name) {
this.name = name;
}

public static String changeUpper(String str) {


return str.toUpperCase();
}

public void greet() {


String message = String.format(FORMAT, name);

String upperMessage = changeUpper(message);
System.out.println(upperMessage);
}
}

အထက#ပ3နမOန+ထ-မH+ Fကည#6ရင#သiAiuင#သလiu greet() method ဟ+ Instance Method တစ#ခuCဖစ#ပ3တယ#။ အ-6ဒ?


Method ထ-မH+ FORMAT ဆiuတ-6 Static Variable ကiuလ- အသuB$CပuAiuင#ပ3တယ#။ တဖန# name ဆiuတ-6 Instance
Variable ကiuလ- အသuB$CပuAiuင#သလiu changeUpper() ဆiuတ-6 Static Method ကiuလ- အသuB$CပuAiuင#ပ3တယ#။

ဒ36အCပင# e^မH+eဖ2Cပခ-6သလiu Instance Method ထ-ကeန အCခ+$eသ+ Instance Method eတ&ကiuလ- အသuB$CပuAiuင#
ပ3တယ#။ 


Learning Java 30 မင#$လ&င#


Java Developer Class

Static Method
Class ထ-မH+ ထ+$Kပ?$ Utility Function eတ&အeနန-9 အသuB$CပuခGင#တ-6 Method eတ&ကiu Static Method အeနန-9
eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Method eတ&ကiu Default အတiuင#$eရ$သ+$ထ+$မယ#ဆiuရင# Instance Method eတ&
Cဖစ#ကuန#ပ3တယ#။ Static Method အCဖစ# အသuB$Cပuလiuပ3က static ဆiuတ-6 Non Access Modifier ကiu Return Type
ရ-I e^မH+ eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

ဆက#လက#Kပ?$ Static Method eတ&ကiu ဘယ#လiueရ$မလ-၊ Static Method eတ&ကiu ဘယ#လiu Invoke လuပ#မလ- ဆiu
တ+န-9 Static Method eတ&က အသuB$CပuAiuင#တ+eတ&က ဘ+eတ&လ- ဆiuတ+ကiu eလ6လ+သ&+$Fကပ3မယ#။

public class StaticMethodDemo {


private static String FORMAT = “Hello %s%n”;

public static void show(String message) {


System.out.printf(FORMAT, message);
}

public static void show(String [] messages) {


for(String m : messages) {
show(m);
}
}
}

အထက#ပ3 ကuဒ#နမOန+ထ-မH+ eရ$သ+$ထ+$တ-6 show() Method AHစ#ခuလuB$မH+ static ဆiuတ-6 Modifier ကiu eရ$သ+$
ထ+$တ-6 အတ&က# Method AHစ#ခuလuB$ Static Method eတ& Cဖစ#Fကပ3တယ#။ အeပ2က show() Method ထ-မH+eတ+6
FORMAT ဆiuတ-6 Static Variable ကiu အသuB$Cပuထ+$ပ3တယ#။ Static Method eတ&ဟ+ Class တစ#ခuထ-မH+ Qiတ-6
Static Member eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

ဒuတiယ show() Method ထ-မH+eတ+6 for loop ထ-မH+ Static Method eန+က#တစ#ခuကiu eခ2သuB$eနပ3တယ#။ Class
တစ#ခuထ-မH+Qiတ-6 Member အခGင#$ခGင#$ဆiuပ3က Owner ကiu eရ$သ+$စရ+မလiuပ- တiuက#Uiuက# eရ$သ+$ အသuB$CပuAiuင#ပ3
တယ#။ ဆက#လက#Kပ?$ အCခ+$ Class တစ#ခuကeန Static ကiu အသuB$CပuပuBကiu eလ6လ+Fကရeအ+င#။

public class StaticMethodTest {

public static void main(String [] args) {


String [] array = {“Static Method”, “Java”};
StaticMethodDemo.show(array);
}
}

StaticMethodTest Class ထ-ကeန StaticMethodDemo Class ရ-I Static Method ကiu အသuB$Cပuမယ#ဆiuရင#
eတ+6 Owner Cဖစ#တ-6 Class ကeန တဆင#6 eခ2ယOအသuB$CပuရမH+ Cဖစ#ပ3တယ#။


Learning Java 31 မင#$လ&င#


Java Developer Class
တစ#ခuသတiထ+$ဖiuလiuအပ#တ+က Static Method eတ&ဟ+ Class တစ#ခuထ-မH+Qiတ-6 အCခ+$ Static Method eတ&န-9
Static Variable eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။ ဒ3eပမ-6 အCခ+$ Instance Method eတ& Instance Variable eတ&
ကiueတ+6 အသuB$Cပuလiu မရပ3ဘO$။

Constructor

Constructor ဆiuတ+ Class ကeန Object ကiu တည#eဆ+က#တ-6အခ3မH+ အသuB$Cပuတ-6 Special Method တစ#မGiu$
Cဖစ#ပ3တယ#။ Constructor eတ&ကiu Object တစ#ခuကiu တည#eဆ+က#တ-6 eနရ+မH+ တစ#Pကiမ#သ+ အသuB$CပuKပ?$ Object
Cဖစ#သ&+$Kပ?$ရင#eတ+6 Constructor eတ&ကiu အသuB$မCပueတ+6ပ3ဘO$။ Constructor eတ&ကiu Instance Variable eတ&
ကiu Initialize လuပ#တ-6အခ3မH+ အသuB$Cပuဖiu Cပင#ဆင#ထ+$တ+ Cဖစ#ပ3တယ#။

Constructor ရ-I န+မည#ဟ+ Class န+မည#န-9 ထပ#တOတOည?ရပ3မယ#။ Kပ?$eတ+6 Constructor မH+ Return Type eရ$
လiuမရပ3ဘO$။ Class တစ#ခuအတ&က# Constructor ကiu eရ$သ+$တ-6 အခ3မH+ Argument List မတOတ-6 Construcotr
eတ&ကiu Overload လuပ#Kပ?$ eရ$သ+$Aiuင#ပ3တယ#။

Default Constructor
eအ+က#eဖ2Cပပ3ကuဒ#ထ-မH+လiu new Student() ဆiuKပ?$eရ$သ+$လiuက#တ+ဟ+ Student Class ရ-I Constructor ကiu
လHမ#$eခ2Kပ?$ Object ကiu တည#eဆ+က#လiuက#တ+ပ- Cဖစ#ပ3တယ#။

public class Student {


private String name;

public static void main(String [] args) {


Student student = new Student();
}
}

ဒ3eပမ-6 eသeသCခ+Cခ+Fကည#6မယ#ဆiuရင# Student Class ထ-မH+ Student() ဆiuတ-6 Constructor ကiu eရ$မထ+$ပ3
ဘO$။ ဒ3eပမ-6 new Student() ဆiuKပ?$ eရ$လiuရeနပ3တယ#။ ဒ3ဟ+ Student Class ကiu Compile လuပ#တ-6အခ3မH+
Java Compiler ကeန Constructor မပ3တ-6 Class eတ&ဆiuရင# Default Constructor တစ#ခuကiu ထည#6eပ$eနလiuပ-
Cဖစ#ပ3တယ#။

public Student() {
super();
}

Default Constructor eတ&ဟ+ public Cဖစ#Kပ?$ Argument မပ3ပ3ဘO$။ Kပ?$eတ+6 အတ&င#$ပiuင#$မH+ super() ဆiuတ-6 ကuဒ#
တစ#eFက+င#$ကiu eရ$သ+$ထ+$မH+ Cဖစ#ပ3တယ#။ တကယ#လiuသ+ မiမiတiueရ$သ+$ထ+$တ-6 Class အတ&င#$မH+
Constructor တစ#ခuခuကiu eရ$သ+$ထ+$Kပ?ဆiuရင#eတ+6 Compiler ကeန Default Constructor ကiu ထည#6eပ$eတ+6
မH+ မဟuတ#ပ3ဘO$။ 


Learning Java 32 မင#$လ&င#


Java Developer Class

Constructor ကiuဘ"လiueရ9ရတ"လ/
Constructor eတ&ဟ+ Class ကeန Object ကiu တည#eဆ+က#တ-6အခ3မH+ မCဖစ#မeနeခ2ဆiuရမည#6 Special
Method eတ&Cဖစ#Kပ?$eတ+6 Instance Varable eတ&န-9 Instance Method eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။ ဒ36eFက+င#6
Object eတ&ရ-I Initial State eတ&ကiu သတ#မHတ#လiuတ-6အခ3မH+ ကiuယ#တiuင# Constructor ကiu eရ$သ+$ဖiuစT#$စ+$ရပ3
eတ+6မယ#။

public class Student {


private String name;

public Student() {
this.name = “Aung Aung”;
}
}

eဆ+က#သမZ Object တiuင#$ရ-I name ဟ+ Aung Aung Cဖစ#သ&+$မယ#လiu eCပ+စရ+Qieပမ-6၊ အထက#ပ3 နမOန+ထ-မH+လiu
Student ရ-I name ကiu Initialize လuပ#လiuတ-6အခ3မGiu$မH+ Conatructor ကiu အသuB$CပuAiuင#ပ3တယ#။ Object မeဆ+က#မH?
Instance Variable eတ&ကiu Initialize လuပ#ဖiuအတ&က# Instance Block eတ&ကiuလ- အသuB$CပuAiuင#ပ3တယ#။

public class Student {


private String name;

{
this.name = “Aung Aung”;
}
}

Instance Block eတ&ဟ+လ- Object eတ&ကiu စတင#တည#eဆ+က#စT# Constructor eတ&ကiu အလuပ#မလuပ#ခင#


အလuပ#လuပ#Aiuင#ပ3တယ#။ အ-6ဒ?အတ&က# Instance Variable eတ&ကiu Initialize လuပ#တ+eတ&ကiu eရ$သ+$Aiuင#ပ3တယ#။
ဒ3Cဖင#6 Constructor န-9 Instance eတ&ကiu ဘယ#လiu eရ&$ခGယ# အသuB$Cပuရမလ-။

public class Student {


private String name;

public Student(String name) {


this.name = name;
}
}

Constructor eတ&က Initialize လuပ#လiuတ-6 တန#ဖiu$eတ&ကiu Constructor Argument eတ&ကလက#ခBရယOAiuင#eပမ-6


Instance Block eတ&ကeတ+6 Argument eတ&ကiu လက#ခBလiu မရAiuင#ပ3ဘO$။

Learning Java 33 မင#$လ&င#


Java Developer Class

Constructor Overloading
Class တစ#ခuအတ&င#$မH+ Argument List မတOတ-6 Constructor eတ&ကiu eရ$သ+$Cခင#$ကiu Constructor
Overloading လiueခ2ပ3တယ#။ Constructor ဆiuတ+က Class ကeန Object ကiu တည#eဆ+က#တ-6 အခ3မH+
အသuB$CပuKပ?$ Instance Variable eတ&ကiu Initialize လuပ#လiuတ-6 အခ3မH+ အသuB$Cပueလ6Qiပ3တယ#။

Object eတ&ကiu တန#ဖiu$အမGiu$မGiu$eပ$Kပ?$ Object eဆ+က#လiuတ-6 အခ3မH+ Constructor Overloading ကiu အသuB$Cပu
Aiuင#ပ3တယ#။ Student Object မH+ name န-9 age ကiu instance variale အeနန-9 ပiuင#ဆiuင#တယ# ဆiuFကပ3စiu။ Student
Object ကiu ဘ+ Argument မH မeပ$ပ-တည#eဆ+က#လiuတ-6 အခ3လ-Qiမယ#။ Kပ?$eတ+6 name Pက?$ပ- eပ$Kပ?$eဆ+က#
ခGင#တ-6အခ3လ- Qiမယ#၊ age Pက?$ပ- eပ$Kပ?$eဆ+က#ခGင#တ-6 အခ3လ-Qiမယ#။ name eက+ age ပ3eပ$Kပ?$ eဆ+က#ခGင#တ-6
အခ3လ-Qiပ3တယ#။ ဒ?လiu အခ3မGiu$မH+ Constructor Overloading ကiu အသuB$CပuKပ?$ Constructor eတ&ကiu Cပင#ထ+$Aiuင#
ပ3တယ#။

public class Student {


private String name;
private int age;

public Student() {}

public Student(String name) {


this.name = name;
}

public Student(int age) {


this.age = age;
}

public Student(String name, int age) {


this.name = name;
this.age = age;
}
}

တကယ#လiu ဘ+ Argument မH မeပ$ပ- Object eဆ+က#ခGင#ရင# Student s = new Student() လiu eရ$သ+$Aiuင#ပ3
တယ#။ Kပ?$eတ+6 Name ကiu eပ$Kပ?$ Object ကiu တည#eဆ+က#လiuလGင# Student s = new Student(“Aung Aung”)
လiu eရ$သ+$Aiuင#ပ3တယ#။

Constructor eတ&ကiu Cပင#ဆင#ထ+$သeလ+က# Object eတ&ကiu ပuBစBအမGiu$မGiu$န-9 တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 34 မင#$လ&င#


Java Developer Class

Visibility and Accessibility


Java ဘ+သ+ရပ#မH+ Class eတ&အခGင#$ခGင#$ eတ&JCမင#Aiuင#မ[ (Visibility) န-9 အCခ+$ Class တစ#ခuကeန အCခ+$ Class
တစ#ခuရ-I Member eတ&ကiu သuB$Aiuင#သလ+$ မသuB$Aiuင#ဘO$လ+$ (Accessibility) ကiu ခ&-Cခ+$သတ#မHတ#Aiuင#eအ+င# Cပင#ဆင#
ထ+$ပ3တယ#။

Class eတ&အခGင#$ခGင#$ရ-I Visibility န-9 Accessibility ကiu Package eတ&န-9 Access Modifier တiuကiu အသuB$CပuKပ?$
သတ#မHတ# eရ$သ+$Aiuင#ပ3တယ#။

Packages
Package ဆiuတ+က Java Programming ဘ+သ+ရပ#မH+ အသuB$Cပueနတ-6 Name Space န-9 Visibility ကiu
သတ#မHတ#eပ$Aiuင#တ-6 နည#$လမ#$တစ#မGiu$Cဖစ#ပ3တယ#။ အလ&ယ#eCပ+ရမယ#ဆiuရင# Packaege ဆiuတ+ဟ+ Computer
ထ-က Folder တစ#ခuန-9 ဆင#တOပ3တယ#။ Folder တစ#ခuထ-မH+ န+မည#တO File AHစ#ခuကiu တည#eဆ+က#လiu မရAiuင#သလiu
Java မH+လ- တစ#eနရ+ထ-မH+ Class AHစ#ခuကiu တည#eဆ+က#လiu မရAiuင#ပ3ဘO$။

တကယ#လiu Package သ+မQiခ-6ရင# Java Class eတ&ကiu န+မည#eပ$တ-6 eနရ+မH+ အeတ+#eလ$ခက#ခ-သ&+$မH+ Cဖစ#ပ3
တယ#။ ဒ?လiueနရ+မGiu$မH+ Package eတ&ကiu အသuB$CပuKပ?$ Class eတ&ကiu ခ&-Cခ+$သတ#မHတ#eပ$Aiuင#ပ3တယ#။ Folder မ
တOရင#eတ+6 န+မည#တO File eတ&ကiu eရ$သ+လiuရသလiuပ- Package မတOရင#eတ+6 န+မည#တO Java Class eတ&ကiu
eရ$သ+$လiuရလ+Aiuင#ပ3တယ#။

ဒ36အCပင# Java Package eတ&ဟ+ Class eတ& အခGင#$ခGင#$ရ-I Visibility ကiuလ- သတ#မHတ#eပ$Aiuင#ပ3တယ#။

Writing a Class in a Package

Class တစ#ခuကiu Package ထ-မH+ eရ$သ+$လiuပ3က Package Statement ကiu


eရ$သ+$ သတ#မHတ#Aiuင#ပ3တယ#။
Package Statement eတ&ကiu eရသ+$တ-6 eနရ+မH+ Source File eတ&ရ-I ထiပ#ဆuB$
မH+ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Package Statement ရ-I e^မH+ Source Code
မဟuတ#တ-6 Comment eတ&ကiu eရ$သ+မယ#ဆiuရင#eတ+6 eရ$သ+$Aiuင#ပ3တယ#။
ဒ3eပမ-6 Source Code eတ&ရ-I ထiပ#ဆuB$မH+eတ+6 Package Statement ကiu
eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ တဖန# Source File တစ#ခuမH+လ- Package
Statement တစ#ခuကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

Package Statement eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Reverse Domain Name


ကiu အသuB$Cပueလ6QiKပ?$ ရည#ရ&ယ#ခGက#တOတ-6 Class eတ&ကiu Package အလiuက#
ထ+$Qieလ6Qiပ3တယ#။ Folder eတ&ထ-မH+ Sub Folder eတ&ကiu ထ+$QiAiuင#သလiu
Package eတ&eအ+က#မH+လ- Sub Package eတ&ကiu ထ+$QiAiuင#ပ3တယ#။

com.jdc.entity လiueရ$သ+$ထ+$ရင# com ဆiuတ-6 package eအ+က#မH+ jdc


package QiKပ?$ ၎င#$ရ-I eအ+က#မH+ entity package Qiတယ#လiu မHတ#ယOAiuင#ပ3
တယ#။ Package တစ#ခuန-9 တစ#ခuအFက+$မH+ [.] ကiu ခBKပ?$ eရ$သ+$ရမH+ Cဖစ#ပ3
တယ#။

Learning Java 35 မင#$လ&င#


Java Developer Class

// JDC Online Registration System


package com.jdc.entity;

public class Student {

အထက#ပ3အတiuင#$ eရ$သ+$ထ+$ပ3က com.jdc.entity Package eအ+က#မH+ Student Class ကiu တည#eဆ+က#


eပ$သ&+$မH+ Cဖစ#ပ3တယ#။

Visibility of Classes
Program eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Class eတ&ကiu တစ#ခuထက#မက အသuB$CပuKပ?$ eရ$သ+$eလ6Qiပ3တယ#။
Object တစ#ခuရ-I Member အeနန-9 အCခ+$ Object eတ&ကiu အသuB$CပueနAiuင#ပ3တယ#။ တနည#$ဆiuရမယ# ဆiuရင# Class
တစ#ခuကiu တစ#Cခ+$ Class eတ&ထ-မH+ Variable eတ&ရ-I Type အeနန-9အသuB$CပueနAiuင#ပ3တယ#။ ဒ?လiu အသuB$Cပuတ-6
eနရ+မH+ အသuB$Cပueနတ-6 Class ကiu လက#Qi အသuB$Cပueနတ-6 Class ကeန Cမင#eနမHသ+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

အထက#ပ3 Diagram ထ-မH+ com.jdc Package eအ+က#မH+ entity န-9 service Package တiuQiပ3တယ#။ တဖန#
entity Package ထ-မH+ Student, Course န-9 Registration Class တiuQiFကKပ?$ service Package ထ-မH+
RegistrationService Class တiuQiFကပ3တယ#။

Package eတ&ဟ+ Class eတ&ရ-I Visibility ကiu သတ#မHတ#eပ$Aiuင#တ+ Cဖစ#တ-6 အတ&က# Package မတOeတ+6တ+န-9
Class eတ&ရ-I Visibility ကလ- က&-Cပ+$သ&+$မH+ Cဖစ#ပ3တယ#။ Package တစ#ခuအတ&င#$မH+Qiမယ#ဆiuရင# Class eတ&
ဟ+ အခGင#$ခGင#$Cမင#နရမH+ Cဖစ#တ-6အတ&က# Registration ထ-ကeန Student န-9 Course တiuကiu Cမင#eနရမH+ Cဖစ#ပ3
တယ#။
Learning Java 36 မင#$လ&င#
Java Developer Class

package com.jdc.entity;

public class Registration {


private Student student;
private Course course;
}

Registration, Student န-9 Course eတ&ဟ+ Package တစ#ခuအတ&င#$မH+Qiတ-6 အတ&က# Student န-9 Course တiuကiu
Registration ထ-မH+ ဒ?အတiuင#$ပ- eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

package com.jdc.service;

public class RegistrationService {

public void create(Registration r) {


// codes
}
}

RegistrationService ဟ+ Registration Class ကiu Method Argument အeနန-9 အသuB$Cပuလiuပ3တယ#။ ဒ3eပမ-6


RegistrationService ဟ+ com.jdc.service Package eအ+က#မH+QiKပ?$ Registration ဟ+ com.jdc.entity
Package eအ+က#မH+Qiတ-6 အတ&က# Cမင#မeနAiuင#ပ3ဘO$။ တစ#Cခ+$ Package eအ+က#က Class eတ&ကiu အသuB$Cပuလiu
ပ3က Class eတ&ကiu Qualified Name န-9 eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။

package com.jdc.service;

public class RegistrationService {

public void create(com.jdc.entity.Registration r) {


// codes
}
}

Qualified Name ကiu eရ$သ+$တ-6 eနရ+မH+ Package Name န-9 Class Name တiuကiu တ&-Kပ?$ eရ$သ+$ရမH+ Cဖစ#ပ3
တယ#။ Qualified Name ကiueရ$တ-6eနရ+မH+ Type ကiu eရ$တ-6 eနရ+တiuင#$ Package Name eတ&ပ3 eရ$eနရမH+
Cဖစ#တ-6 အတ&က# ကuဒ#eတ&မG+$လ+eလeလ Package Name eတ&မG+$လ+Kပ?$ ကuဒ#eတ&ကiu ဖတ#ရတ+ လ&ယ#ကOမH+
မဟuတ#eတ+6ပ3ဘO$။

တစ#Cခ+$ Package ထ-မH+ Qiတ-6 Class eတ&ကiu Packate တစ#ခuထ-မH+ Qiသက-6သiu အသuB$Cပuလiuပ3က Import
Statement eတ&ကiu eရ$သ+$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 37 မင#$လ&င#


Java Developer Class

Import Statements
Import Statement eတ&ကiu Package Statement ရ-I eအ+က# Class Declaration ရ-I အeပ2မH+ eရ$သ+$ရမH+
Cဖစ#ပ3တယ#။ Import Statement eတ&ကiu Class ရ-I eအ+က#မH+တiu Class ထ-မH+တiu eရ$လiu မရပ3ဘO$။ Import လuပ#
လiuတ-6 Class ကiu Qualified န-9 eရ$သ+$ရမH+ Cဖစ#Kပ?$၊ Import လuပ#Kပ?$တ+န-9 Package Name eရ$စရ+မလiueတ+6ပ-
Class Name န-9 Type eတ&ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ Import Statement eတ&ကiu eရ$သ+$တ-6 eနရ+မH+
import [Qualified Name] လiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

package com.jdc.service;

import com.jdc.entity.Registration;

public class RegistrationService {

public void create(Registration r) {


// codes
}
}

အထက#ပ3အတiuင#$ Registration Class ကiu Import လuပ#ထ+$ပ3က Package Name ကiu မeရ$ပ- Registration
Class ကiu Package တစ#ခuထ-မH+Qiတ-6 အတiuင#$ eရ$သ+$လiuရမH+ Cဖစ#တယ#။ အCခ+$eနရ+မH+ Type အCဖစ#သuB$မယ#ဆiu
ရင#လ- eရ$စရ+လiueတ+6ပ3ဘO$။တဖန# Package တစ#ခuထ-က Class eတ&ကiu Import လuပ#ခGင#တယ#ဆiuရင# Wild
Card (*) ကiu အသuB$CပuKပ?$လ- Import လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။

package com.jdc.service;

import com.jdc.entity.*;

public class StudentService {




public void create(Student student) {
// codes
}

public List<Registration> findRegistration(Student s) {


// codes and return statements
}
}

အထက#ပ3အတiuင#$ com.jdc.entity.* လiu Wild Card ကiu အသuB$CပuKပ?$ Import လuပ#ထ+$မယ#ဆiuရင# com.jdc.entity
Package eအ+က#က Class eတ&အ+$လuB$ကiu Import လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 တစ#ခuသတiထ+$ဖiu လiuတ+က
Wild Card Import ဟ+ Current Package eအ+က#မH+Qiတ-6 Class eတ&ကiuသ+ Import လuပ#Aiuင#တ+Cဖစ#Kပ?$ Sub
Package eအ+က#က Class eတ&ကiueတ+6 Import လuပ#Aiuင#မH+ မဟuတ#ပ3ဘO$။

Learning Java 38 မင#$လ&င#


Java Developer Class

Import လuပ%စရ"မလiueသ" Class မ7"9


က\န#eတ+#တiu e^မH+ Type အeနန-9 String တiu System.out.println တiu ကiu eရ$သ+$ခ-6Fကပ3တယ#။ ဒ?eနရ+မH+ eမ$
စရ+Qiလ+ပ3တယ#။ အ-6ဒ? String တiu System တiuကeက+ တစ#Cခ+$ Package ထ-မH+ မQiလiuလ+$လiu။ ဟuတ#ပ3တယ#
String တiu System တiuဟ+ java.lang Package eအ+က#က Class eတ&Cဖစ#ပ3တယ#။

Java Language ကiu eရ$သ+$တ-6eနရ+မH+ အသuB$မG+$တ-6 Class eတ& Interface eတ& Enum eတ&ကiu java.lang
Package eအ+က#မH+ eရ$သ+$ထ+$Fကပ3တယ#။ Kပ?$eတ+6 java.lang Package eအ+က#က Class eတ&ကiu Import
လuပ#စရ+မလiuပ- eရ$သ+$Aiuင#eအ+င# eခင#$ခGက# အeနန-9 ထ+$eပ$ထ+$ပ3တယ#။ ဒ36eFက+င#6 String တiu System တiuကiu
eရ$သ+$တ-6 eနရ+မH+ Import လuပ#စရ+မလiuပ- eရ$သ+$Aiuင#တ+ Cဖစ#ပ3တယ#။

Primitive Type ရ-I Wrapper Class eတ&၊ String န-9 StringBuffer, StringBuilder Class eတ&၊ အသuB$မG+$တ-6
Exception Class eတ&ကiu java.lang Package eအ+က#မH+ထ+$Qiတ-6 အတ&က# အ-6ဒ? Class eတ&ကiu အသuB$Cပuမယ#
ဆiuရင# Import လuပ#စရ+မလiuအပ#ပ3ဘO$။

Static Import
Java SE 5 အeရ+က#မH+ Static Variable eတ&န-9 Static Method eတ&ကiuလ- Static Import Statement ကiu
အသuB$CပuKပ?$ Import လuပ#လiuရလ+ပ3တယ#။ import static [QualifiedName of Class].[member] ဆiuKပ?$ eရ$သ+$
ရမH+ Cဖစ#ပ3တယ#။ Static Import Statement eတ&မH+လ- Wild Card ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

import static java.lang.Integer.parseInt;


import static java.lang.Integer.MAX_VALUE;
import static java.lang.Double.*;

public class StaticImportDemo {

public static void main(String [] args) {

int maxInt = MAX_VALUE;


int psInt = parseInt("100");
double maxDouble = MAX_VALUE;

System.out.println(MAX_VALUE);
}
}

Static Member eတ&ကiu Import လuပ#ထ+$Cခင#$အ+$Cဖင#6 တစ#Cခ+$ Class ထ-မH+Qiတ-6 Static Variable eတ&န-9 Static
Method eတ&ကiu မiမi Class ထ-က Member eတ&လiu Owner Cဖစ#တ-6 Class Name ကiu eရ$စရ+မလiuပ- eရ$သ+$Aiuင#
မH+ Cဖစ#ပ3တယ#။ အထက#ပ3 နမOန+ထ-မH+လiu Integer.MAX_VALUE န-9 Wild Card န-9 Import လuပ#ထ+$တ-6
Double.MAX_VALUE တiuQiခ-6မယ#ဆiuရင# အတiအကG Import လuပ#ထ+$တ-6 Integer.MAX_VALUE ကiu အသuB$Cပu
သ&+$မH+ ပ3တယ#။ double maxDouble = MAX_VALUE လiu double variable မH+ အစ+$ထiu$မယ#ဆiuရင#eတ+6
Wild Card ထ-က Double.MAX_VALUE ကiu အသuB$CပuမH+ Cဖစ#ပ3တယ#။


Learning Java 39 မင#$လ&င#


Java Developer Class

Access Modifiers
Class eတ&န-9 Class Members eတ&ရ-I Access လuပ#Aiuင#ခ&င#6ကiu သတ#မHတ#eပ$eနတ+ကeတ+6 Access Modifier
eတ&ပ- Cဖစ#Fကပ3တယ#။ Class eတ&န-9 Member eတ&မH+ Access Modifier eတ&ကiu မeရ$သ+$ထ+$ရင# အ-6ဒ? Class
တည#Qieနတ-6 Package ထ-မH+သ+ အသuB$CပuလiuရမH+ Cဖစ#ပ3တယ#။

တကယ#လiu တစ#Cခ+$ Package eတ&ကပ3 အသuB$CပueစခGင#တ-6အခ3 ဒ3မHမဟuတ# Package တစ#ခuထ-မH+ Qiတ-6 Class
eတ& အခGင#$ခGင#$ Access လuပ#ပiuင#ခ&င#6ကiu သတ#မHတ#လiuတ-6 အခ3မGiu$မH+ Access Modifier eတ&ကiu သuB$Kပ?$ သတ#မHတ#
eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Types of Access Modifier

Modifiers Descriptions
default Access Modifier အ+$ eရ$သ+$ထ+$Cခင#$မQiပ3က Package အတ&င#$Qi Class
မG+$မH ဆက#သ&ယ#Aiuင#မည#

public မည#သည#6eနရ+မH မဆiu ဆက#သ&ယ# အသuB$CပuAiuင#မည#

protected ထiu Class အ+$ Inheritance လuပ#ထ+$eသ+ Class မG+$မH ဆက#သ&ယ#Aiuင#မည#

private ထiu Class အတ&င#$မH တCခ+$ ဆက#သ&ယ#Aiuင#မည#မဟuတ#eပ

Class eတ&န-9 Class Member eတ&Cဖစ#Fကတ-6 Variable eတ&၊ Method eတ&၊ Constructor eတ&န-9 အCခ+$ Nested
Member eတ&မH+ Access Modifier ကiu eရ$သ+$Kပ?$ အသuB$Cပuပiuင#ခ&င#6ကiu သတ#မHတ#eပ$Aiuင#ပ3တယ#။ ဘ+eFက+င#6
Access လuပ#ပiuင#ခ&င#6ကiu လiuအပ#ရတ+လ- ဘယ#လiueရ$သ+$သင#6သလ-န-9 ပတ#သက#Kပ?$eတ+6 OOP ရ-I Encapsulation
အeFက+င#$eCပ+တ-6 အခ3မH+လ- ထပ#မBeဖ2Cပသ&+$မH+ Cဖစ#ပ3တယ#။

Default Access

Class eတ&န-9 Class Members eတ&မH+ Access Modifier eတ&ကiu eရ$သ+$ထ+$Cခင#$ မQiပ3က Default Access
ကiu ရQiမH+ Cဖစ#ပ3တယ#။ Package တစ#ခuအတ&င#$မH+ Qiတ-6 အCခ+$ Class eတ&ကeန ဆက#သ&ယ# အသuB$CပuAiuင#မH+ Cဖစ#
ပ3တယ#။ ဒ3eပမ-6 အCခ+$ Package eတ&ရ-I Class eတ&ကeနeတ+6 Cမင#ရမH+ မဟuတ#တ-6 အတ&က# အသuB$Cပuခ&င#6 QiမH+
မဟuတ#ပ3ဘO$။

package com.jdc.common;

class StringConverter {

String getUnicode(String str) {


// codes and return statement
}
}

အထက#ပ3အတiuင#$ StringConverter Class မH+ Access Modifier ကiu eရ$မထ+$ပ3က Default Access Cဖစ#eန
Kပ?$ com.jdc.common Package အတ&င#$မH+Qiတ-6 အCခ+$ Class eတ&ကသ+ အသuB$CပuAiuင#မH+ Qiပ3တယ#။ ဒ?လiu

Learning Java 40 မင#$လ&င#


Java Developer Class
Default Access eတ&ကiu Package တစ#ခuထ-က အCခ+$ Class eတ&ကသ+ အသuB$Cပueစလiuတ-6 အခ3မH+ eရ$သ+$
eလ6 Qiပ3တယ#။

Public Access

Class eတ&န-9 Class Members eတ&မH+ Public Access Modifier ကiu အသuB$CပuKပ?$eရ$သ+$ထ+$ရင#eတ+6 အ-6ဒ3
Class eတ& Member eတ&ဟ+ Public Access ကiu ရQiမH+ Cဖစ#ပ3တယ#။ Public Access ဆiuတ+ကeတ+6 မည#သ
ည#6 Class က မဆiu Access လuပ#ပiuင#ခ&င#6ရQiတ+ကiu ဆiuလiuတ+ပ3။

package com.jdc.common;

public class StringConverter {

public String getUnicode(String str) {


// codes and return statement
}
}

အထက#ပ3အတiuင#$ StringConverter Class န-9 getUnicode() Method မH+ public Access Modifier ကiu public
Access Modifier ကiu eရ$သ+$ထ+$တ-6 အတ&က# အCခ+$ Package eတ&ကeနလ- Access လuပ#Kပ?$ အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။

တကယ#လiu getUnicode() Method ကiu public လuပ#ထ+$Kပ?$ StringConverter Class ကiu Default Access
အတiuင#$ထ+$မယ#ဆiuရင#eတ+6 Class ကiu မCမင#ရတ-6 အတ&က# Method ကiu အသuB$CပuAiuင#မH+ မဟuတ#ပ3ဘO$။ Class
ထ-က Member eတ&ကiu အသuB$CပuAiuင#ဖiuအတ&က# Class ကiuလ- အသuB$CပuAiuင#မHရမH+ Cဖစ#ပ3တယ#။

package com.jdc.repository;

import com.jdc.common.StringConverter;

public class MessageRepository {

private StringConverter converter;

public void create(Message obj) {


String zawgyi = obj.getMessage();
String unicode = converter.getUnicode(zawgyi);
obj.setMessage(unicode);

// Other Codes
}
}

အထက#ပ3အတiuင#$ StringConverter န-9 getUnicode method တiuကiu တစ#Cခ+$ Package ထ-မH+Qiတ-6


MessageRepository ထ-ကeန အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 41 မင#$လ&င#
Java Developer Class

Protected Access

Class တစ#ခuရ-I Member eတ&ကiu Package တစ#ခuထ-မH+ Qiတ-6 Class eတ&န-9 Sub Classs eတ&ကသ+ အသuB$Cပueစ
ခGင#တယ#ဆiuရင# Proteced Access Modifier ကiu အသuB$CပuAiuင#ပ3တယ#။

package com.jdc;

public class Shape {

protected double width;


protected double height;

public Shape(double w, double h) {


width = w;
height = h;
}

protected double getArea() {


return width * height;
}
}

အထက#ပ3အတiuင#$ Shape Class ထ-မH+ width န-9 height ကiu protected Access Modifier န-9 eရ$သ+$ထ+$တ-6
အတ&က# တစ#Cခ+$ Package ထ-မH+Qiတ-6 Sub Class eတ&ကပ3 width န-9 height ကiu အသuB$Cပuလ+Aiuင#မH+ Cဖစ#ပ3
တယ#။

package com.jdc;

public class ShapeTest {

public static void main(String[] args) {


Shape shape = new Shape(100, 50);
System.out.println(shape.width);
System.out.println(shape.height);
System.out.println(shape.getArea());
}
}

အထက#ပ3နမOန+ထ-မH+လiu ShapeTest န-9 Shape တiuဟ+ com.jdc ဆiuတ-6 Package ထ-မH+ အတOQiတ-6 အတ&က#
shape object ကeန Protected Member eတ& Cဖစ#Fကတ-6 shape.width န-9 shape.height တiuကiu အသuB$Cပuလiuရ
eနတ+ Cဖစ#ပ3တယ#။

Protected Method eတ&ဆiuရင#လ- အလ+$တOပ3ပ-။ Package တစ#ခuထ-မH+ဆiuရင# Access လuပ#လiuရeနမH+ပ3။ ဒ3eပမ-6


Package မတOeတ+6ဘO$ဆiuတ+န-9 ဒ?အတiuင#$ဆiuရင# Protected Member eတ&ကiu Access လuပ#လiuရမH+ မဟuတ#eတ+6
ပ3ဘO$။ Protected Member eတ&ကiu Access လuပ#လiuလGင# Shape Class ကiu Extends လuပ#ထ+$မHသ+ရQiမH+ Cဖစ#
ပ3တယ#။

Learning Java 42 မင#$လ&င#
Java Developer Class

package com.jdc.other;

import com.jdc.Shape;

public class OtherShape extends Shape {

public OtherShape(double width, double height) {


super(width, height);
}

public static void main(String[] args) {


OtherShape other = new OtherShape(100, 50);
System.out.println(other.height);
System.out.println(other.width);
System.out.println(other.getArea());
}
}

OtherShape Class ဟ+ Shape Class န-9 Package မတOပ3ဘO$။ ဒ3eပမ-6 OtherShape ဟ+ Shape Class ကiu
Extends လuပ#ထ+$ပ3တယ#။ ဒ36eFက+င#6 OtherShape Object Cဖစ#တ-6 other ကeန height ကiueက+ with ကiuပ3
Access လuပ#Aiuင#Kပ?$ getArea() Method ကiuလ- အသuB$CပuAiuင#တ+ Cဖစ#ပ3တယ#။

Protected Modifier eတ&ဟ+ Package အတ&င#$မH+လ- အသuB$CပuAiuင#သလiu Package အCပင#မH+Qiတ-6 Sub Class
eတ&ကeနတဆင#6လ- အသuB$CပuAiuင#eအ+င# eဆ+င#ရ&က#eပ$Aiuင#ပ3တယ#။ ဒ36eFက+င#6 Protected Access Modifier eတ&
ကiu Package ++ Access Modifier လiuလ- eခ2ဆiuAiuင#တ+ Cဖစ#ပ3တယ#။

Private Access

လက#Qi Class တစ#ခuထ-ကသ+ အသuB$CပuAiuင#တ-6 Member eတ&ကiu eရ$သ+$လiuတ-6 အခ3မGiu$မH+ Private Access
Modifier ကiu အသuB$Cပueရ$သ+$Aiuင#ပ3တယ#။ Class Member eတ&မH+ private လiueရ$လiuက#တ+န-9 အ-6ဒ? Member
eတ&ဟ+ လက#Qi Class ထ-ကသ+ အသuB$CပuAiuင#eတ+6မH+ Cဖစ#ပ3တယ#။


package com.jdc;

public class Shape {

private double width;


private double height;

public Shape(double w, double h) {


width = w;
height = h;
}
}

Learning Java 43 မင#$လ&င#


Java Developer Class

Java Data Types


Java Data Type ဆiuသည#မH+ Variable အeနန-9 အသuB$CပuAiuင#တ-6 Data Type အမGiu$အစ+$မG+$ Cဖစ#Fကပ3တယ#။
Java Data Type မG+$ကiu အeCခခBအ+$Cဖင#6 AHစ#မGiu$ခ&-Cခ+$Aiuင#ပ3တယ#။ အ-6ဒ3eတ&ကeတ+6 Primitive Data Type န-9
Reference Data Type တiu Cဖစ#Fကပ3တယ#။

အသuB$Cပueနတ-6 Data Type အeပ2မOတည#Kပ?$eတ+6 Varaible eတ&ရ-I အလuပ#လuပ#ပuBက တOမH+ မဟuတ#ပ3ဘO$။


ဆက#လက#Kပ?$ Java Data Type အမGi$အစ+$eတ&န-9 အလuပ#လuပ#ပuBeတ&ကiu eလ6လ+သ&+$Fကရeအ+င#။

Primitive Data Types


Primitive Data Type eတ&ကeတ+6 Java Data Type eတ&ထ-မH+ အeCခခBအကGဆuB$ Data Type eတ&Cဖစ#Fကပ3
တယ#။ Program eတ&ဆiuတ+က OS ကeန တဆင#6 CPU ကiu ဟiuဟ+ လuပ#ပ3၊ ဒ?ဟ+ လuပ#ပ3ဆiuင#$ eစeနတ+ပ-Cဖစ#ပ3
တယ#။ အ-6ဒ?အတ&က# OS eတ&ကeန Programming Language eတ&မH+ အသuB$CပuဖiuဆiuKပ?$ Data Type eတ&ကiu Cပင#
eပ$ထ+$ပ3တယ#။

Java မH+eCပ+တ-6 Primitive Data Type eတ&ဆiuတ+က OS ကeန Cပင#eပ$ထ+$တ-6 Data Type eတ& Cဖစ#ပ3တယ#။
ဒ?လiu ကနဦ$ Data Type eတ&ကiu Primitive Data Type eတ&လiu eခ2တ+ Cဖစ#ပ3တယ#။

Primitive Data အမ7iu9အစ"9မ7"9

အeCခခBအ+$Cဖင#6 Primitive Data အမGiu$အစ+$ ၃ မGiu$Qiပ3တယ#။ True န-9 False ကiuပ- eဖ2CပAiuင#တ-6 Boolean ဓ
အမGiu$အစ+$၊ စ+လuB$eတ&ကiu ကiuယ#စ+$Cပuတ-6 Character အမGiu$အစ+$eတ& န-9 Number eတ&ပ- Cဖစ#ပ3တယ#။ Number
eတ&ကiuမHထပ#Kပ?$ အCပည#6ကiန#$ Integer eတ&န-9 ဒဿမကiန#$ Floating Number eတ&ဆiuKပ?$ ခ&-Cခ+$Aiuင#ပ3တယ#။

Integer eတ&အထ-မH+မH အသuB$Cပueနတ-6 Memory အလiuက# byte, short, int, long ဆiuKပ?$ခ&-Cခ+$Kပ?$၊ ဒသမကiန#$eတ&
ကiuလ- float န-9 double ဆiuKပ?$ ခ&-Cခ+$ပ3တယ#။

ဒ36eFက+င#6 Java မH+ အသuB$Cပueနတ-6 Primitive Data Type အ+$လuB$eပ3င# ၈ မGiu$Qiတယ#လiu eCပ+Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 44 မင#$လ&င#


Java Developer Class

Type Description Type Description

byte 8bit, + or - Integer float 32bit, + or - fp value

short 16bit, + or - Integer double 64bit, + or - fp value


int 32bit, + or - Integer char 16bit, Unicode Character

long 64bit, + or - Integer boolean true or false

Number eတ&ထ-မH+ Integer အeနန-9 byte, short, int, long တiuကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ က&+Cခ+$တ+
ကeတ+6 Memory eပ2မH+ အသuB$CပuAiuင#တ-6 Size ပ3ပ-။ အထက#ပ3ဇယ+$မH+ eဖ2Cပထ+$တ-6အတiuင#$ byte eတ&ဆiuရင# 8
bit + or - Integer eတ&ကiu အသuB$CပuAiuင#မH+ Cဖစ#Kပ?$ long type ဆiuရင# + or - 64 bit Integer eတ&ကiu အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။

Floating Number eတ&ဆiuရင#eတ+6 float န-9 double type eတ&ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ float ကeတ+6 32
bit + or - Floating Number eတ&ကiu အသuB$CပuAiuင#မH+ Cဖစ#Kပ?$ double ဆiuရင#eတ+6 64 bit + or - Floating
Number eတ&ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Character eတ&ကiu ကiuယ#စ+$Cပuတ-6 char type eတ&မH+eတ+6 16 bit Unicode Character eတ&ကiu အသuB$CပuAiuင#ပ3
တယ#။ တဖန# True န-9 False သ+ပiuင#တ-6 boolean type eတ&မH+eတ+6 true န-9 false ကiuသ+ အသuB$CပuAiuင#ပ3မယ#။

Literals
Java Source File eတ&ထ-မH+ Source Code eတ&၊ Comment eတ&န-9 Variable eတ&ရ-I Value eတ&ကiu eရ$သ+$
Aiuင#ပ3တယ#။ Variable eတ&ကiu Initialize လuပ#တ-6အခ3 ဒ3မHမဟuတ# Variable တစ#ခuရ-I တန#ဖiu$လiu အစ+$ထiu$တ-6 အခ3
မGiu$မH+ Source Code eတ&ထ-မH+ Value eတ&ကiu တiuက#Uiuက#eရ$သ+$eလ6Qiပ3တယ#။ Source Code eတ&ထ-မH+
တiuက#Uiuက#eရ$သ+$ထ+$တ-6 Value eတ&ကiu Literals eတ&လiueခ2ပ3တယ#။ Primitive Type eတ&မH+ ကiuယ#ပiuင#
Literals eတ&ကiu ပiuင#ဆiuင#Fကပ3တယ#။

package com.jdc;

public class LiteralDemo {

public static void main(String [] args) {


boolean b = true;
char c = ‘a’;
byte d = 10;
short e = 100;
int f = 1000;
long l = 10000;
float m = 10.01;
double n = 100.01918;
}
}

Learning Java 45 မင#$လ&င#


Java Developer Class

Boolean Literals

Boolean Type Variable eတ&မH+ အသuB$CပuAiuင#တ-6 literals eတ&ကeတ+6 true န-9 false သ+Qiပ3တယ#။

package com.jdc;

public class LiteralDemo {

public static void main(String [] args) {


boolean yes = true;
boolean no = false;
}
}

Character Literals

Character eတ&ဆiuရင#eတ+6 Single Quotation[‘] န-9 အစ+ဆuB$ကiu ပiတ#Kပ?$ eရ$သ+$eပ$ရပ3မယ#။ အထက#eဖ2Cပပ3


အတiuင#$ ‘a’ ဆiuKပ?$ Character တစ#လuB$ကiu eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။ Character eတ&ကiu eရသ+$တ-6 eနရ+မH+
Unicode Code Point ကiu အသuB$CပuKပ?$လ- eရ$သ+$Aiuင#ပ3တယ#။ ‘\u1018’ ဆiuKပ?$ eရ$သ+$Aiuင#ပ3တယ#။

package com.jdc;

public class LiteralDemo {

public static void main(String [] args) {


char a = ‘a’;
char ba = ‘\u1018’;
}
}

Numbers Literals

Integer eတ&Cဖစ#Fကတ-6 အCပည#6ကiန#$eတ&မH+ ဆiuရင# Decimal, Hexadecimal, Octal န-9 Binary ပuBစBန-9 တန#ဖiu$eတ&
ကiu eရ$သ+$လiuရAiuင#ပ3တယ#။ Decimal ဆiuတ+က ဆယ#ဆတiu$ပuBစBန-9 eရ$သ+$နည#$ပ3။ က\န#eတ+#တiu အCပင#မH+
အသuB$Cပueနတ-6 ပuBစBCဖစ#Kပ?$ အသuB$မG+$တ-6 ပuBစBCဖစ#ပ3တယ#။

Binary ပuBစBကeတ+6 0 eတ& 1 eတ&န-9 Integer ကiu eဖ2Cပတ-6 ပuBစBCဖစ#ပ3တယ#။ 1 ဟ+ 1 Cဖစ#Kပ?$ 10 ဆiuတ+က 2 Cဖစ#ပ3
မယ#။ တဖန# 11 ဆiuတ+ကeတ+6 3 ကiu eဖ2Cပတ+ Cဖစ#ပ3မယ#။ Literal eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ e^မH+ Prefix
အeနန-9 0B ဒ3မHမဟuတ# 0b ကiu eရ$သ+$eပ$ရပ3မယ#။


Learning Java 46 မင#$လ&င#


Java Developer Class

package com.jdc;

public class LiteralDemo {

public static void main(String [] args) {

int binary = 0b11; // Binary form


int octal = 011; // Octal form
int decimal = 10; // Decimal Form
int hexadecimal = 0x1A; // Hexadecimal form
float f = 10.10;
double d = 1091.0191;
}
}

Octal ဆiuတ+ကeတ+6 8 ဆတiu$ပuBစBန-9 eဖ2Cပတ+Cဖစ#ပ3တယ#။ 0 ကeန 7 အထiQiKပ?$ 10 ဆiuတ+ 8 Cဖစ#Kပ?$ 11 ဆiuရင#


9 Cဖစ#ပ3မယ#။ Octal ပuBစBန-9 eရ$မယ#ဆiuရင#eတ+6 e^မH+ Prefix အeနန-9 0 ကiu eရ$eပ$ရမH+ Cဖစ#ပ3တယ#။

Hexadecimal ဆiuတ+ကeတ+6 16 ဆတiu$ကiန#$စနစ#န-9 eဖ2Cပတ+Cဖစ#ပ3တယ#။ Hexadecimal ပuBစBမH+ ကiန#$တစ#လuB$


ဟ+. ၁၆ လuB$အထieဖ2Cပeပ$Aiuင#ပ3တယ#။ ကiန#$တစ#eနရ+အတ&က# 0 မH 9 အထiရယ# A မH F အထieဖ2Cပeပ$Aiuင#ပ3
တယ#။ 0 မH 9 eကG+#သ&+$Kပ?ဆiuတ+န-9 A ကeန F အထi eဖ2Cပeပ$ပ3တယ#။ 10 ဆiuရင# A လiueဖ2CပKပ?$ 11 ဆiuရင# B လiu
eဖ2Cပပ3မယ#။ Java မH+ Hexadecimal ပuBစBန-9eရ$မယ#ဆiuရင# e^မH+ Prefix အeနန-9 0x ဒ3မH မဟuတ# 0X ကiu eရ$eပ$
ရပ3မယ#။

Floating Number eတ&အeနန-9 float န-9 double တiuပ-Qiပ3တယ#။ အ-6ဒ3eတ&ကiueတ+6 ဒသမကiန#$eရ$သလiuပ- eရ$သ+$
Aiuင#ပ3တယ#။

Suffix of Numbers

Integer Number eတ&အတ&က# byte, short, int, long ဆiuKပ?$Qiပ3တယ#။ Kပ?$eတ+6 Floating Number eတ&အတ&က#
float န-9 double Qiပ3တယ#။ Literal န-9 ဒ?အတiuင#$eရ$မယ#ဆiuရင# အ-6ဒ? Type eတ&ကiu ခ&-Kပ?$ eဖ2မCပAiuင#ပ- Default Type
ကiu အသuB$Cပuသ&+$ပ3မယ#။

Integer Literal eတ&န-9 eရ$ထ+$မယ#ဆiuရင# Default အတiuင#$ဆiuပ3က int ကiu အသuB$Cပuသ&+$ပ3မယ#။ Kပ?$eတ+6
Floating Number eတ&ဆiuရင#လ- default အတiuင#$ဆiuပ3က double type ကiu အသuB$Cပuသ&+$မH+ Cဖစ#ပ3တယ#။
Variable တစ#ခuမH+ Assign လuပ#တ-6 eနရ+မH+ မသiသ+eပမ-6 Method eတ&ကiu Invoke လuပ#တ-6 အခ3မH+ Parameter
eတ&eနရ+မH+ Literals eတ&ကiueရ$သ+$တ-6 eနရ+မH+ သတiCပuသင#6ပ3တယ#။

eအ+က#ပ3 ကuဒ#နမOန+ထ-မH+လiu take() method ကiu Argument Type မတOeအ+င# Method ၄ မGiu$eရ$သ+$ထ+$ပ3
တယ#။ Argument Type eတ&ကeတ+6 အသ?$သ?$ byte, short, int, long တiuCဖစ#Fကပ3တယ#။ Method Name တO
eပမ-6 Argument Type မတOတ-6 အတ&က# သOတiueတ&ဟ+ Method တစ#ခuစ?လiu Java Compiler ကeက+ Java
Runtime ကပ3 မHတ#ယOeနFကပ3တယ#။

Learning Java 47 မင#$လ&င#


Java Developer Class

public class TypeDemo {

public static void main(String[] args) {


take(10);
}

static void take(byte b) {


System.out.println("Byte Value");
}

static void take(short s) {


System.out.println("Short Value");
}

static void take(int i) {


System.out.println("Int Value");
}

static void take(long l) {


System.out.println("Long Value");
}
}

တကယ#လiu Main Method ထ-ကလiu take(10) လiueရ$လiuက#ရင# ဘယ# Method ကiu အလuပ#လuပ#သ&+$မH+လ-။ ဒ?eနရ+
မH+eတ+6 Integer Literal eတ&ရ-I Default Type ဟ+ int Cဖစ#တ-6 အတ&က# int type ကiu Argument အeနန-9 ယOတ-6
Method ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။

တကယ#လiu long type အeနန-9 အသuB$CပuခGင#တယ#ဆiuရင#eတ+6 Literals ရ-I eန+က#မH+ l ဒ3မHမဟuတ# L ကiu Suffix
အeနန-9 eရ$သ+$eပ$ရပ3မယ#။ take(10L) လiueရ$လiuက#ရင# long Type Cဖစ#တယ#ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ-6
အတ&က# take(long l) Method ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။

အလ+$တOပ- suffix ကiu အသuB$CပuAiuင#တ+က float န-9 double Cဖစ#ပ3တယ#။ float type အတ&က# suffix အeနန-9 f ဒ3မH
မဟuတ# F ကiu အသuB$CပuAiuင#Kပ?$ double type အတ&က# d န-9 D ကiu အသuB$CပuAiuင#ပ3တယ#။

ဒ3Cဖင#6ရင# byte, short, int မH+eတ+6 suffix မQiFကပ3ဘO$။ ဒ3Cဖင#6 byte ဒ3မHမဟuတ# short ကiu သuB$တ-6 Method ကiu
Invoke လuပ#ခGင#ရင# ဘယ#လiuလuပ#မလ-။ int ကiu အသuB$လiuတ-6 Type ကiu eCပ+င#$ဖiuလiuအပ#ပ3တယ#။ ဒ3ကiu Type
Casting လiueခ2ပ3တယ#။

Primitive Casting

Size eသ$တ-6 Type ကeန Size Pက?$တ-6 Type ကiu eCပ+င#$ခGင#ရင# Java Compiler က အလiuအeလG+က#eCပ+င#$eပ$
Aiuင#တယ#။ အ-6ဒ3ကiu Implesit Casting လiueခ2ပ3တယ#။ ဥပမ+အ+$Cဖင#6 byte variable တစ#ခuကiu int variable ဆ?ကiu
အစ+$ထiu$တယ# ဆiuFကပ3စiu။ အ-6ဒ3ဆiuရင# ဘ+မHအeထ&အထO$eCပ+င#$စရ+မလiuပ- eရ$သ+$Aiuင#ပ3တယ#။ ဒ3eပမ-6 int
variable ကeန byte Variable ကiu Assign လuပ#မယ#ဆiuရင#eတ+6 (byte) ဆiuKပ?$ cast လuပ#eပ$ဖiuလiuအပ#ပ3တယ#။

Learning Java 48 မင#$လ&င#


Java Developer Class

public class Casting {

public static void main(String[] args) {

byte b = 10;
int i = b;

b = (byte) i;

float f = 10.1;
double d = f;

f = (float)d;
}
}

အလ+$တOပ- float variable ကiu double variable eနရ+မH+ Assign လuပ#မယ#ဆiuရင# double က float ထက#ပiuKပ?$
Pက?$တ-6 အတ&က# အeထ&အထO$eCပ+င#$Kပ?$eရ$စရ+မလiuအပ#ပ3ဘO$။ ဒ3eပမ-6 float variable eနရ+ကiu double variable
ကiu Assign လuပ#မယ#ဆiuရင#eတ+6 (float) ဆiuKပ?$ Type Cast လuပ#eပ$မHရပ3မယ#။

public class TypeDemo {

public static void main(String[] args) {


take((byte)10);
}

static void take(byte b) {


System.out.println("Byte Value");
}

static void take(int i) {


System.out.println("Int Value");
}
}

အထက#ပ3 နမOန+ထ-မH+ take(10) လiueရ$ရင# take(int i) ကiu eခ2သ&+$ပ3မယ#။ ဒ36eFက+င#6 take(byte b) method ကiu
Invoke လuပ#eစခGင#ရင#eတ+6 take((byte)10) ဆiuKပ?$ Type Cast လuပ#Kပ?$မH take() Method ကiu Invoke လuပ#eပ$ဖiu
လiuအပ#ပ3တယ#။

Learning Java 49 မင#$လ&င#


Java Developer Class

Underscore In Number Literals


က\န#eတ+#တiu ကiန#$ဂဏန#$eတ&ကiu အQည#Pက?$ eရ$သ&+$မယ#ဆiuရင# အမတန#ကiu ဖတ#ရခက#ပ3တယ#။ ခu၊ ဆယ# ရ+
eထ+င# eသ+င#$ အစQiသCဖင#6 မန- ဖတ#ယOရတ+ကiu FကuBဘO$FကမH+ပ3။ ဒ?eနရ+မH+ သuB$လuB$တစ#eနရ+ Comma (,) ကiu ခB
Kပ?$ eရ$ထ+$ရင# ဖတ#ရတ+လ&ယ#ကOeစပ3တယ#။ 100,000,000 ဆiuတ+မGiu$eပ36။

Java SE 7 ကeနစKပ?$ Java မH+လ- ကiန#$eတ&Fက+$မH+ ဖတ#ရလ&ယ#eအ+င# Cပင#ဆင#လ+ခ-6တ+Qiပ3တယ#။ Comma


ကeတ+6 Java မH+ အသuB$Cပueနတ-6 စ+လuB$Cဖစ#တ-6 အတ&က# အသuB$Cပuလiuမရပ3ဘO$။ အ-6ဒ?အစ+$ Under Score (_) ကiu
အသuB$CပuAiuင#ပ3တယ#။ ဒ3eပမ-6 Under Score ကiu သuB$လiuမရတ-6 eနရ+eတ&Qiပ3တယ#။

✓ e^ဆuB$၊ eန+က#ဆuB$eတ&မH+ eရ$လiu မရပ3ဘO$


✓ Prefix eတ&ရ-I eန+က#eတ&၊ Suffix eတ&ရ-I e^eတ&မH+ eရ$လiuမရပ3ဘO$
✓ ဒသမ စ+လu$B ရ-I e^eန+က#eတ&မH+ eရ$လiuမရပ3ဘO$

eရ$လiuမရတ-6 ပuBစBeတ&Cဖစ#ပ3တယ#။

public static void main(String[] args) {

int data1 = _10_000_000; // အe^ဆuB$မH+ eရ$မရပ3


int data2 = 10_110_110_; // အeန+က#ဆuB$မH+ eရ$မရပ3
int data3 = 0b_11011; // Prefix eန+က#မH+ eရ$မရပ3
long data4 = 10000_L; // Suffix e^မH+ eရ$မရပ3
float data5 = 10191._101; // ဒသမကiန$# eန+က#မH+ eရ$မရပ3
}

eရ$လiuရတ-6 ပuBစBCဖစ#ပ3တယ#။

public static void main(String[] args) {

int data1 = 10_000_000;


int data2 = 10_110_110;
int data3 = 0b11_011;
long data4 = 10_000L;
float data5 = 10_191.101;
}

Learning Java 50 မင#$လ&င#


Java Developer Class

Reference Data Types


Primitive Data Type eတ&အeFက+င#$ကiu eလ6လ+Kပ?$တ-6 eန+က#မH+ ဆက#လက#Kပ?$ eလ6လ+သ&+$FကမH+ကeတ+6
Reference Data Type Cဖစ#ပ3တယ#။ Object eတ&မHန#သမZဟ+ Reference Data Type eတ& Cဖစ#Fကပ3တယ#။
Java မH+Qiတ-6 Type အeနန-9 အသuB$Cပuလiuရတ-6 Class eတ&၊ Interface eတ&၊ Enum eတ& အ+$လuB$ဟ+ Reference
Data Type eတ&Cဖစ#Fကတယ#။

က\န#eတ+#တiu နမOန+ထ-မH+ အသuB$CပueနFကတ-6 String တiuလiu Java SE API ထ-မH+ပ3တ-6 Class eတ&eက+၊ က\န#eတ+#
တiu ကiuယ#တiuင#eရ$သ+$ထ+$တ-6 Class eတ&အ+$လuB$ဟ+လ- Reference Data Type eတ&Cဖစ#Fကပ3တယ#။ ဒ36eFက+င#6
Java မH+ Primitive Data Type က ၈ မGiu$သ+Qieပမ-6 Reference Data Type ကeတ+6 Class eတ&Qiသeလ+က#Qi
eနမH+ Cဖစ#ပ3တယ#။

က-ဆက#လက#Kပ?$ ဘ+လiu Reference Data Type လiueခ2တ+လ- ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

public class ReferenceDemo {


public static void main(String[] args) {
int a = 77;
Person p = new Person();
p.name = “Aung Aung”;
}
}

class Person {
Stirng name;
}

က\န#eတ+#တiu e^မH+လ- eရ$ဘO$ပ3တယ#။ Person p = new Person() ဆiuတ+ new Person() ဆiuKပ?$ Object
eဆ+က#Kပ?$ Person type p Variable eနရ+မH+ လ+အစ+$ထiu$တယ#လiuပ- သiလ+FကမH+ Cဖစ#ပ3တယ#။ တကယ#eတ+6
Person Type p variable ကiu Stack Memory eပ2မH+ သ&+$eဆ+က#ပ3တယ#။

(Stack Memory ဆiuတ+က JVM eပ2မH+ အသuB$Cပuတ-6 Memory Aera တစ#မGiu$Cဖစ#ပ3တယ#။ JMV eပ2မH+ Stack န-9
Heap ဆiuKပ?$ Memory Area AHစ#ခuကiu အသuB$CပuFကပ3တယ#။ Stack Memory ဆiuတ+က CPU န-9 အန?$ဆuB$eနရ+မH+
QiKပ?$ CPU ကeန တiuက#Uiuက# ဆက#သ&ယ# အသuB$CပuAiuင#တ-6 Memory Area Cဖစ#Kပ?$ Life Time ကလ- အeတ+#eလ$ကiu
တiueတ+င#$ပ3တယ#။ က\န#eတ+#တiu eရ$ထ+$တ-6 ကuဒ#eတ&ကiu အလuပ#လuပ#eနစT# အ-6ဒ? Code eတ&ဟ+ Stack eပ2မH+
Qieနပ3မယ#။ Kပ?$သ&+$ရင#eတ+6 eပG+က#ကuန#မH+ Cဖစ#ပ3တယ#။ Heap ဆiuတ+ကeတ+6 Stack ထက#ပiuKပ?$ ကGယ#Cပန#9Kပ?$
CPU ကeန တiuက#Uiuက# ဆက#သ&ယ#Kပ?$ အသuB$Cပueလ6မQiပ3ဘO$။ အFက+Pက?$လ- eဒတ+eတ&ကiu သiမ#$ထ+$Kပ?$ အသuB$Cပu
Aiuင#ပ3တယ#)

eန+က#ကပ3တ-6 new Person() ဆiuတ+ကeတ+6 Heap Memory eပ2မH+ Person Object ကiu သ&+$eဆ+က#တ+ပ-
Cဖစ#ပ3တယ#။ Object eဆ+က#တ-6eနရ+မH+ Instance Variable eတ&Qiရင# Class ထ-ကeန Copy ကO$သ&+$Kပ?$
Object ထ-မH+ သiမ#$ထ+$ပ3မယ#။ ဒ3eFက+င#6 name Variable ဟ+လ- Object ထ-ကiuပ3သ&+$ပ3မယ#။ Kပ?$eတ+6မH
eဆ+က#ခ-6တ-6 Memory Address ကiu Person p eနရ+မH+ လ+Kပ?$ အစ+$ထiu$ပ3တယ#။

p.name ဆiuKပ?$ Variable p ရ-I name ကiu အသuB$CပuKပ?ဆiuရင# p eနရ+မH+ Qiတ-6 Memory Address ကeန Object ကiu
Reference လuပ#Kပ?$ name eနရ+ကiu အသuB$CပuမH+ Cဖစ#ပ3တယ#။ ဒ?လiu Variable eတ&ကeန Object Qiတ-6eနရ+ကiu
Reference လuပ#Kပ?$ သuB$eနရတ-6 အတ&က# Object eတ&ကiu Reference Type Variable eတ&လiu eခ2ဆiuရCခင#$ Cဖစ#ပ3
တယ#။

Learning Java 51 မင#$လ&င#
Java Developer Class

တကယ#eတ+6 Primitive eတ&တuန#$က Variable eနရ+ကiu Assign လuပ#တ+န-9 ပတ#သက#Kပ?$ ဒ?eနရ+မH+ eCပ+ခGင#တ-6
အတ&က# e^မH+ မeCပ+ခ-6ပ3ဘO$။ Primitive Type Variable eတ&ကeတ+6 Reference Type Variable eတ&န-9 မတO
ပ3ဘO$။

int a = 77; လiueရ$ထ+$ရင# Stack Memory eပ2မH+ a အတ&က# 32 Bit စ+ eနရ+ယOပ3တယ#။ Kပ?$ရင# 77 ကiu Value
အeနန-9 အစ+$ထiu$မH+ Cဖစ#ပ3တယ#။ မHတ#မယ#ဆiuရင# Primitive Type Variable eတ&က Variable eတ&eနရ+မH+ တ
ကယ#6 တန#ဖiu$ကiu လ+အစ+$ထiu$Kပ?$ Reference Data Type eတ&ကeတ+6 eဆ+က#ထ+$တ-6 Object ကiu Reference
လuပ#Aiuင#တ-6 Memory Address ကiu အစ+$ထiu$တ+ပ- Cဖစ#ပ3တယ#။

public class ReferenceDemo {


public static void main(String[] args) {
int a = 77;
Person p = new Person();
p.name = "Aung Aung";

int b = a;
Person q = p;

a = 100;
p.name = "Thidar";
}
}

Variable eတ&ကiu အCခ+$ Variable eတ&မH+ အစ+$ထiu$Fကည#6ရeအ+င#။ int b = a; လiueရ$လiuက#တ+န-9 a ရ-I တန#ဖiu$Cဖစ#
တ-6 77 ဟ+ b ရ-I တန#ဖiu$Cဖစ#သ&+$ပ3မယ#။ ဒ36eFက+င#6 eအ+က#မH+ a = 100 လiu a ရ-I တန#ဖiu$ကiu 100 လiu အစ+$ထiu$ရင#
လ- b ရ-I တန#ဖiu$ဟ+ 77 ပ- Cဖစ#eနမH+ပ3။

ဒ3eပမ-6 Reference Type eတ&ကeတ+6 ဒ?လiuမဟuတ#ပ3ဘO$။ Person q = p; လiueရ$လiuက#တ+ဟ+ q ရ-I တန#ဖiu$ကiu p


ကeန Reference လuပ#eနတ-6 Object ရ-I Memory Address ကiu လ+Kပ?$ အစ+$ထiu$တ+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6

Learning Java 52 မင#$လ&င#


Java Developer Class
Reference Variable p eက+ q ပ3 တစ#ခuထ-eသ+ Person Object ကiu လHမ#$Kပ?$ Reference လuပ#eနFကမH+ Cဖစ#ပ3
တယ#။ ဒ36eFက+င#6 p.name = “Thidar” လiueCပ+င#$လiuက#တ+န-9 q.name ဟ+လ- “Thidar” Cဖစ#သ&+$မH+ Cဖစ#ပ3တယ#။
Reference Variable eတ&ကiu အသuB$Cပuတ-6 eနရ+မH+ တစ#Cခ+$ Variable eတ&ကeန သuB$eနတ-6 Object ကiu
Reference လuပ#eနAiuင#တယ#ဆiuတ+ကiu သတiထ+$ဖiuလiuအပ#ပ3တယ#။

ဆက#လက#Kပ?$ Method Argument eတ&မH+ သuB$တ-6 Variable eတ&ဆiuတ+ ဘယ#လiuဟ+မGiu$လ- ဆiuတ+ကiu eလ6လ+
သ&+$Fကရeအ+င#။ Primitive Type ကeန စKပ?$ eလ6လ+သ&+$Fကရeအ+င#။

public class ReferenceDemo {


public static void main(String[] args) {

int a = 77;
change(a);
System.out.println(a);
}

static void change(int a) {


a = 100;
}
}

အထက#မH+ eဖ2Cပထ+$သလiu change() method က int type Variable တစ#ခuကiu Argument အeနန-9 ယOပ3တယ#။
Kပ?$eတ+6မH Method ထ-မH+ a = 100 ဆiuKပ?$ a ရ-I တန#ဖiu$ကiu eCပ+င#$လiuက#ပ3တယ#။ Main Method ထ-မH+eတ+6
change(a) ဆiuKပ?$ Invoke လuပ#ပ3တယ#။ System.out.println(a) လiueရ$လiuက#ရင# a ရ-I တန#ဖiu$ဟ+ ဘ+Cဖစ#သ&+$မ
လ-။ Method ထ-မH+ a = 100 လiu eCပ+င#$ထ+$တ-6 အတ&က# a ရ-I တန#ဖiu$ဟ+ 100 လiueCပ+င#$သ&+$တယ#လiu ထင#ပ3
မယ#။ ဒ3eပမ-6 အeCဖဟ+ 77 ပ-Cဖစ#eနမH+ Cဖစ#ပ3တယ#။

ဘ+လiuလ- ဆiueတ+6 change(a) လiu eရ$လiuက#တ+ဟ+ Variable a ကiu change() Method ကiu eပ$လiuက#တ+မဟuတ#
ပ3ဘO$။ Variable a ရ-I value Cဖစ#တ-6 77 ကiu change() Method ရ-I Argument Cဖစ#တ-6 a eနရ+ကiu Copy ကO$Kပ?$
eပ$လiuက#တ+ Cဖစ#ပ3တယ#။ Value ကiuပ- eပ$လiuက#တ+Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 change() method ထ-က a ဟ+
Main Method ထ-က Variable a န-9 သက#ဆiuင#မ[မQiပ3ဘO$။ change() Method ထ-က a ရ-I တန#ဖiu$ကiu eCပ+င#$လiuက#
တ+လ- change() method ထ-က a သ+ eCပ+င#$လ-သ&+$တ+ Cဖစ#Kပ?$၊ Main Method ထ-က a ရ-I တန#ဖiu$ဟ+ နဂiu
အတiuင#$ 77 ပ-Cဖစ#eနတ+ Cဖစ#ပ3တယ#။

public class ReferenceDemo {


public static void main(String[] args) {
Person p = new Person();
p.name = "Aung Aung";
change(p);
System.out.println(p.name);
}

static void change(Person p) {


p.name = "Thidar";
}
}

Learning Java 53 မင#$လ&င#


Java Developer Class

Reference Variable eတ&မH+eက+ ဘယ#လiuလ- ဆiuတ+ကiu ဆက#Kပ?$eလ6လ+သ&+$Fကရeအ+င#။ eစ+eစ+က အတiuင#$


ပ3ပ-။ Person p ကiu change(p) ဆiuKပ?$ change() Method ကiu Invoke လuပ#eနပ3တယ#။ ဒ?eနရ+မH+လ- သတiCပuဖiu
လiuတ+က change(Person p) လiueရ$ထ+$တ+န-9 Main Method ထ-မH+ Person p လiueရ$ထ+$တ+က န+မည#သ+
တOတယ#၊ Scope ခGင#$မတOတ-6 အတ&က# Local Variable တစ#ခuစ?လiu သiထ+$eစခGင#ပ3တယ#။

Main Method ထ-မH+ change(p) လiueရ$လiuက#တ+ဟ+ Main Method ထ-မH+Qiတ-6 p variable ရ-I Value ကiu
change() method ရ-I local variable p မH+ Copy ကO$eပ$လiuက#တ+ပ3ပ-။ Method eတ&ကiu Invoke လuပ#တ-6 eနရ+
မH+ Variable eတ&ကiu Parameter အeနန-9 eပ$လiuက#တယ#ဆiuတ+ Variable ကiu eပ$လiuက#တ+မဟuတ#ပ- Variable ရ-I
Value ကiuပ- eပ$လiuက#တ+ Cဖစ#ပ3တယ#။

Reference Type Variable eတ&ရ-I Value ဟ+ Reference လuပ#eနတ-6 Object eတ&ရ-I Memory Address သ+
Cဖစ#တ-6 အတ&က# change() Method ထ-မH+ Qieနတ-6 p ဟ+လ- Main Method ထ-က p က Reference လuပ#eနတ-6
Object ကiuပ- Reference လuပ#eနပ3တယ#။ change() method ထ-မH+ p.name ကiu eCပ+င#$လiuက#တ-6 အတ&က# Main
Method ထ-မH+Qiတ-6 p.name ဟ+လ- eCပ+င#$သ&+$မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 System.out.println(p.name) လiu
eရ$လiuက#တ-6 အခ3မH+ အeCဖဟ+ “Thidar” လiu eဖ2Cပသ&+$မH+ Cဖစ#ပ3တယ#။

Wrapper Classes of Primitives


e^ခန#$မH+ Primitive Data Type eတ&အeFက+င#$ကiueလ6လ+ခ-6တ-6 eနရ+မH+ Primitive Data Type eတ&မH+
Method eတ&မပ3ဘO$ဆiuတ+ကiu သတiCပuမiပ3မယ#။ တကယ#လiu Type တစ#ခuကeနတစ#ခuကiu eCပ+င#$ခGင#တ-6အခ3၊ ဒ3မH
မဟuတ# String ကeန တစ#Cခ+$ Type တစ#ခuခuကiu eCပ+င#$ခGင#တ-6အခ3၊ Primitive Type ကeန Stiring ကiueCပ+င#$ခGင#
တ-6 အခ3မGiu$eတ&မH+ အခက#အခ- eတ&Jရတတ#ပ3တယ#။ အ-6ဒ?လiuလuပ#eဆ+င#မ[eတ&ကiu အလ&ယ#တကOeဆ+င#ရ&က#Aiuင#
eအ+င# Java မH+ Primitive Type eတ&အတ&က# Wrapper Class eတ&ကiu Cပင#eပ$ထ+$ပ3တယ#။

Primitive Wrapper Argument Types of Constructor


boolean Boolean boolean or String
char Character char
byte Byte byte or String
short Short short or String
int Integer int or String
long Long long or String
float Float float, double or String
double Double double or String

အထက#ပ3အတiuင#$ Primitive Data Type အလiuက# Wrapper Class eတ&ကiu Cပင#eပ$ထ+$Kပ?$ Primitive Type မH
ဒ3မHမဟuတ# String တစ#ခuကeန Object အCဖစ#eCပ+င#$Aiuင#eအ+င# Constructor eတ&ကiu Cပင#eပ$ထ+$ပ3တယ#။

Integer a = new Integer(10);


Integer b = new Integer(“20”);
Float c = new Float(14.10F);
Float d = new Float(“10.8181”);

အထက#ပ3အတiuင#$ သက#ဆiuရင#ရ+ Primitive အလiuက# Wrapper Object eတ&ကiu တည#eဆ+က#Aiuင#ပ3တယ#။

Learning Java 54 မင#$လ&င#


Java Developer Class

Auto Boxing - Unboxing


Java Version 5 အeရ+က#မH+ Auto Boxing - Unboxing ဆiuတ-6 Feature တစ#ခuကiu အသစ#Cဖည#6စ&က#လ+ပ3တယ#။
ဒ3ကeတ+6 Primitive Type eတ&န-9 Wrapper Object eတ&Fက+$မH+ Object eဆ+က#စရ+မလiuပ- Assign လuပ#လ+
Aiuင#သလiu၊ Object eတ&မH+လ- Method ကiu eခ2စရ+မလiuပ- Primitive အCဖစ#eCပ+င#$လ+Aiuင#ပ3တယ#။

int a = 10;
Integer b = new Integer(a);

int c = b.intValue();

Java SE 5 မတiuင#ခင#ကဆiuရင# primitive type a ကiu Integer အCဖစ#eCပ+င#$ခGင#ရင# new Integer(a) ဆiuKပ?$
Constructor ကiuအသuB$CပuKပ?$ Object အCဖစ#eCပ+င#$မHရပ3တယ#။ ဒ?လiuမGiu$ Primitive Type ကeန သbရ-I Wrapper
Object အCဖစ#eCပ+င#$တ+ကiu Boxing လiueခ2ပ3တယ#။ Object ဆiuတ-6 eသတl +ထ-ထည#6တယ#ဆiuတ-6 သeဘ+eပ36ဗG+။

တဖန# Wrapper Object ကeန primitive type ကiu Cပန#လiuခGင#ရင#လ- b.intValue() ဆiuKပ?$ Method ကiu အသuB$CပuKပ?$
Type ကiu Cပန#eCပ+င#$eပ$ဖiuလiuပ3တယ#။ အ-6ဒ3ကiueတ+6 Unboxing လiueခ2ပ3တယ#။ Object ဆiuတ-6 eသတl +ထ-ကeန
ထuတ#Kပ?$ Primitive ကiu Cပန#eCပ+င#$eပ$တယ#ဆiuတ-6 သeဘ+eပ36။

ဒ3eပမ-6 Java SE 5 eရ+က#တ-6 အခ3မH+ ဒ3eတ&ဟ+ မလiuအပ#eတ+6ပ3ဘO$။ Boxing eတ& Unboxing eတ&ကiu JVM က
အလiuအeလG+က#လuပ#eဆ+င#eပ$လ+Aiuင#ပ3တယ#။

int a = 10;
Integer b = a;

int c = b;

အထက#ပ3အတiuင#$ Wrapper Object b eနရ+ကiu Primitive Variable တစ#ခuCဖစ#တ-6 a ကiu တiuက#Uiuက# အစ+$ထiu$Aiuင#
သလiu၊ primitive type variable တစ#ခuCဖစ#တ-6 c eနရ+ကiuလ- int ရ-I Wrapper Object တစ#ခuCဖစ#တ-6 b န-9 အစ+$ထiu$
လ+Aiuင#ပ3တယ#။

Wrapper Class eတ3န/A ဘ"လuပ%လiuရလ/


Primitive Wrapper eတ&န-9 ဘ+eတ&လuပ#လiuရလ- ဆiuတ+ဟ+ က\န#eတ+#တiu သiထ+$သင#6တ-6 အခGက# Cဖစ#ပ3တယ#။
Primitive Type Value eတ&ကiu Cပန#Kပ?$ ထuတ#ယOလiuရတယ#။ ဒ3eပမ-6 Auto Boxing Unboxing eFက+င#6 ဒ3ဟ+ သiပ#
Kပ?$ အeရ$မပ3eတ+6ပ3ဘO$။ Variable AHစ#ခuကiu Compare လuပ#လiuရမယ#။ တန#ဖiu$တOမတO စစ#လiuရမယ#။ Kပ?$ရင# အCခ+$
Type eတ&ကiu eCပ+င#$လiuရမယ#။

Wrapper Class တiuင#$မH+ compare() န-9 equals() Method eတ&ပ3လ+ပ3တယ#။ ဒ3eပမ-6 ဒ3ဟ+လ- Primitive Type
eတ&န-9 Operators eတ&ကiu တ&-Kပ?$eရ$မယ#ဆiuရင# Cဖစ#eနတ+Cဖစ#တ-6 အတ&က# အရမ#$ကiu လiuအပ#eနတ+eတ+6 မဟuတ#
ပ3ဘO$။ ဒ3eပမ-6 တစ#Cခ+$ Primitive Type eတ& အCဖစ#eCပ+င#$လiuရတ-6 အခGက#ကeတ+6 သuB$ခGင#စရ+ အခGက#တစ#ခuCဖစ#
ပ3တယ#။

Learning Java 55 မင#$လ&င#


Java Developer Class

Compare with other Variable

Number အမGiu$အစ+$ Wrapper Type eတ&မH+ compare() ဆiuတ-6 Static Method တစ#ခuန-9 compareTo() ဆiuတ-6
Instance Method eတ&ပ3ဝင#Kပ?$ Variable AHစ#ခuကiu A[င#$ယHT#ရ+မH+ အသuB$CပuAiuင#ပ3တယ#။

public static void main(String[] args) {


int a = 10;
int b = 13;

int result1 = Integer.compare(a, b);


System.out.println(result1);

Integer c = a;
Integer d = b;

int result2 = c.compareTo(d);


System.out.println(result2);
}

Integer.compare(int a, int b) Method ကeတ+6 Static Method Cဖစ#Kပ?$ int variable AHစ#ခuကiu A[င#$ယHT#ရ+မH+
အသuB$CပuAiuင#eအ+င# Cပင#ဆင#ထ+$တ-6 Method တစ#ခuQiပ3တယ#။ အCခ+$eသ+ Number Type Class eတ&မH+လ-
compare method ကiu Cပင#eပ$ထ+$ပ3တယ#။ Double.compare() Method ကiu အသuB$Cပuမယ#ဆiuရင# double
variable AHစ#ခuကiu Compare လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။ compare() Method ရ-I Return Type ကeတ+6 int Cဖစ#Kပ?$
variable AHစ#ခuတန#ဖiu$တOeနရင# 0 ကiu Return Cပန#မH+ Cဖစ#Kပ?$ ပထမ Variable ကPက?$eနရင# 1 ကiu Return Cပန#Kပ?$၊
ပထမ Variable က ငယ#eနရင# -1 ကiu Return Cပန#မH+ Cဖစ#ပ3တယ#။

အထက#ပ3 နမOန+ထ-မH+ Integer.compare(a, b) လiueရ$ထ+$Kပ?$ a ဟ+ b ထက#ငယ#တ-6 အတ&က# result1 ဟ+ -1


Cဖစ#ပ3မယ#။ တဖန# Wrapper Object eတ&Cဖစ#Fကတ-6 c န-9 d eတ&မH+ compareTo() ဆiuတ-6 Method ကiu အသuB$CပuAiuင#
မH+ Cဖစ#ပ3တယ#။ c ဟ+ d ထက#ငယ#တ-6 အတ&က# c.compareTo(d) ရ-I ရလဒ#Cဖစ#တ-6 result2 ဟ+လ- -1 ပ-Cဖစ#ပ3
မယ#။

static void compare(int a, int b) {


int result = a - b;

String sign = result == 0 ? "=" : result > 0 ? ">" : "<";

System.out.printf("%d %s %d%n", a, sign, b);


}

Compare လuပ#တ-6 eနရ+မH+ အထက#ပ3အတiuင#$ a - b ဆiuKပ?$ ရလဒ#န-9လ- Fကည#6လiuရပ3တယ#။ result ဟ+ 0 Cဖစ#ရင# a


န-9 b ဟ+ တOeနKပ?$၊ 0 ထက#Pက?$ရင# a ဟ+ b ထက#Pက?$eနပ3မယ#။ တဖန# result က 0 ထက#ငယ#eနရင#eတ+6 a ဟ+
b ထက#ငယ#တယ#ဆiuKပ?$လ- သiAiuင#ပ3တယ#။

Learning Java 56 မင#$လ&င#


Java Developer Class

တOမတOစစ#ခGင#တ-6အခ3မH+

Variable တန#ဖiu$AHစ#ခu တOမတO စစ#ခGင#တ-6 အခ3မH+ Primitive eတ&မH+ Operators eတ&ကiu အသuB$CပuKပ?$ စစ#လiuရပ3
တယ#။ ဒ3eပမ-6 Wrapper Class eတ&မH+ java.lang.Object ကeနပ3လ+တ-6 equals() method ကiu အသuB$CပuKပ?$
စစ#eဆ$Aiuင#မH+ Cဖစ#ပ3တယ#။

public static void main(String[] args) {


double a = 10.101;
double b = 10.101;

System.out.println(a == b);

Double c = a;

System.out.println(c.equals(b));
}

အထက#ပ3အတiuင#$ a န-9 b ဟ+ Primitive Type eတ&Cဖစ#Fကတ-6 အတ&က# a == b ဆiuKပ?$ တOမတO စစ#eဆ$Aiuင#ပ3တယ#။


တဖန# c ဟ+ Wrapper Type Cဖစ#တ-6 အတ&က# Object ကeန ပ3လ+တ-6 equals() method ကiu အသuB$CပuKပ?$
စစ#eဆ$Aiuင#ပ3တယ#။ ဒ?eနရ+မH+ c.equals(b) လiueရ$ထ+$တ-6 eနရ+မH+ b ဟ+ primitive type Cဖစ#eပမ-6 Auto
Boxing - Unboxing eFက+င#6 Wrapper Object အCဖစ#အလiuလiueCပ+င#$Kပ?$ စစ#eဆ$Aiuင#တ+ Cဖစ#ပ3တယ#။

Type eCပ+င#$ခGင#တ-6အခ3

Primitive Type eတ&မH+ Integer eတ&အတ&က# Type eလ$မGiu$QiKပ?” Floating Number eတ&အတ&က# Type AHစ#
မGiu$Qiပ3တယ#။ Primitive Type eတ&မH+ ဆiuရင# Type eတ&ကiu eCပ+င#$ခGင#ရင# Type Casting ကiu အသuB$Cပuလiuရပ3
တယ#။ ဒ3eပမ-6 Wrapper Object eတ&ကiu အသuB$Cပuမယ#ဆiuရင# Type တစ#မGiu$ကeန တစ#မGiu$ကiu အလ&ယ#တကO
eCပ+င#$လiuရပ3တယ#။ Number Type Wrapper Class eတ&ဟ+ Number ဆiuတ-6 Abstract Class ကiu Extends
လuပ#ထ+$FကKပ?$ Number Class ထ-မH+ Type eCပ+င#$ဖiu eအ+က#ပ3 Method eတ&ကiu Cပင#ဆင#ထ+$ပ3တယ#။

Modifier and Type Method and Description


byteValue()
byte Returns the value of the specified number as a byte, which may
involve rounding or truncation.
doubleValue()
abstract double Returns the value of the specified number as a double, which may
involve rounding.
floatValue()
abstract float Returns the value of the specified number as a float, which may
involve rounding.
intValue()
abstract int Returns the value of the specified number as an int, which may
involve rounding or truncation.

Learning Java 57 မင#$လ&င#


Java Developer Class

longValue()
abstract long Returns the value of the specified number as a long, which may
involve rounding or truncation.
shortValue()
short Returns the value of the specified number as a short, which may
involve rounding or truncation.

အထက$eဖ'(ပပ* Method eတ,ကiu Number အမ0iu2အစ42 Wrapper Object eတ,အ42လu62မ74 အသu62(ပu9iuင$မ74


(ဖစ$ပ*တယ$။

public static void main(String[] args) {


Double d = 10.11;
float floatData = d.floatValue();
byte byteValue = d.byteValue();
short shortValue = d.shortValue();
int intData = d.intValue();
long longData = d.longValue();
}

အထက$ပ*အတiuင$2 Primitive Wrapper Object eတ,ကiu အသu62(ပuမယ$ဆiuရင$ အ(ခ42 Type eတ,ကiuလ@ အသင$A
(ပင$ထ42တ@A Method eတ,ကiu အသu62(ပuBပC2 အလ,ယ$တကDe(ပ4င$2လ@9iuင$မ74 (ဖစ$ပ*တယ$။ အ(ခ42eသ4 Number
Type Wrapper Class eတ,မ74လ@ Type e(ပ4င$2တ@A Method eတ,ကiu အသu62(ပu9iuင$မ74 (ဖစ$ပ*တယ$။

Learning Java 58 မင#$လ&င#


Java Developer Class

Arrays
ဒ?အခန#$မH+eတ+6 Java မH+ အသuB$Cပueနတ-6 Array ဆiuတ+ ဘယ#လiuဟ+မGiu$လ-။ Kပ?$eတ+6 Array eတ&ကiu ဘ+လiu
လiuအပ#Fကတ+လ-၊ Array Object eတ&ကiu ဘယ#လiu တည#eဆ+က#Fကမလ-၊ Array ထ-မH+ပ3တ-6 Element eတ&ကiu
ဘယ#လiu Access လuပ#မလ-ဆiuတ+န-9 Multi Dimension Array eတ&အeFက+င#$ကiu eလ6လ+သ&+$Fကပ3မယ#။

Array ဆiuတ+က အမGiu$အစ+$တOတ-6 Data eတ&ကiu အစ?အစT#တကG သiမ#$eပ$ထ+$Aiuင#တ-6 Object တစ#မGiu$Cဖစ#ပ3


တယ#။ ဒ3eပမ-6 Array eတ&က Object eတ&Cဖစ#eပမ-6 တစ#Cခ+$ Object eတ&န-9 eရ$သ+$ပuB မတOည?Fကပ3ဘO$။ တစ#Cခ+$
Object eတ&ဆiuရင# Type eတ&ကiu Class Name န-9 eရ$သ+$eဖ2CပKပ?$ new Operator ကiu အသuB$CပuKပ?$
Constructor eတ&ကeန တဆင#6 Object eတ&ကiu တည#eဆ+က#Aiuင#ပ3တယ#။

ဒ3eပမ-6 Array eတ&က Type eရ$သ+$ပuBeက+၊ Object တည#eဆ+က#ပuBeတ&ပ3 တစ#Cခ+$ Object eတ&န-9 မတOFကပ3
ဘO$။ ဒ? အခန#$မH+eတ+6 Array eတ&အeFက+င#$ကiu eလ6လ+သ&+$Fကပ3မယ#။

ဘ"လiu Array eတ3ကiuအသu<9=ပuဖiuလiuအပ%ခ/0တ"လ/


တကယ#လiu က\န#eတ+#တiu Twitter eပ2မH+eရ$သ+$ခ-6တ-6 Twit eတ&ကiu eဖ2CပAiuင#တ-6 Application တစ#ခueရ$eနတယ#
လiu eတ&$Fကည#6Fကရeအ+င#။ ပထမဆuB$ Twit ကiueဖ2Cပဖiu String firstTweet ဆiuတ-6 Variable န-9 eဖ2Cပမယ#၊ ဒuတiယ
Twit အတ&က# secondTwit ဆiuတ-6 Variable န-9 eဖ2CပFကမယ#။ ဒ?လiuန-9 တတiယ Twit eန+က#ဆuB$ Twit တစ#ခu
အတ&က# Variable တစ#ခu eရ$eနရရင# Variable eတ&ဆuB$မH+ မဟuတ#eတ+6ပ3ဘO$။

ဒ?လiueနရ+မGiu$မH+ String အမGiu$အစ+$ Data eတ&ကiu အစ?စT#အလiuက# သiမ#$eပ$ထ+$Aiuင#တ-6 Object eတ&လiuလ+ပ3


မယ#။ ဒ?လiu လiuအပ#ခGက#eတ&အတ&က# အသuB$CပuAiuင#တ+ကeတ+6 Array Object eတ&Cဖစ#Fကပ3တယ#။

Array eတ&ဟ+ Type အမGiu$အစ+$တOတ-6 Data eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6 ခ&က#eလ$eတ&ကiu တန#$စ?Kပ?$ထ+$တ-6


ရထ+$တ&- တစ#ခuန-9 တOပ3တယ#။ Array တစ#ခuကiu အသuB$Cပueတ+6မယ#ဆiuရင# ဘ+ Type ကiu သuB$မယ#ဆiuတ+န-9 ဘယ#AHစ#ခu
သiမ#$ထ+$Aiuင#တယ#ဆiuတ+ကiu PကiuKပ?$ သတ#မHတ#eပ$ထ+$ဖiuလiuအပ#ပ3တယ#။

အစကထ-က int အမGiu$အစ+$ Data ၁၀ ခu အသuB$Cပuမယ#လiu သတ#မHတ#ထ+$တယ#ဆiuရင# အ-6ဒ? Array ထ-ကiu int ကလ&-
Kပ?$ သiမ#$ထ+$လiuမရAiuင#ပ3ဘO$။ Kပ?$eတ+6 Data ကiuလ- 10 ခuထက#ပiuKပ?$ သiမ#$မeပ$ထ+$Aiuင#ပ3ဘO$။ Kပ?$eတ+6 Array ထ-
မH+ သiမ#$ထ+$တ-6 Data eတ&ကiuလ- အခန#$ နBပတ#န-9 သ?$Cခ+$ သတ#မHတ#Kပ?$ သiမ#$eပ$ထ+$Aiuင#ပ3တယ#။ Kပ?$eတ+6 ဘယ#
နBပ3တ#က Data လiuခGင#လ- ဆiuတ+န-9 ဘယ#နBပ3တ#မH+ ဘယ# Data ကiu သiမ#$မယ#ဆiuတ+ကiu သတ#မHတ# အသuB$CပuAiuင#ပ3
တယ#။

Array မH+ အသuB$Cပueနတ-6 အခန#$ နBပ3တ#eတ&ဟ+ သuညကeနစပ3တယ#။ ဒ36eFက+င#6 Data 10 ခu သiမ#$ထ+$Aiuင#တ-6


Array ဆiuရင# နBပ3တ# 0 ကeန 9 အထiအခန#$eတ&ကiu ပiuင#ဆiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 59 မင#$လ&င#


Java Developer Class

Declaring Arrays
Array eတ&ကiu အသuB$Cပueတ+6မယ#ဆiuရင# အန-ဆuB$ ဘယ#လiuအမGiu$အစ+$ Array ကiu အသuB$CပuမH+လ- ဆiuတ+ကiu သiဖiu
လiuအပ#ပ3တယ#။ Array အeနန-9 Primitive Type eတ&ကiuလ- အသuB$CပuAiuင#သလiu Reference Type eတ&ကiuလ-
အသuB$CပuAiuင#ပ3တယ#။ int type eတ&ကiu အသuB$Cပuတ-6 Array ဆiuရင# int array လiueခ2ဆiueလ6Qiသလiu String Type eတ&
ကiu အသuB$Cပuတ-6 Array eတ&ကiu String Array လiuလ- eခ2eလ6Qiပ3တယ#။ Custom Object Cဖစ#တ-6 User Class eတ&
ကiu အသuB$CပuAiuင#တ-6 Array eတ&ဆiuရင#လ- User Array လiueခ2eလ6Qiပ3တယ#။

အeCခခBအ+$Cဖင#6 Array Type Variable eတ&ကiu Declare လuပ#ပuB AHစ#မGiu$QiAiuင#ပ3တယ#။ ပထမတစ#နည#$ကeတ+6


ပ3ဝင#မည#6 Element eတ&ကiuPကiuသiတ-6 အခ3eရ$သ+$တ-6 နည#$န-9 eန+က#တစ#နည#$ကeတ+6 အရင#ဆuB$ Array ကiu Pကiu
eဆ+က#ထ+$Kပ?$ eန+က#မH Program ထ-ကeန Element eတ&ကiu Set လuပ#လiuတ-6 အခ3မGiu$မH+ အသuB$CပuAiuင#တ-6 နည#$
တiuပ- Cဖစ#ပ3တယ#။

If you know Array Elements


Array ထ-မH+ပ3မည#6 Element eတ&ကiu PကiuKပ?$သiထ+$မယ#ဆiuရင# eအ+က#ပ3 အတiuင#$ Array ကiu Declare လuပ#Aiuင#ပ3
တယ#။

int [] array = {1,2,3,4,5};

Array Variable ကiu Declare လuပ#မယ#ဆiuရင# Array မH+ အသuB$Cပuမည#6 Type ရယ# Array Sing Cဖစ#တ-6 [] ရယ#၊
Variable Name ကiu eရ$သ+$eပ$ရပ3မယ#။ အထက#ပ3အတiuင#$ int [] array လiueရ$သ+$ထ+$ရင# int ဆiuတ+ Array
ကiu အသuB$Cပuမည#6 Type Cဖစ#Kပ?$ array ဆiuတ+က Variable Name Cဖစ#ပ3တယ#။

Array ကiu eရ$တ-6 eနရ+မH+ int [] array လiuလ- eရ$သ+$Aiuင#သလiu int array [] လiuလ- eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။
အထက#ပ3အတiuင#$ Array ကiu Declare လuပ#မယ#ဆiuရင# {1,2,3,4,5} န-9တiuက#Uiuက# အစ+$ထiu$ eရ$သ+$Aiuင#eသ+#လ-
Array ကiu Declare လuပ#Kပ?$တ-6 အခ3ကGမH Assign လuပ#တ-6 Statement eတ&မH+ဆiuရင#eတ+6 eရ$သ+$လiuရမH+ မဟuတ#
ပ3ဘO$။

int [] array;
array = {1,2,3,4,5};

အထက#ပ3အတiuင#$ Assignment Statement eတ&ကiu eရ$သ+$လiu မရAiuင#ပ3ဘO$။ eရ$သ+$မယ#ဆiuရင# eအ+က#ပ3


အတiuင#$ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

int [] array;
array = new int[] {1,2,3,4,5};

တကယ#eတ+6 new int[] {1,2,3,4,5} လiueရ$တ+က Array Object ကiu Instantiate လuပ#တ-6 eရ$သ+$ပuBအမHန# Cဖစ#ပ3
တယ#။ Java မH+က Declaration Statement eတ&မH+ အလ&ယ#eရ$သ+$Aiuင#eအ+င# {1,2,3,4,5} ကiu Short Cut
အeနန-9 Cပင#eပ$ထ+$တ+Cဖစ#Kပ?$ Declaration Statement eတ&မH+ပ- eရ$သ+$လiuရမH+ Cဖစ#ပ3တယ#။

Learning Java 60 မင#$လ&င#


Java Developer Class

eန"က%မ: Program ထ/ကeန Element eတ3ကiu Set လuပ%လiuတ/0 အခ,


တစ#ခ3တစ#eလကGရင# Array ထ-မH+ ဘ+eတ&Qieနမယ#ဆiuတ+ PကiuKပ?$သiမeနပ- User Input eတ&ကeန ရယOလ+တ-6
Data eတ&ကiu Array ထ-မH+ သiမ#$ထ+$လiuတ-6 အခ3မGiu$eတ& Qiတတ#ပ3တယ#။ အ-6ဒ?လiuအခ3မGiu$eတ&မH+ Array Object ကiu
Pကiueဆ+က#ထ+$ဖiuလiuအပ#ပ3တယ#။

တစ#ခu သတiထ+$ရမH+က Array Object ကiu တည#eဆ+က#လiuတ-6အခ3မGiu$မH+ Element ဘယ#AHစ#လuB$ကiu အသuB$Cပuမယ#


ဆiuတ+ကiu PကiuKပ?$ သတ#မHတ#ထ+$ဖiuလiuအပ#ပ3တယ#။

int [] array = new int [5];

String 10 ခuကiu အသuB$CပuခGင#တ-6 Array မGiu$ဆiuရင# eအ+က#ပ3 အတiuင#$eရ$သ+$ရပ3မယ#။

String [] array = new String [10];

Array မH+ Java Language မH+ပ3တ-6 Data Type eတ&သ+မက မiမiကiuယ#တiuင#eရ$သ+$ထ+$တ-6 Custom Object
eတ&ကiuလ- Type အeနန-9 အသuB$CပuAiuင#ပ3တယ#။ Student Type eတ&ကiu Array မH+ အသuB$CပuခGင#တယ#ဆiuရင#လ-
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

public class ArrayDemo {

public static void main(String[] args) {

int array [] = new int[3];

Student [] students = new Student[3];

}
}

class Student {
String name;
int age;
}

အထက#နမOန+ထ-မH+လiu new int[10] လiueရ$လiuက#တ+န-9 int ရ-I Default တန#ဖiu$န-9 {0, 0, 0} ကiu တည#eဆ+က#သ&+$
မH+ Cဖစ#Kပ?$ new Student[3] လiueရ$လiuက#တ+န-9 {null, null, null} ဆiuKပ?$ Array Object ကiuတည#eဆ+က#eပ$မH+
Cဖစ#ပ3တယ#။ students Array ထ-မH+ Student Object ၃ ခuကiu သiမ#$eပ$ထ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 61 မင#$လ&င#


Java Developer Class

Accessing Array Elements


Array Object eတ&ဟ+ Element eတ&ကiu Index Number eတ&န-9 သတ#မHတ#Kပ?$ သiမ#$eပ$ထ+$Aiuင#မH+ Cဖစ#တယ#။
Array eတ&ကiu အသuB$Cပuမယ#ဆiuရင# Array ထ-ကiu Element eတ& ထည#6Kပ?$ သiမ#$ထ+$တတ#ဖiuလiuအပ#သလiu Array ထ-
မH+ သiမ#$ထ+$တ-6 Element eတ&ကiuလ- Cပန#Kပ?$ eခ2ယO အသuB$Cပuတတ#ဖiuလiuအပ#ပ3တယ#။

Array ထ-မH+ Element eတ&ကiu သiမ#$ထ+$မယ#ဆiuရင#လ- Index Number eတ&န-9 သiမ#$ထ+$ဖiuလiuအပ#သလiu Cပန#Kပ?$
eခ2ယOမယ#ဆiuရင#လ- Index Number န-9 Cပန#Kပ?$eခ2ယO အသuB$CပuရမH+ Cဖစ#ပ3တယ#။

public class ArrayDemo {

public static void main(String[] args) {

Student [] students = new Student[3];

students[0] = new Student("Aung Aung", 20);


students[1] = new Student("Maung Maung", 21);
students[2] = new Student("Thidar", 25);
}
}

class Student {
String name;
int age;

public Student(String name, int age) {


this.name = name;
this.age = age;
}
}

Array ကiu Declare လuပ#စT# Type မGiu$ဆiuပ3က Array ထ-မH+ လ+Kပ?$ သiမ#$ထ+$Aiuင#မH+ Cဖစ#ပ3တယ#။ Student []
students လiu Declare လuပ#ထ+$တ-6 အတ&က# students Array ထ-မH+ Student Object eတ&န-9 Student Class ရ-I
Sub Class Object eတ&ဆiuရင# လ+Kပ?$ သiမ#$ထ+$လiuရပ3မယ#။

တဖန# Array ကiu Object eဆ+က#ထ+$သeလ+က# အeရအတ&က# သiမ#$eပ$ထ+$Aiuင#မH+ Cဖစ#တယ#။ new Student
[3] လiueရ$ထ+$တ-6 အတ&က# Array မH+ အခန#$ ၃ ခန#$ပiuင#Kပ?$ Student Object ၃ ခuသiမ#$eပ$ထ+$Aiuင#မH+ Cဖစ#ပ3တယ#။
Array ရ-I Index Number ဟ+ 0 ကeန စတ+Cဖစ#တ-6 အတ&က# student[0] ဆiuKပ?$ eရ$မယ#ဆiuရင# e^ဆuB$အခန#$မH+
Student Object တစ#ခuကiu လ+သiမ#$မH+ Cဖစ#ပ3တယ#။

တကယ#လiu Qiတ-6 အခန#$ထက#eကG+#Kပ?$ Array ကiu Access လuပ#မiရင# ArrayIndexOutOfBoundsException ကiu


Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ students[-1] တiu students[3] တiuကiu Access လuပ#ရင# အထက#ပ3 Exception ကiu Cဖစ#
eပ2eစမH+ပ- Cဖစ#ပ3တယ#။

Learning Java 62 မင#$လ&င#


Java Developer Class

public class ArrayDemo {

public static void main(String[] args) {

Student [] students = new Student[3];

students[0] = new Student("Aung Aung", 20);


students[1] = new Student("Maung Maung", 21);
students[2] = new Student("Thidar", 25);

Student firstStudent = students[0];


System.out.println(firstStudent.name);

Student secondStudent = students[1];


System.out.println(secondStudent.name);

Student lastStudent = students[2];


System.out.println(lastStudent.name);
}
}

class Student {
String name;
int age;

public Student(String name, int age) {


this.name = name;
this.age = age;
}
}

အထက#ပ3အတiuင#$ Array ထ-က Element eတ&ကiu Cပန#ယOခGင#တယ#ဆiuရင#လ- သiမ#$ထ+$တ-6 index number န-9ပ- Cပန#
Kပ?$ eခ2ယOရမH+ Cဖစ#ပ3တယ#။ students[0] ဆiuရင# Array ထ-က ပထမဆuB$ Student ကiu ရQiAiuင#Kပ?$ students[1] ဆiu
ရင# ဒuတiယ Student Object ကiuရQiမH+ Cဖစ#ပ3တယ#။ students[2] ဆiuရင#eတ+6 eန+က#ဆuB$ Student ကiuရQiAiuင#မH+
Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+လ- မQiတ-6 index န-9 Access လuပ#မiမယ#ဆiuရင# ArrayIndexOutOfBoundsException ကiu Cဖစ#ပ&+$eစမH+


Cဖစ#ပ3တယ#။


Learning Java 63 မင#$လ&င#


Java Developer Class

Multi Dimension Arrays


Array ဆiuတ+က Java Data eတ&ကiu တစ#ခuထက#မက အစ?အစT#လiuက# သiမ#$eပ$ထ+$Aiuင#တ-6 Container Object
တစ#မGiu$Cဖစ#ပ3တယ#။ Multi Dimension Array ဆiuတ+က Array Object eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6 Array
Object တစ#မGiu$သ+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Multi Dimension Array ထ-မH+ အCခ+$eသ+ Array Object eတ&ကiu
သiမ#$eပ$ထ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Multi Dimension Array ကiu ဘယ%လiu Declare လuပ%ရလ/


Multi Dimension Array အမGiu$အစ+$ Variable တစ#ခuကiu eရ$သ+$ အသuB$Cပuလiuတ-6 အခ3မH+ Variable ကiu Declare
လuပ#တတ#ဖiuလiuပ3တယ#။ Multi Dimension Array ဆiuတ+ Array eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6 Array Cဖစ#တ-6
အတ&က# အသuB$မCပuခင# ဘယ#လiu အမGiu$အစ+$ Array ကiu အသuB$CပuမH+လ- ဆiuတ+ကiu သiထ+$ဖiuလiuပ3တယ#။

ဆiuFကပ3စiu၊ int array eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6 Multi Dimension Array မGiu$၊ ဒ3မHမဟuတ# String Array eတ&ကiu
သiမ#$eပ$ထ+$Aiuင#တ-6 Array မGiu$ဆiuKပ?$ သiQieနဖiuလiuအပ#ပ3တယ#။

int [][] array; // Array of int array


String [][] strArray; // Array of String Array

သ+မန# Array eတ&ကiu eရ$ခ-6တuန#$ကလiu ဘယ#လiuအမGiu$အစ+$ Array ဆiuတ+ကiu သiဖiuလiuအပ#Kပ?$၊ အ-6ဒ? Type ကiu
e^ဆuB$မH+ eရ$eပ$ရပ3မယ#။ Kပ?$ရင# Array Sign Cဖစ#တ-6 [] ကiu အသuB$Cပuလiuသeလ+က# eရ$သ+$eပ$ရပ3မယ#။ Two
Dimension ဆiuရင# [][] လiueရ$Kပ?$ Three Dimension ဆiuရင#eတ+6 [][][] လiu eရ$သ+$eပ$ရပ3မယ#။ Kပ?$က+မH
Identifier Cဖစ#တ-6 Variable Name ကiu eရ$သ+$ရမH+ပ3။

ဒ3eပမ-6 Multi Dimension Array ကiu Declare လuပ#တ-6 eနရ+မH+ eအ+က#ပ3အတiuင#$ eရ$သ+$ရင#လ- Compile
Error Cဖစ#မH+ မဟuတ#ပ3ဘO$။

int [][] array;


int array [][];
int [] array [];

Identifier Cဖစ#တ-6 Array Name ကiu Array Sign eတ&ရ-I e^မH+eက+၊ eန+က#မH+eက+၊ Fက+$မH+ပ3 eရ$သ+eဖ2CပAiuင#
မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 Appication တစ#ခuထ-မH+ ဟiuလiueရ$လiuက# ဒ?လiueရ$လiuက#ဟ+ eက+င#$တ-6 အကGင#6 တစ#ခu
မဟuတ#ပ3ဘO$။ Application တစ#ခuကiu eရ$သ+$တ-6 eနရ+မH+ မiမiတစ#eယ+က#ထ- eရ$သ+$eနတ+မဟuတ#ပ- အCခ+$သO
eတ&ပ3 ပ3ဝင#eရ$သ+$eနAiuင#တယ#ဆiuတ+ကiu သတiထ+$သင#6ပ3တယ#။

ဒ36eFက+င#6 ဖတ#ရလ&ယ#Kပ?$ န+$လည#ရလ&ယ#ကOeအ+င# အKမ-သတiထ+$Kပ?$ eရ$သ+$သင#6ပ3တယ#။

Learning Java 64 မင#$လ&င#


Java Developer Class

ဘယ%လiu Instantiate လuပ%>ကမလ/


Instantiate လuပ#တယ#ဆiuတ+က Object eဆ+က#တ+ကiu eCပ+တ+ပ3။ ဒ?eနရ+မH+ Multi Dimension Array တစ#ခu
ကiu ဘယ#လiu Object eဆ+က#Fကမလ-ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။ Array eတ&ကiu eလ6လ+ခ-6တuန#$ကလiuပ3ပ-၊
Object တည#eဆ+က#လiuတ-6 အခ3မH+ ပ3ဝင#မ-6 Element eတ&ကiu PကiuKပ?$ သiထ+$Aiuင#သလiu၊ မသiထ+$Aiuင#တ-6 အခ3မGiu$လ-
Qiပ3လiမ#6မယ#။ အရင#ဆuB$ ပ3ဝင#မည#6 Element eတ&ကiu Pကiuသiထ+$ရင# ဘယ#လiu Instantiate လuပ#မယ#ဆiuတ+ကiu
eလ6လ+Fကည#6Fကရeအ+င#။

int [][] array = {{1,2}, {3,4}};

အထက#ပ3အတiuင#$ eရ$သ+$ထ+$တ+ဟ+ int array eတ&ကiuသiမ#$ထ+$Aiuင#တ-6 array Object တစ#ခiuကiu အရင#ဆuB$


Declare လuပ#ပ3တယ#။ Kပ?$မH {1,2} ပ3တ-6 int Array န-9 {3,4} ပ3တ-6 int Array ကiu အသuB$CပuKပ?$ int Array eတ&ကiu
သiမ#$ထ+$Aiuင#တ-6 Array Object တစ#ခuကiu တည#eဆ+က#သ&+$တ+Cဖစ#ပ3တယ#။

int [][] array = {{1,2}, {3,4,5}};

အထက#ပ3ကuဒ#ကiu Fကည#6Fကည#6ရeအ+င#။ Multi Dimension Array eနရ+ကiu Dimension မတOတ-6 Array eတ&န-9
လ+Kပ?$ အစ+$ထiu$eနပ3တယ#။ ဒ3eပမ-6 ဒ?လiueရ$ထ+$ရင#လ- မH+$မH+မဟuတ#ပ3ဘO$။ Java မH+ အသuB$Cပueနတ-6 Array ဟ+
C တiu C++ တiuမH+ အသuB$Cပueနတ-6 Array န-9 မတOပ- Object တစ#ခuသ+ Cဖစ#တ-6 အတ&က# Int Array Cဖစ#မယ#ဆiuရင#
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ Dimension eတ&ဆiuတ+ထက# Int အမGiu$အစ+$ Array eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6
Array eတ&လiu Cမင#တ+eက+င#$ပ3မယ#။

Array ထ-မH+ ပ3မည#6 Element eတ&ကiu PကiuKပ?$ မသiထ+$တ-6 အခ3မGiu$မH+ ဆiuရင#လ- eအ+က#ပ3အတiuင#$ Array Object
မGiu$ကiu တည#eဆ+က#Aiuင#ပ3မယ#။

int [][] array1 = new int[2][3];


int [][] array2 = new int[2][];

အထက#ပ3အတiuင#$ new int[2][3] ဆiuKပ?$ Initialize လuပ#မယ#ဆiuရင# {{0,0,0}, {0,0,0}} ဆiuKပ?$ Array Object ကiu
တည#eဆ+က#သ&+$မH+ Cဖစ#ပ3တယ#။ တဖန# new int[2][] လiu eရ$မယ#ဆiuရင#လ- Cဖစ#ပ3တယ#။ ဒ?အတiuင#$ eရ$သ+$ထ+$
မယ#ဆiuရင#eတ+6 {null, null} ဆiuKပ?$ Array Object ကiu တည#eဆ+က#သ&+$ပ3မယ#။

Int [2][] လiueရ$ထ+$တ+က int [] ၂ ခuပ3တ-6 Array Object လiu eဖ2Cပeနတ+Cဖစ#ပ3တယ#။ int [2][] လiueရ$ထ+$တ-6
အတ&က# အထ-မH+ပ3တ-6 Array ကiu Initialize မလuပ#Aiuင#ပ3ဘO$။ Array ဆiuတ+လ- Object Cဖစ#တ-6 အတ&က# Object ရ-I
Default တန#ဖiu$Cဖစ#တ-6 null eတ&န-9 Object ကiu တည#eဆ+က#သ&+$တ+ Cဖစ#ပ3တယ#။

Multi Dimension Array ကiu ဘယ#လiueဆ+က#ရမလ-ဆiuတ+ကiu eလ6လ+Kပ?$တ-6 eန+က#မH+ Array ထ-က Element
eတ&ကiu ဘယ#လiu Access လuပ#Fကမယ#ဆiuတ+ကiu ဆက#လက# eလ6လ+သ&+$Fကရeအ+င#။

Learning Java 65 မင#$လ&င#


Java Developer Class

Multi Dimension Array Member eတ3ကiu ဘယ%လiu Access လuပ%မ:"လ/


Member eတ&ကiu Access လuပ#တယ#လiu eCပ+တ-6 eနရ+မH+ Member eတ&ကiu Asign လuပ#တ+လ-ပ3သလiu၊ Member
eတ&ရ-I တန#ဖiu$ကiu ရယOတ+လ- ပ3ပ3တယ#။ သ+မန# Array eတ&တuန#$လiuပ- Multi Dimension Array eတ&ရ-I Member
eတ&ကiu Access လuပ#တ-6 eနရ+မH+ index Number ကiu အသuB$CပuKပ?$ Access လuပ#ရမH+ Cဖစ#ပ3တယ#။

jshell> int [][] array = {{1,2},{3,4}}


array ==> int[2][] { int[2] { 1, 2 }, int[2] { 3, 4 } }

jshell> int a = array[0][0]


a ==> 1

jshell> int b = array[0][1]


b ==> 2

jshell> int c = array[0][2]


| java.lang.ArrayIndexOutOfBoundsException thrown: 2
| at (#5:1)

အထက#ပ3အတiuင#$ Multi Dimension Array တစ#ခuကiu jshell ကiu အသuB$CပuKပ?$ တည#eဆ+က#Fကည#6ပ3မယ#။ အထက#
နမOန+ပ3 int [][] array ဟ+ int [] eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6 Array တစ#မGiu$သ+$Cဖစ#ပ3တယ#။ array ထ-မH+ int []
eတ& Cဖစ#Fကတ-6 {1,2} န-9 {3,4} ကiu သiမ#$eပ$ထ+$ပ3တယ#။

ဒ36eFက+င#6 array [0][0] လiueCပ+ရင# e^ဆuB$ Array ထ-က ပထမဆuB$eနရ+မH+ Qiတ-6 1 ကiu ရQiမH+ Cဖစ#ပ3တယ#။ တဖန#
array[0][1] လiueဖ2Cပရင# e^ဆuB$ Array ထ-က ဒuတiယeနရ+မH+Qiတ-6 2 ကiu ရQiမH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 array[0][2]
လiueရ$လiuက#တ-6အခ3မH+ e^ဆuB$ Array ရ-I တတiယeနရ+ဟ+ မQiတ-6 အတ&က#
ArrayIndexOutOfBoundsException ကiu Cဖစ#eပ2eစတ+ Cဖစ#ပ3တယ#။ သ+မန# Array eတ&တuန#$ကလiuပ- မQiတ-6
Index Number ကiu Access လuပ#မiရင# ArrayIndexOutOfBoundsException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

jshell> array[0][0] = 10
$6 ==> 10

jshell> a = array[0][0]
a ==> 10

jshell> array[0][2] = 15
| java.lang.ArrayIndexOutOfBoundsException thrown: 2
| at (#9:1)

Multi Dimension Array ထ-မH+Qiတ-6 တန#ဖiu$ကiu Assign လuပ#လiuတ-6 အခ3မGiu$မH+လ- Index Number eတ&ကiuပ-
အသuB$CပuရမH+ Cဖစ#ပ3တယ#။ array[0][0] = 10 လiueရ$Kပ?$ Cပန#Fကည#6တ-6အခ3မH+ တန#ဖiu$ဟ+ 10 ကiu eCပ+င#$သ&+$တ+ကiu
eတ&Jရပ3မယ#။ မQiတ-6 Index ကiu အသuB$Cပuမiရင#လ- ArrayIndexOutOfBoundsException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3
တယ#။

Learning Java 66 မင#$လ&င#


Java Developer Class
Multi Dimension Array ထ-က တန#ဖiu$eတ&လiueCပ+တ-6eနရ+မH+ eအ+က#ဆuB$ Element အထi Access လuပ#Aiuင#
သလiu Array eတ&ကiuလ- Cပန#Kပ?$ Access လuပ#Aiuင#ပ3တယ#။

jshell> int [] array2 = array[1]


array2 ==> int[2] { 3, 4 }

jshell> array[0] = new int[]{30,40}


$11 ==> int[2] { 30, 40 }

jshell> array
array ==> int[2][] { int[2] { 30, 40 }, int[2] { 3, 4 } }

အထက#ပ3အတiuင#$ Multi Dimension Array ကiu First Level Index ကiu အသuB$CပuKပ?$ Access လuပ#မယ#ဆiuရင# အ-6ဒ?
Array ထ-မH+ သiမ#$eပ$ထ+$တ-6 Array ကiu Cပန#လည#ရQiAiuင#မH+ Cဖစ#ပ3တယ#။ array[1] ဆiuKပ?$ Access လuပ#ရင# ဒuတiယ
eနရ+မH+ Qiတ-6 Array Object ကiu Cပန#လည#ရQiမH+ Cဖစ#ပ3တယ#။ အ-6ဒ?အတiuင#$ပ- array[0] ရ-Ieနရ+ကiu အCခ+$ int
Array တစ#ခuန-9 အစ+$ထiu$Aiuင#မH+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6 Type မတOရင#eတ+6 Asign လuပ#တ+eက+ Reference လuပ#တ+eက+ လuပ#လiuရမH+ မဟuတ#ပ3ဘO$။ array
variable ရ-I type ကiu int [][] လiu Declare လuပ#ထ+$တ-6 အတ&က# First Level Element ဟ+ int [] ပ- Cဖစ#eနမH+ Cဖစ#
ပ3တယ#။ Kပ?$eတ+6 Second Level Element ရ-I type ဟ+လ- int ပ-Cဖစ#ရပ3မယ#။

jshell> int data = array[0]


| Error:
| incompatible types: int[] cannot be converted to int
| int data = array[0];
| ^------^

jshell> array[1] = 10
| Error:
| incompatible types: int cannot be converted to int[]
| array[1] = 10
| ^^

အထက#ပ3အတiuင#$ int data eနရ+မH+ array[0] န-9 အစ+$ထiu$လiuမရပ3ဘO$။ အစ+$ထiu$ခGင#တ-6 data ရ-I type ဟ+ int
Cဖစ#Kပ?$ array[0] လiueCပ+ရင# ရQiAiuင#မည#6 type ဟ+ int [] Cဖစ#eနတ-6 အတ&က#Cဖစ#ပ3တယ#။ တဖန# array [1] eနရ+ကiu
လ- 10 ဆ?uတ-6 တန#ဖiu$န-9 အစ+$ထiu$လiu မရAiuင#ပ3ဘO$။ ဘ+လiuလ- ဆiueတ+6 array[1] ဟ+ int [] Cဖစ#Kပ?$ 10 ဟ+ int Cဖစ#
တ-6 အတ&က# Cဖစ#ပ3တယ#။

Java Programming Language မH+က Variable တစ#ခuကiu Declare လuပ#ခ-6တ-6 Type န-9 မတOတ-6 တန#ဖiu$eတ&ကiu
အစ+$ထiu$လiu မရAiuင#ပ3ဘO$။


Learning Java 67 မင#$လ&င#


Java Developer Class

Operators
က\န#eတ+#တiu e^ခန#$eတ&မH+ Class eတ&၊ Variable eတ&၊ Method eတ&န-9 Java မH+ အသuB$CပuAiuင#တ-6 Data Type
eတ&အeFက+င#$eလ6လ+ခ-6Fကပ3တယ#။ ဒ?တစ#eခ3က#eတ+6 Variable eတ&န-9 တ&-Kပ?$ eရ$သ+$Aiuင#တ-6 Operator eတ&န-9
Expression eတ& အeFက+င#$ကiu eလ6လ+Fကပ3မယ#။

Operator ဆiuတ+ကeတ+6 Variable eတ&ကiu ဘ+လuပ#မH+လ-ဆiuတ+ကiu eဖ2Cပeပ$Aiuင#တ-6 အရ+eတ&Cဖစ#Kပ?$eတ+6


Expression ဆiuတ+ကeတ+6 Variable eတ&န-9 Operator eတ&ကiu အသuB$CပuKပ?$ eရ$သ+$ရမည#6 eဖ2CပခGက#eတ& Cဖစ#
Fကပ3တယ#။ JVM က Expression eတ&ကiu န+$လည#Kပ?$ OS ကeန တဆင#6 Computer ကiu လuပ#eဆ+င#မ[eတ&ကiu
opန#Fက+$ခGက#eတ& eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

ဆiuFကပ3စiuဗG+။ Variable a န-9 Variable b တiuကiu eပ3င#$eစခGင#တယ#ဆiuရင# eပ3င#$ပ3ဆiuတ+ကiu Operator န-9 eဖ2Cပeပ$
ရမH+ Cဖစ#တယ#။ တဖန# Variable တစ#ခuဟ+ Type တစ#ခuရ-I Object Cဖစ#ရ-Iလ+$ဆiuတ+ကiu စစ#ခGင#တယ#၊ Variable
eတ&ကiu တစ#တiu$တ+တiu တစ#A[တ#တ+တiu လuပ#ခGင#တယ#၊ eန+က#Kပ?$ Variable AHစ#ခuရ-I တန#ဖiu$ဟ+ တOမတO စစ#eဆ$
ခGင#တယ#၊ Variable eတ&ကiu အသuB$CပuKပ?$ Logic eတ&ကiu စစ#eဆ$ခGင#တယ#၊ Variable AHစ#ခuဘယ#သOPက?$လ- ငယ#
လ-ဆiuတ+ကiu သiခGင#တယ#၊ ဒ?လiuအခ3မGiu$eတ&မH+ Operator eတ&ကiu အသuB$CပuရမH+ Cဖစ#ပ3တယ#။

Java ဘ+သ+ရပ#မH+ အသuB$CပuAiuင#တ-6 Operators eတ&ကeတ+6 eအ+က#ပ3 အတiuင#$Cဖစ#Fကပ3တယ#။

Operator Type Operators Description

Assignment =, +=, -=, *=, /= Variable မG+$အ+$ အစ+$ထiu$ရ+တ&င# အသuB$Cပu

Primitive Variable မG+$အ+$ အeပ3င#၊ အAuတ#၊


Arithmetic +, -, *, /, %, ++, - - အeCမq+က#၊ အစ+$၊ အrကင#$Q+ ရ+တ&င# အသuB$Cပu

Relational <, <=, >, >=, !=, == Primitive Variable မG+$အ+$ Ai[င#$ယHT#ရ+တ&င# အသuB$Cပu

Primitive Variables မG+$ NOT, AND, OR, XOR


Logical !, &, &&, |, ||, ^ Logic မG+$အ+$ အသuB$CပuAiuင#

Bitwise Operator ဆiuတ+Qiပ3eသ$တယ#။ ဒ3eပမ-6 Binary တန#ဖiu$eတ&ကiuတ&က#ခGက#တ-6 eနရ+မH+ အသuB$Cပuတ+ပ3။


ဒ3eပမ-6 Business Application eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ သiပ#Kပ?$ မသuB$တ-6 အတ&က# ဒ?စ+အuပ#ထ-မH+eတ+6 ထည#6
မeရ$eတ+6ပ3ဘO$။


Learning Java 68 မင#$လ&င#


Java Developer Class

Assignment Operator
Assignment Operator eတ&ကeတ+6 Variable eနရ+မH+ အစ+$ထiu$eပ$Aiuင#တ-6 Operator မG+$Cဖစ#Fကပ3တယ#။
သ+မန# “=“ တစ#ခuကiu အသuB$CပuKပ?$ eရ$သ+$Aiuင#သလiu အCခ+$eသ+ Arithmetic Operator eတ&န-9လ- တ&-ဖက#Kပ?$
eရ$သ+$Aiuင#ပ3တယ#။

Assignment in Primitive Type Variables


= Assignment Operator eတ&ကiueတ+6 Primitive Variable eတ&ကiueရ+ Reference Variable eတ&မH+ပ3
အစ+$ထiu$တ-6 eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#။ ဒ3eပမ-6 Variable Type အeပ2မOတည#Kပ?$ လuပ#eဆ+င#ပuBခGင#$ မတOည?Fက
ပ3ဘO$။

jshell> int a
a ==> 0

jshell> a = 10
a ==> 10

jshell> int b = a
b ==> 10

jshell> a = 15
a ==> 15

jshell> b
b ==> 10

အထက#ပ3အတiuင#$ JShell န-9 eရ$သ+$ထ+$တ-6 Code Snippet eတ&ကiu eလ6လ+Fကည#6Fကရeအ+င#။ အရင#ဆuB$ int a
ဆiuKပ?$ Variable တစ#ခuကiu Declare လuပ#ပ3တယ#။ Primitive Type Variable တစ#ခuပ3။

ထiueန+က# a = 10 လiueရ$ထ+$ပ3တယ#။ a variable ရ-I တန#ဖiu$ကiu 10 န-9 အစ+$ထiu$တ+Cဖစ#ပ3တယ#။ a ရ-I တန#ဖiu$ဟ+


10 Cဖစ#သ&+$ပ3မယ#။ တဖန# int b = a လiu eရ$ထ+$တ+ကiu eတ&Jရပ3မယ#။ ဒ?စ+eFက+င#$ဟ+ int type variable b ရ-Iတ
ဖiu$ကiu a ရ-I တန#ဖiu$န-9 အစ+$ထiu$eနတ+ Cဖစ#ပ3တယ#။ ဒ?eနရ+မH+ a ရ-I တန#ဖiu$ဟ+ 10 Cဖစ#တ-6 အတ&က# b ရ-I တန#ဖiu$ဟ+
လ- 10 Cဖစ#သ&+$ပ3မယ#။

တဖန# a = 15 ဆiuKပ?$ အစ+$ထiu$Cပန#တယ#။ ဒ?eနရ+မH+ a ရ-I တန#ဖiu$သ+ eCပ+င#$သ&+$မH+ Cဖစ#ပ3တယ#။ b eနရ+ကiu a


က အစ+$ထiu$ထ+$လiuဆiuKပ?$ b ရ-I တန#ဖiu$ဟ+ လiuက#မeCပ+င#$သ&+$ပ3ဘO$။ b ရ-I တန#ဖiu$ဟ+ နဂiuမOလအတiuင#$ 10 ပ- Cဖစ#
eနမH+ Cဖစ#ပ3တယ#။ Primitive Type Variable eတ&မH+ Assignment eတ&ကiu လuပ#တ-6 အခ3မH+ Actual Value ကiu
အစ+$ထiu$Fကတ+ Cဖစ#တ-6 အတ&က# Cဖစ#ပ3တယ#။

ဆက#လက#Kပ?$ Reference Type Variable eတ&ကiu Assign လuပ#တ+ကiu eလ6လ+Fကည#6Fကရeအ+င#။

Learning Java 69 မင#$လ&င#


Java Developer Class

Assignment in Reference Type Variables


Assignment Operator Cဖစ#တ-6 = ကiu Reference Type Variable eတ&ကiu အစ+$ထiu$တ-6 eနရ+မH+လ- အသuB$CပuAiuင#
မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 Reference Type eတ&ရ-I အစ+$ထiu$ပuBက Primitive Type eတ&န-9 မတOပ3ဘO$။ Primitive
Type Variable eတ&မH+ Actual Value ကiu အစ+$ထiu$တ+မHန#eပမ-6 Reference Type Variable eတ&မH+eတ+6
Variable ကeန Reference လuပ#မ-6 Object ရ-I Memory Address ကiuသ+ အစ+$လ+ထiu$မH+ Cဖစ#ပ3တယ#။

Variable မH+လ+အစ+$ထiu$ထ+$တ-6 Memory Address ကeန တဆင#6 Object eတ&ကiu Reference လuပ#Kပ?$
အသuB$Cပueနတ+ Cဖစ#တ-6 အတ&က# Reference Variable eတ&လiu eခ2ခ-6FကCခင#$လ- Cဖစ#ပ3တယ#။
အထက#ပ3နမOန+မH+ အရင#ဆuB$ String Type Variable တစ#ခuပ3တ-6 Person Class ကiu တည#eဆ+က#ပ3တယ#။ Kပ?$
eတ+6မH Person Type Variable Cဖစ#တ-6 thidar ဆiuတ-6 eနရ+မH+ new Person() ဆiuKပ?$ Person Object ကiu
တည#eဆ+က#Kပ?$eတ+6 Assign လuပ#eနပ3တယ#။ ဒ?eနရ+မH+ Person Type ဟ+ Reference Type Cဖစ#တ-6 အတ&က#
new Person() လiu Object ကiu Heap Memory eပ2မH+တည#eဆ+က#Kပ?$ အ-6ဒ? Object ရ-I Memory Address ကiu
thidar eနရ+မH+ အစ+$ထiu$eနတ+ Cဖစ#ပ3တယ#။

jshell> class Person {


...> String name;
...> }
| created class Person

jshell> Person thidar = new Person();


thidar ==> Person@6fd02e5

jshell> thidar.name = "Thidar"


$3 ==> "Thidar"

jshell> Person nilar = thidar;


nilar ==> Person@6fd02e5

jshell> nilar.name = "Nilar"


$5 ==> "Nilar"

jshell> thidar.name
$6 ==> "Nilar"

jshell> nilar.name
$7 ==> "Nilar"

တဖန# Person nilar = thidar လiueရ$ထ+$တ+ကလ- Assignment Operator ကiu အသuB$CပuKပ?$ nilar eနရ+ကiu
thidar ရ-I တန#ဖiu$န-9 အစ+$ထiu$eနCပန#တယ#။ ဒ?eနရ+မH+ thidar မH+Qieနတ-6 တန#ဖiu$ဟ+ Person Object ကiu
Reference လuပ#Aiuင#တ-6 Memory Address ကiuပ- nilar eနရ+မH+ အစ+$ထiu$သ&+$Cပန#တယ#။ Object တစ#ခuထ-ကiu
Reference Variable AHစ#ခuကeန Reference လuပ#eနတယ#ဆiuတ+ကiu သiQiထ+$သင#6ပ3တယ#။ ဒ36eFက+င#6မiuလiu
nilar.name = “Nilar” လiuအစ+$ထiu$လiuက#တ-6 အခ3မH+ thidar.name ဟ+လ- “Nilar” လiueCပ+င#$သ&+$တ+ Cဖစ#ပ3
တယ#။

Learning Java 70 မင#$လ&င#


Java Developer Class
Primitive Type Variable eတ&ကiu Assign လuပ#တ-6အခ3မH+ Actual Value ကiu အစ+$ထiu$Kပ?$ Reference Type
Variable eတ&ကiu Assign လuပ#တ-6အခ3မH+ Heap Memory eပ2မH+Qiတ-6 Object ကiu Reference လuပ#Aiuင#တ-6
Memory Address ကiuသ+ အစ+$ထiu$သ&+$တယ#ဆiuတ+ကiu သiQiထ+$ဖiuလiuအပ#ပ3တယ#။

Assignment Operators Cဖစ#တ-6 = န-9 Arithmetic Operators eတ&န-9 တ&-ဖက#Kပ?$လ- အသuB$CပuAiuင#ပ3တယ#။ ဒ?


အeFက+င#$ကiueတ+6 Arithmetic Operators eတ&အခန#$မH+ eဖ2Cပသ&+$ပ3မယ#။

Arithmetic Operators
Number အမGiu$အစ+$ Primitive Type Variable eတ&ကiu အသuB$CပuKပ?$ သခsG+ ပiuင#$ဆiuင#ရ+ တ&က#ခGက#မ[eတ& Cပuလuပ#
လiuတ-6 အခ3မGiu$မH+ Arithmetic Operators eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။ အeပ3င#$၊ အAHတ#၊ အeCမq+က#၊ အစ+$န-9
အrကင#$Q+တ-6 တ&က#ခGက#မ[eတ&ကiu Cပuလuပ#လiuတ-6 အခ3မGiu$မH+ Arithmetic Operators eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

Arithmetic Operators eတ&န-9 အသuB$CပuAiuင#တ-6 Data Type eတ&ကeတ+6 Number အမGiu$အစ+$ Primitive Data
Type eတ&န-9 သOတiuရ-I Wrapper Class eတ&မH+ အသuB$CပuAiuင#ပ3တယ#။ Kပ?$eတ+6 Number အeနန-9 eဖ2CပAiuင#တ-6
Primitive Data Type Cဖစ#တ-6 char type eတ&မH+လ- အသuB$CပuAiuင#ပ3တယ#။ ခ\င#$ခGက#အeနန-9 String Type
Variable eတ&မH+လ- + Operator ကiu အသuB$CပuAiuင#ပ3တယ#။

jshell> int a = 10
a ==> 10

jshell> int b = 20
b ==> 20

jshell> a + b
$3 ==> 30

အထက#ပ3 နမOန+ထ-မH+ အရင#ဆuB$ a eနရ+မH+ 10 ကiu အစ+$ထiu$ပ3တယ#။ Kပ?$eတ+6 b eနရ+မH+ 20 ကiu အစ+$ထiu$ပ3
တယ#။ a + b လiu eရ$လiuက#တ-6 အခ3မH+ 30 ရပ3တယ#။ Number အမGiu$အစ+$ Variable eတ&ရ-I eပ3င#$Cခင#$ကiu +
Operator ကiu အသuB$CပuAiuင#ပ3တယ#။

jshell> char a = 'a' + 'b'


a ==> 'Ã'

jshell> Character c = a
c ==> 'Ã'

jshell> char d = a + c
| Error:
| incompatible types: possible lossy conversion from int to char
| char d = a + c;
| ^---^

Learning Java 71 မင#$လ&င#


Java Developer Class
အထက#ပ3 နမOန+ကuဒ#ထ-မH+လiu Number တန#ဖiu$အeနန-9 eCပ+င#$Kပ?$ အသuB$CပuAiuင#တ-6 char type eတ&မH+လ- +

jshell> String hello = "Hello"


hello ==> "Hello"

jshell> String java = "Java"


java ==> "Java"

jshell> hello + " " + java


$15 ==> "Hello Java"

Operators eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။ ဒ3eပမ-6 တစ#ခu သတiCပuဖiu လiuအပ#တ+က Wrapper Class Cဖစ#တ-6
Character Class eတ&မH+eတ+6 Arithmetic Operator eတ&ကiu အသuB$Cပuလiu ရမH+ မဟuတ#ပ3ဘO$။
အထက#ပ3 နမOန+ကeတ+6 String Type Variable eတ&Fက+$မH+ + Operator ကiu အသuB$Cပuတ+ပ3။ ခ\င#$ခGက#အeနန-9
Object eတ&မH+ String တစ#ခuထ- + Operator ကiu အသuB$CပuAiuင#တ+ Cဖစ#ပ3တယ#။ + Operator ကiu String Type
Variable eတ&န-9 String Litrals eတ&န-9 ပO$တ&-အသuB$CပuAiuင#ပ3တယ#။ String Value eတ&ကiu ဆက#eပ$တ-6 အeနန-9
အသuB$CပuAiuင#ပ3တယ#။

String Variable hello ရ-I တန#ဖiu$ဟ+ “Hello” Cဖစ#Kပ?$ java ရ-I တန#ဖiu$ဟ+ “Java” Cဖစ#တ-6 အတ&က# hello + “ “ +
java ဆiuတ+ဟ+ “Hello Java” Cဖစ#သ&+$တ+ကiu eတ&Jရပ3မယ#။

ဆက#လက#Kပ?$ String Type Variable န-9 Primitive Type Variable eတ&Fက+$မH+ + Operator ကiu တ&-Kပ?$ အသuB$Cပu
တ-6အခ3မGiu$မH+ ဘယ#လiu လuပ#eဆ+င#သ&+$တယ#ဆiuတ+ကiu eလ6လ+Fကည#6Fကရeအ+င#။

jshell> 10 + "1"
$18 ==> "101"

10 + “1” ရ-I အeCဖဟ+ “101” Cဖစ#ပ3တယ#။ 10 ဟ+ Primitive type အမGiu$အစ+$Cဖစ#တ-6 int Cဖစ#Kပ?$ “1” ဟ+ String
Cဖစ#ပ3တယ#။ Primitive Type တစ#ခuန-9 String တစ#ခuကiu + ကiu အသuB$CပuKပ?$ eရ$သ+$တ-6 အခ3မH+ Primitive ရ-Iတန#ဖiu$
ကiu String တစ#ခuအeနန-9ယOKပ?$ တ&က#ခGက#သ&+$ပ3မယ#။ ဒ36eFက+င#6 “10” + “1” လiuယOKပ?$ အeCဖဟ+ “101” Cဖစ#သ&+$ပ3
မယ#။

jshell> 10 + 1 + "1"
$19 ==> "111"

အထက#ပ3နမOန+ထ-မH+ 10 + 1 + “1” လiu Expression တစ#ခuကiu eရ$ထ+$ပ3တယ#။ 10 န-9 1 တiuဟ+ primitive type
Cဖစစ#Kပ?$ “1” ဟ+ String Cဖစ#ပ3တယ#။ အပ2မH+ပ3ခ-6တ-6 နမOန+ထ-မH+ဆiuရင# String တစ#ခuန-9eပ3င#$ရင# အ+$လuB$ဟ+
String လiueCပ+င#$Kပ?$eပ3င#$Fကတယ#ဆiuတ+ကiu eတ&Jခ-6ရမH+ပ3။ ဒ3eပမ-6 Expression တစ#ခuမH+ Arithmetic Operator
eတ& တစ#ခuထက#မကပ3ဝင#Fကတ-6 အခ3မH+ Operator Precident လiueခ2တ-6 ဦ$စ+$eပ$စT#$စ+$ပuBန-9 ဘယ# Operator
ကiu အရင# Eveluate လuပ#မယ#ဆiuတ+ကiu စ?$မGT#$သတ#မHတ#ထ+$ပ3တယ#။

Operator eတ&တOeနရင#eတ+6 ဘယ#ဘက#မH+Qiတ-6 Operator ကiu အရင# Evaluate လuပ#ပ3တယ#။ ဒ36eFက+င#6 10 န-9 1
ကiu အရင#eပ3င#$Kပ?$ ရလ+တ-6 ရလဒ#Cဖစ#တ-6 11 ကiu “1” န-9 eပ3င#$Kပ?$ “111” လiu အeCဖထ&က#တ+ Cဖစ#ပ3တယ#။

Learning Java 72 မင#$လ&င#


Java Developer Class

jshell> "1" + 10 + 1
$20 ==> "1101"

တကယ#လiu “1” + 10 + 1 လiueရ$ခ-6ရင# အရင#ဆuB$ “1” + 10 ကiu Evaluate လuပ#ပ3မယ#။ ဒ36eFက+င#6 အeCဖဟ+ “101”
Cဖစ#Kပ?$ “101” + 1 ကiu Evaluate လuပ#Kပ?$ ရလဒ#ကeတ+6 “1101” Cဖစ#သ&+$မH+ Cဖစ#ပ3တယ#။

Operator Precedents
Variable eတ&န-9 Operators eတ&ကiuတ&-Kပ?$ eရ$သ+$ထ+$တ+eတ&ကiu Expression လiueခ2ဆiueလ6Qiပ3တယ#။
Expression တစ#ခuမH+ Operator တစ#ခuအထက#မက ပ3ဝင#eလ6Qiပ3တယ#။ Arathematic Operator eတ&ကiu
အသuB$Cပuတ-6eနရ+မH+ Operator တစ#ခuဆiuပ3က Cပဿန+မQiပ3ဘO$။ 


jshell> 10 + 1
$21 ==> 11

jshell> 10 - 5
$22 ==> 5

jshell> 10 * 3
$23 ==> 30

jshell> 10 / 3
$24 ==> 3

jshell> 10 % 3
$25 ==> 1

Operator ရ-I ဘယ#ဘက#န-9 ည+ဘက#မH+Qiတ-6 တန#ဖiu$eတ&ကiu Operator အတiuင#$ တ&က#ထuတ#Kပ?$ အeCဖကiuCပUuBပ3ပ-။


အထက#ပ3အတiuင#$ အeပ3င#$၊ အAHတ#၊ အeCမq+က#၊ အစ+$န-9 အrကင#$Q+တ+ကiu တ&က#ခGက#Kပ?$ eဖ2CပUuBပ3ပ-။ ဒ3eပမ-6
Expression တစ#ခuအတ&င#$မH+ Operator တစ#ခuအထက#မကပ3ဝင#လ+Kပ?ဆiuရင#eတ+6 Java Programming မH+
eတ+6 Operator Precidents အတiuင#$ တ&က#ခGက# လuပ#eဆ+င#သ&+$မH+ Cဖစ#ပ3တယ#။

Multiple Operator Expression eတ&န-9 ပတ#သက#Kပ?$ တOည?တ-6 Operator eတ&Pက?$ဆiuရင#eတ+6 ဘယ#ဘက#ကeန


ည+ဘက#ကiu Evaluate လuပ#သ&+$ပ3မယ#။ ဒ3eပမ-6 ပ3ဝင#တ-6 Operator eတ&မတOရင#eတ+6 Operator Precident
အeပ2မH+ မOတည#Kပ?$ Operator Precident Cမင#6မ+$တ-6 အရ+eတ&ကiu အရင#ဆuB$ Evaluate လuပ#သ&+$ပ3မယ#။

jshell> 5 + 1 * 10
$26 ==> 15

အထက#ပ3 နမOန+ကiu Fကည#6မယ#ဆiuရင# 5 + 1 * 10 လiueရ$ထ+$ပ3တယ#။ ဘယ#ဘက#ကeန ည+ဘက#ကiu Evaluate


လuပ#သ&+$တယ#ဆiuရင# အeCဖက 5 + 1 ကiu အရင# Evaluate လuပ#Kပ?$ ရလ+တ-6 ရလဒ#Cဖစ#တ-6 6 * 10 ဆ?uKပ?$ အeCဖက
60 Cဖစ#သ&+$သင#6ပ3တယ#။

Learning Java 73 မင#$လ&င#


Java Developer Class

ဒ3eပမ-6 1 * 10 ကiu အရင# Evaluate လuပ#Kပ?$ ရလ+တ-6 ရလဒ#Cဖစ#တ-6 10 န-9 5 ကiueပ3င#$သ&+$ပ3တယ#။ ဒ36eFက+င#6 အeCဖ
ဟ+ 15 Cဖစ#သ&+$ပ3တယ#။ Java မH+က အeပ3င#$အA[တ# Operator eတ&ထက# အeCမq+က# အစ+$ Operator eတ&က
ပiuKပ?$ Precident Cမင#6မ+$တ-6 အတ&က# Precident Cမင#6မ+$တ-6 Expression ကeန စKပ?$ Evaluate လuပ#သ&+$တ+ Cဖစ#
ပ3တယ#။

ဆက#လက#Kပ?$ အစ+$န-9 အeCမq+က# Kပ?$eတ+6 အeပ3င#$န-9 အA[တ#ကeက+ Precedent ဘယ#သOPက?$လ-၊ Kပ?$eတ+6 အ-6ဒ?
Operator eတ&ကiu Expression ထ-မH+ eရ+eရ$ရင#ဘယ#လiu Cဖစ#မလ-ဆiuတ+ကiu eလ6လ+Fကည#6Fကရeအ+င#။

jshell> 5 / 2 * 3
$28 ==> 6

jshell> 3 * 5 / 2
$29 ==> 7

အစ+$န-9 အeCမ+က#ဟ+ Operator Precedent အရ အတOတOပ- Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Left to Right Evaluate
လuပ#သ&+$တ+ကiu eတ&JရမH+ Cဖစ#ပ3တယ#။ အeပ2ဆuB$ အeFက+င#$မH+ 5 / 2 * 3 လiueရ$ထ+$ပ3တယ#။ အရင#ဆuB$ 5 ကiu 2
န-9 စ+$Kပ?$ ရလ+တ-6 ရလဒ#Cဖစ#တ-6 2 ကiu 3 န-9 eCမq+က#ပ3တယ#။ ဒ36eFက+င#6 အeCဖဟ+ 6 Cဖစ#သ&+$ပ3တယ#။

eန+က#တစ#eFက+င#$မH+eတ+6 3 * 5 / 2 လiueရ$ထ+$ပ3တယ#။ 3 * 5 ရ-I ရလဒ#ဟ+ 15 Cဖစ#Kပ?$ 15 / 2 ကiu Evaluate


ဆက#လuပ#ပ3တယ#။ ဒ36eFက+င#6 အeCဖဟ+ 7 Cဖစ#သ&+$ပ3တယ#။ အeပ3င#$အA[တ#ဟ+လ- Operator Precedent တOတ-6
အတ&က# ဘယ#ဘက#ကeန ည+ဘက#ကiu Evaluate လuပ#သ&+$FကမH+ Cဖစ#ပ3တယ#။

Assignment Operator န/A တ3/DပE9 အသu<9=ပu=ခင%9


Arithmetic Operator eတ&ကiu Assignment Operator eတ&န-9လ- တ&-ဖက#Kပ?$ eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။
Variable AHစ#ခuအFက+$မH+ += တiuလiu -= တiuလiu Operator eတ&ကiu ပO$တ&-Kပ?$ eရ$သ+$Aiuင#ပ3တယ#။ ဒ?လiueရ$သ+$တ-6
eနရ+မH+ ဘယ#ဘက#မH+ အစ+$ထiu$ခGင#တ-6 Variable ကiueရ$Kပ?$ Operator eတ&ကiu eရ$Kပ?$မH Oponent ကiu eရ$သ+$ရ
မH+ Cဖစ#ပ3တယ#။

jshell> a += 5
$31 ==> 15

jshell> a -= 1
$32 ==> 14

jshell> a *= 2
$33 ==> 28

jshell> a /= 1
$34 ==> 28

jshell> a %= 3
$35 ==> 1

Learning Java 74 မင#$လ&င#


Java Developer Class
အထက#ပ3နမOန+မH+လiu a += 5 လiu eရ$ထ+$ရင# a ရ-I တန#ဖiu$န-9 5 ကiu eပ3င#$Kပ?$မH ရတ-6 တန#ဖiu$န-9 a ကiu အစ+$ထiu$မH+
Cဖစ#ပ3တယ#။ တစ#Cခ+$ Arathmetic Operator eတ&ကiuလ- အလ+$တOeရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

jshell> String str = "Hello "


str ==> "Hello "

jshell> str += "Java"


$37 ==> "Hello Java"

String Type Variable eတ&မH+လ-eပ3င#$Kပ?$ အစ+$ထiu$တ-6 Operator မGiu$ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ str ရ-I
တန#ဖiu$ဟ+ “Hello “ Cဖစ#တ-6 အတ&က# “Java” န-9 eပ3င#$Kပ?$ အစ+$ထiu$လiuက#တ-6 အခ3 str ရ-I တန#ဖiu$ဟ+ “Hello Java”
Cဖစ#သ&+$မH+ Cဖစ#ပ3တယ#။

Relational Operator
Variable AHစ#ခuရ-I တန#ဖiu$eတ&ကiu Ai[င#$ယHT#တ-6eနရ+မGiu$မH+ Relational Operator eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။
Ai[င#$ယHT#တယ#လiu eCပ+တ-6eနရ+မH+ Variable AHစ#ခuဟ+ တOသလ+$ မတOဘO$လ+$၊ Kပ?$eတ+6 ဘယ#သOက Pက?$သလ-
ငယ#သလ- အစQiသCဖင#6 Ai[င#$ယHT#တ+ကiu ဆiuလiuတ+ Cဖစ#ပ3တယ#။

အရင#ဆuB$ တOမတO Ai[င#$ယHT#တ-6 အပiuင#$ကeနစKပ?$ eလ6လ+သ&+$Fကရeအ+င#။ ပuBမHန#အ+$Cဖင#6 a = b လiueရ$ရင# a န-9 b


ဟ+တOတယ#လiuယOဆFကမH+ Cဖစ#eပမ-6 Java မH+eတ+6 a = b ဆiuတ+က a eနရ+ကiu b န-9 အစ+$ထiu$တ+လiu ဆiuလiuပ3
တယ#။ a န-9 b န-9 တOတယ#ဆiuတ+ကiu a == b န-9 eဖ2Cပeလ6Qiပ3တယ#။ Relational Operator eတ&ကiu Variable AHစ#ခu
အFက+$မH+ eရ$သ+$ရမH+ Cဖစ#Kပ?$ Expression ကiu Evaluate လuပ#လiuက#တ-6 အခ3မGiu$မH+ boolean တန#ဖiu$တစ#ခuကiu
ရလဒ#အeနန-9 ရQiမH+ Cဖစ#ပ3တယ#။ a == b လiueရ$ထ+$ရင# a ဟ+ b န-9 တOရင# true ကiu ရQiမH+ Cဖစ#Kပ?$ မတOရင#eတ+6
false ကiu ရQiမH+ Cဖစ#ပ3တယ#။

jshell> int a = 4, b = 5
a ==> 4
b ==> 5

jshell> a == b
$41 ==> false

jshell> a != b
$42 ==> true

အထက#ပ3 နမOန+ထ-မH+ a ကiu 4 န-9 Kပ?$eတ+6 b ကiu 5 န-9 အစ+$ထiu$ထ+$ပ3တယ#။ အ-6ဒ3eFက+င#6 a == b လiu eရ$သ+$
ထ+$တ-6 Expression မH+ a န-9 b ဟ+ မတOတ-6 အတ&က# false လiu အeCဖထ&က#တ+ Cဖစ#ပ3တယ#။ တဖန# a != b လiu
eရ$ထ+$တ+ဟ+ a န-9 b ဟ+ မတOပ3ဘO$လiu eရ$သ+$ထ+$တ+Cဖစ#Kပ?$ တကယ#လ- မတOတ-6 အတ&က# true လiu အeCဖရ
တ+ Cဖစ#ပ3တယ#။

တOလ+$မတOဘO$လ+$ဆiuတ+ကiu Ai[င#$ယHT#တ-6 Operator ကiu String Type Variable eတ&မH+ အသuB$CပuAiuင#ပ3တယ#။


String မH+အသuB$Cပuတ-6 == ရ-I ထO$Cခ+$ပuBကiu eလ6လ+သ&+$Fကရeအ+င#။

Learning Java 75 မင#$လ&င#


Java Developer Class

Equality in Strings
Java မH+ အသuB$Cပueနတ-6 String ဟ+ အမတန#ထO$ဆန#$တ-6 Type အမGiu$အစ+$Cဖစ#ပ3တယ#။ String ဟ+ Java
Standard API ထ-မH+ ပ3ဝင#တ-6 Class တစ#မGiu$Cဖစ#Kပ?$ Data Type အeနန-9 အသuB$CပuAiuင#ပ3တယ#။ String Data
Type eတ&ဟ+ Character Array eတ&ကiu ကiuယ#စ+$CပuAiuင#တ-6 Object တစ#မGiu$Cဖစ#ပ3တယ#။

Object Cဖစ#တ-6 အတ&က# String ဟ+ Reference Data Type Cဖစ#ပ3တယ#။ ဒ3eပမ-6 ထO$ထO$Cခ+$Cခ+$ String တစ#မGiu$
ထ- Source Code eတ&ထ-မH+ Literals eတ&ကiu အသuB$CပuKပ?$ တန#ဖiu$ကiu တiuက#Uiuက# အစ+$ထiu$eရ$သ+$Aiuင#တ+ Cဖစ#ပ3
တယ#။ String str = “Hello Java” လiueရ$ထ+$ခ-6ရင# “Hello Java” ဆiuတ+က String ရ-I တန#ဖiu$ကiu Literal အeနန-9
eရ$သ+$ထ+$တ+ Cဖစ#ပ3တယ#။

တဖန# Constructor ကiu အသuB$CပuKပ?$ String str2 = new String(“Hello Java”) လiu eရ$သ+$Aiuင#ပ3တယ#။ ဒ3eပမ-6
str န-9 str2 တiuရ-I သဘ+ဝeတ&ဟ+ မတOည?Fကပ3ဘO$။

jshell> String str = "Hello Java"


str ==> "Hello Java"

jshell> String str1 = "Hello Java"


str1 ==> "Hello Java"

jshell> str == str1


$45 ==> true

အထက#ပ3အတiuင#$ str န-9 str1 တiuကiu Literal တန#ဖiu$Cဖစ#တ-6 “Hello Java” န-9 အစ+$ထiu$eရ$သ+$ခ-6ပ3တယ#။ Kပ?$eတ+6
str == str1 လiu eရ$လiuက#တ-6အခ3မH+ true လiu အeCဖရပ3တယ#။

jshell> String str2 = new String("Hello Java")


str2 ==> "Hello Java"

jshell> str == str2


$47 ==> false

အထက#ပ3 ကuဒ#ထ-မH+eတ+6 String str2 = new String(“Hello Java”) ဆiuKပ?$eရ$သ+$ထ+$Cပန#တယ#။ Kပ?$eတ+6 str
== str2 လiu eရ$သ+$ထ+$တ-6 အခ3မH+ မတOဘO$ဆiuKပ?$ false လiu အeCဖထ&က#ပ3တယ#။ ဒ?eနရ+မH+ သiသ+တ+က
Literal န-9 eရ$သ+$ထ+$တ-6 Variable ရ-I တန#ဖiu$န-9 Constructor ကiu အသuB$CပuKပ?$ တည#eဆ+က#ထ+$တ-6 တန#ဖiu$ခGင#$
မတOဘO$လiu eCပ+eနတ+လiu သiထ+$သင#6ပ3တယ#။

String Type Variable eတ&ကiu Literal eတ&န-9လ- Assign လuပ#Aiuင#သလiu၊ Constructor မHတဆင#6လ- Object
eဆ+က#Kပ?$ Assign လuပ#Aiuင#ပ3တယ#။ Literal န-9 eရ$သ+$ထ+$တ-6 String eတ&ကiu Heap Memory eပ2မH+Qiတ-6
String Pools ဆiuတ-6 eနရ+မH+ သiမ#$ထ+$eလ6Qiပ3တယ#။ တကယ#လiu Source Code ထ-မH+ “Hello Java” ဆiuKပ?$
Literal န-9 eရ$သ+$ထ+$တ+ကiu eတ&Jရင# အရင#ဆuB$ String Pools ထ-မH+Qiလ+$လiuFကည#6ပ3တယ#။ Qiတယ#ဆiuရင# အ-6ဒ?
Reference ကiu အသuB$Cပuပ3တယ#။ တကယ#လiu မQiဘO$ဆiuရင#eတ+6 String Pools ထ-မH+ String Object ကiu eဆ+က#
Kပ?$မH အ-6ဒ? Reference ကiu အသuB$CပuမH+ Cဖစ#ပ3တယ#။

Learning Java 76 မင#$လ&င#


Java Developer Class
ဤနည#$အ+$Cဖင#6 တOည?တ-6 String Object eတ& အမG+$Pက?$ Qiမeနeအ+င# Memory ကiu Optimize လuပ#ခ-6Fကတ+
Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 str == str1 ဟ+ true လiu အeCဖထ&က#တ+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6 String str2 = new String(“Hello Java”) လiu eရ$လiuက#တ+ဟ+ new Operator ကiu အသuB$Cပuထ+$တ-6
အတ&က# String Object အသစ#တစ#ခuကiu Heap Memory eပ2မH+ တည#eဆ+က#သ&+$မH+ Cဖစ#ပ3တယ#။ String Pool
ထ-က Reference ကiu အသuB$CပuမH+ မဟuတ#ပ3ဘO$။ ဒ36eFက+င#6 str == str2 လiueရ$လiuက#တ-6အခ3မH+ တန#ဖiu$eတ&က တO
ရ-Iသ+$န-9 false ဆiuKပ?$ အeCဖထ&က#တ+ Cဖစ#ပ3တယ#။

ဒ36eပမ-6 String eတ&မH+eတ+6 Memory Address တOတ+ မတOတ+ထက# သOတiuရ-I တန#ဖiu$တOရင# တOတယ#လiu အeCဖ
ထ&က#ခGင#FကမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 String eတ&ကiu တOတယ#မတOဘO$ဆiuတ+ကiu စစ#eဆ$ခGင#ရင# equals method
ကiu အသuB$CပuKပ?$ စစ#eဆ$သင#6ပ3တယ#။

jshell> String str2 = new String("Hello Java")


str2 ==> "Hello Java"

jshell> str == str2


$47 ==> false

jshell> str.equals(str2)
$48 ==> true

အ=ခ"9eသ" Relational Operators


Primitive တန#ဖiu$AHစ#ခu ဒ3မHမဟuတ# Primitive Variable AHစ#ခuဟ+ မတOပ3ဘO$ဆiuတ+ကiu စစ#eဆ$ဖiu != Operator ကiu
အသuB$CပuAiuင#ပ3တယ#။

jshell> 10 != 11
$49 ==> true

jshell> 10 != 10
$50 ==> false

10 != 11 လiueရ$ထ+$ရင# မတOတ+မHန#တ-6 အတ&က# အeCဖဟ+ true Cဖစ#မH+ Cဖစ#Kပ?$ 10 != 10 လiueရ$ထ+$ရင# မတOဘO$


ဆiuတ+ မH+$eနတ-6 အတ&က# အeCဖဟ+ false Cဖစ#ပ3တယ#။

jshell> 10 > 10
$52 ==> false

jshell> 10 >= 10
$53 ==> true

Learning Java 77 မင#$လ&င#


Java Developer Class
အထက#ပ3နမOန+မH+eတ+6 10 > 10 လiueရ$ထ+$တ+ဟ+ 10 ဟ+ 10 ထက#Pက?$ပ3တယ#လiu စစ#eဆ$eနတ+ပ- Cဖစ#Kပ?$
10 ဟ+ 10 ထက#မPက?$တ-6 အတ&က# အeCဖဟ+ false ထ&က#ပ3တယ#။ eန+က#တစ#eFက+င#$မH+eတ+6 10 >= 10 လiu
Expression ကiu eရ$သ+$ထ+$တ-6 eနရ+မH+ 10 ဟ+ 10 ထက#Pက?$တယ#ဒ3မHမဟuတ# တOတယ#လiu eဖ2Cပထ+$တ+ Cဖစ#
ပ3တယ#။ ဒ?eနရ+မH+eတ+6 10 န-9 10 ဟ+တOည?တ-6 အတ&က# အeCဖဟ+ true Cဖစ#သ&+$တ+ Cဖစ#ပ3တယ#။

အလ+$တO Less Than န-9 Less Than or Equal To (<, <=) Operator eတ&ကiuလ- အသuB$CပuAiuင#မH+Cဖစ#ပ3တယ#။ ဒ?
လiu Relation Operator eတ&န-9 Variable eတ&ကiu တ&-ဖက#eရ$သ+$ထ+$တ+eတ&ကiu Relational Expression လiu
eခ2ဆiueလ6Qiပ3တယ#။ eသCခ+တ+တစ#ခuကeတ+6 Relational Expression eတ&ရ-I ရလဒ#eတ&ဟ+ Boolean တန#ဖiu$
Cဖစ#တ-6 true သiuမဟuတ# false ပ- Cဖစ#eနမH+ပ- Cဖစ#ပ3တယ#။

Logical Operators
Boolean တန#ဖiu$eတ&၊ Boolean Expression eတ&န-9 တ&-ဖက#Kပ?$ Logic eတ&ကiu eရ$သ+$လiuတ-6 အခ3မGiu$မH+
အသuB$CပuAiuင#တ-6 Operator eတ& Cဖစ#Fကပ3တယ#။ အသuB$CပuAiuင#တ-6 Operator eတ&ကeတ+6 AND (&), OR (|), Short
Cut AND (&&), Short Cut OR (||), NOT (!) န-9 XOR (^) တiuပ- Cဖစ#Fကပ3တယ#။

Not (!) Operator


Boolean တန#ဖiu$eတ&၊ Boolean Type Variable eတ&န-9 Boolean Expression eတ&ရ-I e^မH+ eရ$သ+$ အသuB$Cပu
Aiuင#ပ3တယ#။ လက#Qi Boolean ရ-I တန#ဖiu$ကiu eCပ+င#$Cပန#Cပuလuပ#eပ$Aiuင#ပ3တယ#။ Not True ဆiuရင# False Cဖစ#သ&+$မH+
Cဖစ#Kပ?$ Not False ဆiuရင#eတ+6 True Cဖစ#သ&+$မH+ပ3။

jshell> !true
$64 ==> false

jshell> !false
$65 ==> true

AND (&) Operator


And Operator eတ&ကiu Boolean တန#ဖiu$AHစ#ခu ဒ3မHမဟuတ# Boolean Expression AHစ#ခuအFက+$မH+ အသuB$CပuAiuင#Kပ?$
တန#ဖiu$AHစ#ခuလuB$မHန#တယ#ဆiuပ3မH true ကiu Cပန#eပ$ပ3မယ#။ ဒ3မHမဟuတ#ရင#eတ+6 false တန#ဖiu$ကiu ရQiမH+ Cဖစ#ပ3တယ#။

jshell> true & true


$58 ==> true

jshell> true & false


$59 ==> false

jshell> false & true


$60 ==> false

jshell> false & false


$61 ==> false

Learning Java 78 မင#$လ&င#


Java Developer Class

OR (|) Operator
And Operator eတ&ကiu Boolean တန#ဖiu$AHစ#ခu ဒ3မHမဟuတ# Boolean Expression AHစ#ခuအFက+$မH+ တစ#ခuခuမHန#eန
ရင# True ကiu Cပန#eပ$မH+ Cဖစ#Kပ?$ AHစ#ခuစလuB$မH+$မHသ+ False ကiu Cပန#eပ$မH+ Cဖစ#ပ3တယ#။

jshell> true | true


$66 ==> true

jshell> true | false


$67 ==> true

jshell> false | true


$68 ==> true

jshell> false | false


$69 ==> false

Short Cut Logical Operators


AND န-9 OR Operator eတ&ကiu Fကည#6မယ#ဆiuရင# Boolean Expression AHစ#ခuအFက+$မH+ eရ$Kပ?$ အသuB$Cပuရပ3
တယ#။ AND ကiu Fကည#6မယ#ဆiuရင#လ- Expression AHစ#ခuလuB$ မHန#တယ#ဆiuမHသ+ true ကiu ရQiမH+ Cဖစ#Kပ?$ OR ဆiuရင#လ-
AHစ#ခuလuB$မH+$မHသ+ false ကiu ရQiမH+ Cဖစ#ပ3တယ#။ Logical Operator eတ&မH+ ဘယ#ဘက#က Expression ကiu အရင#
လuပ#Kပ?$မH ည+ဘက#က Expression ကiu Evaluate လuပ#eနပ3တယ#။ ဒ36eFက+င#6 AND Operator ရ-I ဘယ#ဘက#က
Expression ရ-I တန#ဖiu$ဟ+ false Cဖစ#ခ-6Kပ?ဆiuရင# ဘယ#လiuအeFက+င#$eFက+င#6မH true Cဖစ#မလ+Aiuင#eတ+6ပ3ဘO$။ ဒ?လiuပ-
OR Operator ရ-I ဘယ#ဘက#က Experssion ရ-I တန#ဖiu$က true Cဖစ#ခ-6Kပ?ဆiuရင#လ- ဘယ#လiu အeFက+င#$eFက+င#6မH
false Cဖစ#မလ+Aiuင#eတ+6ပ3ဘO$။

ဒ?လiuအeနအထ+$မGiu$မH+ သ+မန# AND (&) န-9 OR (|) Operator eတ&ကiu အသuB$Cပuခ-6ရင# ဘယ#ဘက#က Expression
ကiu Evaluate လuပ#Kပ?$ true Cဖစ#စရ+ အeFက+င#$မQiခ-6ရင#eတ+င#မH၊ ဒ3မHမဟuတ# false Cဖစ#စရ+အeFက+င#$မQiခ-6
ရင#eတ+င#မH၊ ည+ဘက#က Expression ကiu ဆက#Kပ?$ Evaluate လuပ#eနမH+ Cဖစ#ပ3တယ#။ အ-6ဒ3eတ&ကiu စမ#$သပ#ဖiu
Boolean တန#ဖiu$eတ&ကiu Cပန#eပ$Aiuင#တ-6 Method eလ$eတ&ကiu Cပင#ထ+$Fကည#6Fကရeအ+င#။

jshell> boolean getTrue() {


...> System.out.println("Call True");
...> return true;
...> }
| created method getTrue()

jshell> boolean getFalse() {


...> System.out.println("Call False");
...> return false;
...> }
| created method getFalse()

Learning Java 79 မင#$လ&င#


Java Developer Class
အထက#ပ3 နမOန+မH+ပ3တ-6 getTrue() method ကeတ+6 true ကiu Return Cပန#eပ$Aiuင#တ-6 Method Cဖစ#Kပ?$
getFalse() method ကeတ+6 false ကiu Return Cပန#eပ$Aiuင#တ-6 method Cဖစ#ပ3တယ#။ Method eတ&ထ-မH+eတ+6
ဘယ# Method ကiu Evluate လuပ#သ&+$တယ#ဆiuတ+ကiu သieအ+င# System.out.print eတ&ကiu eရ$သ+$ထ+$ပ3တယ#။

jshell> getFalse() & getTrue()


Call False
Call True
$3 ==> false

အထက#ပ3 နမOန+ထ-မH+ဆiuရင# getFalse() ကiu Evaluate လuပ#Kပ?$တ-6အခ3မH+ false ကiu ရမH+ Cဖစ#တ-6 အတ&က# AND
Expression ရ-I ရလဒ#ဟ+ ဘယ#eတ+6မH true Cဖစ#လ+စရ+ အeFက+င#$မQieတ+6ပ3ဘO$။ ဒ3eပမ-6 ည+ဘက#က
getTrue() Expression ကiu Evaluate လuပ#သ&+$တ-6 အတ&က# Call False လiueဖ2CပKပ?$တ-6 အခ3မH+ Call True ကiu
eဖ2Cပသ&+$တ+ Cဖစ#ပ3တယ#။

jshell> getFalse() && getTrue()


Call False
$5 ==> false

အထက#ပ3နမOန+ကeတ+6 AND (&) အစ+$ Short Cut AND (&&) ကiu အသuB$Cပuသ&+$တ+ပ3။ ဘယ#ဘက#က
Expression Cဖစ#တ-6 getFalse() ကiu Evaluate လuပ#Kပ?$တ-6အခ3မH+ ရလဒ#ဟ+ false Cဖစ#eနKပ?ဆiuရင# ဘယ#နည#$န-9မH
true Cဖစ#စရ+မQieတ+6တ-6 အတ&က# ည+ဘက#က Expression Cဖစ#တ-6 getTrue() ကiu Evaluate မလuပ#eတ+6ပ- တန#$
Kပ?$ အeCဖကiu false လiuထuတ#eပ$ခ-6ပ3တယ#။

jshell> getTrue() || getFalse()


Call True
$6 ==> true

အလ+$တOပ- Short Cut OR (||) Operator ဟ+လ- ဘယ#ဘက#က Expression ကiu Evaluate လuပ#Kပ?$ အeCဖဟ+
True Cဖစ#ခ-6ရင# ဘယ#နည#$န-9မH False Cဖစ#စရ+အeFက+င#$မQieတ+6တ-6 အတ&က# ည+ဘက#က Expression Cဖစ#တ-6
getTrue() method ကiu Invoke မလuပ#eတ+6ပ- အeCဖကiu တန#$Kပ?$ true လiu ထuတ#eပ$ခ-6တ+Cဖစ#ပ3တယ#။

Short Cut eတ&ဟ+ ဘယ#ဘက#က Expression ရ-I တန#ဖiu$ကiu Fကည#6Kပ?$ အeCဖကiuမရeသ$ဘO$ဆiuရင#eတ+6 ည+ဘက#
က Expression ကiu ဆက#Kပ?$ Evaluate လuပ#သ&+$မH+ Cဖစ#ပ3တယ#။

jshell> getFalse() || getTrue()


Call False
Call True
$7 ==> true

အထက#ပ3နမOန+မH+ဆiuရင# getFalse() ကiueခ2တ-6အခ3မH+ false Cဖစ#eနတ-6 အတ&က# eန+က#တစ#ခuက false Cဖစ#ရင#


false Cဖစ#Kပ?$ true Cဖစ#ရင# true Cဖစ#eနAiuင#ပ3eသ$တယ#။ ဒ36eFက+င#6 ည+ဘက#က Expression Cဖစ#တ-6 getTrue()
Method ကiu ဆက#Kပ?$ Evaluate လuပ#သ&+$Kပ?$မH+ အeCဖကiu Cပန#Kပ?$eဖ2Cပeပ$သ&+$ပ3တယ#။

Learning Java 80 မင#$လ&င#


Java Developer Class
AND ပ- သuB$သuB$ Short Cut AND ပ-သuB$သuB$၊ OR ပ- သuB$သuB$ Short Cut OR ပ- သuB$သuB$ eန+က#ဆuB$ရလဒ#ကeတ+6
အတOတOပ- Cဖစ#ပ3မယ#။ ဒ3eပမ-6 Short Cut eတ&က ဘယ#ဘက#က တန#ဖiu$ကiuFကည#6Kပ?$ အeCဖကiu ရသ&+$ရင# ည+ဘက#
က Expression eတ&ကiu Evaluate လuပ#စရ+မလiuတ-6 အတ&က# Performance မH+ပiuKပ?$ eက+င#$မ&န#eစAiuင#ပ3တယ#။

XOR (^) Operator


Exclusive OR ရ-I အတiueက+က# အeခ2အeဝ2Cဖစ#Kပ?$ တစ#ဘက#ဘက#မH+ true ပ3မH true Cဖစ#မH+ Cဖစ#Kပ?$ AHစ#ဘက#
လuB$ true Pက?$ပ- ဒ3မHမဟuတ# false Pက?$ပ- Cဖစ#eနရင#eတ+6 false ကiuပ-ရQiမH+ Cဖစ#ပ3တယ#။

jshell> true ^ true


$14 ==> false

jshell> false ^ true


$15 ==> true

jshell> true ^ false


$16 ==> true

jshell> false ^ false


$17 ==> false

Notes
Logical Operator eတ&ကiu Boolean Expression eတ&Fက+$မH+ အသuB$Cပuတ+eတ&ကiuပ- eဖ2Cပခ-6ပ3တယ#။ ဒ3eပမ-6
Logical Operator eတ&ကiu အCခ+$eသ+ Primitive Type eတ&Fက+$မH+လ- အသuB$CပuAiuင#ပ3တယ#။ အ-6ဒ?လiu အသuB$Cပuတ-6
အခ3မH+ Binary Data အCဖစ#eCပ+င#$Kပ?$တ&က#ခGက#သ&+$မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 Business Application ရ-I Logic
eတ&ကiu eရ$သ+$Fကတ-6အခ3မGiu$မH+ Boolean Expression eတ&ကiu အသuB$Cပuတ+ကမG+$တ-6အတ&က# ဒ?စ+အuပ#ထ-မH+
eတ+6 Boolean Expression န-9 တ&-ဖက#အသuB$Cပuတ-6 နမOန+မG+$ကiu eဖ2Cပသ&+$တ+ Cဖစ#ပ3တယ#။

Learning Java 81 မင#$လ&င#


Java Developer Class

Statements
Java Compilar ကeန Compile လuပ#Aiuင#Kပ?$ JVM ကeန လuပ#eဆ+င#မ[eတ&ကiu လuပ#eဆ+င#eပ$Aiuင#တ-6 အဓiပW3ယ#Cပ
ည#6စuBတ-6 စ+eFက+င#$eတ&ကiu Statement လiueခ2ပ3တယ#။ eအ+က#က နမOန+အတiuင#$ Class တစ#ခuကiu eရ$သ+$ထ+$ပ3
မယ#။

public class Hello {


String str = "Hello"
}

အထက#ပ3အတiuင#$eရ$ထ+$တ-6 Class ကiu Compile လuပ#လiuက#တ-6အခ3မH+ Error တက#ပ3လiမ#6မယ#။ String Type


Variable Cဖစ#တ-6 str ကiu Assignment Operator Cဖစ#တ-6 = ကiu အသuB$CပuKပ?$ “Hello” န-9 အစ+$ထiu$eနတ+မHန#ပ3
တယ#။ ဒ3eပမ-6 အ-6ဒ? စ+eFက+င#$ဟ+ Kပ?$Cပည#6စuBတ-6 ဝ3ကGတစ#eFက+င#$ မဟuတ#eသ$ပ3ဘO$။ ဒ36eFက+င#6 Compile Time
မH+ Error ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ က- ဒ?အခန#$မH+eတ+6 Kပ?$Cပည#6စuBတ-6 ဝ3ကG ဒ3မHမဟuတ# Statement eတ&ကiu
ဘယ#လiu eရ$ရမယ#၊ Kပ?$eတ+6 Statement အမGiu$အစ+$eတ& ဘယ#လiuQiတယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

Statement eတ&ကiu အမGiu$အစ+$ခ&-Cခ+$မယ#ဆiuရင# eအ+က#ပ3အတiuင#$ခ&-Cခ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

✓ Declaration Statements

Variable eတ&ကiu အသuB$Cပuမယ#ဆiuKပ?$ Declare လuပ#တ-6အခ3မH+ eရ$သ+$Aiuင#တ-6 ဝ3ကGအမGiu$အစ+$မGiu$Cဖစ#ပ3တယ#


✓ Expression Statements

Variable eတ&န-9 Operator eတ&ကiu တ&-ဖက#eရ$သ+$ထ+$တ+ကiu Expression လiueခ2တယ#ဆiuတ+ e^ခန#$မH+
eလ6လ+ခ-6Kပ?$ပ3Kပ?။ အခGiueသ+ Expression eတ&ကiu eန+က#မH+ ; ကiueရ$လiuက#UuBန-9 Statement အeနန-9 အသuB$Cပu
Aiuင#ပ3တယ#။ 


✓ Control Flows Statements



Code Block eတ&န-9 Method eတ&ထ-မH+ eရ$သ+$Aiuင#တ-6 Statement eတ&Cဖစ#FကKပ?$၊ Program ရ-I Flow eတ&ကiu
Control လuပ#eပ$Aiuင#တ-6 Statement eတ&Cဖစ#Fကပ3တယ#။ အဓiကအ+$Cဖင#6 Decision Statements eတ&န-9
Looping Statement eတ&ဆiuKပ?$ QiFကပ3တယ#။ ဒ?လiuအeနအထ+$မGiu$ဆiuရင# ဒ?လiuလuပ#မယ#ဒ3မHမဟuတ#ရင#ဒ?လiuလuပ#
မယ#ဆiuတ-6 eရ$သ+$ပuBeတ&ကiu Decision Statement eတ&န-9 eရ$သ+$eဖ2CပAiuင#Kပ?$။ အeCခအeနအeပ2မOတည#Kပ?$
အPကiမ#Pကiမ# လuပ#eဆ+င#မ[eတ&ကiu Cပuလuပ#eစလiuတ-6 အခ3မGiu$eတ&မH+ Looping Statement eတ&ကiu အသuB$CပuAiuင#ပ3
တယ#။

Learning Java 82 မင#$လ&င#


Java Developer Class

Declaration Statements
Java Program eတ&ထ-မH+ အသuB$Cပuမည#6 Variable eတ&ကiu Declare လuပ#တ-6အခ3မH+ အသuB$CပuAiuင#တ-6 Statement
eတ& Cဖစ#ပ3တယ#။ Variable eတ&ကiu Declare လuပ#တ-6အခ3မH+ Type န-9 Name တiuကiu eရ$သ+$ရန#လiuအပ#Kပ?$
အeန+က#မH+ ; ကiu eရ$သ+$လiuက#ရင#ရပ3Kပ?။ အeCခခBအ+$Cဖင#6 Variable eတ&ကiu Declare လuပ#တ-6 eနရ+မH+ ပuBစBAHစ#
မGiu$QiAiuင#ပ3တယ#။ အ-6ဒ3eတ&ကeတ+6 Variable eတ&ကiu Uiu$Uiu$ Declare လuပ#တ-6ပuBစBန-9 Initial တန#ဖiu$eတ&ကiu Assign
လuပ#Kပ?$ Declare လuပ#တ-6 ပuBစBဆiuKပ?$ AHစ#မGiu$QiAiuင#ပ3တယ#။

public class Hello {

String str1;

public Hello() {
str1 = "Hello Java";
}
}

အထက#ပ3ပuBစBကeတ+6 သ+မန# Uiu$Uiu$ Declare လuပ#တ-6 ပuBစBပ3။ String str1; ဆiuတ+က str1 Variable ကiu Declare
လuပ#eနတ-6 Declaration Statement Cဖစ#ပ3တယ#။ Kပ?$eတ+6မH Constructor ထ-မH+ str1 = “Hello Java”; ဆiuKပ?$
Assignment လuပ#eနပ3တယ#။

public class Hello {

public Hello() {
String str1;
}
}

အထက#ပ3နမOန+ကeတ+6 String str1; ကiu Constructor ထ-မH+ eရ$သ+$ထ+$တ-6 အတ&က# Local Variable တစ#ခu
ကiu Declare လuပ#eနတ+ပ- Cဖစ#ပ3တယ#။ Local Variable eတ&ကiu အသuB$Cပuတ-6 eနရ+မH+ တစ#ခu သတiထ+$သင#6တ+
ကeတ+6 Initialize မလuပ#ပ- အသuB$Cပuလiu မရတ-6 အခGက#Cဖစ#ပ3တယ#။ Local Variable eတ&ဟ+ Default တန#ဖiu$ပ3မ
လ+တ-6 အတ&က# တန#ဖiu$ကiu Assign မလuပ#ခင# အသuB$Cပuလiu မရပ3ဘO$။

public class Hello {

public Hello() {
String str1 = “Hello Java”;
}
}

အထက#ပ3နမOန+ကeတ+6 တန#ဖiu$ကiu အစ+$ထiu$Kပ?$ Declare လuပ#တ-6 ပuBစBCဖစ#ပ3တယ#။

Learning Java 83 မင#$လ&င#


Java Developer Class

Expression Statements
Expression eတ&ရ-I eန+က#မH+ ; eရ$လiuက#တ+န-9 Statement Cဖစ#သ&+$တ-6 Statement မGiu$ကiu Expression
Statement လiueခ2Fကပ3တယ#။ မG+$eသ+အ+$Cဖင#6 Assignment Expression eတ&၊ Increment, Decrement
Expressioneတ&၊ Method Invocation Expression eတ&န-9 Object Creation Expression eတ&ကiu Statement
အeနန-9 အသuB$CပuAiuင#ပ3တယ#။

public class Hello {

String str1;

public Hello() {
str1 = "Hello Java";
}
}

အထက#ပ3နမOန+မH+ str1 = “Hello Java” လiueရ$သ+$ထ+$တ+ဟ+ str variable eနရ+ကiu “Hello Java” န-9
အစ+$ထiu$eနတ-6 Assignment Expression Cဖစ#Kပ?$ eန+က#ကeန ; ကiueရ$သ+$လiuက#တ+န-9 Assign Statement
တစ#eFက+င#$ Cဖစ#လ+ပ3တယ#။

public class Hello {

int count;

public void countUp() {


count ++;
}

public static void main(String [] args) {


Hello h;
h = new Hello();
h.countUp();
}
}

အထက#ပ3နမOန+ထ-မH+ countUp() method ထ-မH+ count ++; လiueရ$သ+$ထ+$တ+ဟ+ count ကiu တစ#တiu$eပ$တ-6
increment statement Cဖစ#ပ3တယ#။ Kပ?$eတ+6 main method ထ-မH+ eရ$သ+$ထ+$တ-6 h = new Hello(); ဆiuတ+
က Object Creation Statement Cဖစ#Kပ?$ h.countUp(); ဆiuတ+ကeတ+6 Method Invocation Statement Cဖစ#ပ3
တယ#။

eဖ2Cပပ3အတiuင#$ Expression eတ&ရ-I အeန+က#မH+ ; ကiu eရ$လiuက#UuBန-9 Statement Cဖစ#သ&+$တ-6 Statement eတ&
ဟ+ Expression Statement eတ& Cဖစ#Fကပ3တယ#။

Learning Java 84 မင#$လ&င#


Java Developer Class

Control Flow Statements


Program တစ#ခuရ-I အသ&+$အလ+eတ&ကiu Flow လiueခ2ပ3တယ#။ အ-6ဒ? Flow eတ&ကiu Control လuပ#eပ$Aiuင#တ-6
Statement eတ&ကiu Control Flow Statement eတ&လiueခ2ပ3တယ#။ Java Program ဆiuတ+ဘ+လ- ဆiuတ+ကiu Cပန#
Kပ?$ eတ&$Fကည#6Fကရeအ+င#။ Java Programming ဘ+သ+ရပ#န-9 eရ$သ+$ထ+$တ-6 အစ?အစT# အစuအeဝ$တစ#ခuသ+
Cဖစ#ပ3တယ#။

Kပ?$ခ-6တ-6 အခန#$eတ&တuန#$က Variable eတ&၊ Java Data Type eတ&၊ Method eတ&၊ Class eတ& န-9 Operator eတ&
အeFက+င#$ကiu eလ6လ+ခ-6Fကပ3တယ#။ ဒ3eပမ-6 Method eတ&ထ-မH+ ကuဒ#eတ&ကiu ဘယ#လiu eရ$ရမယ#ဆiuတ+ကiueတ+6 မ
သiရeသ$ပ3ဘO$။ ဘယ#လiuလuပ#ရမယ#ဆiuတ+ကiu eရ$သ+$Aiuင#တ+eတ&ကeတ+6 Control Flow Statements eတ&ပ-
Cဖစ#Fကပ3တယ#။

Controls Flow Statement အeနန-9 Decision Statement န-9 Looping Statement ဆiuKပ?$အမGiu$အစ+$ခ&-Cခ+$ထ+$
ပ3တယ#။ အeCခအeနတစ#ခuအeပ2မOတည#Kပ?$ Program အသ&+$အလ+eတ&ကiu ခ&-Cခ+$eပ$Aiuင#တ-6 Statement eတ&က
Decision Statemebt eတ&Cဖစ#FကKပ?$ အPကiမ#Pကiမ# လuပ#eဆ+င#မ[eတ&ကiu eရ$သ+$Aiuင#eအ+င#Cပင#eပ$ထ+$တ-6
Statement eတ&ကeတ+6 Looping Statement eတ&ပ- Cဖစ#Fကပ3တယ#။

Decision Statement
ဆiuFကပ3စiu၊ ကiန#$Cပည#6တစ#ခuကiu Fကည#6Kပ?$ စuBကiန#$လ+$ မကiန#$လ+$ဆiuတ+ကiu ခ&-Cခ+$ခGင#တယ#။ ဒ3ကiu ဘယ#eနရ+မH+သuB$
ရမလ-။ သuB$လiuရတ-6 eနရ+eတ& အမG+$Pက?$Qiပ3တယ#။ View eပ2မH+ Table တစ#ခuရ-I Row eတ&ကiu စuBမeပ2မH+ခ&-Kပ?$
အeရ+င#မတOeအ+င#eဖ2CပခGင#ရင# ဒ?လiuမGiu$ ကiန#$တစ#ခuကiu Fကည#6Kပ?$ စuBလ+$မလ+$ဆiuတ+ကiu ခ&-Cခ+$ရeတ+6မH+ပ3ပ-။

စuBဆiuရင# အCဖteရ+င#ကiueဖ2CပKပ?$ မဆiuရင# မ?$ခiu$eရင#န-9 eဖ2CပခGင#တယ#ဆiuရင# အရင#ဆuB$ Row ရ-I Index Number ဟ+
စuBလ+$မလ+$ဆiuတ+ကiu ခ&-Cခ+$ဖiuလiuပ3တယ#။ ဒ?လiuအeနအထ+$မGiu$ဆiuရင# က\န#eတ+#တiuဟ+ Decision Statement
eတ&ကiu အသuB$Cပueတ+6မH+ Cဖစ#ပ3တယ#။

Java Programming Language မH+ အသuB$CပuAiuင#တ-6 Decision Statement eတ&ကeတ+6 eအ+က#ပ3 အတiuင#$ Cဖစ#
Fကပ3တယ#။

If Statement

အeနအထ+$တစ#ခuအeပ2မOတည#Kပ?$ မHန#ကန#တ-6အခ3မH လuပ#eဆ+င#မ[eတ&ကiu လuပ#eဆ+င#eစလiuတ-6အခ3မGiu$မH+ If


Statement ကiu eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။

Learning Java 85 မင#$လ&င#


Java Developer Class
If Statement ကiu eရ$သ+$မယ#ဆiuရင# အရင#ဆuB$ Condition တစ#ခuကiu if (Condition) ကiu eရ$သ+$ရမH+ Cဖစ#ပ3
တယ#။ Kပ?$မH Condition သ+မHန#ခ-6ရင# အလuပ#လuပ#eစခGင#တ-6 ကuဒ#eတ&ကiu { If Clause } ထ-မH+ eရ$သ+$ရမH+ Cဖစ#ပ3
တယ#။ Condition eနရ+မH+ Boolean တန#ဖiu$တစ#ခuကiu Cပန#eပ$Aiuင#တ-6 eရ$သ+$ပuB (Boolean Expression) တစ#ခuခu
ကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

Boolean Expression ဆiuတ+ eရ$သ+$ထ+$တ-6 Expression ကiu Evaluate လuပ#Kပ?$တ-6အခ3မH+ eန+က#ဆuB$


Boolean တန#ဖiu$တစ#ခu ထ&က#လ+Aiuင#တ-6 Expression မGiu$Cဖစ#ပ3တယ#။ eအ+က#ပ3 Expression eတ&က Boolean
တန#ဖiu$ကiu Cပန#eပ$Aiuင#တ-6 Expression eတ&ပ- Cဖစ#ပ3တယ#။

• Boolean Type Literals (true or false)


• Boolean Type Variables
• Boolean Type ကiu Return Cပန#eစတ-6 Method Invocations
• Relational Expressions
• Logical Expressions

ဒ?eနရ+မH+ Literals eတ&eရ$တ+eတ+6 ရeက+င#$ရပ3မယ#။ ဒ3eပမ-6 လuB$ဝ အဓiပW3ယ#မQiပ3ဘO$။ if(true) လiueရ$ထ+$ရင#


အKမ-တမ#$ မHန#eနမH+ Cဖစ#Kပ?$ if(false) လiueရ$ထ+$ရင# အKမ-တမ#$မH+$eနမH+ Cဖစ#တ-6 အတ&က# if Statement က
အလuပ#လuပ#မH+ မဟuတ#ပ3ဘO$။ PကiuသiKပ?$သ+$ ကiစuတစ#ခu Cဖစ#တ-6 အတ&က# ဆuB$Cဖတ#စရ+eတ+င#မလiuအပ#ပ3ဘO$။
က\န#eတ+#တiu JShell ကiu အသuB$CပuKပ?$ စမ#$သပ#Fကည#6Fကရeအ+င#။

jshell> int a = 10
a ==> 10

jshell> if (a == 10) {
...> System.out.println("A is " + 10);
...> }
A is 10

jshell> if (a > 10) {


...> System.out.println("A is greater than " + 10);
...> }

အထက#ပ3နမOန+ထ-မH+ a ရ-I တန#ဖiu$ကiu 10 န-9 အစ+$ထiu$ထ+$ပ3တယ#။ Kပ?$eတ+6 eအ+က#မH+ a == 10 ဆiuတ+က


Condition အပiuင#Cဖစ#တ-6 Boolean Expression ပ3။ a က 10 Cဖစ#ရင# true ကiuCပန#Kပ?$ မCဖစ#ရင# false ကiu Cပန#eပ$မ-6
Expression တစ#ခuCဖစ#ပ3တယ#။

If Clause ထ-မH+eတ+6 Condition ကiu စစ#Kပ?$မHန#ရင# အလuပ#လuပ#မည#6 ကuဒ#eတ&ကiu eရ$ထ+$ပ3တယ#။ အထက#ပ3


Condition က မHန#တ-6 အတ&က# eရ$သ+$ထ+$တ-6 အတiuင#$ A is 10 ဆiuKပ?$ အလuပ#လuပ#သ&+$တ+ကiu eတ&မရပ3မယ#။

ဆက#လက#Kပ?$ မမHန#တ-6 Expression တစ#ခuကiu eအ+က#မH+eရ$သ+$ထ+$ပ3တယ#။ a > 10 လiu eရ$သ+$ထ+$ပ3တယ#။


a ဟ+ 10 Cဖစ#တ-6 အတ&က# a ဟ+ 10 ထက#မPက?$ပ3ဘO$။ ဒ36eFက+င#6 a > 10 Expression ကiu Evaluate လuပ#ရင#
false ပ-ရမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 If Clause ထ-မH+ eရ$သ+$ထ+$တ-6 Code eတ&ကiu အလuပ#လuပ#eစမH+ မဟuတ#
eတ+6ပ3ဘO$။

ဒ36eFက+င#6 IF Statement eတ&ကiu Condition မH+eရ$သ+$တ+$တ-6 အတiuင#$မHန#ရင# အလuပ#လuပ#eစလiuတ-6အခ3မGiu$မH+


eရ$သ+$ အသuB$Cပuသင#6ပ3တယ#။

Learning Java 86 မင#$လ&င#


Java Developer Class

IF / ELSE Statement

IF / ELSE Statement eတ&ကiu eရ$သ+$ထ+$တ-6 Expression အeပ2မH+မOတည#Kပ?$ မHန#ရင#တစ#မGiu$ အလuပ#လuပ#eစ


လiuKပ?$ မH+$ရင# တစ#မGiu$လuပ#eစလiuတ-6 အခ3မGiu$မH+ အသuB$CပuAiuင#ပ3တယ#။

If Else Statement eတ&ကလ- IF Statement န-9 အeတ+#eလ$ဆင#တOပ3တယ#။ မတOတ+ကeတ+6 တကယ#လiu


Condition ကiu စစ#eဆ$တ-6eနရ+မH+ မဟuတ#ခ-6ရင# ဘ+လuပ#မလ-ဆiuတ+ကiu eရ$သ+$ထ+$Aiuင#တ+ပ3ပ-။ အထက#ပ3
အတiuင#$ If Clause န-9 Else Clause တiuကiu eရ$သ+$ထ+$Aiuင#Kပ?$ တကယ#လiu Condition ကမHန#ခ-6ရင# If Statement
က အလuပ#လuပ#မH+ Cဖစ#Kပ?$ မH+$ခ-6ရင# Else Clause ထ-က လuပ#eဆ+င#ခGက#eတ&ကiu လuပ#eဆ+င#eစမH+ Cဖစ#ပ3တယ#။

jshell> int a = 10
a ==> 10

jshell> if (a > 10) {


...> System.out.println("A is greater than " + 10);
...> } else {
...> System.out.println("A is not greater than " + 10);
...> }
A is not greater than 10

အထက#ပ3နမOန+မH+ eဖ2Cပထ+$တ-6 အတiuင#$ a ကiu 10 န-9 အစ+$ထiu$ပ3တယ#။ Kပ?$eတ+6 Condition မH+ a > 10 လiu စစ#
ထ+$ပ3တယ#။ ဒ3eပမ-6 a ဟ+ 10 Cဖစ#တ-6 အတ&က# a ဟ+ 10 ထက#မPက?$တ-6 အတ&က# IF Clause ကiu အလuပ#မလuပ#
eတ+6ပ- Else Clause ကiuပ-အလuပ#လuပ#သ&+$မH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Else Clause ထ-မH+ eရ$သ+$ထ+$တ-6 ကuဒ#eတ&ကiu အလuပ#လuပ#သ&+$မH+ Cဖစ#တ-6 အတ&က# A is not greater
than 10 ဆiuKပ?$ eဖ2Cပသ&+$တ+ကiu eတ&Jရပ3မယ#။

Learning Java 87 မင#$လ&င#


Java Developer Class

IF / ELSE IF / ELSE Statement

ဒ? Statement ကeတ+6 Condition အမGiu$အမGiu$အeပ2မOတည#Kပ?$ မiမiရ-I Program ရ-I Flow ကiueCပ+င#$လ-လiuတ-6 အခ3
မGiu$မH+ eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။

ပထမ Conditon ကiu စစ# ကiuက#ရင#တစ#မGiu$လuပ#၊ မကiuက#ရင# eန+က# Condition တစ#မGiu$ကiu စစ# ကiuက#ရင#တစ#မGiu$
လuပ# မကiuက#ရင# eန+က#ထပ# Condition အမGiu$မGiu$ကiu ထပ#စစ#eဆ$Aiuင#ပ3တယ#။ eန+က#ဆuB$မH မစစ#ခGင#ရင#လ- Else
Clause ကiu eရ$သ+$ထ+$လiuရပ3တယ#။

jshell> /list showGrade

8 : void showGrade(int mark) {


if(mark < 40) {
System.out.println("Fails");
} else if (mark >= 40 && mark < 80) {
System.out.println("Pass");
} else if (mark >= 80 && mark < 100) {
System.out.println("Excellent");
} else if (mark == 100) {
System.out.println("Perfect");
} else {
System.out.println("Impossible");
}
}

အထက#ပ3အတiuင#$ showGrade Method ကiu eရ$သ+$ထ+$ပ3တယ#။ Argument အeနန-9 int mark ကiu ရယOeနပ3
တယ#။ အမHတ#အeပ2မOတည#Kပ?$ အဆင#6ကiu ခ&-Cခ+$eပ$Aiuင#တ-6 Method တစ#ခuပ3။

Learning Java 88 မင#$လ&င#


Java Developer Class
ပထမဆuB$ if ရ-I Decision အeနန-9 mark < 40 လiueရ$ထ+$ပ3တယ#။ mark သ+ 40 ထက#ငယ#ရင# if block ထ-က
ကuဒ#eတ&ကiu အလuပ#လuပ#eစမH+ Cဖစ#Kပ? “Fails” လiu eဖ2Cပသ&+$မH+ Cဖစ#ပ3တယ#။ အ-6ဒ? Condition မမHန#eတ+6မH အCခ+$
Condition eတ&ကiu Cပန#Kပ?$ စစ#eဆ$မH+ Cဖစ#ပ3တယ#။

jshell> showGrade(39)
Fails

ဒ36eFက+င#6 အထက#ပ3 အတiuင#$ showGrade(39) လiu eရ$တ-6အခ3မH+ 39 ဟ+ 40 ထက#ငယ#eနတ-6 အတ&က# if


Condition န-9 ကiuက#ည?Kပ?$ Fails လiueဖ2Cပသ&+$တ+Cဖစ#ပ3တယ#။

jshell> showGrade(40)
Pass

jshell> showGrade(79)
Pass

Kပ?$eတ+6 ဒuတiယ Condition Cဖစ#တ-6 else if ထ-မH+ mark >= 40 && mark < 80 လiueရ$ထ+$ပ3တယ#။ ဒ3eFက+င#6
ပထမ Condition န-9 မကiuက#တ+eတ&အ+$လuB$ဟ+ ဒuတiယ Condition ထ-ကiu eရ+က#လ+Fကပ3တယ#။ အထက#ပ3 နမO
န+ထ-မH+eတ+6 showGrade Method ကiu Parameter အeနန-9 40 န-9 79 ကiu အသuB$Cပuထ+$Fကပ3တယ#။ 40 eက+
79 ပ3 40 ဒ3မHမဟuတ# 40 ထက#Pက?$eနKပ?$ 80 ထက#လ- ငယ#eနFကပ3တယ#။ ဒ36eFက+င#6 Pass ဆiuKပ?$ eဖ2CပAiuင#Fကတ+
Cဖစ#ပ3တယ#။

jshell> showGrade(80)
Excellent

jshell> showGrade(99)
Excellent

jshell> showGrade(100)
Perfect

jshell> showGrade(101)
Impossible

အထက#ပ3နမOန+ထ-မH+eဖ2Cပထ+$တ-6 အတiuင#$ 80 ဒ3မHမဟuတ# 99 န-9 showGrade Method ကiu eခ2တ-6 အခ3မH+


Excellent ဆiuတ+ကiu eဖ2Cပeနတ+ကiu eတ&Jရပ3မယ#။ ဒ3ဟ+ တတiယ Condition ထ-မH+ eရ$သ+$ထ+$တ-6 mark >=
80 && mark < 100 န-9 ကiuက#ည?သ&+$လiu Cဖစ#ပ3တယ#။

eန+က#Kပ?$ showGrade(100) လiu Method ကiu Invoke လuပ#လiuက#တ-6 အခ3မH+လ- Excellent လiu eဖ2CပAiuင#တ+ကiu
eတ&Jရပ3တယ#။ ဒ3ကလ- စတuတv Condition Cဖစ#တ-6 mark == 100 န-9 ကiuက#ည?တ-6 အတ&က# eဖ2Cပeပ$သ&+$တ+ Cဖစ#
Kပ?$ eန+က#ဆuB$ 101 န-9 Method ကiu Invoke လuပ#တ-6အခ3 အထက#eဖ2Cပပ3 Condition တစ#ခuန-9မH မကiuက#ည?ပ- Else
Clause ထ-က လuပ#eဆ+င#ခGက#eတ&ကiuလuပ#eပ$သ&+$တ-6 အတ&က# Impossible ဆiuတ+ကiu eဖ2Cပeပ$သ&+$တ+ Cဖစ#ပ3
တယ#။ ဒ? Statement မGiu$ကiu Condition အမGiu$မGiu$အeပ2 လuပ#eဆ+င#မ[eတ&ခ&-Cခ+$Kပ?$ လuပ#eဆ+င# eစလiuတ-6အခ3မH+
အသuB$CပuAiuင#ပ3မယ#။

Learning Java 89 မင#$လ&င#


Java Developer Class

Switch Statement

Switch Statement eတ&ဟ+ if - else if - else statement eတ&န-9 တOည?သလiuQiပ3တယ#။ Decision အမG+$အeပ2
မH+ မOတည#Kပ?$ လuပ#eဆ+င#မ[eတ&ကiu ခ&-Cခ+$လuပ#eဆ+င# eစAiuင#မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 if - else if - else statement
eတ&မH+eတ+6 Decision eတ&ကiu လiuအပ#သလiu eရ$သ+$Aiuင#eပမ-6၊ switch statement eတ&မH+eတ+6 decision eတ&
ကiu Pကiuတင#သတ#မHတ#ထ+$တ-6 တန#ဖiu$အeပ2မH+ မOတည#Kပ?$ လuပ#eဆ+င#မ[eတ&ကiu ခ&-Cခ+$လuပ#eဆ+င# eစမH+ Cဖစ#ပ3
တယ#။

Switch Statement eတ&ဟ+ တန#ဖiu$တစ#ခuအeပ2မH+ မOတည#Kပ?$ လuပ#eဆ+င#မ[မeတ&ကiu ခ&-Cခ+$Kပ?$ လuပ#eဆ+င#eပ$Aiuင#


ပ3တယ#။ Switch မH+ အသuB$CပuAiuင#တ-6တန#ဖiu$eတ&ကeတ+6 Primitive Data Type ထ-ကeတ+6 char, byte, short န-9
int တiuကiu အသuB$CပuAiuင#ပ3တယ#။ Java SE 5 အeန+က#မH+ ပ3ဝင#လ+ခ-6တ-6 enum type eတ&ကiuလ- Switch
Statement ရ-I တန#ဖiu$အeနန-9 အသuB$CပuAiuင#ပ3တယ#။ Java SE 7 ကeနစKပ?$eတ+6လ- String Type Variable eတ&
ကiuလ- Switch Statement ရ-I Value အeနန-9 အသuB$Cပuလ+Aiuင#ပ3တယ#။

Switch Statement eတ&ထ-မH+ Case eတ&ကiu တစ#ခuထက#မက eရ$သ+$လiuရAiuင#ပ3တယ#။ Case eတ&မH+ Switch
လuပ#မည#6 Value ရ-I Type အလiuက# Literals eတ& ဒ3မHမဟuတ# Constant eတ&ကiu eရ$သ+$Aiuင#ပ3တယ#။ တကယ#လiu
Value ဟ+ Switch လuပ#မည#6 Value န-9 ကiuက#ည?မယ#ဆiuရင# Case eတ&ထ-ကiu ဝင#eရ+က# အလuပ#လuပ#eစမH+ Cဖစ#ပ3
တယ#။

Case eတ&ရ-I Statement eတ&ကiu လuပ#eဆ+င#ရင#$ break; ကiu eတ&ရင#eတ+6 Switch Statement eတ&ထ-ကeန
ထ&က#ခ3သ&+$မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 beak ကiu မeတ&Jခ-6ရင#eတ+6 Statement eတ&အ+$လuB$ကiu Kပ?$တ-6 အထi
လuပ#eဆ+င# သ&+$မH+ Cဖစ#ပ3တယ#။

Learning Java 90 မင#$လ&င#


Java Developer Class
နမOန+အeနန-9 int Number အလiuက# ဘ+သ+ရပ#eတ&ကiu eဖ2Cပတ-6 Statement တစ#ခuကiu eရ$သ+$Fကည#6ပ3မယ#။

void show(int i) {

switch(i) {
case 1:
System.out.println("Java SE");
break;
case 2:
System.out.println("Java EE");
break;
case 3:
System.out.println("Spring");
break;
default:
System.out.println("Everything");
break;
}
}

အထက#ပ3အတiuင#$ JShell န-9 show ဆiuတ-6 Method တစ#ခuကiu eရ$သ+$ထ+$ပ3တယ#။ အ-6ဒ? Method မH+ int အမGiu$
အစ+$ Variable i ကiu Parameter အeနန-9 ရယOထ+$ပ3တယ#။ Kပ?$eတ+6မH i အeပ2မOတည#Kပ?$ Switch လuပ#eနပ3
တယ#။ { န-9 စKပ?$ } န-9 ဆuB$တ-6 eနရ+ကeတ+6 Switch Block Cဖစ#Kပ?$ အ-6ဒ?အထ-မH+eတ+6 case eတ&ကiu တစ#ခuထက#
မက eရ$သ+$Aiuင#ပ3တယ#။

အထက#ပ3 နမOန+ထ-မH+ဆiuရင# i ရ-I တန#ဖiu$ဟ+ ပထမဆuB$ case မH+eဖ2Cပထ+$တ-6 တန#ဖiu$န-9 ကiuက#ည?ရင# အ-6ဒ? case ထ-
မH+ eရ$သ+$ထ+$တ-6 Statement eတ&ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။ အ-6ဒ?eနရ+မH+ break ကiu eတ&Jတ+န-9
switch statement ထ-က ထ&က#သ&+$မH+ Cဖစ#Kပ?$ တကယ#လiu break သ+ မeတ&Jပ3က Switch Statement ဆuB$တ-6
အထi အထ-က Statement eတ&ကiu လuပ#eဆ+င#သ&+$မH+ Cဖစ#ပ3တယ#။

Switch Block ထ-မH+ case eတ&အCပင# default ကiuလ- တစ#ခu eရ$သ+$Aiuင#ပ3တယ#။ i ရ-I တန#ဖiu$ဟ+ ဘယ# case ရ-I
တန#ဖiu$န-9မH မတOခ-6ရင# default ထ-က Statement ကiuလuပ#eဆ+င#သ&+$မH+ Cဖစ#ပ3တယ#။

jshell> show(2)
Java EE

jshell> show(4)
Everything

အထက#ပ3 ကuဒ#eတ&ထ-မH+လiu show method ကiu 2 န-9 eပ$eခ2Fကည#6တ-6 အခ3မH+ case 2 ထ-က Statement ကiu
လuပ#eဆ+င# သ&+$တ-6 အတ&က# Java EE လiu eဖ2CပeနKပ?$ 4 န-9 eပ$eခ2Fကည#6တ-6အခ3 default ထ-က Statement ကiu
လuပ#eဆ+င#သ&+$eစတ-6 အတ&က# Everything လiueဖ2Cပeပ$သ&+$တ+ကiu eတ&JရမH+ Cဖစ#ပ3တယ#။

Learning Java 91 မင#$လ&င#


Java Developer Class

Looping Statements
လuပ#eဆ+င#မ[eတ&ကiu အPကiမ#Pကiမ# လuပ#eဆ+င#စလiuတ+တiu၊ Array ဒ3မHမဟuတ# Collection ထ-က Object eတ&ကiu
အသuB$CပuKပ?$ တစ#ခuKပ?$တစ#ခu လuပ#eဆ+င#မ[eတ&ကiu Cပuလuပ#eစလiuတ-6 အခ3မGiu$eတ&မH+ Looping Statement eတ&ကiu
အသuB$CပuAiuင#ပ3တယ#။ Java မH+ Looping Statement အeနန-9 for statement, while statement န-9 do - while
statement ဆiuKပ?$ eရ$သ+$Aiuင#Fကပ3တယ#။

For statement

Java Programming မH+ For Statement ကiu Counter အeပ2မH+ မOတည#Kပ?$ Loop ပတ#တ-6 ပuBစBန-9 Collection ဒ3မH
မဟuတ# Array တစ#ခuထ-မH+ Qiတ-6 Element eတ&ကiu Iterate လuပ#တ-6 ပuBစBဆiuKပ?$ AHစ#မGiu$eရ$သ+$Aiuင#ပ3တယ#။ အထက#ပ3
ပuBစBကeတ+6 Counter အeပ2မH+မOတည#Kပ?$ Loop ပတ#တ-6 ပuBစBမGiu$ Cဖစ#ပ3တယ#။

Counter ကiu အသuB$CပuKပ?$ eရ$သ+$တ-6 For Statement eတ&ဟ+ Java Programming ကiu စတင# Release လuပ#
တ-6 အခGiန#ကထ-က ပ3ဝင#ခ-6တ-6 eရ$သ+$ပuBCဖစ#Kပ?$ Index Number eတ&ကiu အသuB$Cပuလiuတ-6 အခ3မGiu$မH+ အသuB$Cပuသင#6တ-6
eရ$သ+$ပuBCဖစ#ပ3တယ#။

For Statement မH+ အစiတ# အပiuင#$ ၄ ခuပ3ဝင#ပ3တယ#။ အ-6ဒ3eတ&ကeတ+6 Initialization, Condition, Update
Counter န-9 For Block တiu Cဖစ#Fကပ3တယ#။ Initialization မH+eတ+6 For Loop မH+ အသuB$Cပuမည#6 Counter ကiu
Initialize လuပ#တ-6 Expression Cဖစ#ပ3တယ#။ int i = 0 လiueရ$သ+$ထ+$တ-6 အပiuင#$ Cဖစ#ပ3တယ#။ အ-6ဒ?eနရ+မH+ i ဟ+
Counter Cဖစ#Kပ?$ ကနဦ$တန#ဖiu$ကiu 0 လiu သတ#မHတ#eနပ3တယ#။

ဒuတiယ Expression ကeတ+6 Condition Cဖစ#Kပ?$ Loop အတ&င#$ဝင#မယ# မဝင#ဘO$ဆiuတ+ကiu ဆuB$Cဖတ#eပ$Aiuင#တ-6


Expression Cဖစ#ပ3တယ#။ i < 10 လiu eရ$သ+$ထ+$တ-6 အစiတ#အပiuင#$Cဖစ#Kပ?$ i ဟ+ 10 ထက#ငယ#eနရင# Loop
အတ&င#$ ဝင#eရ+က#မH+ Cဖစ#Kပ?$ for block { } အတ&င#$မH+ eရ$သ+$ထ+$တ-6 Code eတ&ကiu လuပ#eဆ+င# eစမH+ Cဖစ#ပ3
တယ#။ တကယ#လiu i ရ-I တန#ဖiu$ဟ+ 10 ထက# မငယ#eတ+6ဘO$ဆiuရင#eတ+6 for loop ကiu Kပ?$ဆuB$eစမH+ Cဖစ#ပ3တယ#။

eန+က# Expression တစ#ခuကတ+6 Counter ကiu Update လuပ#eပ$မည#6 Expression Cဖစ#ပ3တယ#။ Loop ထ-ကiu ဝင#
eရ+က#Kပ?$ For Block ထ-က ကuဒ#eတ&ကiu လuပ#eဆ+င#Kပ?$တiuင#$ Counter ကiu Update လuပ#မH+ Cဖစ#ပ3တယ#။
အထက#ပ3 နမOန+ထ-မH+eတ+6 i ++ ကiu eရ$သ+$ထ+$တ-6 အတ&က# တစ#Pကiမ# Loop ပတ#Kပ?$တiuင#$ Counter Cဖစ#တ-6 i ရ-I
တန#ဖiu$က တစ#တiu$သ&+$မH+ Cဖစ#ပ3တယ#။

အထက#ပ3 နမOန+ အတiuင#$ဆiuရင# ၁၀ Pကiမ# Loop ပတ#Kပ?$တ-6 အခ3မH+ Counter ရ-I တန#ဖiu$ဟ+ 10 Cဖစ#လ+Kပ?$ i < 10
ဆiuတ-6 Boolean Expression ရ-I ရလဒ#ဟ+ false Cဖစ#လ+တ-6အခ3မH+ For Loop ကiu Kပ?$ဆuB$eစမH+ Cဖစ#ပ3တယ#။

Learning Java 92 မင#$လ&င#


Java Developer Class

jshell> String [] array = {"Hello", "Java"}


array ==> String[2] { "Hello", "Java" }

jshell> for(int i = 0; i < array.length; i ++) {


...> System.out.println(array[i]);
...> }
Hello
Java

အထက#ပ3 နမOန+ထ-မH+ array ထ-မH+ “Hello” န-9 “Java” တiuကiu eရ$သ+$ထ+$ပ3တယ#။ Kပ?$eတ+6 for statement ရ-I
Counter ကiu 0 ကeန စeစKပ?$ Condition အeနန-9 i < array.length လiu eရ$သ+$ထ+$တ-6 အတ&က# i ဟ+ array ရ-I
Length Cဖစ#တ-6 2 ထက# ငယ#eနသမZ Loop အတ&င#$Qi ကuဒ#eတ&ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 AHစ#
Pကiမ# Loop ပတ#သ&+$တ+ကiu eတ&Jရပ3လiမ#6 မယ#။

ဒ?လiuမGi$ Array ထ-မH+Qiတ-6 Element eတ&ကiu Iterate လuပ#Kပ?$ အသuB$CပuခGင#ရင# eန+က#တစ#မGiu$ eရ$သ+$Aiuင#ပ3eသ$
တယ#။ အ-6ဒ3ကeတ+6 Java 5 မH+ စတင#ပ3ဝင#လ+ခ-6တ-6 Enhance For Statement Cဖစ#ပ3တယ#။

Enhance For Statement eတ&ဟ+ Array ဒ3မHမဟuတ# Collection eတ&ရ-I Element eတ&ကiu တစ#ခuခGင#$ Iterate
လuပ#Kပ?$ အသuB$Cပuလiuတ-6 အခ3မGiu$မH+ အသuB$ဝင#ပ3တယ#။ for (Type obj : list) ဆiuKပ?$ eရ$သ+$ထ+$တ-6 eနရ+မH+ Type
ဟ+ list ထ-မH+Qiတ-6 Element ရ-I Type ကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ list Object ထ-မH+Qiတ-6 Element eတ&က obj
အeနန-9 Itelrate လuပ#Kပ?$ for block ထ-မH+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ List ထ-မH+Qiတ-6 Element eတ& အ+$လuB$
Iterate လuပ#Kပ?$တ-6 အခ3မH+ for loop ကiu Kပ?$ဆuB$eစမH+ Cဖစ#ပ3တယ#။

jshell> for(String str : array) {


...> System.out.println(str);
...> }
Hello
Java

အထက#ပ3နမOန+ထ-မH+ for (String str : array) လiueရ$သ+$ထ+$တ-6 အတ&က# array ထ-မH+Qiတ-6 String eတ&ကiu
Iterate လuပ#သ&+$မH+ Cဖစ#ပ3တယ#။ array = {“Hello”, “Java”} လiueရ$သ+$ထ+$တ-6 အတ&က# array ထ-မH+ String
AHစ#ခuQiKပ?$ အeCဖမH+လ- Hello န-9 Java ကiu ထuတ#Cပသ&+$Aiuင#တ+ကiu eတ&Jရပ3မယ#။

Enhance For Statement eတ&ဟ+ Array ဒ3မHမဟuတ# Collection ထ-က Element eတ&ကiu တစ#ခuခGင#$ Iterate
လuပ#Kပ?$ အသuB$CပuAiuင#တ-6 အတ&က# For Each Statement လiueခ2ဆiueလ6Qiပ3တယ#။

Learning Java 93 မင#$လ&င#


Java Developer Class

While Statement

Condition တစ#ခuဟ+ မHန#eနသ၍ အPကiမ#Pကiမ# အလuပ#လuပ#eနeစလiuတ-6 အခ3မGiu$မH+ while statement ကiu eရ$သ+$
အသuB$CပuAiuင#ပ3တယ#။

While Statement ကiu eရ$သ+$တ-6 eနရ+မH+ While Block ထ-ကiu ဝင#Kပ?$ အလuပ#လuပ#မလ+$ မလuပ#ဘO$လ+$ဆiuတ+
ကiu စစ#eဆ$Aiuင#တ-6 Condition န-9 အ-6ဒ? Condition မHန#eနခ-6ရင# အလuပ#လuပ#eစခGင#တ-6 ကuဒ#eတ&ကiu eရ$ထ+$လiuရတ-6
While Block တiu ကiu eရ$သ+$ထ+$ဖiuလiuအပ#ပ3တယ#။

Program Flow အရဆiuရင# အရင#ဆuB$ Condition န-9 စစ#တယ#၊ ကiuက#ရင# While Block ထ-က ကuဒ#eတ&ကiu အလuပ#
လuပ#eစပ3တယ#။ မကiuက#ရင# While Loop ထ-က eန ထ&က#ပ3မယ#။ While Block ထ-က ကuဒ#eတ&ကiu လuပ#eဆ+င#Kပ?$
တiuင#$ Condition ကiu Cပန#Kပ?$ စစ#ပ3တယ#။ Condition န-9 ကiuက#ည?eနတiuင#$ While Block ထ-က ကuဒ#eတ&ကiu အလuပ#
လကuပ#eစမH+ Cဖစ#ပ3တယ#။ Condition eနရ+ကiu Boolean Expression န-9 eရ$သ+$Aiuင#Kပ?$ အ-6 ဒ?eနရ+မH+ true ကiu
သ+eရ$ထ+$မယ#ဆiuရင# While Loop ထ-ကeန ထ&က#Aiuင#eတ+6မH+ မဟuတ#ပ3ဘO$။

jshell> int count = 0;


count ==> 0

jshell> int limit = 5;


limit ==> 5

jshell> while(count < limit) {


...> System.out.print(count);
...> count++;
...> }
01234

အထက#ပ3နမOန+ထ-မH+eတ+6 count ကiu 0 လiueပ$ထ+$Kပ?$ limit ကiu 5 လiueပ$ထ+$ပ3တယ#။ While Loop ထ-ကiu ဝင#မ
လ+$ဆiuတ+ကiu စစ#တ-6 Condition eနရ+မH+ count < limit လiu eရ$သ+$ထ+$ပ3တယ#။ count ဟ+ limit ထက#ငယ#
eနတ-6 အတ&က# While Block ထ-က ကuဒ#eတ&ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။ While Block ထ-မH+eတ+6 count
ကiu Print လuပ#Kပ?$ count ကiu တစ#တiu$eနeစပ3တယ#။ ဒ3eFက+င#6 Loop တစ#ခ3 ပတ#Kပ?$တiuင#$ Count ဟ+ တစ#တiu$
သ&+$ပ3မယ#။ ၅ Pကiမ# Loop ပတ#Kပ?$တ-6အခ3မH+eတ+6 count ဟ+ 5 Cဖစ#လ+Kပ?$ Condition စစ#တ-6အခ3မH+ မမHန#eတ+6
ပ- Loop ထ-ကeန ထ&က#သ&+$မH+ Cဖစ#ပ3တယ#။

While Statement ကiu eရ$သ+$တ-6အခ3မH+ Condition ကiu တစ#ခGiန#ခGiန#မH+ ထ&က#eအ+င# eရ$သ+$ထ+$ဖiuလiuပ3တယ#။


မဟuတ#ရင# Endless Loop Cဖစ#သ&+$eစAiuင#တယ#ဆiuတ+ကiu သတiထ+$ဖiuလiuအပ#ပ3လiမ#6မယ#။

Learning Java 94 မင#$လ&င#


Java Developer Class

Do While Statement

Do While Statement ဟ+လ- Condition တစ#ခuအeပ2မOတည#Kပ?$ အPကiမ#Pကiမ#လuပ#eဆ+င# eစAiuင#တ-6 Statement


တစ#မGiu$Cဖစ#ပ3တယ#။

While Statement န-9 ဆင#တOသလiuQieပမ-6 မတOည?တ+ကeတ+6 Do Block ထ-က ကuဒ#eတ&ကiu အရင# အလuပ#လuပ#eစ
Kပ?$မH While ထ-က Condition ကiu စစ#eဆ$eနတ+ပ- Cဖစ#ပ3တယ#။ အ-6ဒ?အတ&က# Do Block ထ-က Code eတ&ကiu အ
န-ဆuB$ တစ#Pကiမ#eတ+6 အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။ Do Block ထ-က ကuဒ#eတ&ကiu အလuပ#လuပ#Kပ?$တ-6 အခ3မH+
While Condition န-9 စစ#eဆ$Kပ?$ မHန#တယ#ဆiuရင# eန+က#တစ#Pကiမ# Do Block ကiu အလuပ#လuပ#eစKပ?$ မH+$တယ#ဆiuရင#
eတ+6 Do While Loop ထ-ကeန ထ&က#သ&+$မH+ Cဖစ#ပ3တယ#။

jshell> int count = 3;


count ==> 3

jshell> while(count < 3) {


...> System.out.println(count);
...> count ++;
...> }

jshell>

jshell> do {
...> System.out.println(count);
...> count ++;
...> } while (count < 3);
3

အထက#ပ3နမOန+ထ-မH+ while ရ-I Condition န-9 do while ရ-I Condition တiuဟ+ အတOတOပ3ပ-။ count ဟ+ 3 Cဖစ#တ-6
အတ&က# AHစ#ခuလuB$ Condition န-9 မကiuက#ည?ပ3ဘO$။ While Statement ရ-I Loop ထ-ကiu မဝင#eပမ-6 Do While
Statement ထ-ကiueတ+6 တစ#Pကiမ# အလuပ#လuပ#သ&+$တ+ကiu eတ&Jရပ3မယ#။ Do While Statement ဟ+ Do ကiu တစ#
Pကiမ# အလuပ#လuပ#ခiuင#$Kပ?$မH Condition ကiu စစ#eဆ$eနတ-6 အတ&က# Cဖစ#ပ3တယ#။


Learning Java 95 မင#$လ&င#


Java Developer Class

Branching Statement
ပUiuဂရမ# အသ&+$အလ+eတ&ကiu eCပ+င#$ပစ#eအ+င# eရ$သ+$လiuတ-6 အခ3မGiu$eတ&မH+ Branching Statement eတ&ကiu
အသuB$CပuAiuင#ပ3တယ#။ ဆiuFကပ3ဆiu၊ Method တစ#ခuကiu eရ$သ+$eနတ-6 eနရ+မH+ Uuတ#တရက# အ-6ဒ? Method ကiuKပ?$ဆuB$
eစလiuတ-6အခ3မGiu$ Qiတတ#Fကပ3မယ#။ တဖန# Looping eတ&ထ-ကeန အeနအထ+$တစ#မGiu$eFက+င#6 Looping ကiu ဆ
က#Kပ?B$ မလuပ#eစလiuတ-6 အခ3မGiu$Qiပ3မယ#။ Kပ?$eတ+6 လက#Qi Looping ထ-က Statement eတ&ကiu ဆက#Kပ?$ မလuပ#eစ
လiueတ+6ပ- eန+က#တစ#eခ3က# Loop ပတ#eစလiuတ-6 အခ3မGiu$ Qiတတ#Fကပ3မယ#။ အ-6ဒ?လiu အခ3မGiu$မH+ Branching
Statement eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

Branching Statement အeနန-9 အသuB$CပuAiuင#တ+ကeတ+6 Return, Break န-9 Continue တiuပ- Cဖစ#ပ3တယ#။
Branching Statement eတ&က Label eတ&န-9တ&-Kပ?$ အသuB$CပuAiuင#Kပ?$ မiမiလiuအပ#သလiu Programming Flow ကiu
တစ#မGiu$eCပ+င#$Kပ?$ လuပ#eဆ+င#eစAiuင#ပ3တယ#။

Return Statement

Return Statement eတ&ကiu Return Type ပ3တ-6 Method eတ&မH+ eရ$သ+$ခ-6ဘO$ပ3တယ#။ Method eတ&ရ-I
eန+က#ဆuB$eနရ+မH+ Method Signature မH+ပ3တ-6 Return Type အလiuက# တန#ဖiu$တစ#ခuခuကiu Return Cပန#eပ$ခ-6Fက
မH+ပ3။ တနည#$eCပ+ရမယ#ဆiuရင# အ-6ဒ3ဟ+လ- Return Statement တစ#ခuCဖစ#ပ3တယ#။

boolean isEven(int data) {


return data % 2 == 0;
}

အထက#ပ3 Method ဟ+ int တန#ဖiu$တစ#ခuကiu စuBကiန#$တစ#ခu ဟuတ#မဟuတ# စစ#eပ$Aiuင#တ-6 Method တစ#ခu Cဖစ#ပ3
တယ#။ အ-6ဒ? Method မH+ boolean type ကiu Return Type အeနန-9 သတ#မHတ#ထ+$တ-6 အတ&က# အ-6ဒ? Method ရ-I
eန+က#ဆuB$တစ#eနရ+မH+ boolean value ကiu Return Cပန#eပ$ရပ3မယ#။ ဒ?eနရ+မH+ return data % 2 == 0 လiu
Boolean Expression တစ#ခuကiu eရ$သ+$ထ+$ခ-6ပ3တယ#။ ဒ36eFက+င#6 data ကiu 2 န-9 စ+$Kပ?$ အrကင#$ဟ+ 0 Cဖစ#ရင#
true ကiu return Cပန#မH+ Cဖစ#Kပ?$ မဟuတ#ရင#eတ+6 false ကiu return Cပန#မH+ Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+ သတiCပueစလiuတ+ကeတ+6 return Cပန#Kပ?$ရင# အ-6ဒ? Method ထ-က ဘ+ကuဒ#ကiuမH eရ$လiu မရeတ+6ဘO$ဆiu
တ+ကiuပ3ပ-။ ဒ?eနရ+မH+ eရ$သ+$ထ+$တ-6 return data % 2 == 0; ဆiuတ+က return statement Cဖစ#ပ3တယ#။

Return Cပန#စရ+မလiuတ-6 void method eတ&မH+လ- return statement ကiu eရ$သ+$Aiuင#ပ3တယ#။ void method eတ&
မH+ return; ဆiuKပ?$ eရ$သ+$ လiuက#တ+န-9 Method ထ-မH+Qiတ-6 return statement ရ-I eန+က#က ကuဒ#eတ&ကiu ဆက#မ
လuပ#eတ+6ပ- အ-6ဒ? Method ကiu Kပ?$ဆuB$eစမH+ Cဖစ#ပ3တယ#။

void sell(String item) {


if(isNoItem()) {
return;
}
System.out.println(item + " has to sell");
}

Learning Java 96 မင#$လ&င#


Java Developer Class
အထက#ပ3 sell method ထ-မH+ if statement တစ#ခuကiu eရ$သ+$ထ+$ပ3တယ#။ if statement ထ-မH+eတ+6
isNoItem() ဆiuတ-6 Method ကiu Invoke လuပ#ထ+$ပ3တယ#။ အ-6ဒ? isNoItem() ဆiuတ-6 Method ကiu if statement ထ-
မH+ eရ$သ+$ထ+$တ-6 အတ&က# isNoItem() method ရ-I Return Type ဟ+ boolean တန#ဖiu$တစ#ခu Cဖစ#ရပ3မယ#။
တကယ#လiu eရ+င#$စရ+ မQieတ+6ရင# true ကiu Return Cပန#Kပ?$ eရ+င#$စရ+Qieသ$ရင#eတ+6 false လiu Return Cပန#ပ3
မယ#။

eရ+င#$စရ+မQieတ+6ရင# if block ထ-ကiu ဝင#လ+မH+Cဖစ#Kပ?$ retrun; statement ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။


return statement ကiu method ထ-မH+ပ-eရ$သ+$လiuရKပ?$၊ အ-6ဒ? Statement ကiu eတ&Jတ+န-9 လက#Qi Method ကiu
အလuပ#လuပ#eနတ+ကiu Kပ?$ဆuB$eစမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 eရ+င#$စရ+မQieတ+6ရင# အ-6ဒ?eနရ+မH+ပ- Method
လuပ#eဆ+င#မ[ကiu Kပ?$ဆuB$eစKပ?$ eန+က#က ကuဒ#eတ&ကiu ဆက#Kပ?$ အလuပ#လuပ#မH+ မဟuတ#eတ+6ပ3ဘO$။

Return Statement ကiu eရ$သ+$တ-6 eနရ+မH+ return statement ဟ+ လက#QiQieနတ-6 Block ရ-I eန+က#ဆuB$ ကuဒ#
Cဖစ#ဖiuလiuအပ#ပ3တယ#။ အထက#ပ3နမOန+ထ-မH+ ဆiuရင# return ကiu if block ထ-မH+ eရ$သ+$ထ+$တ-6 အတ&က# အ-6ဒ?
Block ထ-မH+ဆiuရင# return ဟ+ eန+က#ဆuB$ Statement Cဖစ#eနဖiuလiuပ3တယ#။

တကယ#လiu block တစ#ခuထ-မH+ return statement ရ-I eန+က#မH+ eရ$သ+$ထ+$တ-6 ကuဒ#eတ&Qieနမယ#ဆiuရင#


Compile Time မH+တင# Exception ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ အထက#ပ3နမOန+ထ-မH+လiu System.out.print
လiueရ$ထ+$တ-6 ကuဒ#eတ&ဟ+ return eအ+က#မH+ Qieနeပမ-6 Block မတOပ3ဘO$။ return ဟ+ if block ထ-မH+QiKပ?$
System.out.print ဟ+ method block ထ-မH+ Qiပ3တယ#။ ဒ?လiuမGiu$ Block မတOရင#eတ+6 eရ$သ+$လiuရပ3တယ#။
သတiထ+$ရမH+က Block တစ#ခuထ-မH+ return statement ရ-I eန+က#မH+ ဘ+ကuဒ#မH eရ$လiu မရဘO$ဆiuတ-6 အခGက#ပ-
Cဖစ#ပ3တယ#။ Java Programming ကiu စတင#eလ6လ+တ-6 eနရ+မH+ ကuဒ# Block eတ&န-9 သOတiuရ-I Scope eတ&ကiu
eက+င#$eက+င#$ န+$လည#ထ+$ဖiuလiuအပ#ပ3တယ#။

Break Statement

Break Statement eတ&ကiu Switch Statement eတ&၊ Looping Statement eတ&Cဖစ#Fကတ-6 For, While, Do
While Statement eတ&န-9 တ&-ဖက#eရ$သ+$Aiuင#ပ3တယ#။ အeFက+င#$တစ#မGiu$မGiu$eFက+င#6 break statement ကiu
eရ+က#Kပ?ဆiuတ+န-9 လက#Qi Statement ထ-ကeန ထ&က#eပ$Aiuင#ပ3တယ#။ Switch Statement န-9 break ကiu တ&-သuB$
တ+ကiueတ+6 Switch Statement မH+ eလ6လ+ခ-6Kပ?$ Cဖစ#တ-6 အတ&က# ဒ?eနရ+မH+eတ+6 Looping Statement န-9
ပတ#သက#တ+eတ&ကiuပ- eဖ2Cပသ&+$မH+ Cဖစ#ပ3တယ#။

for (int i = 0; i < 10; i ++) {


if(i == 5) {
break;
}
System.out.println("Lopping count is " + (i + 1));
}

အထက#ပ3နမOန+ကuဒ#eတ&မH+ For Statement တစ#ခuကiu eရ$သ+$ထ+$ပ3တယ#။ Counter Cဖစ#တ-6 i ဟ+ 0 ကeန စ


Kပ?$ 10 ထက#ငယ#eနသမZeတ+6 ဒ? Loop ထ-မH+ အလuပ#လuပ#eနမH+ပ3။ ဒ3eပမ-6 for block ထ-မH+ if Statement တစ#ခu
ကiu eရ$သ+$ထ+$Kပ?$ i == 5 လiu eရ$သ+$ထ+$ခ-6ပ3တယ#။

ဒ3eFက+င#6 Counter Cဖစ#တ-6 i ဟ+ 5 Cဖစ#သ&+$ရင# break statement ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 5
Pကiမ# Loop ပတ#Kပ?$တ-6 အခ3မH+ i ရ-I တန#ဖiu$ဟ+ 5 Cဖစ#သ&+$Kပ?$ if block ကiu အလuပ#လuပ#eစမH+ Cဖစ#ပ3တယ#။ if block
ထ-မH+ break ကiu eရ$ထ+$တ-6 အတ&က# for loop ကiu Kပ?$ ဆuB$eစမH+ Cဖစ#ပ3တယ#။

Learning Java 97 မင#$လ&င#


Java Developer Class
Break Statement ဟ+လ- block ရ-I eန+က#ဆuB$ Statement Cဖစ#တ-6 အတ&က# break ရ-I eန+က#မH+ ဘ+ကuဒ#eတ&မH
eရ$သ+$လiu ရမH+ မဟuတ#ပ3ဘO$။ break; လiueရ$ထ+$တ+န-9 Current Looping Block ကiu Kပ?$ဆuB$eစမH+ Cဖစ#ပ3တယ#။
တဖန# break statement ကiu label eတ&န-9လ- တ&-Kပ?$ အသuB$CပuAiuင#ပ3တယ#။

ဒ?လiu eရ$သ+$ပuBက Nested Loop eတ&မH+ အသuB$CပuAiuင#ပ3တယ#။ Nested Loop ဆiuတ+က Looping Statement
eတ&မH+ ထပ#Kပ?$ Looping Statement eတ&ကiu eရ$သ+$တ-6 ပuBစBပ3။

String [] months = {"JAN", "FEB", "MAR", "APR", "MAY",


"JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
int [] days = {1,2,3,4,5,6,7,8,9,10};

month:
for(String m : months) {

day:
for(int i : days) {

if(i == 5) {
continue month;
}

if((m.equals("MAR") || m.equals("MAY")) && i == 3) {


break day;
}

System.out.printf("%s : %d%n", m, i);


}
}

Java ဘ+သ+ရပ#မH+ Nested Loop ကiu eရ$သ+$တ-6 eနရ+မH+ Condition အeပ2မOတည#Kပ?$ အတ&င#$ပiuင#$ Loop ထ-
ကeန Label eတ&ကiu အသuB$Cပuက+ အCပင#ဘက#မH+Qiတ-6 Loop eတ&ကiuလ- Control လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။

အထက#ပ3နမOန+ထ-မH+ eဖ2Cပထ+$တ-6အတiuင#$ အCပင#ဘက# For Loop ရ-Ie^မH+ month: လiueရ$သ+$ထ+$Kပ?$ month


ဟ+ အCပင#ဘက#က Loop ရ-I Label Cဖစ#ပ3တယ#။ တဖန# day: ကiuလ- အတ&င#$ပiuင#$ Loop မH+ eရ$သ+$ထ+$Kပ?$ day
ဟ+ အတ&င#$ပiuင#$ Loop ရ-I Label Cဖစ#ပ3တယ#။

Condition အeပ2မOတည#Kပ?$ continue တiu break တiuန-9 Label eတ&ကiu အသuB$CပuKပ?$ AHစ#သက#ရ+ Loop ကiu Control
လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။ အထက#ပ3နမOန+ထ-မH+ i ဟ+ 5 AHင#6တOရင# continue month လiueရ$သ+$ထ+$တ-6 အတ&က# i
ဟ+ 5 Cဖစ#တiuင#$ အCပင#က Loop ကiu Continue လuပ#eစမH+ Cဖစ#ပ3တယ#။ ဒuတiယ Condition မH+eတ+6 break day
လiueရ$သ+$ထ+$တ-6အတ&က# အတ&င#$ပiuင#$ Loop ကiu break လuပ#မH+ Cဖစ#ပ3တယ#။

တကယ#လiu Label Cဖစ#တ-6 day ကiu မeရ$သ+$ထ+$ခ-6ရင#လ- Current Loop ကiu Break လuပ#မH+ Cဖစ#တ-6 အတ&က#
အတ&င#$ပiuင#$ Loop ကiuပ- Break လuပ#သ&+$မH+ Cဖစ#ပ3တယ#။

Learning Java 98 မင#$လ&င#


Java Developer Class

Object Oriented Programming

Object Oriented Programming ဆiuတ+က Application ထ-မH+ပ3ဝင#တ-6 Programming Unit eတ&ကiu Object
အeနန-9Cမင#Kပ?$၊ မiမiလiuအပ#တ-6 Application Logic eတ&ကiu Object အခGင#$ခGင#$ Communicate လuပ#Cခင#အ+$Cဖင#6
Cဖစ#eCမ+က#eအ+င# eဆ+င#ရ&က#eစeသ+ Programming eရ$သ+$ပuBeရ$သ+$နည#$ တစ#မGiu$Cဖစ#ပ3တယ#။

၁၉၈၀ခueန+က#ပiuင#$မH+ ထ&က#eပ2လ+တ-6 Programming Language အeတ+#မG+$မG+$ဟ+ OOP ကiu အeCခခBထ+$


တ-6 Programming Language eတ&Cဖစ#Fကပ3တယ#။ အ-6ဒ3ကလ- OOP ရ-I ထO$Cခ+$ခGက#န-9 eခ+တ#eရစ?$eFက+င#$န-9
ပတ#သက#မယ#လiuထင#ပ3တယ#။

OOP ဟ+ Cပင#ပမH+Qiတ-6 Object eတ&ကiu Model ယOKပ?$ eရ$သ+$ထ+$တ-6 Programming Paradigm တစ#ခuCဖစ#တ-6
အတ&က# န+$လည#ရလ&ယ#ကOeစKပ?$၊ တစ#ခ3eရ$သ+$ထ+$တ-6 Class eတ&ကiu အCခ+$ System eတ&မH+လ- Cပန#လည#
အသuB$ခGAiuင#တ-6အတ&က# Reusable ကiuလ- ပiuKပ?$ တiu$တက#eစAiuင#ပ3တယ#။

OOP မတiuင#မH?က ဆiuရင# Programming eတ&ကiu Function eတ& Data eတ&န-9 ဖ&-Jစည#$ထ+$ပ3တယ#။ ဒ36eFက+င#6
Reusable သiပ#မCဖစ#ပ3ဘO$။ Application တစ#ခuကiueရ$သ+$eတ+6မယ#ဆiuရင# အစအဆuB$Cပန#eရ$eနရတ+မG+$ပ3
တယ#။ Kပ?$eတ+6လ- eလ6လ+ရခက#ခ-တ-6အတ&က# eရ$သ+$Aiuင#တ-6 Developer အeရအတ&က#ဟ+ န-ပ3$ခ-6ပ3တယ#။
၁၉၈၀ eလ+က#ကစKပ?$ Industry eတ&န-9 Business Coorporation eတ&မH+ System eတ&ကiu အမG+$အCပ+$
အသuB$Cပuလ+Fကပ3တယ#။

အ-6ဒ?လiu အeနအထ+$အရ eလ6လ+ရလ&ယ#ကOKပ?$ Cပန#လည# အသuB$ခGAiuင#တ-6 Programming Paradigm ဟ+ eခတ#ရ-I


Requirement တစ#ခuCဖစ#လ+ပ3တယ#။ OOP ကiu စတင#eအ+င#Cမင#စ&+ အသuB$Cပuလ+Aiuင#တ+ကeတ+6 Cညည
ဘ+သ+ရပ#Cဖစ#ပ3တယ#။ အ-6ဒ?eန+က#မH+မH Java ဟ+လ- OOP ကiu အeCခခBတ-6 Language တစ#ခuအeနန-9 ထ&က#
eပ2လ+ရCခင#$ Cဖစ#ပ3တယ#။

Learning Java 99 မင#$လ&င#


Java Developer Class

About OOP

OOP ဆiuတ+က Java မဟuတ#ပ3ဘO$။ Java က OOP ကiu အeCခခBKပ?$ eရ$သ+$ထ+$တ-6 Programming Language
တစ#ခuCဖစ#ပ3တယ#။ က\န#eတ+#တiu ဒ?eနရ+မH+eတ+6 Java ဘ+သ+ရပ#ကeန အeCခခBထ+$တ-6 OOP ရ-I Concept eတ&
ကiu စuစည#$eဖ2Cပသ&+$ပ3မယ#။ OOP Concept eတ&ကiu eဖ2Cပတ-6 eနရ+မH+ Class, Object, Method,
Constructor, Abstract Class န-9 Interface တiuကiu အသuB$CပuKပ?$ eဖ2Cပသ&+$မH+ Cဖစ#ပ3တယ#။

တဖန# OOP ရ-I Concept eတ&ဟ+လ- တစ#ခuန-9 တစ#ခuဆက#A&ယ#eနတ+ကမG+$ပ3တယ#။ ဒ36eFက+င#6 Concept eတ&
အeFက+င#$ကiu တစ#ခuခGင#$စ? eဖ2Cပတ-6eနရ+မH+ ဟiueနရ+မH+လ-ပ3 ဒ?eနရ+မH+လ-ပ3 Cဖစ#eနတ-6 အeFက+င#$အရ+eလ$
eတ&ပ3ဝင#သ&+$မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 Concept တစ#ခuခGင#$စ?ကiu eသeသခG+ခG+eလ6လ+Kပ?$ သeဘ+တရ+$ကiu
န+$လည#သ&+$eအ+င# eလ6လ+သ&+$eစလiuပ3တယ#။ ပ3ဝင#မည#6 အeFက+င#$အရ+eတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3
တယ#။

Encapsulation
OOP ရ-I အဓiက Concept တစ#ခuCဖစ#Kပ?$ Object တစ#ခuရ-I အတ&င#$ပiuင#$ဖ&-စည#$တည#eဆ+က#ပuBeတ&ကiu Cပင#ပကeန မ
Cမင#eအ+င# ဖuန#$က&ယ#eပ$ထ+$Aiuင#eသ+ သeဘ+တရ+$Cဖစ#ပ3တယ#။ Java ဘ+သ+ရပ#မH+ Access Modifier eတ&န-9
Interface တiuကiu အသuB$CပuKပ?$ Encapsulation ကiu ရQieအ+င# eရ$သ+$Aiuင#ပ3တယ#။

Encapsulation အeFက+င#$ကiueလ6လ+တ-6အခ3မH Encapsulation Cဖစ#eအ+င#ဘယ#လiueရ$မယ#၊ Kပ?$eတ+6


Encapsulation eFက+င#6 ဘယ#လiu အကGiu$eတ&ရလ+Aiuင#တယ#ဆiuတ+ကiu ဆက#လက#eလ6လ+သ&+$မH+ Cဖစ#ပ3တယ#။

Inheritance
မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6လiu အဓiပW3ယ#Cဖစ#Kပ?$ Class eတ&ဟ+ အCခ+$eသ+ Class eတ&ကeနတဆင#6 မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6
Qiပ3တယ#။ မGiu$Uiu$ဆက#ခBCခင#$eFက+င#6 Class eတ& အFက+$မH+ IS A Relationship ကiu Cဖစ#eပ2eစKပ?$ Super Class
ကeန ခ&င#6Cပuထ+$တ-6 Instance Member eတ&ကiu Sub Class eတ&ကeန အလiuလiu အသuB$Cပuလ+Aiuင#မH+ Cဖစ#ပ3တယ#။

Java ဘ+သ+ရပ#မH+ Inheritance ကiu အသuB$CပuCခင#$အ+$Cဖင#6 Super Class ထ-မH+Qiတ-6 Code eတ&ကiu Sub Class
ထ-ကeန Cပန#လည# အသuB$ခGAiuင#မH+ Cဖစ#သလiu Super Class န-9 Sub Class eတ&အ+$လuB$ကiu အuပ#စuတOတ-6 Class eတ&
အeနန-9လ- အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+eတ+6 Inheritance ဆiuတ+ဘ+လ-၊ ဘယ#အရ+eတ&ကiu Inheritance လuပ#ပiuင#ခ&င#6Qiလ- Kပ?$eတ+6


Inheritance ကiu ဘယ#လiueနရ+မH+ အသuB$Cပuသင#6သလ- ဆiuတ-6 အခGက#eတ&ကiu eလ6လ+သ&+$မH+ Cဖစ#ပ3တယ#။

Composition
OOP ဟ+ Code eတ&ကiu CပuCပင#eCပ+င#$လ-ရလ&ယ#ကOeစရန#၊ Cပန#လည# အသuB$ခGAiuင#ရန#ရည#ရ&ယ#ထ+$တ-6
Programming Concept တစ#ခuCဖစ#ပ3တယ#။ Java မH+က တစ#ခ3eရ$ထ+$တ-6 ကuဒ#eတ&ကiu Cပန#လည# အသuB$ခGAiuင#
eအ+င# eရ$သ+$နည#$ ၂ မGiu$Qiပ3တယ#။

ပထမတစ#နည#$ကeတ+6 Inheritance ပ3။ Inheritance လuပ#Cခင#$အ+$Cဖင#6 Super Class ထ-က ကuဒ#eတ&ကiu


အeမ&ရလiuက#သလiu Sub Class ထ-ကeန Cပန#လည# အသuB$ခGAiuင#မH+ Cဖစ#ပ3တယ#။ IS A Relationship လiuလ- eခ2
eလ6Qiပ3တယ#။

Learning Java 100 မင#$လ&င#


Java Developer Class
ဒuတiယနည#$ကeတ+6 အCခ+$ Object eတ&ကiu မiမiရ-I Class ထ-မH+ Reference လuပ#ထ+$Kပ?$ အသuB$လiuတ-6အခ3မH+ အ-6ဒ?
Object eတ&ကiu Cပန#လည# အသuB$ခGတ-6 နည#$Cဖစ#ပ3တယ#။ ဒ3ကeတ+6 Has A Relationship ကiu အသuB$CပuKပ?$ ကuဒ#
eတ&ကiu Cပန#လည# အသuB$ခGAiuင#မH+ Cဖစ#ပ3တယ#။ Composition ဆiuတ+ကeတ+6 HAS A Relationship ကiu အသuB$Cပu
Kပ?$ eရ$သ+$တ-6 နည#$ကiu eခ2ပ3တယ#။ ဒ?အခန#$မH+eတ+6 IS A Relationship ရ-I Cဖစ#eလ6Qiတ-6 Cပဿန+eတ&ကiu eဖ2Cပ
Kပ?$ Composition ကiu ဘယ#လiu အသuB$Cပuသင#6တယ#ဆiuတ+ကiu eဖ2Cပသ&+$မH+ Cဖစ#ပ3တယ#။အ

Abstraction
Abstraction ဆiuတ+ OOP ရ-I အeCခခB Concept တစ#ခuCဖစ#ပ3တယ#။ ဘuBသeဘ+eဆ+င#eသ+ Type မG+$ကiu
eရ$သ+$ အသuB$CပuAiuင#Cခင#$လiu အဓziပ3ယ#ရပ3တယ#။ ဒ?အခန#$မH+eတ+6 Abstract Class ကiu အသuB$CပuပuB၊ Interface
မG+$ရ-I အသuB$CပuပuBတiuကiueလ6လ+သ&+$ပ3မယ#။

Java ဘ+သ+ရပ#မH+ Abstract Class eတ&ကiu အသuB$CပuKပ?$eသ+#၎င#$၊ Interface eတ&ကiu အသuB$CပuKပ?$eသ+#၎င#$


Abstraction Cဖစ#eအ+င# eရ$သ+$Aiuင#ပ3တယ#။

ဒ?eနရ+မH+eတ+6 Abstraction eFက+င#6 Object eတ&ရ-I အFက+$မH+Qiတ-6 Coupling ကiu eလG+6ခGAiuင#တယ#ဆiuတ-6


အခGက#ကiu eလ6လ+သ&+$ပ3မယ#။

Polymorphism
OOP ရ-I အဓiက Concept တစ#ခuCဖစ#ပ3တယ#။ Polymorphism ဆiuတ+ဟ+ Many Form (ပuBစBအမGiu$မGiu$QieနAiuင#
Cခင#$) လiu အဓziပ3ယ#ရပ3တယ#။ Class eတ&ကiu IS A Relationship Cဖစ#eအ+င# eရ$သ+$Cခင#$အ+$Cဖင#6 Object တစ#ခu
ကiu Reference Type အမGiu$မGiu$ကeန Reference လuပ#eနAiuင#မယ#၊ Kပ?$eတ+6 Super Class ထ-မH+ပ3တ-6 General
ကGတ-6 Behavior ကiu Override လuပ#Cခင#$အ+$Cဖင#6 မတOက&-Cပ+$တ-6 Behavior eတ&ကiu Sub Class eတ&ရ-I Object
eတ&မH+ ရQiAiuင#ပ3တယ#။

Java ဘ+သ+ရပ#မH+ Class eတ& အခGင#$ခGင#$ Inheritance လuပ#ခiuင#$Cခင#$အ+$Cဖင#6 eသ+#၎င#$၊ Abstract Class eတ&
ကiu အသuB$CပuKပ?$eသ+#၎င#$၊ Interface eတ&ကiu အသuB$CပuKပ?$eသ+#၎င#$ Polymophic Cဖစ#eအ+င# eရ$သ+$Aiuင#ပ3တယ#။

ဘယ#လiueနရ+မGiu$eတ&မH+ Polymophic Cဖစ#တယ#ဆiuတ+eတ&၊ Override လuပ#Cခင#$eတ&န-9 Polymorphic Code


eတ&ကiu ဘယ#လiueနရ+မGiu$eတ&မH+ အသuB$Cပuသင#6တယ#ဆiuတ-6 အခGက#eတ&ကiu eလ6လ+Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 101 မင#$လ&င#


Java Developer Class

Encapsulation

Encapsulation ဆiuတ+ဟ+ OOP ရ-I အeရ$ပ3တ-6 Feature တစ#ခuCဖစ#ပ3တယ#။ Object eတ&မH+ State eတ&န-9
Behavior eတ&ကiu ပiuင#ဆiuင#Fကပ3တယ#။ State ဆiuတ+ကeတ+6 အ-6ဒ? Object ရ-I အရည# အeသ&$ ပiuင#ဆiuင#မ[Cဖစ#ပ3
တယ#။ Encapsulation ဆiuတ+က Object တစ#ခuရ-I ပiuင#ဆiuင#မ[eတ&ကiu Cပင#ပက အလ&ယ#တကO ထင#သလiuCပuCပင#
eCပ+င#$လ- လiuမရAiuင#eအ+င# Cပuလuပ#ထ+$Aiuင#Cခင#$ Cဖစ#ပ3တယ#။

ဆက#လက#Kပ?$ eအ+က#ပ3 အeFက+င#$အရ+eတ&ကiu eလ6လ+သ&+$Fကပ3မယ#။

Encapsulation မCဖစ#တ-6 Java Program eတ&မH+ Cဖစ#တတ#တ-6Cပဿန+

Java Program eတ&မH+ Encapsulation Cဖစ#eအ+င# ဘယ#လiueရ$မလ-

Encapsulation eFက+င#6 ရAiuင#တ-6 အကGiu$eတ&

Encapsulation မ=ဖစ%တ/0အတ3က% =ဖစ%တတ%တ/0=ပဿန"


ဆiuFကပ3စiu Person ဆiuတ-6 Class မH+ age ဆiuတ-6 instance variable တစ#ခuပ3ပ3မယ#။ တကယ#လiu Cပင#ပကeန Cပင#
ခGင#တiuင#$Cပင#eနလiuရeနရင# age eနရ+မH+ အAuတ#တန#ဖiu$eတ& ၁၅၀ eကG+#တ+eတ& လ+Kပ?$ သတ#မHတ#လiuရသ&+$ပ3
မယ#။ ဒ?လiuဆiuရင# က\န#eတ+#တiuရ-I Object ဟ+ မHန#ကန#တ-6 တန#ဖiu$ကiu ထiမ#$eပ$ထ+$Aiuင#မH+ မဟuတ#eတ+6ပ3ဘO$။

အ-6ဒ3အCပင# Method eတ&ကiuလ- အCပင#ကiu eပ$သuB$eစခGင#တ-6 Method eတ&လ- Qiသလiu အCပင#ကeန မသuB$eစခGင#တ-6
Method eတ&လ- Qiပ3တယ#။ အ-6ဒ?လiu အခ3မGiu$မH+ Encapsulation ကiu မHန#မHန#ကန#ကန# သတ#မHတ#ထ+$Aiuင#ဖiuလiuအပ#ပ3
တယ#။

class Person {
String name;
int age;

void greet() {
System.out.println("My name is " + name);
System.out.println("I am " + age + " years old");
}
}

public class PersonTest {

public static void main(String [] args) {


Person p = new Person();
p.name = "Thidar";
p.age = -10;

p.greet();
}
}

Learning Java 102 မင#$လ&င#


Java Developer Class
အထက#ပ3 နမOန+ထ-ကလiu age ကiu int အeနန-9 သတ#မHတ#ထ+$Kပ?$ Access Modifier ကiu သတ#မHတ#ထ+$Cခင#$မQiတ-6
အတ&က# p.age ဆiuတ-6 Variable မH+ int Cဖစ#ရင# Pကiuက#တ-6 တန#ဖiu$ကiu အစ+$ထiu$ခGင#တiuင#$ အစ+$ထiu$လiuရeနပ3တယ#။

ဒ36eFက+င#6 နမOန+ထ-ကလiu -10 ဆiuKပ?$ အစ+$ထiu$eနAiuင#Cခင#$ Cဖစ#ပ3တယ#။ ဒ3ဆiuရင# p ဆiuတ-6 Object ဟ+ အသက#
အAuတ# ၁၀ Qiတ-6 Person ဆiuတ-6 Object ကiu တည#eဆ+က#လiuရသ&+$ပ3မယ#။

အ-6ဒ3အCပင# အတ&င#$ပiuင#$မH+Qiတ-6 State eတ&ကiu Cပင#ပကeန တiuက#Uiuက# Access လuပ#eနAiuင#Cခင#$ဟ+ တစ#Cခ+$


Cပဿန+ တစ#ခuကiuလ- Cဖစ#eပ2eစAiuင#ပ3တယ#။ ကiuယ#မသiတ-6 eနရ+eတ&မH+ ကiuယ#6ရ-I State eတ&ကiu အသuB$CပueနAiuင#မH+
Cဖစ#ပ3တယ#။ Person Class ထ-ကeန age တiu name တiuကiu ဘယ#eနရ+မH+ သuB$eနတယ#ဆiuတ+ကiu ခန#9မHန#$လiu မရ
Aiuင#eတ+6ပ3ဘO$။ အ-6ဒ?အတ&က# လiuအပ#လ+လiu အ-6ဒ? State eတ&ကiu CပuCပင#ခGင#တယ#ဆiuရင#eတ+င# တစ#Cခ+$ဘယ#eနရ+
eတ&မH+ အကGiu$သက#eရ+က#မ[Qieနမယ#ဆiuတ+ကiu မခန#9မHန#$Aiuင#eတ+6ပ3ဘO$။ အ-6ဒ?အတ&က# CပuCပင#eCပ+င#$လ-ရခက#ခ-တ-6
Class eတ&ကiu eရ$မieနမH+ Cဖစ#ပ3တယ#။

ဒ3Cဖစ#ရင# Java Program eတ&မH+ Encapsulation Cဖစ#eအ+င# ဘယ#လiueရ$ရမယ#ဆiuတ+ကiu ဆက#Kပ?$ eလ6လ+သ&+$


Fကရeအ+င#။

Encapsulation =ဖစ%eအ"င% ဘယ%လiueရ9မလ/


Java Program eတ&ထ-မH+ Access Modifier eတ&ကiu အသuB$CပuKပ?$ eသ+#၎င#$၊ Interface ကiu အသuB$CပuKပ?$ eသ+#၎င#$
Encapsulation Cဖစ#eအ+င# eရ$သ+$Aiuင#ပ3တယ#။

Using Access Modifier


Access Modifier ဆiuတ+က Class, Interface, Enum, Variable န-9 Method eတ&ရ-I အသuB$Cပuပiuင#ခ&င#6ကiu
သတ#မHတ#eပ$Aiuင#တ-6 Modifier တစ#မGiu$ Cဖစ#ပ3တယ#။ Access Modifier eတ&ကiu Object eတ&ရ-I Member eတ&မH+
သင#6eတ+#သလiu သတ#မHတ# eရ$သ+$Cခင#$Cဖင#6လ- Encapsulation ကiu ရQieအ+င# eရ$သ+$Aiuင#ပ3တယ#။

အသuB$CပuAiuင#တ-6 Access Modifier eတ&ကeတ+6 eအ+က#ပ3 အတiuင#$Cဖစ#ပ3တယ#။

Access Modifier Description

public မည#သည#6eနရ+ကမဆiu ဆက#သ&ယ# အသuB$CပuAiuင#ပ3တယ#

protected လက#Qi Class န-9 Sub Class eတ&ကeနတဆင#6 အသuB$CပuAiuင#ပ3တယ#

private လက#Qi Class ကသ+ အသuB$CပuAiuင#ပ3တယ#။ တစ#Cခ+$eနရ+eတ&ကeနeတ+6 အသuB$CပuAiuင#


မH+ မဟuတ#ပ3ဘO$။

(default) ဘ+မH မeရ$ထ+$ရင#ရQiမည#6 Access Modifier Cဖစ#ပ3တယ#။ လက#Qi Class န-9


Package အတO အတ&င#$မH+Qieသ+ Class eတ&မHeန ဆက#သ&ယ# အသuB$CပuAiuင#မH+ Cဖစ#ပ3
တယ#

Class အတ&င#$မH+Qiတ-6 Instance Variable န-9 Instance Method eတ&e^မH+ သင#6eတ+#ရ+ Access Modifier ကiu
eရ$သ+$Cခင#$အ+$Cဖင#6 Encapsulation Cဖစ#eအ+င# eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

e^မH+ eဖ2Cပခ-6သလiu Person Class ရ-I Instance Variable Cဖစ#တ-6 name န-9 age တiuကiu private Access
Modifier ကiu eရ$သ+$Cခင#$ အ+$Cဖင#6 Cပင#ပမHတiuက#Uiuက# ဆက#သ&ယ# အသuB$မCပuAiuင#eအ+င# eဆ+င#ရ&က#Aiuင#မH+ Cဖစ#ပ3
တယ#။

Learning Java 103 မင#$လ&င#


Java Developer Class

class Person {
private String name;
private int age;

public void greet() {


System.out.println("My name is " + name);
System.out.println("I am " + age + " years old");
}
}

အထက#ပ3 အတiuင#$ Instance Variable eတ&ကiu private လiuသတ#မHတ#လiuက#Cခင#$အ+$Cဖင#6 Cပင#ပကeန တiuက#Uiuက#


ဆက#သ&ယ#ခ&င#6 QiမH+ မဟuတ#eတ+6ပ3ဘO$။ ဒ3eပမ-6 ဒ?အတiuင#$ ဆiuCပန#ရင#လ- Person Object ရ-I Instace Variable eတ&
ရ-I တန#ဖiu$ကiu သတ#မHတ#လiuရမH+ မဟuတ#eတ+6တ-6အတ&က# အသuB$CပuAiuင#မH+ မဟuတ#eတ+6ပ3ဘO$။

ဒ3eပမ-6 Instance Variable eတ&ရ-I တန#ဖiu$eတ&ကiu သတ#မHတ#ဖiuအတ&က# Method ဒ3မH မဟuတ# Constructor eတ&ကiu

public Person(String name, int age) {


this.name = name;
if(age <= 0 || age > 130) {
throw new RuntimeException(
“Age must be between 1 and 130");
}
this.age = age;
}

အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Constructor ရ-I Argument ကeန Instance Variable eတ&ကiu လက#ခBယOKပ?$ သတ#မHတ#မယ#ဆiuရင# ရAiuင#ပ3တယ#။
Constructor ထ-မH+ if statement ကiu အသuB$CပuKပ?$ လiuအပ#သလiu စစ#eဆ$Kပ?$မH Instance Variable eတ&ကiu

public void setAge(int age) {


if(age <= 0 || age > 130) {
throw new RuntimeException(
“Age must be between 1 and 130");
}
}

အစ+$ထiu$သတ#မHတ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

setter method eတ&ကiu သuB$Kပ?$လ- eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။ Method ထ-မH+လ- စစ#eဆ$Kပ?$မH တန#ဖiu$ကiu
သတ#မHတ#eပ$Aiuင#ပ3တယ#။ setter method eတ&ဟ+ Object ရ-I state eတ&ကiu eCပ+င#$လ-Aiuင#တ-6 အတ&က# Mutator
လiuလ- eခ2ဆiueလ6Qiပ3တယ#။

Learning Java 104 မင#$လ&င#


Java Developer Class

class Person {
private String name;
private int age;

public void setAge(int age) {


if(age <= 0 || age > 130) {
throw new RuntimeException(
"Age must be between 1 and 130");
}

this.age = age;
}

public void setName(String name) {


this.name = name;
}

public int getAge() {


return this.age;
}

public String getName() {


returm this.name;
}

public void greet() {


System.out.println("My name is " + name);
System.out.println("I am " + age + " years old");
}
}

တဖန# private member eတ&ကiu Cပင#ပကiu Cပန#Kပ?$eဖ2Cပeပ$ဖiuလiuတ-6အခ3မH+ getAge, getName အစQiတ-6 method
eတ&ကiu getter method eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။ getter method eတ&ကiu Accessor Method eတ&လiuလ-
eခ2ဆiueလ6Qiပ3တယ#။

ဤနည#$အ+$Cဖင#6 မiမieရ$သ+$eနတ-6 Class တစ#ခuကiu Encapsulation Cဖစ#eအ+င# eရ$သ+$လiuပ3က Instance


Variable eတ&န-9 အတ&င#$ပiuင#$မH+သ+ အသuB$Cပuလiuတ-6 method eတ&ကiu private Access Modifier ကiu အသuB$CပuKပ?$
Cပင#ပကeန အသuB$မCပuAiuင#eအ+င# ဖuန#$က&ယ#ထ+$ဖiuလiuအပ#ပ3တယ#။

တဖန# တန#ဖiu$မG+$ကiu သတ#မHတ#ရန#လiuအပ#ပ3က setter method န-9 constructor တiuကiu အသuB$Cပueရ$သ+$Aiuင#Kပ?$၊


တန#ဖiu$မG+$ကiu Cပန#လည# eဖ2Cပလiuပ3က getter method တiuကiu အသuB$Cပueရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 105 မင#$လ&င#


Java Developer Class

Using Interface

Interface ဆiuတ+က Public န-9 Abstract Method eတ&သ+ eရ$သ+$လiuရတ-6 ရ+A[န#$Cပည#6 Public Abstract
Entity အမGiu$အစ+$တစ#မGiu$ပ3။ Abstract ဆiuတ+က Method Signature ကiuသ+ eရ$သ+$eဖ2Cပထ+$Kပ?$ Body မ
ပ3တ-6 Method အမGiu$အစ+$ပ3။ Method Body မပ3ဘO$ဆiueတ+6 ဘယ#လiuလuပ#မယ#ဆiuတ+ကiu မeဖ2CပAiuင#ပ- ဘ+eတ&
လuပ#လiuရတယ#ဆiuတ+ကiuပ- eဖ2Cပeပ$Aiuင#ပ3တယ#။

public interface Movable {


void move();
}

Interface ကiu Implement လuပ#တ-6 Class eတ&ကGeတ+6မH Interface မH+ပ3တ-6 Abstract Method eတ&အ+$လuB$ကiu
Cဖည#6စ&က#eရ$သ+$eပ$ရမH+ပ3။ ဒ36eFက+င#6 Interface ဟ+ Interface ကiu လ+Kပ?$ Implement လuပ#တ-6 Class eတ&
အ+$လuB$အတ&က# Interface မH+ပ3တ-6 Method eတ&ကiu Cဖည#6eရ$eပ$ရမယ# ဆiuတ-6 Contract ကiu Cဖစ#eပ2eစပ3တယ#။

public class Car implements Movable {


public void move() {
System.out.println("Car is Moving!");
}

public void stop() {


System.out.println("Car is Stoping");
}
}

အထက#ပ3နမOန+ထ-မH+လiu Car Class ဟ+ Movable Interface ကiu Implement လuပ#လiuက#တ-6 အတ&က# Car
Class ထ-မH+ Movable ထ-မH+ပ3တ-6 move method ကiu အCပည#6အစuB eရ$သ+$eပ$ရeတ+6မH+ Cဖစ#ပ3တယ#။ ဒ?လiu
eရ$သ+$လiuက#တ+န-9 Car Class ကiu Movable အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

public static void main(String [] args) {

Movable move = new Car();


move.move();

အထက#ပ3 နမOန+ထ-မH+ Movable move = new Car(); ဆiuKပ?$ Interface Type Variable eနရ+ကiu Car Object
ကiu eဆ+က#Kပ?$ အစ+$ထiu$eနပ3တယ#။ Interface Type Variable ကeန အ-6ဒ? Interface ကiu Implement လuပ#ထ+$
တ-6 Class အမGiu$အစ+$ Object eတ&ကiu Reference လuပ#Aiuင#ပ3တယ#။ Movable Interface ကiu implement လuပ#
Cခင#$အ+$Cဖင#6 Car ကiu Movable အeနန-9 အသuB$Cပuသ&+$Aiuင#ပ3တယ#။ Movable Interface မH+ move ဆiuတ-6
method တစ#ခuပ3Kပ?$ Car Class မH+eတ+6 move န-9 stop public method eတ&ပ3တယ#ဆiuတ+ကiu သတiCပueစခGင#
ပ3တယ#။

Learning Java 106 မင#$လ&င#


Java Developer Class

move variable ဟ+ Movable Type Cဖစ#eပမ-6 eန+က#က&ယ#မH+eတ+6 Car Object ကiu Reference လuပ#eနတ+
Cဖစ#ပ3တယ#။ ဒ3eပမ-6 Compiler က အ-6ဒ?လiu အeနအထ+$မGiu$မH+ move object ဟ+ Movable Type လiuပ- သieနပ3
တယ#။ ဒ36eFက+င#6 move object ကeန တဆင#6 Movable မH+ပ3တ-6 move() method ကiu သ+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3
တယ#။ Runtime မH+ အလuပ#လuပ#တ-6 အခ3ကGeတ+6 Car Object ရ-I move() method က အလuပ#လuပ#သ&+$မH+ပ3။

Compile Time မ:"eတ"0 Reference Variable ရ/H Type ကiu သ" သiIiDပE9 Runtime က7ရင%eတ"0 Actual
Object ကiu အသu<9=ပueနတ"=ဖစ%ပ,တယ%။

ဒ?eနရ+မH+ eCပ+ခGင#တ+ကeတ+6 Interface ကiu Reference Type အeနန-9 အသuB$CပuCခင#$အ+$Cဖင#6 Interface ကeန
ခ&င#6Cပuထ+$တ-6 public method eတ&ကiuသ+ အသuB$CပuသOက သiQieစAiuင#Kပ?$ eန+က#က&ယ#က Implementation eတ&
ကiu အသuB$CပuသOဘက#ကeန မCမင#eအ+င# ဖuန#$က&ယ#eပ$ထ+$Aiuင#ပ3တယ#။ ဒ36eFက+င#6 Interface eတ&ကiu ခBKပ?$ အသuB$Cပu
Cခင#$အ+$Cဖင#6လ- Encapsulation ကiu Cမင#6မ+$eအ+င# eဆ+င#ရ&က#eပ$Aiuင#ပ3တယ#။

(Interface န-9ပတ#သက#Kပ?$ Polymorphism န-9 Abstraction တiuမH+ ဆက#လက#eဖ2Cပပ3ဦ$မယ#။)

Encapsulation e>က"င%0 ရKiuင%တ/0 အက7iu9မ7"9


တကယ#eတ+6 Encapsulation ကiu အCပင#eလ+ကမH+ eတ&JဖO$eနကG Cဖစ#ပ3တယ#။ က\န#eတ+#တiu အသuB$Cပueနတ-6
Smart Phone တစ#လuB$ကiu Fကည#6Fကရeအ+င#။ Power On တယ#၊ ဖuန#$eခ2တယ#၊ Facebook Fကည#6တယ#၊ Post
တင#တယ# Comment eရ$တယ#။ ဒ3eတ&ဆiuတ+ဟ+ ခ&င#6Cပuထ+$တ+eတ&ကiu အသuB$Cပuလiuရeနတ+ပ3။ ဖuန#$eခ2လiuက#
ရင# eန+က#က&ယ#မH+ ဘယ# Circut ထ-ကeန ဘယ#လiu လuပ#သ&+$တယ#။ Kပ?$eတ+6 ဘယ# ပUiuဂရမ#eတ&က ဘယ#လiu
အလuပ#လuပ#သ&+$တယ# ဆiuတ+ကiu သiလ- မသiAiuင#သလiu သiစရ+လ- မလiuအပ#ပ3ဘO$။ အ-6ဒ?အတ&က# Software eတ&
Update လuပ#တယ#၊ Kပ?$eတ+6 Feature အသစ#eတ& တiu$တယ# ဒ3eတ&ကiu အသuB$CပuသOeတ& သiစရ+မလiuပ- အတ&င#$ပiuင#$
မH+ပ- CပuCပင#လiuရပ3တယ#။

Object eတ&ရ-I State eတ&ကiu မHန#ကန#eအ+င# ထiမ#$eပ$ထ+$Aiuင#Cခင#$



Object eတ&ရ-I State eတ& Cဖစ#Fကတ-6 Instance Variable eတ&ရ-I တန#ဖiu$ကiu Setter Method eတ&ကeနတဆင#6
သတ#မHတ#eစeသ+eFက+င#6 မHန#ကန#မ[ကiu စစ#eဆ$မ[တiuကiu Cပuလuပ#Aiuင#မH+ Cဖစ#တ-6 အတ&က# Object eတ&ရ-I State
eတ&ကiu မHန#ကန#eအ+င# ထiမ#$eပ$ထ+$Aiuင#မH+ Cဖစ#ပ3တယ#


Flexibility ကiu Cမင#6မ+$eအ+င# eဆ+င#ရ&က#eပ$Aiuင#Cခင#$



Object eတ&ကiu အသuB$Cပueနတ-6 eနရ+မH+ public method eတ& Interface Method eတ&ကeန တဆင#6
အသuB$CပuရမH+ Cဖစ#တ-6 အတ&က# အသuB$Cပueနတ-6 eနရ+မH+ အတ&င#$ပiuင#$ အeသ$စiတ# ကiစ{eတ&ကiu သiစရ+မလiuအပ#
eတ+6ပ3ဘO$။ အ-6ဒ? Object ကiu Cပင#ဆင#လiuတ-6အခ3မH+လ- public method eတ&ရ-I Signature ကiuသ+မHန#ကန#eအ+င#
Cပuလuပ#ထ+$မယ#ဆiuပ3က အသuB$Cပueနတ-6ဘက#ကiu ထiခiuက#မ[မQieအ+င# eဆ+င#ရ&က#eပ$Aiuင#မH+ Cဖစ#တ-6 အတ&က#
Flexibility ကiuCမင#6မ+$eအ+င# eဆ+င#ရ&က#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#


Maintainability ကiu Cမင#6မ+$eအ+င# eဆ+င#ရ&က#eပ$Aiuင#Cခင#$



CပuCပင#စရ+လiuအပ#လ+ရင#လ- အတ&င#$ပiuင#$ကiu CပuCပင#လiuက#UuBသ+Cဖစ#Kပ?$ Cပင#ပကiu အကGiu$သက#eရ+က#မ[န-eစမH+ Cဖစ#
တ-6အတ&က# Maintainability ကiu တiu$တက#eစမH+ Cဖစ#ပ3တယ#။

Learning Java 107 မင#$လ&င#


Java Developer Class

Inheritance

Inheritance ဆiuတ+Cမန#မ+လiu တiuက#Uiuက#ဘ+သ+Cပန#မယ#ဆiuရင# မGiu$Uiu$ဆက#ခBCခင#$လiu Cပန#ဆiuAiuင#မH+ Cဖစ#Kပ?$ OOP ရ-I


အဓiက Feature တစ#ခuလ- Cဖစ#ပ3တယ#။ Inheritance န-9 ပတ#သက#Kပ?$ eအ+က#ပ3 အeFက+င#$အရ+မG+$ကiu eလ6လ+
သ&+$ပ3မယ#

Inheritance ဆiuတ+ဘ+လ-

Inheritance လuပ#လiuရတ+eတ&က ဘ+eတ&လ-

ဘယ#လiueနရ+eတ&မH+ Inheritance ကiu အသuB$Cပuသင#6Kပ?$ ဘယ#လiueနရ+eတ&မH+ မသuB$သင#6တ+လ-

Inheritance ဆiuတ"ဘ"လ/
Class တစ#ခuဟ+ Class တစ#ခuကiu Extends လuပ#ပiuင#ခ&င#6QiKပ?$ Inheritance လuပ#တယ#လiuလ- eခ2eလ6Qiပ3တယ#။ ဒ36
eFက+င#6 Inheritance လuပ#တယ#လiueCပ+ရင# Code ထ-မH+ extends လiueရ$တယ#လiu န+$လည#နiuင#ပ3တယ#။ ဆiuFကပ3
စiu၊ class Dog extends Animal လiueရ$ထ+$ရင# Dog ဟ+ Animal ကiu Inheritance လuပ#ထ+$တယ#လiu သiAiuင#ပ3
တယ#။

public class Animal {


public void eat() {
System.out.println("Eating");
}
}

class Dog extends Animal {


}

အထက#ပ3 အတiuင#$ Dog ဟ+ Animal ကiu Inheritance လuပ#လiuက#တ-6 အတ&က# eအ+က#ပ3 အခGက# ၂ ခuကiu Cဖစ#eပ2
eစပ3တယ#။

Dog န-9 Animal Fက+$မH+ IS A Relationship ကiu Cဖစ#eပ2eစပ3တယ#။

Animal မH+eရ$ထ+$တ-6 Instance Members eတ&ထ-က မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6Qiတ+eတ&ကiu Dog ဆ?မH+ ရQiAiuင#ပ3


တယ#။

public static void main(String [] args) {

Animal papi = new Dog();

papi.eat();

Learning Java 108 မင#$လ&င#


Java Developer Class
IS A Relationship ကeန အရင#ဆuB$ eလ6လ+Fကည#6Fကရeအ+င#။ Dog extends Animal လiueရ$လiuက#တ+န-9 Dog
IS A Animal လiueCပ+Aiuင#Kပ?$ Dog Object eတ&ကiu Animal Type Reference Variable eတ&ကeနလ- Reference
လuပ#လ+Aiuင#ပ3တယ#။

အရင#ဆuB$eခ2eလ6Qiတ-6 keyword eလ$eတ&ကiu eCပ+Cပထ+$ပ3မယ#။ IS A Relationship ကiu Cဖစ#eပ2eစတ-6 eနရ+မH+


Inheritance အလuပ#ခBရတ-6 Class ဒ?eနရ+မH+eတ+6 Animal Class ကiu Parent Class ဒ3မH မဟuတ# Super Class
လiueခ2eလ6QiKပ?$၊ Inheritance လuပ#တ-6 Class ဒ?eနရ+မH+eတ+6 Dog Class ကiu Child Class ဒ3မHမဟuတ# Sub
Class လiueခ2eလ6Qiပ3တယ#။

Java အeFက+င#$ကiueလ6လ+တ-6eနရ+မH+ Reference Type န-9 Object Type eတ&ဟ+ မတOဘO$ဆiuတ+ကiuလ-


က&-က&-Cပ+$Cပ+$သiဖiuလiuအပ#ပ3တယ#။ Reference Type ဆiuတ+ Reference Variable eတ&မH+ Declare လuပ#ထ+$တ-6
Type ကiu ဆiuလiuတ+Cဖစ#Kပ?$ Object Type ဆiuတ+က new Operator ကiu အသuB$CပuKပ?$ Object တည#eဆ+က#ထ+$တ-6
Object ရ-I Type ကiu ဆiuလiuCခင#$Cဖစ#ပ3တယ#။

e^နမOန+ထ-မH+လiu Animal papi = new Dog() လiueရ$ထ+$တယ#ဆiuFကပ3စiu။ အ-6ဒ? Code Line ဟ+ Animal Type
papi ဆiuတ-6 reference variable ကiu JVM ရ-I Stack Memory ထ-မH+ သ&+$တည#eဆ+က#ပ3တယ#။ Kပ?$eတ+6မH new
Dog ဆiuKပ?$ Heap Memory မH+ Dog Object ကiu တည#eဆ+က#ပ3တယ#။ Kပ?$eတ+6မH Dog Object ရ-I Memory
Address ကiu papi ရ-I တန#ဖiu$အCဖစ# အစ+$ထiu$ပ3တယ#။

ဒ36eFက+င#6 Reference Variable eတ&ဟ+ Actual Value ကiu ပiuင#ဆiuင#Cခင#$မQiပ-၊ Object တစ#ခuကiu Reference လuပ#
Aiuင#တ-6 Memory Address ကiuသ+ ပiuင#ဆiuင#eနတ+Cဖစ#ပ3တယ#။ ဒ?နမOန+ထ-မH+ ဆiuရင# Animal ဆiuတ+က Reference
Type Cဖစ#Kပ?$eတ+6 Dog ကeတ+6 Object Type Cဖစ#ပ3တယ#။

IS A Relationship ကiu Cဖစ#eပ2eစတ-6အတ&က# Class တစ#ခuကeန သOန-9 သbရ-I Sub Class eတ&ရ-I Object eတ&ကiu
Reference လuပ#လ+Aiuင#ပ3တယ#။

public static void main(String [] args) {

Dog papi = new Dog();

papi.eat();

ဆက#Kပ?$ မGiu$Uiu$ဆက#ခBခ&င#6ဆiuတ+ကiu ဆက#Fကည#6Fကရeအ+င#။ Animal Class ထ-မH+eတ+6 eat() ဆiuတ-6 Method


ပ3ဝင#Kပ?$ Dog Class ထ-မH+eတ+6 eat() ဆiuတ-6 method ကiu eရ$မထ+$တ+ကiu သတiထ+$မiမH+ပ3။

Dog papi ရ-I Reference Type ဟ+ Dog Cဖစ#Kပ?$ Dog Class ထ-မH+ eat() method ကiu eရ$မထ+$ပ3ဘO$။ ဒ3eပမ-6
papi reference ကeန eat() ဆiuတ-6 method ကiu Invoke လuပ#eနပ3တယ#။ Dog Class ထ-မH+ eat behavior မပ3
eပမ-6 အသuB$Cပuလiuရeနပ3တယ#။ အ-6ဒ3ဟ+ Dog ဟ+ Animal ကiu Inheritance လuပ#ထ+$တ+Cဖစ#တ-6အတ&က# Animal
ရ-I eat behavior ကiu Dog ကeန မGiu$Uiu$ဆက#ခBAiuင#တ-6 အတ&က# Cဖစ#ပ3တယ#။

Dog Object ဟ+ Animal ရ-I eat() method ကiu Inheritance လuပ#Aiuင#တ-6 အတ&က# papi.eat() ဆiuKပ?$ အသuB$CပuAiuင#
တ+ Cဖစ#ပ3တယ#။

Learning Java 109 မင#$လ&င#


Java Developer Class

Inheritance လuပ%လiuရတ"eတ3ကဘ"eတ3လ/
Super Class ကeန Sub Class အတ&က# ဘ+eတ&ကiu Inheritance လuပ#ပiuင#ခ&င#6eပ$တ+လ-။ အတiuဆuB$eCပ+ရရင#
eတ+6 Instance Member eတ&ကiu Inheritance လuပ#ပiuင#ခ&င#6eပ$Aiuင#ပ3တယ#။ အeသအခG+ စT#$စ+$ရင#eတ+6
Inheritance ဆiuတ-6 eနရ+မH+ ၂ မGiu$QiAiuင#ပ3တယ#။ အ-6ဒ3eတ&ကeတ+6 သ+$သမ?$Cဖစ#UuBန-9 ရQiလ+Aiuင#တ-6 အခ&င#6အeရ$
eတ&န-9 မCဖစ#မeန လuပ#eဆ+င#eပ$ရမည#6 တ+ဝန#တiuဆiuKပ?$ ခ&-Aiuင#ပ3တယ#။

မ7iu9Miu9ဆက%ခ<=ခင%9
ရQiAiuင#တ-6 အeမ&eတ&ကeတ+6 Super Class ထ-က Cမင#eနAiuင#တ-6 ပiuင#ဆiuင#မ[eတ&၊ Instance Variable eတ&န-9
Instance Method eတ& Cဖစ#ပ3တယ#။ ဒ?eနရ+မH+ Cမင#eနAiuင#တ-6လiu တမင#eCပ+တ+ပ3။ အeမ&ရတယ#ဆiuတ+က သieန
Aiuင#တ-6 အရ+ကiuပ-ရမH+ပ3။ မသieအ+င# ဖ&က#ထ+$တ+၊ Kပ?$eတ+6 မသiAiuင#တ-6 အရ+eတ&ကiueတ+6 ရမH+ မဟuတ#ပ3ဘO$။

ဖ&က#ထ+$တ-6 အရ+eတ&ဆiuတ+က private access modifier ကiu သuB$Kပ?$ eရ$ထ+$တ-6 instance method eတ&န-9
instance variable eတ&ကiueတ+6 Sup Class eတ&က Inheritance လuပ#လiuမရပ3ဘO$။ Kပ?$eတ+6 Package မတOတ-6
eနရ+မH+QiKပ?$ Default Access Cဖစ#eနရင#လ- Package မတOရင# မCမင#Aiuင#တ-6 အတ&က# Inheritance လuပ#မည#6
Member eတ&ထ-မH+ မပ3ပ3ဘO$။

Access Modifier Same Package Different Package

public Can Inherit Can Inherit

protected Can Inherit Can Inherit

default Can Inherit Can not Inherit

private Can not Inherit Can not Inherit

Access Modifier အရeCပ+ရမယ#ဆiuရင# public န-9 protected eတ&ကiuဆiuရင#eတ+6 ဘယ#eနရ+ကမဆiu Cမင#eနAiuင#


တ-6အတ&က# Inheritance လuပ#ပiuင#ခ&င#6Qiပ3တယ#။ private Access Modifier ဆiuရင#eတ+6 ဘယ# Class ကမH+
Inheritance လuပ#လiu မရပ3ဘO$။ Default Access ဆiuရင#eတ+6 Package တOeနရင# Inheritance လuပ#ပiuင#ခ&င#6QiKပ?$
Package မတOရင#eတ+6 Inheritance လuပ#ပiuင#ခ&င#6 မQiပ3ဘO$။

Learning Java 110 မင#$လ&င#


Java Developer Class

အထက#ပ3 Class Diagram ထ-မH+eတ+6 Animal Class န-9 Bird Class တiuဟ+ com.jdc.zoo Package ထ-မH+
အတOတOQiFကပ3တယ#။ com.jdc.zoo.pool Package ထ-မH+eတ+6 Fish Class Qiပ3တယ#။ Kပ?$eတ+6 Bird Class
eက+ Fish Class ပ3 Animal Class ကiu Extend လuပ#ထ+$ပ3တယ#။ မတOတ+ကeတ+6 Bird န-9 Animal Class ဟ+
Package အတOတOထ-မH+QiKပ?$ Fish Class ကeတ+6 တစ#Cခ+$ Package တစ#ခuထ-မH+ Qiပ3တယ#။

Animal Class ထ-မH+eတ+6 eat() ဆiuတ-6 public method ရယ# move() ဆiuတ-6 protected method ရယ# sleep()
ဆiuတ-6 Default Method ရယ# oneDayUp() ဆiuတ-6 private method တiuကiu ပiuင#ပ3တယ#။ Animal Class ကiu
Inheritance လuပ#လiuက#Cခင#$အ+$Cဖင#6 Bird န-9 Fish တiuမH+ ဘ+eတ&ကiu မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6 Qiသ&+$မလ-။

eat() န-9 move() method တiuကeတ+6 Public န-9 Protected Cဖစ#Fကတ-6 အတ&က# Animal ရ-I Sub Class eတ&
အ+$လuB$ မGiu$Uiu$ဆက#ခBခ&င#6ကiu ရQiFကမH+ပ3။ sleep() method ကeတ+6 Default Access Cဖစ#တ-6 အတ&က# Package
ခGင#$တOတ-6 Bird မH+eတ+6 မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6QiKပ?$ Package မတOတ-6 Fish မH+eတ+6 မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6 QiမH+
မဟuတ#ပ3ဘO$။ oneDayUp() method ကeတ+6 private Cဖစ#တ-6 အတ&က# ဘယ# Sub Class ကမH မGiu$Uiu$ဆက#ခBပiuင#ခ&
င#6 QiမH+ မဟuတ#ပ3ဘO$။ Instance Variable eတ&လ- အလ+$တOပ- အလuပ#လuပ#မH+ Cဖစ#ပ3တယ#။

SINGLE INHERITANCE

က\န#eတ+#တiu ဘ+eတ&ကiu Inheritance လuပ#လiuရတယ#ဆiuတ+ကiu သiKပ?$တ-6eန+က#မH+ ဘယ#eလ+က# အထi


Inheritance လuပ#လiuရAiuင#လ-ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

ဆiuFကပ3စiu။ က\န#eတ+#တiuရ-I System ထ-မH+ scan လuပ#Aiuင#တ-6 Scanner Class တစ#ခuရယ# print လuပ#Aiuင#တ-6 Printer
တစ#ခuQiပ3တယ#။ Copyer က scan လ-လuပ#ခGင#တယ#၊ Kပ?$eတ+6 print လ- လuပ#ခGင#လ+ရင# Scanner န-9 Printer ကiu
Extends လuပ#လiuက#ရင#ရမယ#လiu ထင#ပ3လiမ#6မယ#။ Class တစ#ခuထက#မက ကiu extends လuပ#Aiuင#တ+ကiu Multiple
Ihneritance လiueခ2ပ3တယ#။ ဒ3eပမ-6 Java ဘ+သ+ရပ#မH+က အ-6ဒ?လiu လuပ#လiu မရပ3ဘO$။

Java ဟ+ တစ#Cခ+$ Programming Language eတ&လiu Multiple Inheritance ကiu ခ&င#6မCပuထ+$ပ3ဘO$။ ဆiuလiuတ+
က Class တစ#ခuဟ+ Class တစ#ခuကiuပ- Extends လuပ#ပiuင#ခ&င#6Qiပ3တယ#။ ဒ?လiu Cဖစ#ရCခင#$ဟ+လ- အeFက+င#$CပခGက#
ခiuင#ခiuင#မ+မ+Qiပ3တယ#။

Learning Java 111 မင#$လ&င#


Java Developer Class
ဆiuFကပ3စiu။ Class A ထ-မH+ doSomething() method QiKပ?$
Class B န-9 Class C ကeန Extends လuပ#ထ+$ပ3တယ#။ Kပ?$တ-6
Class B န-9 C ထ-မH+လ- doSomething() method ကiu
Override လuပ#ထ+$ပ3တယ#။

အ-6ဒ?eန+က#မH+ Class D ကeန Class B န-9 C ကiu Extend လuပ#


လiuက#Kပ?ဆiuရင# Class D ထ-မH+ B ထ-က doSomething() ကiu
Inheritance လuပ#မလ+$ C ရ-I doSomething() ကiu
inheritance လuပ#မလ+$ eဝခ&-လiu မရAiuင#ပ3ဘO$။ ဒ?လiuCပဿန+
မGiu$ကiu Deadly Diamond of Death လiu eခ2eလ6Qiပ3တယ#။

ဒ36eFက+င#6 Java Programming မH+ Multiple Inheritance ကiu


လက#မခBပ- Class တစ#ခuဟ+ Class တစ#ခuထ-ကiuသ+
Inheritance လuပ#ရမယ#လiu သတ#မHတ#ခ-6Cခင#$ Cဖစ#ပ3တယ#။

Java ဘ+သ+ရပ#မH+Qiတ-6 Class eတ&အ+$လuB$ဟ+ java.lang.Object ရ-I Sub Class eတ&Cဖစ#FကKပ?$ Class တစ#ခu
ထ-ကiuသ+ Extend လuပ#ပiuင#ခ&င#6 Qiပ3တယ#။ Java ဘ+သ+ရပ#မH+Qiတ-6 Object တiuင#$မH+ java.lang.Object ထ-မH+ပ3တ-6
method eတ&ကiu eရ$ထ+$ထ+$ မeရ$ထ+$ထ+$ သuB$လiuရeနတ+Cဖစ#ပ3တယ#။

IF YOU WANT TO INHERITANCE FROM MULTIPLE CLASSES

e^မH+ eဖ2Cပခ-6သလiu Java ဘ+သ+ရပ#မH+ Class eတ&ဟ+ Multiple Inheritance ကiu လuပ#လiuမရပ3ဘO$။ အ-6ဒ?eတ+6
Class အမGiu$မGiu$ကiu Inheritance လuပ#လiuတ-6 အခ3မH+ ဘယ#လiu လuပ#Fကမလ-။ အ-6ဒ?အတ&က# နည#$လမ#$တစ#ခuကiu ဖ&င#6
eပ$ထ+$ပ3တယ#။ အ-6ဒ3ကeတ+6 အဆင#6ဆင#6 မGiu$Uiu$ဆက#ခBeစCခင#$ပ- Cဖစ#ပ3တယ#။

အထက#မH+ eဖ2Cပထ+$သလiu Class A ကiu Class B က Inheritance လuပ#Kပ?$ Class B ကiu Class C ကeန
Inheritance လuပ#လiuက#မယ#ဆiuရင# Class C ထ-မH+ Class B က Instance Member eတ&eက+ Class A ထ-က
Instance Member eတ&ကiu အသuB$Cပuသ&+$Aiuင#မH+ Cဖစ#ပ3တယ#။

တဖန# Class C ဟ+ Class B ရ-I Reference ကeန Reference လuပ#လiuရမH+ Cဖစ#သလiu Class A ရ-I Reference
ကeနလ- Reference လuပ#လiuရသ&+$ပ3မယ#။ eန+က#Kပ?$ Class C န-9 Class A ရ-I အFက+$မH+လ- IS A Relationship

Learning Java 112 မင#$လ&င#


Java Developer Class
ကiu Cဖစ#eပ2eစပ3မယ#။ Class B ဟ+ Class A Cဖစ#Kပ?$ Class C ဟ+ Class B Cဖစ#တ-6 အတ&က# Class C ဟ+လ-
Class A Cဖစ#သ&+$ပ3မယ#။

လuပ%eဆ"င%ရမည%0 တ"ဝန%
Inheritance လuပ#လiuက#UuBန-9 Parent မH+Qiတ+eတ&ကiu မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6Qiသ&+$ပ3တယ#။ အ-6ဒ3န-9 အတO မCဖစ#မeန
လuပ#eဆ+င#ရမည# အရ+eတ&လ-Qiပ3eသ$တယ#။ အ-6ဒ3eတ&ကeတ+6 Super Class မH+ Argument ကiu ယOတ-6
Constructor တစ#ခuခueရ$ထ+$မယ#ဆiuရင# Sub Class eတ&ရ-I Constructor ထ-ကeန အ-6ဒ? Constructor ကiu eခ2
eပ$ရမH+ Cဖစ#ပ3တယ#။

က\န#eတ+#တiu Language Fundamental မH+တuန#$က Default Constructor အeFက+င#$ eလ6လ+ခ-6သလiu Java


Compiler eတ&က Constructor eတ&ကiuမeရ$ထ+$တ-6 Class eတ&ကiu eတ&Jရင# အလiuအeလG+က# Argument မပ3
တ-6 Constructor တစ#ခuကiu Cဖည#6စ&က#eပ$ပ3တယ#။ အ-6ဒ3ကiu Default Constructor လiueခ2ပ3တယ#။

အ-6ဒ3အCပင# Compiler ကeန အကOအည?eပ$တ+Qiပ3eသ$တယ#။ Constructor eတ&ရ-I ပထမဆuB$ ကuဒ#စ+eFက+င#$


eနရ+မH+ super() ဆiuKပ?$လ- ထည#6eပ$ပ3eသ$တယ#။ ဒ3ကလ- Argument မပ3တ-6 super() eတ&ကiuသ+ Cဖည#6စ&က#eပ$
တ+Cဖစ#ပ3တယ#။

Java ဘ+သ+ရပ#မH+ Super Class ထ-မH+ Default Constructor မQiပ- Argument ကiuယOထ+$တ-6 Constructor
တစ#ခuခueရ$ထ+$မယ#ဆiuရင# Sub Class eတ&ရ-I Constructor eတ&ကeန အ-6ဒ? Constructor ရ-I Signature အတiuင#$
Cပန#Kပ?$ eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

class A {

public A(String data) {


// initialization process
}
}

class B extends A {

public B (String data) {


super(data);
}
}

အထက#ပ3 နမOန+ထ-မH+လiu Class A ကiu Class B က Extends လuပ#ထ+$တယ#။ Kပ?$eတ+6 Class A ထ-မH+ String
တစ#ခuကiu ယOထ+$တ-6 Constructor ပ3eနတယ#။ ဒ3ဆiuရင# Class B ရ-I Constructor ထ-မH+ super ကiu String တစ#ခu
ကiu eပ$Kပ?$ eခ2eပ$ရပ3မယ#။ ဒ?eနရ+မH+ Sub Class ရ-I Constructor ကiu Super Class အတiuင#$ eရ$ရမယ#လiu မ
ဆiuလiuပ3ဘO$။ Hard Coding ပ-Cဖစ#Cဖစ# super(data) ကiu eခ2eပ$ဖiuသ+ အဓiက Cဖစ#ပ3တယ#။ ဘ+လiuလ-ဆiueတ+6
Super Class ကiu Initialize မလuပ#ပ- Sub Class eတ&ရ-I Object eတ&ကiu မeဆ+က#Aiuင#တ-6 အတ&က# Cဖစ#ပ3တယ#။

Learning Java 113 မင#$လ&င#


Java Developer Class

Usage of Inheritance

Inheritance အeFက+င#$ကiueလ6လ+ခ-6တ-6eနရ+မH+ Super Class ထ-မH+eရ$သ+$ထ+$တ-6 Instance Member eတ&


ကiu Sub Class eတ&မH+ Cပန#Kပ?$ အသuB$CပuလiuရAiuင#တယ#ဆiuတ+ကiu eတ&Jရပ3လiမ#6မယ#။ ဒ3ဟ+ Code eတ&ကiu Reuse
လuပ#လiuရတ-6 အတ&က# eက+င#$တ-6 အခGက#တစ#ခuCဖစ#တ+eတ+6 မHန#ပ3တယ#။ ဒ3eပမ-6 Inheritance လuပ#Cခင#$ဟ+ IS A
Relationship ကiu Cဖစ#eပ2eစတ-6 အတ&က# Object eတ&အFက+$မH+Qiတ-6 Coupling ကiu ပiuKပ?$ Cမင#6မ+$eစပ3တယ#။

Object eတ&ဟ+ Coupling Cဖစ#eလeလ၊ Dependency Cမင#6မ+$eလeလ Cဖစ#လ+ပ3မယ#။ Dependency Cမင#6မ+$


တ-6 ကuဒ#eတ&ဟ+ တစ#ကiuယ#ထ-eဆ+င#ရ&က#Aiuင#မ[ကiu ကGဆင#$eစပ3မယ#။ Class တစ#ခuကiu အသuB$CပuခGင#ရင# သOရ-I
Dependency eတ&ပ3မH သuB$လiuရလ+ပ3လiမ#6မယ#။ Kပ?$eတ+6လ- တစ#eနeနရ+မH+ CပuCပင#လiuက#ရင#လ- Side Effect eတ&
ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Code eတ&ကiu Reuse လuပ#ခGင#တ-6 ရည#ရ&က#ခGက#တစ#ခuထ-န-9eတ+6
Inheritance ကiu အသuB$Cပuတ+ကiu eQ+င#သင#6ပ3တယ#။ က- ဒ3Cဖင#6ရင# ဘယ#လiueနရ+eတ&မH+ Inheritance ကiu အသuB$Cပu
သင#6သလ-။

တOည?တ-6 Behavior eတ&Qiတ-6 Object eတ&ကiu အuပ#စuဖ&-JKပ?$ အသuB$CပuလiuခGင#ရင#eတ+6 Inheritance ကiu အသuB$Cပuသင#6ပ3
တယ#။ ဒ?အခGက#န-9 ပတ#သက#Kပ?$eတ+6 eန+က#အခန#$eတ&Cဖစ#Fကတ-6 Polymorphism, Abstraction န-9
Composition eတ&မH+လ- ဆက#Kပ?$ eလ6လ+သ&+$Fကပ3ဦ$မယ#။

Learning Java 114 မင#$လ&င#


Java Developer Class

Composition

မiမieရ$သ+$ထ+$တ-6 Code eတ&ကiu Cပန#လည# အသuB$CပuAiuင#eအ+င# Inheritance ကiu အသuB$CပuKပ?$eရ$သ+$Aiuင#တယ#ဆiu


တ+ကiu eလ6လ+ခ-6ပ3တယ#။ အ-6ဒ3အCပင# Composition ကiuလ- အသuB$CပuKပ?$ eရ$သ+$Aiuင#ပ3တယ#။ Inheritance eက+
Composition ပ3 Object eတ&အFက+$မH+ Relationship eတ&ကiu Cဖစ#eပ2eစပ3တယ#။

Inheritance ကiu အသuB$CပuCခင#$အ+$Cဖင#6 IS A Relationship ကiu Cဖစ#eပ2eစKပ?$ Composition ကiu အသuB$CပuCခင#$


အ+$Cဖင#6 HAS A Relationship ကiu Cဖစ#eပ2eစပ3တယ#။ e^မH+ eဖ2Cပခ-6သလiuပ- Inheritance eFက+င#6 ကuဒ#eတ&ကiu
Cပန#Kပ?$ အသuB$ခGAiuင#မယ#ဆiuတ+က မHန#eပမည#6 Class အFက+$မH+ ပတ#သက#မ[ကiu ပiuKပ?$ ခiuင#မ+eစပ3တယ#။ အ-6ဒ?
အတ&က# Class တစ#ခuကiu အသuB$Cပuလiuရင# သbရ-I Super Class eတ&မQiပ- အသuB$CပuလiuရမH+ မဟuတ#eတ+6ဘO$။ Super
Class ရ-I ကuဒ#eတ&ကiuCပuCပင#လiuက#ရင# သbရ-I Sub Class eတ&မH+လ- အကGiu$သက#eရ+က#မ[eတ&ကiu Cဖစ#eပ2eစမH+ Cဖစ#
ပ3တယ# ဒ36eFက+င#6 အ-6ဒ? Class ရ-I Portability ကiu ကGဆင#$eစAiuင#ပ3တယ#။ ဒ36eFက+င#6 အ-6ဒ?ကuဒ#eတ&ဟ+ CပuCပင#
eCပ+င#$လ-ရခက#ခ-Kပ?$ Cပန#လည# အသuB$ခGAiuင#မ[ကiu ကGဆင#$eစမH+ Cဖစ#ပ3တယ#။

eအ+က#ပ3 နမOန+ကiu Fကည#6Fကရeအ+င#။

Engine ဆiuတ-6 Class ထ-မH+ drive() ဆiuတ-6 Method ကiu ပiuင#ပ3တယ#။ Kပ?$eတ+6 က\န#eတ+#တiu Drive Feature ကiu
ပiuင#တ-6 Car ဆiuတ-6 Class ကiu eရ$သ+$ဖiuလiuအပ#လ+FကKပ?ဆiuFကပ3စiu။

Engine Class ထ-က drive() method ကiu အသuB$Cပuလiuတ-6အတ&က# Car ကeန Engine ကiu Inheritance လuပ#Kပ?$
eရ$လiuက#တယ#လiuဆiuFကပ3စiu။ Car ဟ+ Engine ကiu Extends လuပ#လiuက#တ-6 အတ&က# Engine ရ-I drive() ကiu Car က
eနလ- အသuB$Cပuသ&+$Aiuင#ပ3မယ#။ အiueက က\န#eတ+#တiuလiuခGင#တ-6 Code Reuse ကiu ရQiလiuက#ပ3မယ#။ ဒ3eပမ-6 ဒ3ဟ+
သင#6eတ+#သလ+$ဆiuတ+ကiu စT#$စ+$Fကည#6ပ3မယ#။

Car ကeန Engine ကiu Inheritance လuပ#လiuက#Cခင#$အ+$Cဖင#6 Car န-9 Engine Fက+$မH+ IS A Relationship ကiu Cဖစ#
eပ2eစပ3မယ#။ ဆiuလiuတ+က Car ဟ+ Engine Cဖစ#သ&+$ပ3မယ#။ ဒ3ဆiuရင# က+$ကiu Engine သuB$သလiu သ&+$သuB$eနပ3
လiမ#6မယ#။ eမ+#eတ+#ဘuတ#ရ-I အင#ဂGင#eနရ+မH+ က+$ကiu သ&+$Kပ?$ အသuB$Cပuလiuရသ&+$ပ3မယ#။ ဒ3ဟ+ သင#6eတ+#တ-6
အသuB$CပuပuBမဟuတ#ပ3ဘO$။

ဒ36eFက+င#6 Code eတ&ကiu Cပန#Kပ?$ အသuB$Cပuလiuတ-6 ရည#ရ&ယ#ခGက#တစ#ခuထ-န-9 Inheritance ကiu အသuB$မCပuသင#6ပ3ဘO$။

Learning Java 115 မင#$လ&င#


Java Developer Class

Using Composition
ကuဒ#eတ&ကiuCပန#လည# အသuB$ခGလiuတ-6အခ3 eန+က#တနည#$ အeနန-9 အသuB$CပuAiuင#တ+ကeတ+6 Composition Cဖစ#ပ3
တယ#။ Composition ဆiuတ+ကeတ+6 အသuB$Cပuလiuတ-6 Behavior ကiu ပiuင#တ-6 Object ကiu မiမiရ-I ရ-I Member အeနန-9
အသuB$CပuKပ?$ လiuအပ#တ-6eနရ+မH+ အ-6ဒ? Object ဆ?က Behavior ကiu ယOKပ?$ အသuB$CပuCခင#$ပ3ပ-။

အထက#ပ3အတiuင#$ Car ထ-မH+ Instance Variable အeနန-9 Engine Object ကiu ထ+$Kပ?$၊ Car ရ-I drive() method
ကiu eရ$သ+$တ-6အခ3မH+ engine.drive() လiu eရ$သ+$လiuက#UuBပ3ပ-။

class Engine {
public void drive() {
System.out.println("Driving");
}
}

class Car {
private Engine engine;

public Car(Engine engine) {


this.engine = engine;
}

public void drive() {


this.engine.drive();
}
}

Composition ကiu အသuB$CပuCခင#$အ+$Cဖင#6 တစ#ခ3eရ$ထ+$တ-6 Engine Class ကiu Car မH+လ- အသuB$CပuAiuင#မH+ Cဖစ#
သလiu MotorBoat မH+လ- အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 ကuဒ#eတ&ကiu Cပန#လည# အသuB$Cပuလiuတ-6 အခ3မGiu$မH+
Inheritance အစ+$ Composition ကiu အသuB$Cပuသင#6ပ3တယ#။

Learning Java 116 မင#$လ&င#


Java Developer Class

Abstraction

Abstraction ကiu Cမန#မ+လiuဘ+သ+Cပန#ရတ+ အမတန#ခက#ခ-ပ3တယ#။ “ဘuBသeဘ+eဆ+င#eအ+င#Cပuလuပ#Cခင#$“ ဒ3မH


မဟuတ# “ဘuBအCဖစ#အသuB$CပuAiuင#eသ+ State AHင#6 Behavior တiuကiuစuထuတ#Kပ?$ အမGiu$အစ+$အuပ#စuဖ&-Cခင#$” လiuဘ+သ+
Cပန#မiမH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 န+$လည#မလ+$ဆiueတ+6 န+$လည#မH+ မဟuတ#ပ3ဘO$။

Abstraction ကiu အသuB$Cပuတ-6 eနရ+eတ&ကiuFကည#6ရeအ+င#။ Class is an abstraction of Objects and Abstract


class is abstraction of Class လiueCပ+eလ6Qiပ3တယ#။ တဖန# Interface is 100% Abstract Entity လiuလ-eCပ+
eလ6Qiပ3တယ#။ Kပ?$eတ+6 Abstract Method ဆiuတ+ Method Body မပ3ပ- Method Signature သ+ပ3တ-6
Method လiuသတ#မHတ#ထ+$Cပန#တယ#။

အ-6ဒ?eတ+6 Abstraction ဆiuတ+ တကယ#မQiပ- သeဘ+တရ+$အရQiသင#6တယ#လiu သတ#မHတ#eပ$ထ+$Aiuင#Cခင#$လiu


သတ#မHတ#Aiuင#ပ3လiမ#6မယ#။ ဒ?အခန#$ထ-မH+eတ+6 Abstraction န-9ပတ#သက#တ-6 eအ+က#ပ3 အeFက+င#$အရ+eတ&ကiu
eလ6လ+သ&+$ပ3မယ#။

✤ ဘ+eFက+င#6 Abstraction ကiu အသuB$Cပuရတ+လ-

✤ Abstraction Cဖစ#eအ+င#ဘယ#လiueရ$မလ-

✤ Abstraction ကiu သuB$တ-6အတ&က# ဘ+Cဖစ#မလ-

ဘ"e>ကင%0 Abstraction ကiu အသu<9=ပuရတ"လ/


ဆiuFကပ3စiu က\န#eတ+#တiu Student Management System တစ#ခuကiu eရ$eနFကတယ#။ က\န#eတ+#တiu Application
ကiu အသuB$Cပuမည#6သOeတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#Fကပ3တယ#။

Learning Java 117 မင#$လ&င#


Java Developer Class
Anonymous User အeနန-9ကeတ+6 Login လuပ#စရ+မလiuပ- Public Information eတ&ကiu အသuB$CပuAiuင#ပ3လiမ#6မယ#။
တဖန# Application ဆ?ကiu eမ$ခ&န#$eတ&ကiu eမ$မယ#ဆiuရင#လ- eမ$Aiuင#ပ3လiမ#6မယ#။

Student eတ&အeနန-9ကeတ+6 သOတက#ခ-6တ-6 အတန#$န-9 ပတ#သက#တ-6 Information eတ&၊ သbရ-I Billing Status eတ&
Kပ?$eတ+6 သbရ-I Personal Information eတ&ကiu အသuB$CပuAiuင#မယ#။ Kပ?$eတ+6 Public Information eတ&ကiuလ-
အသuB$CပuAiuင#ပ3လiမ#6မယ#။

Teacher အeနန-9ကeတ+6 Course အသစ#eတ&ကiu Create လuပ#Aiuင#မယ#။ eကG+င#$သ+$eတ&ရ-I Attendance eတ&၊


အတန#$ အခGiန#စ+ရင#$eတ&၊ Kပ?$eတ+6 eကG+င#$သ+$eတ&ရ-I တiu$တက#မ[ မHတ#တမ#$eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

Office ကeတ+6 eကG+င#$သ+$eတ&ရ-I Registration eတ&၊ Kပ?$eတ+6 Billing Status eတ&၊ အတန#$ အသစ#ဖ&င#6တ+
eတ&၊ Schedule Management လuပ#တ+eတ&ကiu လuပ#ကiuင#Aiuင#ပ3တယ#။ Manager ကeတ+6 Office က လuပ#Aiuင#တ+
eတ&ကiu လuပ#Aiuင#သလiu eင&စ+ရင#$eတ&၊ Budget eတ&ကiuလ- Management လuပ#Aiuင#ပ3လiမ#6မယ#။

ဒ?လiueနရ+မGiu$မH+ Office န-9 Manager eတ&ဟ+ Behavior eတ&ဆင#တOFကတယ#။ Kပ?$eတ+6 Manager ဆiuတ+ကလ-
Office အမGiu$အစ+$တစ#ခuပ-လiuယOဆလiuရပ3တယ#။ ဒ36eFက+င#6 Office ကiu Extends လuပ#Kပ?$ Manager ကiu
တည#eဆ+က#လiuက#လiuရပ3တယ#။

Admin ကeတ+6 Site Admin Cဖစ#ပ3တယ#။ သOကeတ+6 Application အတ&က#လiuအပ#တ-6 Configuration eတ&ကiu
Cပလuပ#Aiuင#ရမယ#။ Kပ?$eတ+6 Master Data eတ&ကiu Manage လuပ#Aiuင#မယ#။ Log eတ&ကiuလ- Manage လuပ#Aiuင#ရပ3
မယ#။

ဒ?eနရ+မH+ Fကည#6မယ#ဆiuရင# Anonymous User ကလ&-ရင# ကGန#တ-6 User eတ&မH+ တOည?တ-6 Behavior eတ&QiFကပ3
တယ#။ Login လuပ#တ+တiu၊ Password eCပ+င#$တ+တiu Kပ?$eတ+6 Profile ကiu Update လuပ#တ+တiuလiu Member တစ#
eယ+က#အeနန-9 လuပ#eစခGင#တ-6 Behavior eတ&QiFကပ3တယ#။ ဒ?eနရ+မH+ Member ဆiuတ-6 Keyword ထ&က#လ+ပ3
တယ#။ ဒ3ဆiuရင# Member Behavior ကiuပiuင#တ-6 Member Class ကiu eဆ+က#Kပ?$eတ+6 Member Behavior ကiu
လiuခGင#တ-6 Class eတ&ကiu Extends လuပ#ခiuင#$လiuက#UuBပ3ပ-။

Learning Java 118 မင#$လ&င#


Java Developer Class
ဒ3eပမ-6 ဒ?eနရ+မH+ Member Class န-9 ပတ#သက#Kပ?$ စT#$စ+$Fကည#6Fကရeအ+င#။ Member Class ကeနeတ+6
Object ကiu မeဆ+က#ခGင#ဘO$။ အCခ+$ Object eတ&ရ-I တOည?တ-6 Behavior eတ&ကiu စuKပ?$ အuပ#စuတစ#ခuအeနန-9
သတ#မHတ#ခGင#တ+ပ- Cဖစ#တယ#။ အ-6ဒ?လiu Object ဆက#ခGင#တ-6 ရည#ရ&ယ#ခGက#န-9 မဟuတ#ပ- အCခ+$ Object eတ&ကiu
အuပ#စuဖ&-JKပ?$ အသuB$Cပuလiuတ-6 အခ3မGiu$မH+ Abstraction ကiu အသuB$CပuAiuင#ပ3တယ#။

Abstraction =ဖစ%eအ"င%ဘယ%လiueရ9မလ/
Java ဘ+သ+ရပ#မH+ Abstraction Cဖစ#eအ+င# နည#$ ၂မGiu$န-9 eရ$သ+$Aiuင#ပ3တယ#။ ပထမတစ#နည#$ကeတ+6
Abstract Class eတ&ကiu အသuB$CပuKပ?$ eရ$သ+$တ-6နည#$ Cဖစ#Kပ?$eတ+6 eန+က#တစ#နည#$ကeတ+6 Interface eတ&ကiu
အသuB$CပuKပ?$ eရ$သ+$တ-6 နည#$Cဖစ#ပ3တယ#။

Abstract Class eတ3ကiu အသu<9=ပu=ခင%9


Class ဆiuတ+ Object eဆ+က#ဖiu eရ$သ+$ရတယ#လiu eလ6လ+ခ-6FကမH+ပ3။ ဒ3eပမ-6 Abstract Class ဆiuတ+က
Object eဆ+က#ဖiuမဟuတ#ပ3ဘO$။ အမGiu$အစ+$တO Class အuပ#စuကiu ဖ&-စည#$Aiuင#ဖiuရည#ရ&ယ#ခGက#န-9 eရ$သ+$ရတ+ Cဖစ#ပ3
တယ#။

အရင#ဆuB$ Abstract ဆiuတ+ဘယ#လiuဟ+မGiu$လ-၊ ဘ+eတ&လuပ#Aiuင#လ-ဆiuတ+ကiu eလ6လ+Fကည#6Fကရeအ+င#။

✓ Class Declaration မH+ Abstract Keyword ကiu အသuB$CပuKပ?$ eရ$သ+$ရမယ#

✓ Abstract Class eတ&ကiu final အCဖစ#သတ#မHတ#လiuမရပ3ဘO$

✓ Instance Variable eတ&ကiu eရ$သ+$ပiuင#ခ&င#6Qiတယ#

✓ Instance Method eတ&ကiueက+ Abstract Method eတ&ကiuပ3eရ$သ+$ အသuB$Cပuပiuင#ခ&င#6Qiတယ#

✓ Abstract Method eတ&ကiu eရ$သ+$ခGင#eရ$သ+$Aiuင#သလiu မeရ$သ+$ပ-လ- eနAiuင#တယ#

✓ Constructor eတ&ကui eရ$သ+$အသuB$CပuAiuင#တယ#

✓ Abstract Class ထ-မH+ Constructor ကiu eရ$သ+$ထ+$မယ#ဆiuရင# Sub Class eတ&ကရ-I Constructor ထ-က
eန super(Arguments) ကiu Cပန#Kပ?$ eခ2eပ$ရမH+ Cဖစ#ပ3တယ#

✓ တiuက#Uiuက# Object ကiu မeဆ+က#Aiuင#ဘO$

✓ Sub Class eတ&ရ-I Object eတ&ကiu Reference လuပ#Aiuင#တယ#

public abstract class Animal {

private String name;

public Animal(String name) {


this.name = name;
}

public void great() {


System.out.println("Hello my name is " + name);
}

public abstract void breath();


}

Learning Java 119 မင#$လ&င#


Java Developer Class
အထက#ပ3 နမOန+ထ-မH+ Animal ဆiuတ-6 Class ကiu eရ$သ+$ထ+$ပ3တယ#။ Class Declaration ထ-မH+ abstract
keyword ကiu eရ$သ+$ထ+$တ-6 အတ&က# Abstract Class တစ#ခuCဖစ#ပ3တယ#။

Animal Class ထ-မH+ Method Signature သ+ပ3ဝင#Kပ?$ Method Body မပ3တ-6 breath() ဆiuတ-6 Method ကiu
eရ$သ+$ထ+$ပ3တယ#။ Abstract Method Cဖစ#ပ3တယ#။ ဆiuလiuတ+က Animal ဆiuတ-6 အမGiu$အစ+$ဟ+ breath() ဆiu
တ+ကiu လuပ#eဆ+င#Aiuင#ရပ3မယ#။ ဒ3eပမ-6 ဘယ#လiuလuပ#ရမယ#ဆiuတ+ကiueတ+6 Animal ထ-မH+ eဖ2Cပထ+$Cခင#$မQiပ3ဘO$။

Animal ကiu Extends လuပ#ထ+$တ-6 Sub Class eတ&အ+$လuB$ကeန breath() method ကiu Override လuပ#Kပ?$
eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။ eခ&$eတ& eFက+င#eတ&က အဆuတ#န-9 အသက#QtခGင#Qtမယ#၊ င3$eတ&က ပ3$ဟတ#န-9
အသက#Qtမယ#။ သက#ဆiuင#ရ+အမGiu$အစ+$မH+ Behavior eတ&ကiu သတ#မHတ#eရ$သ+$eပ$ရပ3မယ#။

public class Dog extends Animal {

public Dog(String name) {


super(name);
}

@Override
public void breath() {
System.out.println("Breath by Lungs!");
}
}

ဒ?eနရ+မH+ Concrete Class Cဖစ#တ-6 Dog က Abstract Class Cဖစ#တ-6 Animal ကiu Extends လuပ#ထ+$ပ3တယ#။
Dog eတ&ကiu Animal အeနန-9 အသuB$Cပuလiuရသ&+$မH+ Cဖစ#ပ3တယ#။ အ-6ဒ?အတ&က# Dog eတ&မH+ Animal မH+ လuပ#Aiuင#
တယ#လiuသတ#မHတ#ထ+$တ-6 breath() Behavior ကiu လuပ#Aiuင#ဖiuလiuအပ#ပ3တယ#။

ဒ3eFက+င#6 Dog ထ-မH+ Abstract Method Cဖစ#တ-6 breath() ကiu Override လuပ#Kပ?$ eရ$သ+$ဖiuလiuအပ#လ+ပ3တယ#။
တကယ#လiu Dog ကiu Abstract Class အeနန-9 ထ+$မယ#ဆiuရင# Dog ဟ+ Abstract Class Cဖစ#သ&+$တ-6 အတ&က#
breath() method ကiu Override မလuပ#ရင#လ-ရသ&+$ပ3မယ#။ ဘ+လiuလ-ဆiueတ+6 Abstract Class eတ&မH+ Abstract
Method eတ&ကiu eရ$သ+$ပiuင#ခ&င#6Qiတ-6 အတ&က#Cဖစ#ပ3တယ#။

ဒ?လiuပ- Concrete Class Cဖစ#eနရင#eတ+6 Super Class ထ-မH+ပ3တ-6 Abstract Method eတ&အ+$လuB$ကiu Override
လuပ#Kပ?$ eရ$eပ$ဖiuလiuအပ#ပ3တယ#။

Learning Java 120 မင#$လ&င#


Java Developer Class

Interface eတ3ကiu အသu<9=ပu=ခင%9


Abstraction Cဖစ#eအ+င# Abstract Class eတ&ကiu အသuB$CပuKပ?$eရ$သ+$Aiuင#သလiu Interface ကiu အသuB$CပuKပ?$လ-
eရ$သ+$Aiuင#ပ3တယ#။

✓ Interface ဆiuတ+က 100% Abstract Entity တစ#မGiu$Cဖစ#ပ3တယ#

✓ Interface Method eတ&ဟ+ Default Abstract Cဖစ#Kပ?$ Default Public Cဖစ#ပ3တယ#

✓ Interface eတ&မH+ Constant eတ&၊ Abstract Method eတ& Default Method eတ&န-9 Static Method eတ&
ကiu eရ$သ+$Aiuင#ပ3တယ#

✓ Interface ကiu Reference Type အeနန-9 အသuB$CပuAiuင#ပ3တယ#

✓ Interface ကiu အသuB$CပuCခင#$အ+$Cဖင#6 Interface ကiu အသuB$Cပueနတ-6 ဘက#မH+eက+၊ Interface ကiu Implemen
လuပ#ထ+$တ-6 Class ဘက#မH+ပ3 Contract တစ#ခuကiu Cဖစ#eပ2eစKပ?$၊ Interface ကiu အသuB$Cပuတ-6 Class ဘက#က
လ- Interface ထ-မH+eရ$သ+$ထ+$တ-6 Method eတ&ကiuပ- သuB$ပiuင#ခ&င#6Qiပ3မယ#၊ Interface ကiu Implement လuပ#
တ-6 Class အတ&က#ကeတ+6 Interface မH+ eရ$သ+$ထ+$တ-6 Abstract Method eတ&အ+$လuB$ကiu Override
လuပ#Kပ?$ eရ$သ+$eပ$ရပ3မယ#

✓ Interface တစ#ခuဟ+ Interface တစ#ခuထက#မကကiu Extends လuပ#Aiuင#ပ3တယ#

✓ Class တစ#ခuဟ+လ- Interface တစ#ခuထက#မကကiu Implements လuပ#Aiuင#ပ3တယ#

✓ Interface ကeနeတ+6 Class ကiu ဘ+မH လuပ#လiuမရပ3ဘO$

ဒ?eနရ+မH+ Abstract Class eတ&န-9လ- Abstraction Cဖစ#eအ+င#eရ$လiuရသ+$န-9 ဘ+လiu Interface ကiu အသuB$Cပuဖiuလiu
လ+ရတ+လ- ဆiuKပ?$ သBသယCဖစ#ဖ&ယ#Qiပ3တယ#။

eအ+က#ပ3 Class Diagram ကiu Fကည#6Fကရeအ+င#။ Lion, Tiger န-9 Cat တiuရ-I တOည?တ-6 Behavior ကiuစuKပ?$ Feline
ဆiuတ-6 Abstract Class ကiuတည#eဆ+က#ထ+$တယ#။ Kပ?$eတ+6 Dog န-9 Wolf တiuရ-I အuပ#စuCဖစ#တ-6 Canine ကiu
Abstract Class န-9တည#eဆ+က#ထ+$ပ3တယ#။ ထiueန+က# တiရiစ |+န#အ+$လuB$ကiu ကiuယ#စ+$Cပuဖiuအတ&က# Animal ဆiu
တ-6 Abstract Class တစ#ခuကiuတည#eဆ+က#ထ+$ပ3တယ#။

Learning Java 121 မင#$လ&င#


Java Developer Class
ဒ?လiu Abstraction ကiu အသuB$Cပuထ+$တ-6 အတ&က# Lion eက+ Hippo ကiuပ3 Animal အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#
သလiu Dog eတ& Wolf eတ&ကiu Canine အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ Abstraction Cဖစ#eအ+င# eရ$သ+$
ထ+$Cခင#$အ+$Cဖင#6 သက#ဆiuင#ရ+ Abstraction Level ကeန အuပ#စuဖ&-JKပ?$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

ဆiuFကပ3စiu။ အiမ#eမ&$တiရiစ |+န#eတ&Cဖစ#တ-6 Cat န-9 Dog မH+ giveHand ဆiuတ-6 Behavior ကiu အသuB$Cပuလiuလ+ပ3တယ#။
ဘယ#လiuလuပ#Fကမလ-။ Cat န-9 Dog မH+ giveHand ဆiuတ-6 Method ကiu ထည#6လiuက#ရင#ရပ3မယ#။ ဒ3eပမ-6 Cat န-9 Dog
ကiu အiမ#eမ&$တiရiစ |+န#အeနန-9 စuKပ?$ သuB$လiu ရမH+ မဟuတ#ပ3ဘO$။ Cat န-9 Dog ဟ+ အuပ#စuမတOပ3ဘO$။

ဒ36Cဖင#6ရင# အ+$လuB$ရ-I Abstraction Cဖစ#တ-6 Animal ဆiuတ-6 Animal မH+ giveHand method ကiu ထည#6လiuက#ရင#eက+
လiu eမ$စရ+Qiပ3မယ#။ Lion, Tiger, Wolf န-9 Hippo eတ&ပ3 လက#eတ&လ+eပ$eနFကမယ#။

eန+က#တစ#ခuက Pet ဆiuတ-6 Abstract Class တစ#ခuကiueဆ+က#၊ Kပ?$ရင# Cat န-9 Dog ကiu Extends လuပ#ခiuင#$လiuက#ရင#
eက+ လiueမ$Aiuင#ပ3လiမ#6မယ#။ ဒ3ဆiuရင# Pet Behavior eတ&ကiu Cat န-9 Dog ကပ-ရeတ+6မယ#။ Lion eတ& Tiger eတ&
ကiu လက#eပ$ခiuင#$လiuမရeတ+6ဘO$လiu ဆiuAiuင#ပ3လiမ#6မယ#။

ဒ?လiuဆiuရင# Cat က Filne န-9 Pet Class တiuကiu Extends လuပ#ထ+$Kပ?$ Dog ကလ- Cainie န-9 Pet တiuကiu Extends
လuပ#ထ+$သလiuCဖစ#သ&+$ပ3မယ#။ ဒ3eပမ-6 Java မH+က Multiple Inheritance ကiu ခ&င#6မCပuပ3ဘO$။ ဒ3ကလ- Java ရ-I
န+မည#Pက?$ Cပဿန+တစ#ခuCဖစ#တ-6 Deadly Dead of Diamond လiueခ2တ-6 Cပဿန+eFက+င#6Cဖစ#ပ3တယ#။ Deadly
Dead of Diamond န-9ပတ#သက#Kပ?$ Inheritance အခန#$မH+ eဖ2Cပခ-6Kပ?$ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Abstract Class န-9 ရQiAiuင#တ-6 Abstraction ဟ+ Inheritance Hierarchy တစ#ခuအတ&င#$မH+QieနမH ရQi
Aiuင#တယ#ဆiuတ-6 ကန#9သတ#ခGက#ကiu Cဖစ#eပ2eစပ3တယ#။

RAISING OF INTERFACE

Java ဟ+ OOP ကiu အeCခခBထ+$ပ3တယ#။ ဒ3eပမ-6 Class တစ#ခuဟ+ Class တစ#ခuဆ?ကသ+ မGiu$Uiu$ဆက#ခBပiuင#ခ&င#6Qi
တယ#ဆiuတ-6 Single Inheritance ကiu အသuB$Cပuထ+$ပ3တယ#။ ဒ36eFက+င#6 Java Class တစ#ခuဟ+ Class တစ#ခuကiuသ+
Extends လuပ#လiuရပ3တယ#။

အထက#ပ3နမOန+လiuမGiu$ Inheritance Hierarchy မတOတ-6 Class AHစ#ခuအFက+$မH+ Abstraction ကiu အသuB$Cပuလiuတ-6


အခ3မGiu$မH+ Interface ကiu အသuB$CပuKပ?$ eရ$သ+$FကရမH+ Cဖစ#ပ3တယ#။ Class တစ#ခuဟ+ Class တစ#ခuကiuသ+

Learning Java 122 မင#$လ&င#


Java Developer Class
Extend လuပ#Aiuင#eပမ-6 Interface ကiueတ+6 တစ#ခuထက#မက Implement လuပ#Aiuင#ပ3တယ#။ Kပ?$eတ+6 ဘယ#လiu
Inheritance Hierarchy ကမဆiu Interface ကiu Implement လuပ#Aiuင#ပ3တယ#။ Interface ကiu Type အeနန-9
အသuB$CပuAiuင#တ-6 အတ&က# Interface ကiu အသuB$Cပuမယ#ဆiuရင# Inheritance Hierachy မတOတ-6 Object eတ&အFက+$
မH+ Abstraction ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

အထက#ပ3 အတiuင#$ Cat eက+ Dog ကiuပ3 Pet Interface ကiu Implement လuပ#ခiuင#$Cခင#$အ+$Cဖင#6 Cat ကiueက+
Dog ကiuပ3 Pet အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ထiuအCပင#6 Robot Cဖစ#တ-6 RoboDog ကiuလ- Pet ကiu
Implement လuပ#ပ3က RoboDog ကiuပ3 Pet အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Interface ကiu အသuB$Cပuမယ#ဆiuရင# Inheritance Hierachy မတOည?တ-6 Object eတ&Fက+$မH+


Abstraction ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 123 မင#$လ&င#


Java Developer Class

Abstraction ကiu သu<9တ/0အတ3က% ဘ"=ဖစ%မလ/


Abstraction eFက+င#6 Object eတ&ရ-I Dependency eတ&ကiu eလZ+6ကGeစAiuင#ပ3တယ#။ Dependency ဆiuတ+က
Object တစ#ခuန-9 တစ#ခuအFက+$မH+Qiတ-6 မH?ခiuမ[ကiu ဆiuလiuCခင#$Cဖစ#ပ3တယ#။ Dependency မG+$eလeလ Object eတ&
Fက+$မH+Qiတ-6 Coupling မG+$eလeလCဖစ#ပ3မယ#။ Coupling ဆiuတ+က Object eတ&အFက+$မH+Qiတ-6 တ&ယ#ကပ#eနမ[
ကiu ဆiuလiuတ+ပ3။

Object A န-9 Object B အFက+$မH+ Coupling မG+$eနတယ#ဆiuရင# Object A န-9 B တiuကiu ခ&-Kပ?$ သuB$လiuရမH+ မဟuတ#
eတ+6ပ3ဘO$။ Object A ကiu သuB$ခGင#ရင# Object B QiမHသuB$လiuရမည#6 အeနအထ+$Cဖစ#လ+ပ3မယ#။ အ-6ဒ?လiu Class eတ&
ဟ+ CပuCပင#eCပ+င#$လ-ရခက#ခ-Kပ?$ Cပန#လည# အသuB$ခGရလ- ခက#ခ-သ&+$ပ3မယ#။

public class House {

private Dog dog;


}

အထက#ပ3 House Class ထ-မH+ Dog Instance Variable ကiu အသuB$Cပuထ+$ရင# အ-6ဒ? House Class ထ-မH+ Dog
ကလ&-ရင# ကGန#တ-6 Object eတ&ကiu သuB$လiuရမH+ မဟuတ#eတ+6ပ3ဘO$။

public class House {

private Pet pet;


}

အ-6ဒ?အစ+$ ပiuKပ?$ Abstraction ကGတ-6 Pet Interface Object ကiu အသuB$Cပuထ+$ရင# Pet Interface ကiu Implement
လuပ#ထ+$တ-6 Object eတ&အ+$လuB$ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

အထက#ပ3အတiuင#$ Class တစ#ခuရ-I Dependency Cဖစ#တ-6 Instance Variable eတ&eနရ+မH+ Abstraction ကiu
အသuB$CပuCခင#$အ+$Cဖင#6 Coupling ကiu eလG+6ခGAiuင#Kပ?$ CပuCပင#eCပ+င#$လ-ရလ&ယ#ကOKပ?$ Cပန#လည# အသuB$ခGAiuင#eသ+ ကuဒ#
eတ&ကiu eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Method Argument eတ&eနရ+မH+လ- Specific Cဖစ#တ-6 Type eတ&အစ+$ ပiuKပ?$ Abstraction ကGတ-6 Abstract
Class eတ& Interface eတ&ကiu အသuB$Cပuတ+ဟ+ CပuCပင#eCပ+င#$လ-ရလ&ယ#ကOKပ?$ Cပန#လည# အသuB$ခGAiuင#eသ+ ကuဒ#
eတ&ကiu eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 124 မင#$လ&င#


Java Developer Class

Polymorphism

Polymorphism ဆiuတ+က Poly န-9 Morphic ဆiuတ-6 Greek စက+$လuB$မG+$ကeန ဆင#$သက#လ+တ+Cဖစ#ပ3တယ#။


Poly ဆiuတ+က အမGiu$မGiu$QiAiuင#Cခင#$ကiuဆiuလiuKပ?$ Morphic ဆiuတ+ကeတ+6 အသ&င#၊ ပuBစBလiu အဓziပ3ယ#ရပ3တယ#။ ဒ36
eFက+င#6 Polymorpishm ဆiuတ+ကeတ+6 ပuBစBအမGiu$မGiu$QiAiuင#Cခင#$လiu အဓziပ3ယ#ရပ3တယ#။

အ-6ဒ? ပuBစBအမGiu$မGiu$QieနAiuင#Cခင#$န-9 ပတ#သက#Kပ?$ Qင#$Cပရမယ#ဆiuရင# အeCခခBပuBစB ၂ မGiu$န-9 Qင#$CပAiuင#ပ3လiမ#6မယ#။ ပထမ


ပuBစBက Object တစ#ခuကiu Reference အမGiu$မGiu$ကeန Reference လuပ#eနAiuင#Cခင#$ Cဖစ#Kပ?$ eန+က#တစ#နည#$ကeတ+6
Override လuပ#ထ+$Cခင#$eFက+င#6 Object တစ#ခuရ-I လuပ#eဆ+င#ပuBဟ+ အမGiu$မGiu$QieနAiuင#Cခင#$တiu Cဖစ#Fကပ3တယ#။

က\န#eတ+#တiu ဒ?eနရ+မH+ eအ+က#ပ3 အeFက+င#$အရ+eတ&ကiueလ6လ+သ&+$ပ3မယ#။

✤ Object တစ#ခuကiu Reference အမGiu$မGiu$ကeန Reference လuပ#eနAiuင#Cခင#$

✤ Override လuပ#ထ+$Cခင#$eFက+င#6 ပuBစBအမGiu$မGiu$eသ+ Object eတ&ကiu eရ$သ+$Aiuင#Cခင#$

✤ မHန#ကန#eသ+ Override Rules မG+$

✤ Override AHင#6 Overload

✤ Polymorphism ရ-I အကGiu$မG+$

Object တစ%ခuကiu Reference အမ7iu9မ7iu9ကeန Reference လuပ%eန


Kiuင%=ခင%9
Java မH+ eရ$သ+$သမZ Class eတ&အ+$လuB$ဟ+ java.lang.Object ရ-I Sub Class eတ& Cဖစ#Fကတယ#။ Kပ?$eတ+6
အCခ+$ Class ကiuလ- Extends လuပ#Aiuင#ပ3တယ#။ တဖန# Interface ကiuလ- Implement လuပ#eနAiuင#ပ3တယ#။

အထက#မH+ eဖ2Cပထ+$သလiu Bird Class ဟ+ Animal Class ကiu Extends လuပ#ထ+$သလiu Flyable Interface ကiu
လ- Implement လuပ#ထ+$Aiuင#ပ3တယ#။ အ-6ဒ?အတ&က# Bird Object ကiu Bird အeနန-9 eသ+#၎င#$ Animal အeနန-9
eသ+#၎င#$ Flyable အeနန-9 eသ+#၎င#$ အသuB$CပuAiuင#ပ3တယ#။ တဖန# Java Class eတ& အ+$လuB$ဟ+
java.lang.Object ရ-I Sub Class eတ& Cဖစ#Fကတ-6 အတ&က# Object အeနန-9လ- အသuB$CပuAiuင#ပ3တယ#။

Learning Java 125 မင#$လ&င#


Java Developer Class
eအ+က#ပ3 နမOန+ကiuFကည#6မယ#ဆiuရင# Bird Object ကiu Bird bird = new Bird() ဆiuKပ?$ တည#eဆ+က#ထ+$ပ3တယ#။
Kပ?$eတ+6 Animal reference eနရ+မH+လ- Bird Object ကiu အစ+$ထiu$Aiuင#ပ3တယ#။ Animal eနရ+ကeန Bird
Object ကiu Reference လuပ#Kပ?$ Animal အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ တဖန# Flyable အeနန-9eက+
Object အeနန-9 ပ3 Bird Object ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ထiuက-6သiu Object တစ#ခuကiu ပuBစBအမGiu$မGiu$န-9
အသuB$CပuAiuင#Cခင#$ကiu Polymorphism လiueခ2ပ3တယ#။

public static void main(String [] args) {

Bird bird = new Bird();


Animal animal = bird;
Flyable flyable = bird;
Object object = bird;
}

Override e>က"င%0 Object ပu<စ<အမ7iu9မ7iu9eရ9သ"9Kiuင%=ခင%9


Inheritance ကiueလ6လ+ခ-6တ-6eနရ+မH+ Super Class ထ-က Instance Member eတ&ကiu Inheritance လuပ#လiuရ
မယ#ဆiuတ+ကiu သiခ-6Kပ?$ပ3Kပ?။ အ-6ဒ?အရ+eတ&ဟ+ IS A Relationship Qiတ+န-9 အလiuလiuကiu ရQieနမH+ Cဖစ#ပ3တယ#။
ဒ3eပမ-6 Super Class ထ-ကeနရလ+တ-6 Behavior ကiu မသuB$ခGင#ဘO$ဆiuရင#eက+ ဘယ#လiuလuပ#ရမလ-။

Method Override
ဆiuFကပ3စiu Fish ဆiuတ-6 Class မH+ swim ဆiuတ-6 Behavior ပ3လ+တယ#။ eရpင3$တစ#eက+င#န-9 Uiu$Uiu$င3$တစ#eက+င#တiu
ဟ+ eရကO$တ+ခGင#$ မတOAiuင#ဘO$။ အ-6ဒ?eတ+6 eရကO$Cခင#$ ဆiuတ-6 Behavior ကiu Sub Class eတ&က Cပင#ဖiuလiuအပ#လ+

class Fish {
public void swim() {
System.out.println("Fish is Swimming");
}
}

class GoldenFish extends Fish {


public void swim() {
System.out.println("Golden Fish is Swimming");
}
}

public class Test {


public static void main(String [] args) {
Fish fish = new GoldenFish();
fish.swim();
}
}

Learning Java 126 မင#$လ&င#


Java Developer Class
Kပ?။ အ-6ဒ3ကiu Java ထ-မH+ ဘယ#လiueရ$ရလ- ဆiueတ+6 Super Class ထ-မH+ ပ3တ-6 Method န-9 Signature ခGင#$တOတ-6
Method ကiu Sub Class ထ-မH+ eရ$ထ+$လiuရပ3တယ#။ အ-6ဒ?လiu eရ$သ+$Cခင#$ကiu Override လuပ#တယ#လiueခ2ပ3
တယ#။

နမOန+ထ-မH+ဆiuရင# Fish fish = new GoldenFish() လiueရ$ထ+$ပ3တယ#။ e^မH+ eဖ2Cပခ-6သလiuပ- Reference Type
ဟ+ Fish Cဖစ#Kပ?$ Object Type ဟ+ GoldenFish Cဖစ#eနမH+ Cဖစ#ပ3တယ#။

Reference Variable တစ%ခuကeန Invoke လuပ%လiuရတ/0 Method eတ3ကiu Compile Time မ:" Reference
Type ကiu >ကည%0DပE9 ဆu<9=ဖတ%ပ,တယ%။ တကယ%တန%9 အလuပ%လuပ%တ/0အခ,က7eတ"0 Runtime eရ"က%eတ"0မ: Object
Type ကiu >ကည%0DပE9 ဆu<9=ဖတ%တ"=ဖစ%ပ,တယ%။

ဒ36eFက+င#6 Reference Type ဟ+ Fish Cဖစ#eပမ-6 တကယ#အလuပ#လuပ#သ&+$တ+ကeတ+6 Override လuပ#ထ+$တ-6


GoldenFish ရ-I swim() method ပ- Cဖစ#ပ3တယ#။ Super Class ထ-က swim() method ကiu အသuB$မCပuပ- Sub
Class ထ-မH+ CပuCပင#ထ+$တ-6 Method ကiuပ- အသuB$Cပuသ&+$တယ#ဆiuတ+ကiu သiAiuင#ပ3တယ#။

Override ဆiuတ+က Inheritance လuပ#ထ+$တ-6 Instance Method eတ&ကiu Sub Class ထ-ကeန အသuB$မCပuလiuတ-6
အခ3မH+ ထပ#eရ$ထ+$တ-6 Method eတ&ကiu ဆiuလiuCခင#$Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Static Method eတ& Variables eတ&
မH+ Override ဆiuတ+ မQiပ3ဘO$။ Inheritance မCဖစ#တ-6 eနရ+eတ&မH+လ- Override ဆiuတ+ မQiAiuင#ပ3ဘO$။

Many Forms
Method Override eFက+င#6 Super Class ထ-မH+ သတ#မHတ#ထ+$တ-6 Behavior န-9 မတOတ-6 Sub Class eတ&ကiu
eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။ တနည#$ဆiuရမယ#ဆiuရင# General ကGတ-6 Behavior eတ&ကiu ပiuKပ?$ Specialize ကGတ-6
Behavior eတ&ကiu eရ$သ+$အသuB$Cပuလiuတ-6 အခ3မGiu$မH+ Method Override ကiu အသuB$CပuAiuင#ပ3တယ#။

class Bird {
public void fly() {
System.out.println("Bird is flying!");
}
}

class Eagle extends Bird {


public void fly() {
System.out.println("Eagle is flying!");
}
}

class Craw extends Bird {


public void fly() {
System.out.println("Craw is flying!");
}
}

အထက#ပ3 နမOန+ထ-မH+ Bird Class ဟ+ fly behavior ကiu ပiuင#ဆiuင#ပ3တယ#။ Kပ?$eတ+6 Eagle န-9 Craw Class eတ&
ဟ+ Bird ကiu Extends လuပ#ထ+$Kပ?$ fly() method ကiu Override လuပ#ထ+$ပ3တယ#။ ဒ36eFက+င#6 သOတiuဟ+ Bird eတ&
Cဖစ#တ-6အတ&က# fly ဆiuတ-6 Behavior ကiu ပiuင#ဆiuင#Fကပ3တယ#။ ဒ3eပမ-6 fly() method ကiu Override လuပ#ထ+$Cခင#$အ+$

Learning Java 127 မင#$လ&င#


Java Developer Class
Cဖင#6 Bird န-9 မတOတ-6 ပGBသန#$မ[မGiu$ကiu Cပuလuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။ အမGiu$အစ+$တOeသ+#လ- အCပuအမOမတOတ-6 Object
eတ&ကiu တည#eဆ+က#Aiuင#Cခင#$ကiuလ- Polymorphism လiueခ2ပ3တယ#။

Type Casting
Many Form န-9 ပတ#သက#Kပ?$ Declare လuပ#ထ+$တ-6 Reference Type န-9 လuပ#လiuရတ-6 Behavior eတ&န-9 ပတ#သက#
Kပ?$ eလ6လ+Fကည#6 Fကရeအ+င#။

အထက#ပ3 Class Diagram ထ-မH+ Animal ဆiuတ-6 Class QiKပ?$ eat() ဆiuတ-6 Method တစ#ခuကiu ပiuင#ပ3တယ#။ Kပ?$
eတ+6 Bird က Animal ကiu Extends လuပ#ထ+$Kပ?$ fly() ဆiuတ-6 Method တစ#ခuကiuလ- eရ$ထ+$ပ3တယ#။ ဒ3ဆiuရင#
Bird IS A Animal Cဖစ#Kပ?$ Bird ထ-မH+ Animal ကeန Inheritance လuပ#လiuရလ+တ-6 eat() method ကiueက+ fly()
method ကiuပ3 ပiuင#ဆiuင#eနပ3တယ#။

Java မH+က Object တစ#ခuကeန Invoke လuပ#လiuရတ-6 Method eတ&ကiu Reference Type အeပ2မH+ မOတည#Kပ?$
ဆuB$Cဖတ#ပ3တယ#။ Bird Object ကiu Bird Reference ကeနလ- Reference လuပ#eနAiuင#သလiu Animal Reference
ကeနလ- Reference လuပ#eနAiuင#ပ3တယ#။

public static void main(String [] args) {

Bird bird1 = new Bird();


Animal bird2 = bird1;

bird1.eat();
bird1.fly();

bird2.eat();
}

အထက#ပ3 ကuဒ#ထ-မH+ဆiuရင# new Bird() ဆiuတ+ကiu တစ#Pကiမ#သ+ eရ$သ+$ထ+$တ-6 အတ&က# Object ကeတ+6 တစ#ခu
ပ- Qiပ3တယ#။ အ-6ဒ? Object ကiu Bird bird1 Reference ကeန Reference လuပ#ထ+$ပ3တယ#။ Kပ?$eတ+6 Animal
bird2 = bird1 လiueရ$ထ+$Cပန#တ-6 အတ&က# bird1 ကeန Reference လuပ#eနတ-6 Object ကiuပ- Animal Type
Reference Cဖစ#တ-6 bird2 ကeနလ- Reference လuပ#eနCပန#တယ#။

တကယ#Qiတ+ကeတ+6 Bird Object တစ#ခuထ-ပ3။ Bird Type Reference ကeက+ Animal Type Reference
ကပ3 Reference ကပ3 Reference လuပ#eနပ3တယ#။ တကယ#eတ+6 Object ရ-I Type ဟ+ Bird Cဖစ#တ-6 အတ&က#
eat() method eက+ fly() method ကiuပ3 Invoke လuပ#လiuရသင#6ပ3တယ#။

Learning Java 128 မင#$လ&င#


Java Developer Class
ဒ3eပမ-6 Java မH+က Invoke လuပ#လiuရတ-6 Method eတ&ကiu Reference Type ကiu Fကည#6Kပ?$ ဆuB$Cဖတ#တ+ Cဖစ#တ-6
အတ&က# bird1 ကဆiuရင# eat() eက+ fly() ကiuပ3 အသuB$CပuAiuင#မH+ Cဖစ#Kပ?$ Animal Type Cဖစ#တ-6 bird2 ကeနဆiuရင#
eat() method ကiuသ+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Java မH+က Variable တစ#ခuကiu Declare လuပ#လiuက#တ-6 အခ3မH+ Type ကiu သတ#မHတ#eပ$ရန#လiuအပ#Kပ?$ အ-6ဒ? Type
ဟ+လ- Declare လuပ#Kပ?$တ-6 eန+က#မH+ eCပ+င#$လiu မရeတ+6ပ3ဘO$။

public static void main(String [] args) {

Animal animal = new Bird();

// if we need Bird behavior


Bird bird = (Bird)animal;

bird.fly();
}

အထက#နမOန+ထ-မH+လiu animal ဟ+ Animal Type အCဖစ# Declare လuပ#လiuက#တ-6 အတ&က# eန+က#က&ယ#မH+ Bird
Object ကiu Reference လuပ#eနeပမ-6 Animal အeနန-9ပ-အလuပ#လuပ#ပ3လiမ#6မယ#။ Bird အCဖစ#eCပ+င#$လiuမရeတ+6ပ3
ဘO$။ ဒ3eပမ-6 Bird Behavior ကiu အသuB$CပuခGင#တ-6အခ3မGiu$ဆiuရင# Bird Type bird variable ကiu အသစ#ထပ#Kပ?$
Declare လuပ#ရပ3မယ#။

အ-6ဒ?eနရ+ကiu animal variable ကiu လ+Kပ?$ အစ+$ထiu$ရပ3eတ+6မယ#။ ဒ?eနရ+မH+ animal ဟ+ Bird Object ကiu
Reference လuပ#eနတ+မHန#eပမ-6 Referenc Type ဟ+ Animal Cဖစ#ပ3တယ#။ Bird ဟ+ Animal ကiu Extends လuပ#
ထ+$တ-6 အတ&က# Bird eတ&ဟ+ Animal Cဖစ#eပမ-6 Animal တiuင#$ဟ+ Bird မCဖစ#Aiuင#ပ3ဘO$။ ဒ36eFက+င#6 animal
Variable ကiu Bird eနရ+မH+ ဒ?အတiuင#$ အစ+$ထiu$လiu မရAiuင#ပ3ဘO$။

(Bird)animal ဆiuKပ?$ Animal Type ကiu Bird အCဖစ#ပuBစBeCပ+င#$eပ$ဖiuလiuအပ#ပ3တယ#။ ဒ3ဆiuရင# Compiler ကeန
Bird အCဖစ#လက#ခBသ&+$ပ3မယ#။ ဒ?လiu eရ$သ+$Cခင#$ကiu Type Casting လiueခ2ပ3တယ#။ Type Casting ကiu eရ$သ+$
ရ+မH+ Inheritance Relationship Qiတ-6 Class eတ& အခGင#$ခGင#$မHသ+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ဘ+မH မဆiuင#တ-6
Class eတ&ဆiuရင# Cast လuပ#လiuရမH+မဟuတ#ပ3ဘO$။

public static void main(String [] args) {

Animal animal = new Animal();

// if we need Bird behavior


Bird bird = (Bird)animal;

bird.fly();
}

အထက#ပ3အတiuင#$ Animal Object ကiu Bird အCဖစ# Cast လuပ#လiuရလ+$ဆiueတ+6 Compiler ကeတ+6 လက#ခBသ&+$
ပ3တယ#။ Compiler Error Cဖစ#မH+ မဟuတ#ပ3ဘO$။ ဒ3eပမ-6 Runtime eရ+က#တ-6 အခ3ကGမH Reference လuပ#eနတ-6
Object က Bird မဟuတ#ပ- Animal Cဖစ#eနတ-6 အတ&က# ClassCastException ကiu Cဖစ#eပ2eစAiuင#ပ3တယ#။

Learning Java 129 မင#$လ&င#


Java Developer Class
ဒ36eFက+င#6 Class Casting တiuကiuCပuလuပ#eတ+6မယ#ဆiuရင# if statement ကiu အသuB$CပuKပ?$ animal ဟ+ Bird ရ-I
Instance ဟuတ#မဟuတ#စစ#eဆ$Kပ?$မH Casting ကiu Cပuလuပ#သင#6ပ3တယ#။

မ:န%ကန%eသ" Override Rules မ7"9


Method eတ&ကiu Override လuပ#Cခင#$အ+$Cဖင#6 Polymorphic Cဖစ#eအ+င# eရ$သ+$Aiuင#တယ#ဆiuတ+ကiu eလ6လ+Kပ?$
တ-6 eန+က#မH+ Method eတ&ကiu Override လuပ#တ-6eနရ+မH+ ဘယ#လiueရ$ရင#မHန#တယ# ဘယ#လiueရ$ရင#မH+$တယ#ဆiu
တ+ကiu ဆက#လက#Kပ?$ eလ6လ+သ&+$Fကရeအ+င#။

Override ဆiuတ" Inheritance မIiပ/ မ=ဖစ%Kiuင%ပ,ဘP9။


Super Class ထ-မH+eရ$သ+$ထ+$တ-6 Method eတ&ကiu Sub Class ထ-ကeန Cမင#မeနရင# Override ဆiuတ+Qiလ+
မH+ မဟuတ#ပ3ဘO$။ ဆiuလiuတ+က Private Method eတ& Kပ?$eတ+6 Package မတOတ-6eနရ+ကeန Inheritance လuပ#
ထ+$ရင# Default Access Method eတ&ဆiuရင# Sub Class ကeန Cမင#မH+မဟuတ#ဘO$။ မCမင#တ-6 အရ+eတ&ကiu မGiu$Uiu$
ဆက#ခBပiuင#ခ&င#6 မQiသလiu Override လ- လuပ#လiuရမH+ မဟuတ#ပ3ဘO$။

Super Class ထ/မ:" eရ9ထ"9တ/0 Method န/A Sub Class ထ/မ:" eရ9ထ"9တ/0
Method Signature eတ3ဟ" ထပ%တPညEeနရပ,မယ%။
Method Signature ဆiuတ+က Method Name န-9 Argument List ကiu eပ3င#$Kပ?$eခ2ဆiuFကတ+ပ3။ Override လuပ#
မယ#ဆiuရင# Super Class ထ-မH+eရ$သ+$ထ+$တ-6 Method န-9 Sub Class ထ-က Method eတ&ဟ+ Signature
ခGင#$ တOeနမHရပ3မယ#။ JVM ကeန Method eတ&ကiu Invoke လuပ#တ-6အခ3မH+ Method Signature ကiu Fကည#6Kပ?$
Invoke လuပ#ရတ+Cဖစ#ပ3တယ#။ Method Signature မတOတ+န-9 eန+က#ထပ# Method တစ#ခuလiu မHတ#ယOပ3တယ#။ ဒ36
eFက+င#6 Method Name eတ+6တOKပ?$ Argument မတOရင# Override Cဖစ#မH+ မဟuတ#ပ3ဘO$။ Overload လuပ#တ+ပ-
Cဖစ#မH+ပ3။ Method Overload အeFက+င#$ကiueတ+6 eန+က#မHဆက#eCပ+ပ3မယ#။

Access Modifier eတ3ဟ" Super Class ထက% က7Q%9e=မ"င%9eနလiuမရပ,


ဘP9
Method တစ#ခuရ-I Access Modifier ဆiuတ+က Method ကiu ဘယ#ကeန သuB$ခ&င#6Qiလ-ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#
တ-6 အရ+eတ&ပ3။ Super Class ရ-I Method ကiueတ+6 Public Access eပ$ထ+$Kပ?$ Override လuပ#တ-6 Method မH+
eတ+6 ပiuKပ?$ကGT#$တ-6 Default တiu Protected တiuကiu သတ#မHတ#လiuမရပ3ဘO$။

အ-6ဒ3ဟ+ ဘ+eFက+င#6လ-ဆiuရင# Is A Relationship eFက+င#6 Cဖစ#ပ3တယ#။ Super Class မH+eတ+6 အသuB$CပuAiuင#တယ#


လiuသတ#မHတ#ထ+$Kပ?$ သbeနရ+မH+လ+Kပ?$ Reference လuပ#ခBရမည#6 Sub Class မH+ သuB$လiuမရဘO$လiu သတ#မHတ#ထ+$
တ+ဟ+ မCဖစ#Aiuင#တ-6 အတ&က# Compile Time မH+ Error Cဖစ#မH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Access Modifier eတ&ကiu eရ$သ+$မယ#ဆiuရင# Super Class ထ-မH+ eရ$ထ+$တ+န-9 ထပ#တO ဒ3မHမဟuတ#
ပiuKပ?$ eဘ+င#ကGယ#တ-6 Access Modifier ကiu အသuB$Cပuရပ3မယ#။ Super Class ထ-မH+ Protected လiueရ$ထ+$တ+
ကiu Override လuပ#ထ+$တ-6 Sub Class ထ-မH+ Public လiueရ$ထ+$Aiuင#ပ3တယ#။

Learning Java 130 မင#$လ&င#


Java Developer Class

Return Type eတ3ဟ"လ/ Super Class မ:" eရ9ထ"9တ/0 Return Type န/A
သRရ/H Sub Type eတ3ပ/=ဖစ%ရပ,မယ%
Java SE 5 မတiuင#ခင# အထiကeတ+6 Override လuပ#မယ#ဆiuရင# Super Class မH+ eရ$ထ+$တ-6 Return Type န-9
Sub Class ထ-မH+ eရ$ထ+$တ-6 Return Type eတ&ဟ+ တOည?eနဖiuလiuအပ#ပ3တယ#။ ဒ3eပမ-6 Java SE 5 မH+
Covarient Return ဆiuတ+ကiu ထည#6သ&င#$လ+Kပ?$ Override မH+ Sub Class eတ&ရ-I Return Type ဟ+ Super
Class ရ-I Type ဒ3မHမဟuတ# Sub Type eတ&ကiuလ- Return လuပ#ခ&င#6ရလ+ပ3တယ#။

Sub Class eတ&ရ-I Object ကiu Super Class ရ-I Reference eတ&ကeန အသuB$Cပuမယ#ဆiuရင# Super Class ရ-I
Method ကiu Invoke လuပ#မH+ Cဖစ#ပ3တယ#။ အ-6ဒ?eတ+6 Super Class ရ-I Return Type ကiu Cပန#ရမယ#ဆiuKပ?$ Invoke
လuပ#တ-6 သOက eစ+င#6eနမH+ Cဖစ#ပ3တယ#။ တကယ# Runtime ကGeတ+6 Object Type Cဖစ#တ-6 Sub Class ကeန
အလuပ#လuပ#မH+ Cဖစ#Kပ?$ Super Class က Return Cပန#တ-6 Type ကiu မCပန#မiရင# Invoke လuပ#တ-6 သOမH+ Cပဿန+Qi
သ&+$Aiuင#ပ3တယ#။ IS A Relationship Qiတ-6 Type eတ&ကiu Return Cပန#ရင#eတ+6 သOလ- Return Type အeနန-9
အသuB$Cပuလiuရတ+ Cဖစ#တ-6 အတ&က# Cပဿန+QiမH+ မဟuတ#ပ3ဘO$။

ဆiuFကပ3စiu eဈ$ဝယ#တ-6 Method တစ#ခuရ-I Return Type ဟ+ င3$ Cဖစ#eနKပ?$ Sub Class ကeန Return Cပန#တ+က
Fကက#သ+$Cဖစ#eနရင# အဆင#မeCပပ3ဘO$။ င3$Fကင#$တiu င3$Cမင#$တiuကiu Return Cပန#ရင#eတ+6 င3$Cဖစ#တ-6 အတ&က#
Cပဿန+QiမH+ မဟuတ#ပ3ဘO$။

Exception eတ3န/A ပတ%သက%DပE9


Method eတ&ဟ+ Exception eတ&ကiu Throw လuပ#လiuရပ3တယ#။ Exception eတ&ကiu Throw လuပ#တ-6eနရ+မH+
Unchecked Exception eတ&Cဖစ#တ-6 RuntimeException eတ&ဆiuရင# Cပဿန+မQiပ3ဘO$။ Super Class ရ-I
Method ထ-မH+ Exception ကiu Throw မလuပ#ထ+$ရင#eတ+င#မH Sub Class ထ-က Throw လuပ#တ-6 Exception
ဟ+ Unchecked Exception Cဖစ#eနမယ#ဆiuရင# Cပဿန+မQiပ3ဘO$။

ဘ+လiuလ-ဆiueတ+6 Unchecked Exception eတ&ဟ+ မCဖစ#မeန Handle လuပ#ရမည#6 Exception eတ&မဟuတ#ပ3


ဘO$။ ဒ36eFက+င#6 Sub Class ကeန Throw လuပ#တ-6 Exception ဟ+ Unchecked Exception eတ&ဆiuရင#eတ+6
Invoke လuပ#တ-6 ဘက#ကiuဘ+မH အeထ&အထO$CပuCပင#စရ+မလiuအပ#ပ3ဘO$။ ဒ36eFက+င#6 Unchecked Excpetion eတ&
ဆiuရင#eတ+6 Sub Class ထ-ကeန Pကiuက#တ+ကiu Throw လuပ#Aiuင#ပ3တယ#။

ဒ3eပမ-6 Checked Exception eတ&ဆiuရင#eတ+6 မတOပ3ဘO$။ Super Class ထ-မH+ Throw မလuပ#ထ+$တ-6
Exception ကiu Sub Class ထ-ကeန Throw လuပ#လiuမရပ3ဘO$။ eန+က#Kပ?$ Super Class ထ-က Throw လuပ#ထ+$
တ-6 Checked Exception န-9 အမGiu$အစ+$မတOတ-6 Exception eတ&ကiuလ- Sub Class ထ-က eန Throw လuပ#လiuမရ
ပ3ဘO$။

Super Class ထ-မH+ Checked Exception ကiu Throw လuပ#ထ+$တယ#။ Sub Class ထ-ကeန Exception ကiu
Throw မလuပ#ဘO$ ဒ3ကရပ3တယ#။ Kပ?$eတ+6 Super Class ထ-က Throw လuပ#ထ+$တ-6 Exception န-9 ထပ#တO ဒ3မH
မဟuတ# Sub Exception ကiu Throw လuပ#မယ#ဆiuရင#လ-ရပ3တယ#။ Super Class ထ-က Throw လuပ#ထ+$တ-6
Exception ထက#Pက?$တ-6 Exception eတ&Kပ?$eတ+6 အမGiu$အစ+$မတOတ-6 Exception eတ&ကiu Throw လuပ#လiuမရပ3
ဘO$။

Learning Java 131 မင#$လ&င#


Java Developer Class

Override K:င%0 Overload


ဒ?eနရ+မH+ တဆက#ထ- ဆက#Kပ?$ eCပ+ခGင#တ+က Overload Cဖစ#ပ3တယ#။ Overload ဆiuတ+က OOP န-9eတ+6 မဆiuင#
ပ3ဘO$။ Override န-9 န+မည#ခGင#$ဆင#တ-6အတ&က# အမHတ#မH+$တတ#ပ3တယ#။ ဒ36eFက+င#6 ဘယ#လiuက&+Cခ+$တယ#ဆiuတ+
ကiu eလ6လ+သ&+$Fကပ3မယ#။

Overload
Overload ဆiuတ+က န+မည#တOKပ?$ Method Signature မတOတ-6 Method eတ&ကiu Class တစ#ခuထ-မH+ eရ$သ+$
ခGင#$ကiu Overload လuပ#တယ#လiueခ2ပ3တယ#။ န+မည#တOKပ?$ Argument မတOတ-6 Method eတ&ကiu eရ$သ+$Cခင#$အ+$
Cဖင#6 တစ#eနeနရ+ရ+မH+ တစ#Cခ+$ Method တစ#ခuကiu အသuB$CပuဖO$ခ-6ရင#6 eန+က# Method တစ#ခuလ- ဒ?လiu အလuပ#လuပ#
မH+ပ3လ+$ဆiuKပ?$ ခန#9မHန#$Aiuင#မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Java API eတ&ရ-I Class eတ&ထ-မH+ Overload လuပ#Kပ?$
eရ$သ+$ထ+$တ-6 Method eတ&ကiu အမG+$အCပ+$eတ&JAiuင#မH+ Cဖစ#ပ3တယ#။

public class NoteManager {

public viod takeNoteByPaper(String message) {


// codes
}

public void takeNoteByPhone(String message) {


// codes
}
}

အထက#ပ3 အတiuင#$ eရ$သ+$ထ+$တ-6 Method eတ&ဆiuရင# န+မည# တစ#မGiu$စ?Cဖစ#eနတ-6 အတ&က# Overload မဟuတ#
ပ3။

public class NoteManager {

public viod takeNote(String message, Paper paper) {


// codes
}

public void takeNote(String message, Phone phone) {


// codes
}
}

အထက#ပ3အတiuင#$ န+မည#တOKပ?$ Argument မတOတ-6 Method eတ&ကiu eရ$လiuက#Kပ?ဆiuရင# Overload Cဖစ#သ&+$ပ3


မယ#။ Overload ကiu Instance Method eတ&သ+မက Static Method eတ&မH+လ-eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။
Kပ?$eတ+6 Inheritance Hierarchy ထ-မH+လ-eရ$သ+$လiuရAiuင#ပ3တယ#။ Method Name တOKပ?$ Argument မတOတ-6
Method eတ&ကiu eရ$သ+$ထ+$Cခင#$အ+$Cဖင#6 Method တစ#ခuခuကiu အသuB$CပuဘO$ရင# eန+က# Method eတ&လ- ဒ?လiu
အလuပ#လuပ#မH+ပ3လ+$ဆiuKပ?$ ခန#9မHန#$လ&ယ#မH+ Cဖစ#ပ3တယ#။

Learning Java 132 မင#$လ&င#


Java Developer Class

Override Vs Overload

Override န-9 Overload ဆiuတ+ဟ+ န+မည#ခGင#$လ- ဆင#တOပ3တယ#။ Kပ?$eတ+6 Method eတ&အeပ2မH+ Cဖစ#eပ2တ+
ခGင#$လ- တOည?တ-6 အတ&က# အမHတ#မH+$eလ6Qiပ3တယ#။ ဒ?eနရ+မH+ Override န-9 Overload ကiu ဘယ#လiuခ&-Cခ+$ရမယ#ဆiu
တ+ကiu eဖ2Cပသ&+$ပ3မယ#။

အရင#ဆuB$ Method Signature ဆiuတ+ဘ+လ-ဆiuတ+ကiu eလ6လ+Fကရeအ+င#။ Method Signature ဆiuတ+က


Compiler န-9 Runtime မH+ Method တစ#ခuCဖစ#တယ#ဆiuတ+ကiu သတ#မHတ#eနတ-6 အရ+တစ#ခuCဖစ#ပ3တယ#။ Method
Signature ကiu သတ#မHတ#တ-6 eနရ+မH+ Method Name န-9 Arguments eတ&ကiu အသuB$Cပuပ3တယ#။ ဒ36eFက+င#6
Method Name န-9 Arguments eတ& တOတ-6 Method eတ&ကiu Method Signature တOတယ#လiuသတ#မHတ#ပ3တယ#။
Method Argument တOတယ#ဆiuတ+က Argument Type eတ&တOတယ#ကiu eCပ+တ+ပ3။ Argument Name eတ&
ကiu မဆiuလiuပ3ဘO$။

Override ဆiuတ+က Super Class ထ-မH+Qiတ-6 Method န-9 Signature ခGင#$တOတ-6 Method တစ#ခuကiu Sub Class
ထ-မH+ eရ$သ+$ထ+$တ+ကiu ဆiuလiuပ3တယ#။ တကယ#ဆiuရင# Method Signature တOတ-6 Method eတ&ကiu Class
တစ#ခuထ-မH+ eရ$လiuမရပ3ဘO$။ ဒ3eပမ-6 Inheritance Hirerachy Tree ထ-မH+ ဆiuရင#eတ+6 eရ$လiuရပ3တယ#။ Method
Signature ခGင#$တOတ-6 အတ&က# Override လuပ#ထ+$တ-6 Method eတ&ကiu Object ဆ?ကeန Fကည#6မယ#ဆiuရင# တစ#ခu
ထ-eသ+ Method လiuCမင#ပ3လiမ#6မယ#။

Overload ဆiuတ+က Class တစ#ခu ဒ3မHမဟuတ# Object တစ#ခuမH+ Method Name တOKပ?$ Argument မတOတ-6
Method eတ&ကiu eရ$သ+$ထ+$Cခင#$ကiu ဆiuလiuပ3တယ#။ Method Signature ခGင#$ မတOတ-6 အတ&က# Overload
Method eတ&ဟ+ န+မည#သ+တOတ-6 သ?$Cခ+$ Method eတ& Cဖစ#Fကပ3တယ#။ Overload ဆiuတ+က Class တစ#ခuထ-
မH+လ- eရ$သ+$Aiuင#သလiu Inheritance လuပ#လiuရလ+တ-6 Method eတ&Fက+$မH+လ- Cဖစ#Aiuင#ပ3တယ#။ Compiler န-9
Runtime ဘက#က Fကည#6မယ#ဆiuရင# Overload Method eတ&ကiu မတOတ-6 Method eတ&လiu Cမင#ပ3လiမ#6မယ#။

ဒ36eFက+င#6 Override Method eတ&ဟ+ Same Method eတ&Cဖစ#Fကeပမ-6 Overload Method eတ&ဟ+ Different
Method eတ&Cဖစ#Fကပ3တယ#။ တဖန# Override Method eတ&ဟ+ Inheritance Qiတ-6 Instance Method eတ&
Fက+$မH+သ+ Cဖစ#ပ&3$eလ6Qieပမ-6၊ Overload ကeတ+6 Instance Method Fက+$မH+eက+ Static Method eတ&
Fက+$မH+ပ3 Cဖစ#ပ&3$eလ6Qiပ3တယ#။

Learning Java 133 မင#$လ&င#


Java Developer Class
အeသ$စiတ#က&+Cခ+$ခGက#eတ&ကiueတ+6 eအ+က#ပ3 ဇယ+$မH+ eလ6လ+Aiuင#ပ3တယ#။

အe>က"င%9အရ" Override Overload

Method Name တOည?ရပ3မယ# တOည?ရပ3မယ#

Method Arguments ထပ#တOည?မH ရပ3မယ# လuB$ဝ တOလiuမရပ3ဘO$

Return Type Super Class ထ-က Return Type န-9 မည#သည#6 Return Type မGiu$ကiu မဆiu
ထပ#တOဒ3မHမဟuတ# Sub Type သ+ Cဖစ# အသuB$CပuAiuင#ပ3တယ#
ရပ3မယ#

Access Modifier Super Class ထ-က Access မည#သည#6 Access Modifier မGiu$ကiu မ
Modifier န-9 ထပ#တO ဒ3မHမဟuတ# ပiuKပ?$ ဆiu အသuB$CပuAiuင#ပ3တယ#
ကGယ#ဝန#$တ-6 Access Modifier ကiu
အသuB$Cပuရပ3မယ#

Checked Exceptions Super Class ထ-က Checked မည#သည#6 Exception မGiu$ကiu မဆiu
Exception န-9 ထပ#တOဒ3မHမဟuတ# Sub အသuB$CပuAiuင#ပ3တယ#
Type သ+ Cဖစ#ရပ3မယ#

Inheritance Relation Inheritance လuပ#ထ+$တ-6 Class eတ& Inheritance လuပ#ထ+$ထ+$ မထ+$ထ+$


အFက+$မH+သ+ Cဖစ#eပ2ပ3မယ# Cဖစ#ပ&3$eလ6Qiပ3တယ#

Method Type Instance Method အမGiu$အစ+$မH+ပ- Instance Method eက+ Static


Cဖစ#eပ2ပ3တယ# Method မH+ပ3 Cဖစ#Aiuင#ပ3တယ#

Method Place Super Class ထ-က Method န-9 Sub Class တစ#ခuထ-မH+ Qiတ-6 Method eတ&
Class ထ-က Method တiu အFက+$မH+ အFက+$မH+လ-Cဖစ#eပ2Aiuင#သလiu Super
Cဖစ#eပ2ပ3တယ# Class န-9 Sub Class ထ-မH+Qiတ-6 Class
eတ&Fက+$မH+လ- Cဖစ#eပ2Aiuင#ပ3တယ#

Learning Java 134 မင#$လ&င#


Java Developer Class

Polymorphism ရ/H အက7iu9မ7"9


ဒ?eနရ+မH+eတ+6 Polymophism ရ-I အကGiu$မG+$ဆiueပမ-6 Polymorphism ရ-I အကGiu$eတ&ကiu eလ6လ+သ&+$မH+ Cဖစ#ပ3
တယ#။ ဒ3eတ&ကiu မeလ6လ+ခင# အရင#ဆuB$ Polymorphism ကiu ဘယ#လiueနရ+eတ&မH+ Cဖစ#တ+လ- ဆiuတ+ကiu Cပန#
စT#$စ+$Fကည#6ရeအ+င#။

ပထမ တစ#eနရ+ကeတ+6 Class တစ#ခuက အCခ+$ Class တစ#ခuကiu Extends လuပ#တ-6အခ3 ဒ3မHမဟuတ# Interface
eတ&ကiu Implement လuပ#တ-6 အခ3မH+လ- Object တစ#ခuကiu ပuBစBအမGiu$မGiu$န-9 အသuB$CပuAiuင#တ-6 အတ&က# Polymorphism
ကiu Cဖစ#eပ2eစပ3တယ#။ Super Class န-9 Sub Class ရ-I အFက+$မH+၊ Kပ?$eတ+6 Interface န-9 Implement လuပ#ထ+$
တ-6 Class eတ&အFက+$မH+ IS A Relation ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

ဒuတiယ တစ#eနရ+ကeတ+6 Method Override လuပ#တ-6အခ3မH+ အမGiu$အစ+$တOKပ?$ ပuBစBမတOတ-6 Object eတ&ကiu


eရ$သ+$လ+Aiuင#Kပ?$ Polymorphism ကiu Cဖစ#eစAiuင#ပ3တယ#။ Kပ?$eတ+6 Method Override ဆiuတ+ကလ- IS A
Relationship Qiတ-6 eနရ+eတ&ကGမHသ+ Cဖစ#eပ2Aiuင#Cခင#$ Cဖစ#ပ3တယ#။ ဒ?အခGက#eတ&ကiu Fကည#6မယ#ဆiuရင#
Polymorphism ဆiuတ+ IS A Relationship Qiတ-6 eနရ+eတ&မH+ Cဖစ#eပ2eစတယ#ဆiuတ+ကiu သiAiuင#ပ3တယ#။

Inheritance eFက+င#6 Code eတ&ကiu Reuse လuပ#Aiuင#သလiu အuပ#စuတOတ-6 Object eတ& အCဖစ#eရ$Aiuင#တယ#လiu eCပ+ခ-6
ပ3တယ#။ တကယ#eတ+6 အuပ#စuတOတ-6 Object eတ&ကiu eရ$သ+$Cခင#$ဆiuတ+က Polymorphic Cဖစ#တ-6 ကuဒ#eတ&ကiu
eရ$သ+$Cခင#$ပ3ပ-။ Polymophic Cဖစ#တ-6 ကuဒ#eတ&ကiu ဘယ#လiuသuB$မလ-။ သuB$တ-6 အတ&က# ဘယ#လiuအကGiu$Qiလ- ဆiuတ+
ကiu eလ6လ+Fကည#6Fကရeအ+င#။ Polymorphic Code eတ&ကiu အeCခခBအ+$Cဖင#6 ၃ eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#။

Method Argument eတ&အeနန-9 အသuB$CပuAiuင#ပ3တယ#။

Method Return eတ& အeနန-9 အသuB$CပuAiuင#ပ3တယ#။

Instance Variable eတ&eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#။

Method Argument အeနန/A အသu<9=ပuမယ%ဆiuရင%


က\န#eတ+#တiu Game တစ#ခuကiu eရ$eနFကတယ#ဆiuFကပ3စiu။ eလယT#ပGBeတ& ဟယ#လ?eက+ပတ+eတ& ပ3မယ#။
eက+င#$ကင#လ-Qiမယ#။ အ-6ဒ?eက+င#$ကင#ထ-ကiu eလယဥ#ပGBeတ& ဟယ#လ?eက+ပတ+ eတ&ကiu ပGBခiuင#$တ-6 Method ကiu
eရ$eနFကတယ#ဆiuFကပ3စiu။ eအ+က#ပ3 အတiuင#$ Class Design ကiu eရ$မiပ3မယ#။

အထက#ပ3အတiuင#$ Helicopter ကiu ပGBခiuင#$ဖiu Method တစ#ခu Airplane ကiu ပGBခiuင#$ဖiu Method တစ#ခu eရ$ရပ3မယ#။

Learning Java 135 မင#$လ&င#


Java Developer Class

ဒ?အထieတ+6Cပဿန+မဟuတ#eသ$ပ3ဘO$။ ဒ3eပမ-6 ဒ?eနရ+မH+ Drone eတ&ကiuလ- Game ထ-မH+ သuB$ခGင#လ+Kပ? ဆiuFကပ3


စiu။ က\န#eတ+#တiueတ& Drone အတ&က# Method တစ#ခuကiu Sky ထ-မH+ လ+eရ$ရပ3eတ+6မယ#။ ဒ?လiuဆiuရင# Sky ကiu
အသuB$Cပueနတ-6 Class eတ& အတ&က# Cပင#ဖiuလiuခGင#လiuလ+Aiuင#ပ3တယ#။ မCပင#ရရင#eတ+င# Sky ကiu Cပင#လiuက#တ-6
အတ&က# eဘ$ထ&က#ဆiu$ကGiu$eတ&မQiဘO$ဆiuတ+ကiu သက#eသCပဖiuအတ&က# Test eတ&ကiu Cပန#လuပ#ဖiuလiuအပ#လ+ပ3လiမ#6
မယ#။

ဒ3ဆiuရင# Sky ရ-I fly method ကiu Polymorphic ကiuလက#ခBတ-6 Method Cဖစ#eအ+င# eCပ+င#$Fကည#6ပ3မယ#။

Fly Method ကiuပiuင#တ-6 AeroVehicle ကiu တည#eဆ+က#Kပ?$ Airplane န-9 Helicopter တiuကiu Extends လuပ#ခiuင#$ပ3
တယ#။ အ-6ဒ?အတ&က# Airplane န-9 Helicopter eတ&ဟ+ AeroVehicle eတ& Cဖစ#သ&+$Fကပ3တယ#။ Kပ?$တ-6eန+က#မH+
Sky Class ရ-I fly method ကiuလ- AeroVehicle ကiu Argument အCဖစ#ယOခiuင#$လiuက#ပ3တယ#။ အ-6ဒ?အတ&က# fly
method တစ#ခuထ-န-9 Airplane eက+ Helicopter ကiuပ3 အသuB$Cပuလiuရလ+Aiuင#ပ3တယ#။

ဒ36eFက+င#6 Drone ကiu ထပ#Kပ?$ ထည#6ခGင#လ+တယ#ဆiuရင#လ- AeroVehicle ကiu Extends လuပ#Kပ?$ Drone Class ကiu
eရ$သ+$လiuက#UuBပ3ပ-။ Drone ဟ+လ- AeroVehicle Cဖစ#တ-6အတ&က# Sky ရ-I fly Method ကiuဆက#Kပ?$ အသuB$CပuUuBပ3
ပ-။ Sky ကiu Cပင#စရ+မလiuအပ#ပ3ဘO။ အ-6ဒ?အတ&က# Sky ကiu အသuB$Cပuတ-6 Class eတ&မH+လ- အကGiu$သက#eရ+က#မ[eတ&
QiမH+ မဟuတ#ပ3ဘO$။

ဒ,0e>က"င%0 POLYMORPHIC CODE eတ3ကiu METHOD ARGUMENT eတ3 အeနန/A အသu<9=ပuKiuင%DပE9၊ APPLICATION
အတ3က% FEATURE အသစ%eတ3 ထည%0ခ7င%လ"DပEဆiuရင%လ/ အလ3ယ%တကP eဆ"င%ရ3က%Kiuင%မ:" =ဖစ%ပ,တယ%။ အလ3ယ%e=ပ"ရမယ%ဆiu
ရင% POLYMORPHIC CODE eတ3ကiu အသu<9=ပu=ခင%9အ"9=ဖင%0 APPLICATION eတ3ကiu ENHANCE လuပ%ရတ"လ3ယ%ကPeစပ,
တယ%။

Method Return Type eတ3အeနန/A အသu<9=ပuရင%


Instance Variable eတ3 အeနန/A အသu<9=ပuမယ%ဆiuရင%
အရင#ဆuB$ Method Return Type eတ& Instance Variable eတ&eနရ+မH+ Polymorphic Code eတ&ကiu မသuB$ပ-
eရ$Fကည#6ရင# ဘယ#လiu Cဖစ#မယ#ဆiuတ+ကiu Fကည#6Fကည#6Fကရeအ+င#။

e^မH+ အသuB$Cပuခ-6တ-6 နမOန+ကiuပ- Cပန#Kပ?$ အသuB$Cပuပ3မယ#။ AirplaneFactory တစ#ခuန-9 HelicopterFactory Class


AHစ#ခuQiတ+ကiu သတiCပuမiမH+ပ3။ သOတiueတ&က အသ?$သ?$ Airplane န-9 Helicopter eတ&ကiu Create လuပ#eပ$Aiuင#ပ3
တယ#။ သOတiuကiu GameController ထ-မH+ Instance Variable အeနန-9 အသuB$Cပuထ+$ပ3တယ#။ Kပ?$eတ+6
GameController ကeန Sky ကiuလ- Instance Variable အeနန-9 အသuB$Cပuထ+$ပ3တယ#။

Learning Java 136 မင#$လ&င#


Java Developer Class

GameController ထ-မH+ play() ဆiuတ-6 Method ပ3ဝင#Kပ?$ အ-6ဒ?အထ-မH+ AirplaneFactory ထ-ကeန Airplane ကiu
Create လuပ#Kပ?$ Sky ထ-မH+ ပGBခiuင#$မယ#၊ Kပ?$eတ+6 HelicopterFactory ထ-ကeန Helicopter ကiu Create လuပ#Kပ?$
Sky ထ-မH+ ပGBခiuင#$ပ3မယ#။

ဒ?eနရ+မGiu$မH+လ- Item အသစ#ကiu Cဖည#6စ&က#လiuပ3က Item တစ#ခu ItemFactory တစ#ခuန-9 Controller ကiu Cပင#ဖiuလiueန
မH+ပ3ပ-။ Class eတ&ရ-I Design ကiu အထက#ပ3အတiuင#$ အတiuင#$Cပင#Fကည#6ပ3မယ#။

Learning Java 137 မင#$လ&င#


Java Developer Class
ItemFactory ဆiuတ-6 Abstract Class တစ#ခuကiu ထပ#Kပ?$တiu$ပ3တယ#။ Kပ?$eတ+6 ItemFactory ထ-မH+ AeroVehicle
ကiu Return Cပန#တ-6 Abstract Method တစ#ခuပ3ဝင#ပ3တယ#။ AeroVehicle ဆiuတ+က Polymorphic Type ကiu
အသuB$Cပuထ+$တ-6 Type တစ#ခuCဖစ#ပ3တယ#။ အ-6ဒ?အတ&က# create Method ကeန Airplane ကiuလ- Return Cပန#လiu
ရသလiu Helicopter ကiuလ- Return Cပန#လiuရမH+ပ3။

Kပ?$eတ+6မH AirplaneFactory န-9 HelicopterFactory Class AHစ#ခuကiu ItemFactory ကiu Inheritance လuပ#ခiuင#$ပ3
တယ#။ အ-6ဒ?အတ&က# create() Method ကiu Override လuပ#ဖiuလiuအပ#လ+ပ3တယ#။ အသ?$သ?$ Override လuပ#Kပ?$
Airplane န-9 Helicopter ကiu Return Cပန#eပ$ပ3တယ#။ Airplane eက+ Helicopter ပ3 AeroVehicle ကiu Extends
လuပ#ထ+$တ-6အတ&က# AeroVehicle အCဖစ# Return Cပန#လiuရပ3တယ#။

ဤနည#$အ+$Cဖင#6 ItemFactory ရ-I create Method မH+ Polymorphic Type Cဖစ#တ-6 AeroVehicle ကiu Return
Cပန#Cခင#$အ+$Cဖင#6 AeroVehicle ရ-I Sub Type eတ&မHန#သမZကiu Return Cပန#လiuရပ3တယ#။ Drone ကiuပ3 eပ$သuB$ခGင#
တယ#ဆiuရင# Drone ကiu AeroVehicle ကiu Extends လuပ#၊ Kပ?$eတ+6 DroneFactory ကiu ItemFactory ကiu Extend
လuပ#Kပ?$ create Method ကiu Drone Object ကiu Return Cပန#eပ$လiuက#လiuရပ3တယ#။

Kပ?$eတ+6 GameController ဘက#မH+ ယခင# Factory တစ#ခuခGင#$စ?ကiu Instance Member အCဖစ#ယOeနတ-6 eနရ+
ကiu ItemFactory ရ-I Collection ကiu Dependency အCဖစ#ယOလiuက#UuBပ3ပ-။ ဒ3ဆiuရင# ItemFactory ကiu Extendss
လuပ#ထ+$တ-6 Factory မHန#သမZကiu Collection ထ-မH+ သiမ#$ထ+$လiuရပ3တယ#။ Game Level အလiuက# ItemFactory
eတ&ကiu ထပ#ထပ#Kပ?$ eပ3င#$ထည#6သ&+$မယ#ဆiuရင# Game Item အမGiu$မGiu$ကiu ထပ#တiu$Kပ?$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။
ဒ?eနရ+မH+ အသuB$Cပuသ&+$တ-6 ItemFactory ဆiuတ+ကလ- Polymorphic Type Cဖစ#ပ3တယ#။

Polymorphic Type eတ3ကiu Instance Member အ=ဖစ% အသu<9=ပu=ခင%9အ"9=ဖင%0 =ပu=ပင%e=ပ"င%9လ/ရလ3ယ%ကPတ/0


Application eတ3ကiu eရ9သ"9လ"Kiuင%တယ%ဆiuတ"ကiu သiKiuင%ပ,တယ%။

Polymorphism ကiu အသu<9=ပu=ခင%9အ"9=ဖင%0 Requirement e=ပ"င%9သ3"9တ/0အခ,မ:"လ/ အလ3ယ%တကP e=ပ"င%9လ/Kiuင%


DပE9၊ Behavior အသစ%eတ3ကiu ထပ%မ<=ဖည%0စ3က%လiuတ/0 အခ,မ:"လ/ အလ3ယ%တကP eဆ"င%ရ3က%Kiuင%တယ%ဆiuတ"ကiu သiIi
Kiuင%ပ,တယ%။


Learning Java 138 မင#$လ&င#


Java Developer Class

Java 5 Features

Java ဟ+ ၁၉၉၆ ခuAHစ#ကစKပ?$ Release လuပ#ခ-6Kပ?$ အPကiမ#Pကiမ# Version Update လuပ#လ+ခ-6ပ3တယ#။ ဒ?လiu
Version eတ&ကiu eCပ+င#$လ+တ-6အခ3မH+ အeCခခBအ+$Cဖင#6 Bug Fix eတ&၊ Performance Improvement eတ&၊ Api
အသစ#eတ&န-9 Language ပiuင#$ဆiuင#ရ+ eCပ+င#$လ-မ[eတ&ကiu ထည#6သ&င#$လ+ခ-6Fကပ3တယ#။

Java ရ-Iသမiuင#$မH+ Language ပiuင#$ဆiuင#ရ+eCပ+င#$လ-မ[ကiu စတင#ခ-6တ-6 Version လiueCပ+လiuရAiuင#ပ3တယ#။ အရင#တuန#$


က မQieသ$တ-6 eရ$သ+$ပuBeရ$သ+$နည#$eတ& စတင#ပ3ဝင#လ+ခ-6ပ3တယ#။ ပ3ဝင#လ+တ-6အeFက+င#$အရ+eတ&ကeတ+6
Annotations, Enumerations န-9 Generics တiuပ- Cဖစ#Fကပ3တယ#။

Java 5 ရ-I Annotations eFက+င#6 Java Framework eတ&မH+ XML eတ&ကiu eရ$သ+$စရ+မလiueတ+6ပ- Annotation
ကiu အသuB$CပuKပ?$ အလ&ယ#တကOeရ$သ+$လ+Aiuင#ခ-6ပ3တယ#။ Generics eFက+င#6 Java မH+ Type ကiuလ- Abstraction
Cဖစ#eအ+င# eရ$သ+$လ+Aiuင#ခ-6ပ3တယ#။ ဒ36eFက+င#6 Collections Framework မH+ Type Safe Cဖစ#eအ+င# eရ$သ+$
လ+Aiuင#ခ-6ပ3တယ#။

Learning Java 139 မင#$လ&င#


Java Developer Class

Annotation
Java SE 5 အeရ+က#မH+ အသစ#Cဖည#6စ&က#ခ-6eသ+ Interface အမGiu$အစ+$တစ#ခu Cဖစ#ပ3တယ#။ Source Code eတ&
ထ-မH+ Meta Data eတ&ကiu eဖ2Cပလiuတ-6 အခ3မH+ အသuB$CပuAiuင#ပ3တယ#။ ဒ?eနရ+မH+ Meta Data ဆiuတ+ဘ+လ- ဆiuတ+
ကiu အရင#ဆuB$Qင#$Cပပ3မယ#။

Application ထ-ကeန အသuB$CပuAiuင#တ-6 အခGက#အလက#eတ&ကiu Data လiueခ2ဆiuKပ?$ အ-6ဒ? Data eတ&ဟ+ ဘ+Cဖစ#
တယ#၊ ဘယ#လiu ထO$Cခ+$ခGက#Qiတယ#ဆiuတ+eတ&ကiu eဖ2CပAiuင#တ+က Meta Data Cဖစ#ပ3တယ#။

ဆiuFကပ3စiu က\န#eတ+#တiu eရ$တ-6 Project ထ-မH+ Class eတ&ကiu eရ$တ-6အခ3မH+ တစ#ခGiueတ&ကiu Data Base ထ-က
Table eတ&ကiu ကiuယ#စ+$Cပuတ-6 Class အeနန-9 eရ$ခGင# eရ$ပ3လiမ#6မယ#။ အ-6ဒ?အခ3မGiu$ဆiuရင# အ-6ဒ? Class eတ&ကiu
Database ထ-က Table eတ&ကiu ကiuယ#စ+$Cပuတ-6 Class Cဖစ#eFက+င#$၊ Table Name က ဘယ#လiu Cဖစ#eFက+င#$၊
Member Properties eတ&ကiuလ- ဘယ# Colum ကiu ကiuယ#စ+$CပueFက+င#$၊ Kပ?$eတ+6 Primary Key Cဖစ#တ-6 Column
Cဖစ#eFက+င#$တiuကiu eဖ2Cပလiuတ-6အခ3မH+ Annotation ကiuအသuB$CပuKပ?$ eဖ2CပAiuင#ပ3တယ#။

Annotation မQiခင#တuန#$ကဆiuရင# Meta Data eတ&ကiu eရ$သ+$ အသuB$Cပuလiuတ-6 အခ3မH+ XML Mapping File eတ&
ကiu အသuB$Cပuခ-6Fကရပ3တယ#။ ဒ36eFက+င#6 Application တစ#ခuကiu eရ$ခGင#Kပ?ဆiuရင# Class eတ&ကiuလ- eရ$သ+$ဖiuလiuအပ#
သလiu XML Configuration File eတ&လ- ပ&စ+Pက-eနeအ+င#eရ$ဖiu လiuအပ#ခ-6ပ3တယ#။ Annotation ကiu အသuB$CပuKပ?$
Meta Data eတ&ကiu Source Code eတ&ထ-မH+ eရ$သ+$လiuရAiuင#လ+တ-6 အတ&က# XML eတ&ကiu eရ$သ+$စရ+မ
လiuအပ#eတ+6ပ- Java Code eတ&န-9တင# Data eတ&ကiueက+ Meta Data eတ&ကiuပ3 eရ$သ+$လ+Aiuင#ခ-6ပ3တယ#။ ဒ36
eFက+င#6 API eတ& Framework eတ&ကiu အလ&ယ#တကO အသuB$Cပuလ+Aiuင#ခ-6ပ3တယ#။

က\န#eတ+#တiu Annotation ကiu eလ6လ+တ-6 eနရ+မH+ အပiuင#$ ၂ ပiuင#$န-9 eလ6လ+Aiuင#မH+ Cဖစ#ပ3တယ#။ ပထမပiuင#$
ကeတ+6 eရ$သ+$ထ+$တ-6 Annotation eတ&ကiu ဘယ#လiu အသuB$Cပuမလ- ဆiuတ-6 အပiuင#$Cဖစ#Kပ?$၊ ဒuတiယ အပiuင#$ကeတ+6
Annotation eတ&ကiu ဘယ#လiu eရ$သ+$Kပ?$ ဘယ#လiu Service eတ&ကiu eရ$သ+$မလ- ဆiuတ-6 အပiuင#$ပ- Cဖစ#ပ3တယ#
အမHန#အတiuင#$ eCပ+ရမယ#ဆiuရင# Java ကiu စတင#eလ6လ+eနသOတစ#eယ+က# အတ&က#ဆiuရင#eတ+6 ပထမအပiuင#$Cဖစ#
တ-6 Annotation တစ#ခuကiu ဘယ#လiu အသuB$Cပuမလ-ဆiuတ+ကiu eက+င#$eက+င#$န+$လည#တယ#ဆiuရင# လuBeလ+က#ပ3
တယ#။ ဒuတiယအပiuင#$ကeတ+6 Framework eရ$သ+$သOeတ&Kပ?$eတ+6 API eရ$သ+$သOeတ&န-9 ဆiuင#တ-6 အပiuင#$ပ3။

Learning Java 140 မင#$လ&င#


Java Developer Class
eန+က#က&ယ#မH+ ဘယ#လiuအလuပ#လuပ#eနတယ# ဆiuတ+ကiu န+$လည#ရuBရည#ရ&ယ#ခGက#န-9 eလ6လ+သ&+$တ+ သင#6eတ+#
မယ#လiu ထင#ပ3တယ#။

Using Annotations
က\န#eတ+#တiu ဒ?eနရ+မH+eတ+6 အသင#6 eရ$သ+$ထ+$တ-6 Annotation eတ&ကiu ဘယ#လiu အသuB$Cပuသ&+$မလ- ဆiuတ+ကiu
eလ6လ+သ&+$Fကပ3မယ#။ ဒ3ဆiuရင# အသင#6 အသuB$CပuAiuင#တ-6 Annotation eတ&ကiu ဘယ#သOeတ&က eရ$eပ$ထ+$မH+လ-
ဆiuတ+ကeန eလ6လ+သ&+$Fကရeအ+င#။

Java SE 5 အeရ+က#မH+ Annotation eတ&ကiu eရ$သ+$ အသuB$Cပuလ+Aiuင#ခ-6ပ3တယ#။ Java SE ရ-I API eတ&မH+လ-
Predefine Annotation eတ&လ- ပ3ဝင#လ+သလiu JPA တiuလiu Hibernated တiuလiu Spring Framework တiuလiu Third
Party Framework eတ&မH+လ- Annotation eတ&န-9 Annotation Processor တiuကiu အသuB$CပuKပ?$ သOတiuရ-I
Framework eတ&ကiu အသuB$Cပuရတ+လ&ယ#ကOeအ+င# Cပင#ဆင#လ+ခ-6ပ3တယ#။

ဒ?eနရ+မH+eတ+6 Java SE ရ-I API ထ-မH+ Default အeနန-9 အသuB$CပuAiuင#တ-6 Annotation eတ&ကiu ဘယ#လiu အသuB$Cပu
eရ$သ+$ရမယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။ လက#Qiအeနအထ+$အရ Default အeနန-9 အသuB$CပuAiuင#တ-6
Annotation eတ&ကeတ+6 eအ+က#ပ3အတiuင#$ Cဖစ#Fကပ3တယ#။

@Deprecated
အရင#တuန#$ကeတ+6 အသuB$Cပueနခ-6Kပ?$ e^eလG+က# အသuB$မCပueစလiueတ+6တ-6 Element eတ&မH+ @Deprecated
Annotation ကiu eရ$သ+$အသuB$Cပuသင#6ပ3တယ#။ @Deprecated Annotation ကiu Type, Field, Method,
Package, Constructor, Parameter န-9 Local Variable eတ&မH+ eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။ တကယ#လiu
Compile လuပ#စT#မH+ @Deprecated Annotation ကiu eရ$သ+$ထ+$တ-6 Element ကiu အသuB$Cပuထ+$မယ#ဆiuပ3က
Compile Time မH+ Warning ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

public class Student {

@Deprecated
public void greet() {
System.out.println("Hello");
}
}

အထက#ပ3အတiuင#$ Student Class ရ-I greet() method မH+ @Deprecated Annotation ကiu eရ$သ+$ထ+$ပ3
တယ#။

Learning Java 141 မင#$လ&င#


Java Developer Class
အထက#ပ3အတiuင#$ @Deprecated Annotation ကiu eရ$သ+$ထ+$တ-6 greet() method ကiu အသuB$Cပuတ-6eနရ+မH+
Warning Cပeပ$Aiuင#တယ#ဆiuတ+ကiu eဖ2Cပeပ$Aiuင#ပ3တယ#။ e^eလG+က# အသuB$မCပueစလiuတ-6 eနရ+eတ&မH+
@Deprecated Annotation ကiu အသuB$CပuKပ?$ eရ$သ+$Aiuင#ပ3တယ#။

@Override
အမ[မ-6 အမHတ#မ-6 အသuB$အမG+$ဆuB$ Annotation ဟ+ ဘ+လ-လiu eမ$ရင# @Override Annotation Cဖစ#ပ3မယ#။ ယeန9
eခတ# IDE ကiu အသuB$CပuKပ?$ ကuဒ#eရ$eနFကတ-6အခ3မH+ ဒ? Annotation ဟ+ Class eတ&ကiu Create လuပ#တ-6 အခ3မGiu$
မH+ ပ3လ+တတ#ပ3တယ#။

ဆiuFကပ3စiu Eclipse IDE ကiu အသuB$CပuKပ?$ Servlet eတ&eရ$တ-6အခ3၊ Servlet Listener eတ& Servlet Filter eတ&eရ$
တ-6အခ3မGiu$မH+ Code Template ကeန Generate လuပ#လ+တ-6 ကuဒ#eတ&ထ-မH+ @Override ဟ+ ပ3လ+တတ#ပ3
တယ#။ Kပ?$eတ+6 Interface ကiu Implement လuပ#တ-6အခ3မGiuB$ ဒ3မH မဟuတ# Abstract Class ကiu Extends လuပ#တ-6
အခ3မGiu$မH+ ဒ?အတiuင#$ eရ$သ+$ထ+$ပ3က IDE မH+ Error တက#eနပ3မယ#။ အ-6ဒ?eနရ+မH+ Hint အတiuင#$ Implement
လuပ#ရeသ$တ-6 Abstract Method eတ&ကiu Create လuပ#မယ#ဆiuတ+ကiu eရ&$Kပ?$ Code eတ&ကiu Generate လuပ#တ-6
အခ3မGiu$eတ&မH+ @Override Annotation eတ&ဟ+ ပ3လ+တတ#ပ3တယ#။

က- ဒ?eနရ+မH+ @Override Annotation ကiu eရ$ထ+$ရင# Super Class ထ-မH+ပ3တ-6 Method ကiu Override လuပ#
ထ+$တယ#ဆiuတ+ကiu eCပ+Cပeပ$Aiuင#တယ#လiu အလ&ယ#eCပ+လiuရAiuင#ပ3တယ#။ မဟuတ#လiuလ+$ဆiueတ+6 ဟuတ#ပ3တယ#။
ဒ3eပမ-6 ဒ?လiu eတ&$Fကည#6ရeအ+င# @Override Annotation ကiu မeရ$ထ+$ရင# Override မCဖစ#eတ+6လiuလ+$။ စမ#$
Fကည#6ရင# @Override Annotation ကiu မeရ$ထ+$ရင#လ- Override Cဖစ#eနတယ#ဆiuတ+ကiu eတ&Jရပ3မယ#။

ကiuင#$ ဒ36Cဖင#6 ဘ+လiu @Override Annotation ကiu eရ$ဖiuလiuအပ#ရတ+လ-။ မeရ$တ+န-9 eရ$တ+န-9 ဘ+မG+$က&+သ&+$လiu
လ- ဆiuတ+ကiu ဒ?eနရ+မH+ eလ6လ+သ&+$Fကရeအ+င#။

အရင#ဆuB$ @Override မပ3ပ- Override Cဖစ#မCဖစ# စမ#$Fကည#6Fကရeအ+င#။ Override န-9 ပတ#သက#Kပ?$ OOP ရ-I
Inheritance အeFက+င#$မH+ eဖ2CပKပ?$ Cဖစ#ပ3တယ#။ တကယ#လiu ဒ?eနရ+မH+ Override ဆiuတ+ဘ+လ-မသieသ$ရင# အ-6
ဒ?အခန#$ကiu အရင#ဖတ#eစလiuပ3တယ#။

class Super {
public void hello() {
System.out.println("Super Hello");
}
}

class Sub extends Super {


public void hello() {
System.out.println("Sub Hello");
}
}

အထက#ပ3အတiuင#$ Super Class ထ-မH+ hello() method ကiu eရ$သ+$ထ+$ပ3တယ#။ Kပ?$eတ+6 အ-6ဒ? Method မH+
Super Hello ဆiuတ+ကiu System Console မH+ eဖ2Cပထ+$ခiuင#$ပ3တယ#။ Kပ?$eတ+6 Sub Class ကeန Super
Class ကiu Entends လuပ#ထ+$တယ#။ အ-6ဒ?အတ&က# Super Class ထ-မH+ eရ$ထ+$တ-6 hello() method ဟ+
Inheritance eFက+င#6 Sub Class ကeန အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 142 မင#$လ&င#


Java Developer Class

public class OverrideDemo {

public static void main(String[] args) {


new Sub().hello();
}
}

ဒ?လiuမGiu$ Super Class ကeန Inheritance လuပ#လiuရလ+တ-6 Method eတ&ကiu Sub Class ထ-ကeန Signature တO
တ-6 Method တစ#ခuကiu eရ$သ+$Cခင#$ကiu Override လuပ#တယ#လiu eခ2ပ3တယ#။ တကယ#လiu Sub Class ကeန
Object eဆ+က#Kပ?$ hello() method ကiu အလuပ#လuပ#ခiuင#$မယ#ဆiuရင# Inheritance လuပ#လ+တ-6 Behavior ကiu မသuB$
ပ- Sub Class ထ-မH+ Qiတ-6 Method ကiu အသuB$Cပuသ&+$Cခင#$ကiu Override လuပ#တယ#လiu eခ2ပ3တယ#။

class Sub extends Super {

@Override
public void hello() {
System.out.println("Sub Hello");
}
}

အထက#ပ3အတiuင#$ Sub Object ကiu eဆ+က#Kပ?$ hello() method ကiu Invoke လuပ#Fကည#6ပ3တယ#။ တကယ#တမ#$
အeCဖမH+eတ+6 Sub Hello Cဖစ#ပ3တယ#။ ဒ3ဟ+ ဘ+ကiueCပ+တ+လ-ဆiuရင# @Override Annotation ကiu မeရ$ထ+$
လ- Override Cဖစ#သ&+$တယ#ဆiuတ+ကiu eCပ+Cပတ+ Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+ Sub Class ရ-I hello() Method e^မH+ @Override Annotation ကiu eအ+က#ပ3အတiuင#$ eရ$သ+$Fကည#6
Kပ?$ OverrideDemo ကiu Run Fကည#6ပ3မယ#။
Annotation မeရ$ခင#ကအတiuင#$ပ- အeCဖထ&က#တ+ကiu eတ&Jရပ3တယ#။ ဒ3ဟ+ ဘ+ကiueCပ+တ+လ- ဆiuရင#
@Override ကiu eရ$ထ+$ထ+$မထ+$ထ+$ Override ဟ+ Cဖစ#eပ2တယ#ဆiuတ+ပ3ပ-။ က-ဒ3Cဖင#6 @Override ကiu ဘ+
eFက+င#6 eရ$Fကတ+လ-။
အထက#ပ3အတiuင#$ Super Class ထ-က hello() method ရ-I Access Modifier ကiu private လiueCပ+င#$လiuက#ပ3
တယ#။ ဒ?eနရ+မH+ @Override Annotation ကiu Sub Class ထ-မH+ eရ$သ+$ထ+$ရင# Compile Time မH+ Error

Learning Java 143 မင#$လ&င#


Java Developer Class
တက#တ+ကiu eတ&Jရပ3တယ#။ ဘ+လiuလ-ဆiueတ+6 Super ထ-မH+ပ3တ-6 hello() method ဟ+ private Cဖစ#သ&+$တ-6
အတ&က# Override မCဖစ#eတ+6ပ3ဘO$။ ဒ36eFက+င#6 @Override Annotation ကiu အသuB$Cပuထ+$ရင# Override မCဖစ#တ-6
eနရ+eတ&မH+ ဆiuရင# Compile Time မH+ Error ထuတ#eပ$Aiuင#တယ#ဆiuတ+ကiu သiAiuင#ပ3တယ#။

@SupressWarnings
Compile Time မH+ Warning အeနန-9 ထ&က#eနတ-6 အရ+eတ&ကiu Warning မထuတ#eစလiuတ-6 အခ3မGiu$မH+ ဒ?
Annotation ကiu eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။ ဆiuFကပ3စiu Serializable Interface ကiu Implement လuပ#ထ+$Kပ?$
Serial Version UID ကiu မeရ$ထ+$ခ-6တ-6 အခ3မGiu$eတ& အသuB$မCပuထ+$တ-6 Private Variable eတ&န-9 Private
Method eတ& အစQiတ-6 eနရ+eတ&မH+ Compile Time Warning eတ&Cပeနeလ6Qiပ3တယ#။

e^မH+ eဖ2Cပခ-6တ-6 Super Class ထ-မH+လ- hello() method ကiu private လuပ#လiuက#တ-6အခ3မH+ အ-6ဒ? hello() method
ကiu အသuB$Cပueနတ-6 eနရ+မQiတ-6 အတ&က# Compile Time မH+ Warning ထ&က#eနတ+ကiu eတ&JရမH+ Cဖစ#ပ3တယ#။ အ-6
ဒ?လiu eနရ+မGiu$မH+ @SuppressWarnings Annotation ကiu အသuB$CပuKပ?$ Warning ကiu မထ&က#eအ+င# eရ$သ+$Aiuင#
ပ3တယ#။

အထက#ပ3အတiuင#$ hello() method e^မH+ @SuppressWarnings(“unused”) လiueရ$သ+$လiuက#တ+န-9 Warning


ကiu မCပeတ+6တ+ကiu eတ&JရမH+ Cဖစ#ပ3တယ#။

@SuppressWarnings("serial")
public class Student implements Serializable {

အထက#ပ3 Student Class ဟ+ Serializable Interface ကiu Implement လuပ#ထ+$တ-6 အတ&က# ပuBမHန#ဆiuရင#
serialVersionUID ကiu သတ#မHတ#eရ$သ+$ထ+$ဖiu လiuအပ#ပ3တယ#။ serialVersionUID အeFက+င#$န-9 ပတ#သက#Kပ?$
Java IO အခန#$မH+ အeသ$စiတ# eဖ2Cပပ3မယ#။ ဒ?eနရ+မH+မeတ+6 Serializable Interface ကiu Implement လuပ#
ထ+$တ-6 Class eတ&မH+ serialVersionUID ကi မeရ$ထ+$ရင# Compile Time မH+ Warning ထ&က#eနမယ#လiuပ-
မHတ#ထ+$eပ$ပ3။ ဒ?လiu Warning eတ&မH+လ- @SuppressWarnings(“serial”) လiueရ$သ+$ထ+$Kပ?$ Warning မ
ထ&က#eအ+င# လuပ#Aiuင#ပ3တယ#။

အCခ+$eသ+ Predefine Annotation အeနန-9 Java SE 7 အeရ+က#မH+ @SaveVerarges Annotation ကiu


အသစ# Cဖည#6စ&က#လ+ခ-6Kပ?$ Java SE 8 အeရ+က#မH+လ- @FunctionalInterface တiuကiu Cဖည#6စ&က#လ+ခ-6ပ3တယ#။
@SaveVerarges ကiueတ+6 Generics အeFက+င#$မeCပ+ပ- eCပ+လiu မCဖစ#တ-6 အတ&က# Verarges အeFက+င#$န-9
Generics အeFက+င#$ကiu eဖ2Cပတ-6 အခ3ကGမH Cဖည#6စ&က# eဖ2Cပသ&+$ပ3မယ#။

အ-6ဒ?လiuပ- @FunctionalInterface Annotation အeFက+င#$ကiuလ- Java SE 8 ရ-I Lambda Expression


အeFက+င#$ကiu eဖ2Cပတ-6 အခ3ကGမH ပO$တ&-eဖ2Cပသ&+$ပ3မယ#။


Learning Java 144 မင#$လ&င#


Java Developer Class

Writing Annotation
ဒ?eနရ+ကeနစKပ?$ Annotation တစ#ခuကiu ဘယ#လiu eရ$သ+$Kပ?$ ဘယ#လiu အသuB$CပuAiuင#တယ#ဆiuတ+ကiu eလ6လ+သ&+$
Fကရeအ+င#။ Annotation တစ#ခuကiu eရ$သ+$မယ#ဆiuရင# @interface ဆiuတ-6 Keyword ကiu အသuB$CပuKပ?$ eရ$သ+$ရ
မH+ Cဖစ#ပ3တယ#။ Annotation ဆiuတ+က တကယ#eတ+6 Interface အမGiu$အစ+$တစ#ခuCဖစ#ပ3တယ#။ အန-ဆuB$eတ+6
Annotation တစ#ခuCဖစ#eအ+င# @interface ဆiuတ-6 Keyword ရယ#၊ Table ဆiuတ-6 Identifier ရယ#၊ {} လiueရ$သ+$
ထ+$တ-6 Body သ+ လiuအပ#ပ3တယ#။

public @interface Table {

Identifier eနရ+မH+ကeတ+6 မiမiAHစ#သက#ရ+ န+မည#ကiu eပ$Kပ?$ eရ$သ+$လiuရပ3တယ#။ Interface Body ထ-မH+


ကeတ+6 Abstract Method eတ&ကiu eရ$သ+$လiuရပ3တယ#။ Annotation ထ-မH+ eရ$သ+$Aiuင#တ-6 Method eတ&
အeFက+င#$ကiueတ+6 eန+က#မH ဆက#Kပ?$eဖ2Cပသ&+$ပ3မယ#။

Meta Annotations
အထက#ပ3 အတiuင#$eရ$သ+$ထ+$UuBန-9 Annotation eတ+6Cဖစ#သ&+$ပ3တယ#။ ဒ3eပမ-6 တကယ#တမ#$eတ+6 အသuB$Cပuလiu မ
ရeသ$ပ3ဘO$။ တကယ#တမ#$ အသuB$CပuAiuင#eအ+င# eရ$သ+$မယ#ဆiuရင# eရ$သ+$ထ+$တ-6 Annotation ကiu ဘယ#လiu
eနရ+eတ&မH+ eရ$သ+$လiuရAiuင#မလ- Kပ?$eတ+6 ဘယ#eနရ+မGiu$eတ&မH+ ဒ? Annotation ကiu အသuB$CပuလiuရAiuင#မလ- ဆiuတ+
eတ&ကiu သတ#မHတ#eပ$ဖiuလiuအပ#ပ3တယ#။

အဆiuပ3 သတ#မHတ#ခGက#eတ&ကiuလ- Annotation eတ&ကiu အသuB$CပuKပ?$eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ ဒ?လiu Annotation


eတ&ကiu eရ$တ-6eနရ+မH+ အသuB$CပuAiuင#တ-6 Annotation eတ&ကiu Meta Annotation လiueခ2ပ3တယ#။
အသuB$CပuAiuင#တ-6 Meta Annotation eတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။

@Retention
eရ$သ+$ထ+$တ-6 Annotation ဟ+ ဘယ#eနရ+eတ&မH+ အသuB$CပuမH+လ- ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ-6 Meta
Annotation တစ#ခuCဖစ#ပ3တယ#။ @Retention Annotation မပ3ပ- Annotation တစ#ခuကiu eရ$သ+$လiu မရAiuင#ပ3ဘO$။
value() ဆiuတ-6 Method တစ#ခuပ3ဝင#တ-6အတ&က# အ-6ဒ? Annotation ကiu eရ$သ+$တ-6အခ3မH+ RetentionPolicy
Enumeration တစ#ခuကiu value အeနန-9 eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

package java.lang.annotation;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}

RetentionPolicy အeနန-9eရ$သ+$Aiuင#တ-6 တန#ဖiu$eတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။


Learning Java 145 မင#$လ&င#
Java Developer Class

RetentionPolicy Description

SOURCE Compiler ကeန Compile Time မH+ အသuB$Cပueစလiuတ-6 Annotation eတ&ကiu eရ$သ+$
လiuတ-6အခ3မH+ သတ#မHတ# အသuB$CပuAiuင#ပ3တယ#

CLASS Compiler ကeန Compile လuပ#တ-6အခ3မH+ အသuB$CပuKပ?$ ရလ+တ-6 Class ထ-မH+ ထည#6
သ&င#$eပ$လiuက#Kပ?$ JVM ကeန Runtime မH+ အသuB$မCပuလiuတ-6 Annotation eတ&ကiu
eရ$သ+$လiuတ-6အခ3မH+ CLASS ကiu အသuB$CပuAiuင#ပ3တယ#

RUNTIME JVM ကeန Runtime မH+ အသuB$Cပuလiuတ-6 Annotation eတ&ကiu eရ$သ+$လiuတ-6eနရ+မH+


အသuB$CပuAiuင#ပ3တယ#

@Target
Target Annotation ဟ+လ- Annotation တစ#ခuကiu eရ$သ+$တ-6eနရ+မH+ မCဖစ#မeနeရ$သ+$eပ$ရမည#6 Meta
Annotation တစ#ခuCဖစ#Kပ?$ လက#Qieရ$သ+$ထ+$တ-6 Annotation ကiu ဘယ#eနရ+မH+ eရ$သ+$Aiuင#သလ- ဆiuတ+ကiu
သတ#မHတ#eပ$Aiuင#ပ3တယ#။

package java.lang.annotation;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}

Target Annotation ထ-မH+ ElementType Enum Array ကiu Return Cပန#တ-6 value() ဆiuတ-6 Method တစ#ခuကiu
eရ$သ+$ထ+$ပ3တယ#။ ဒ36eFက+င#6 Target ကiu eရ$သ+$တ-6eနရ+မH+ ElementType ကiu တစ#ခuထက#မက သတ#မHတ#
eရ$သ+$ဖiuလiuအပ#ပ3တယ#။သတ#မHတ# အသuB$CပuAiuင#တ-6 ElementType eတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။

Element Type Description

TYPE Class, Interface န-9 Enum တiuရ-I Type Declaration eတ&မH+ အသuB$CပuAiuင#ပ3တယ#

FIELD Instance Variable eတ&မH+ eရ$သ+$Aiuင#ပ3တယ#

METHOD Method eတ&ရ-Ie^မH+ eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#

PARAMETER Method Parameter eတ&န-9 Constructor Parameter eတ&မH+ eရ$သ+$အသuB$CပuAiuင#


ပ3တယ#

CONSTRUCTOR Constructor eတ&ကiueရ$သ+$တ-6eနရ+မH+ eရ$သ+$Aiuင#ပ3တယ#

LOCAL_VARIABLE Local Variable eတ&ကiu Declare လuပ#တ-6eနရ+မH+ eရ$သ+$အသuB$CပuAiuင#ပ3တယ#

ANNOTATION_TYPE Annotation Type eတ&ကiu eရ$သ+$တ-6eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#

PACKAGE Package eတ&ကiu Declare လuပ#တ-6eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#

Learning Java 146 မင#$လ&င#


Java Developer Class

Element Type Description

TYPE_PARAMETER Java SE 8 ကGမH အသစ#ပ3ဝင#လ+eသ+ Element Cဖစ#ပ3တယ#



Generic Type Parameter eတ&ကiu eရသ+$တ-6eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#

TYPE_USE Java SE 8 ကGမH အသစ#ပ3ဝင#လ+eသ+ Element Cဖစ#ပ3တယ#



Type eတ&ကiu အသuB$Cပuတ-6eနရ+မH+ eရ$သ+$Aiuင#ပ3တယ#

Optional Meta Annotations


အe^မH+ eဖ2Cပထ+$eသ+ @Retention န-9 @Target Annotation eတ&ကeတ+6 Annotation တစ#ခuကiu eရ$သ+$
တ-6eနရ+မH+ မCဖစ#မeန eရ$သ+$ရန#လiuအပ#တ-6 Annotation eတ& Cဖစ#Fကပ3တယ#။ တဖန# Meta Annotation eတ&ထ-
မH+ လiuအပ#လ+ရင# eရ$သ+$Aiuင#တ-6 Annotation eတ&လ-QiFကပ3eသ$တယ#။

@Docmentated
@Documentated Annotation eတ&ကeတ+6 eရ$သ+$ထ+$တ-6 Annotation ကiu Java Doc အeနန-9 eဖ2Cပဖiu
လiuအပ#eFက+င#$ သတ#မHတ#eပ$Aiuင#တ-6 Annotation တစ#ခuCဖစ#ပ3တယ#။ Javadoc Tools ကiu အသuB$CပuKပ?$ Java Doc
eတ&ကiu Generate လuပ#တ-6 eနရ+မH+ အသuB$CပuမH+ Cဖစ#ပ3တယ#။ Default အတiuင#$ဆiuပ3က Annotation eတ&ကiu Java
Doc ထuတ#တ-6eနရ+မH+ အသuB$မCပuပ3ဘO$။

@Inherited
@Inherited Annotation ကiu Annotation တစ#ခuမH+ eရ$သ+$ထ+$Aiuင#ပ3တယ#။ အ-6ဒ?လiueရ$သ+$ထ+$တ-6
Annotation ကiu Super Class ထ-မH+ eရ$သ+$ထ+$မယ#ဆiuရင# အ-6ဒ? Super Class eတ&မH+ အ-6ဒ? Annotation ကiu မ
eရ$သ+$ထ+$ဘO$ဆiuရင#eတ+င#မH အ-6ဒ? Interface ကiu အ-6ဒ? Sub Class eတ&မH+ ရQieနမH+ Cဖစ#ပ3တယ#။

မ:တ%ခ7က% ။ ။ Annotation ကiu eရ9သ"9တ/0 အခန%9eရ"က%မ: @Inherited Annotation ရ/H အသu<9=ပuပu<ကiu


လက%eတ3Ueရ9သ"9>ကည%0ပ,မယ%။

@Repeatable
Java SE 8 အeရ+က#မH Cဖည#6စ&က#လ+ခ-6တ-6 Meta Annotation အမGiu$အစ+$တစ#ခuCဖစ#ပ3တယ#။ Annotation တစ#ခu
ကiu eရ$သ+$တ-6အခ3မH+ @Repeatable Annotation ကiu eရသ+$ထ+$ခ-6မယ#ဆiuရင# အ-6ဒ? Annotation ကiu တစ#eနရ+
ထ-မH+ အPကiမ#Pကiမ# eရ$သ+$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

မ:တ%ခ7က% ။ ။ Annotation ကiu eရ9သ"9တ/0 အခန%9eရ"က%မ: @Repeatable Annotation ရ/H အသu<9=ပuပu<ကiu


လက%eတ3Ueရ9သ"9>ကည%0ပ,မယ%။

Learning Java 147 မင#$လ&င#


Java Developer Class

Using Meta Annotations


Meta Annotation အeFက+င#$ကiueလ6လ+Kပ?$တ-6 eန+က#မH+ Meta Annotation eတ&ကiu အသuB$CပuKပ?$ Annotation
တစ#ခuကiu ဘယ#လiu eရ$သ+$မယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကပ3မယ#။

String Type Variable eတ&မH+ eရ$သ+$Aiuင#တ-6 Annotation တစ#ခuကiu eရ$သ+$Fကည#6ပ3မယ#။ တကယ#လiu အ-6ဒ?
Annotation ကiu တတ#ဆင#eရ$သ+$ထ+$တ-6 Variable eတ&ရ-I တန#ဖiu$ဟ+ Null Cဖစ#eနရင# Blank String တန#ဖiu$
တစ#ခuကiu အစ+$ထiu$eပ$Aiuင#တ-6 Annotation တစ#ခuကiu eရ$သ+$သ&+$ပ3မယ#။

@Retention(RUNTIME)
@Target(FIELD)
public @interface NullWithBlank {

အထက#ပ3အတiuင#$ NullWithBlank Annotation ကiu eရ$သ+$ထ+$ပ3တယ#။ ဒ? Annotation ကiu Runtime မH+


အသuB$Cပuလiuတ-6အတ&က# @Retention(RUNTIME) လiu သတ#မHတ#eရ$သ+$ထ+$ပ3တယ#။ တဖန# ဒ? Annotation ကiu
Instance Variable eတ&မH+ eရ$သ+$လiuတ-6 အတ&က# @Target(FIELD) လiu eရ$သ+$ထ+$ပ3တယ#။

အထက#ပ3အတiuင#$ eရ$သ+$ထ+$Cခင#$အ+$Cဖင#6 @NullWithBlank Annotation ကiu Instance Variable eတ&မH+


eရ$သ+$Aiuင#Kပ?$ Runtime မH+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

public class Student {

@NullWithBlank
private String name;

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}
}

အထက#ပ3 Student Class ကeတ+6 အe^မH+ eရ$သ+$ထ+$ခ-6တ-6 Annotation ကiu အသuB$Cပuမည#6 Class Cဖစ#ပ3
တယ#။ ဒ? Class ရ-I name Variable eနရ+မH+ @NullWithBlank Annotation ကiu တပ#ဆင#eရ$သ+$ထ+$ပ3တယ#။

@NullWithBlank Annotation ရ-I Target မH+ FIELD လiu eရ$သ+$ထ+$ခ-6တ-6 အတ&က#eFက+င#6သ+ Instance
Variable မH+ eရ$သ+$Aiuင#တ+ Cဖစ#ပ3တယ#။ တစ#Cခ+$eနရ+eတ&မH+eတ+6 eရ$သ+$လiu ရAiuင#မH+ မဟuတ#ပ3ဘO$။

က-ဆက#လက#Kပ?$ eရ$သ+$ထ+$ခ-6တ-6 Annotation ကiu Cပန#Kပ?$ အသuB$Cပuတ-6 အပiuင#$ကiu eလ6လ+သ&+$Fကရeအ+င#။ အ


ရင#ဆuB$ Annotation ကiu မသuB$ပ- eရ$Fကည#6ပ3မယ#။

Learning Java 148 မင#$လ&င#


Java Developer Class

public class AnnotationDemo {

public static void main(String[] args) {


showStudentName(new Student());
}

static void showStudentName(Student student) {


System.out.println(student.getName());
}
}

အထက#ပ3 Program ကiu Run Fကည#6မယ#ဆiuရင# Console eပ2မH+ null ဆiuတ+ကiu eတ&Jရပ3မယ#။ ဘ+လiuလ- ဆiueတ+6
showStudent method ထ-ကiu Parameter အeနန-9 new Student() ဆiuKပ?$ ထည#6eပ$လiuက#တ-6 အတ&က# Student
Object ရ-I name ဟ+ တန#ဖiu$ မသတ#မHတ#ထ+$Aiuင#ခ-6ပ3ဘO$။ ဒ36eFက+င#6 null ဆiuKပ?$ Cပeနတ+ကiu eတ&JရမH+ Cဖစ#ပ3
တယ#။

ဆက#လက#Kပ?$ Annotation ကiu အသuB$Cပuတ-6 ပuBစBCဖစ#eအ+င# Cပင#Kပ?$eရ$သ+$Fကည#6ပ3မယ#။

static void showStudentName(Student student) throws Exception {

for(Field f : student.getClass().getDeclaredFields()) {

NullWithBlank anno =
f.getDeclaredAnnotation(NullWithBlank.class);

if(null != anno) {
f.setAccessible(true);
f.set(student, "");
}
}

System.out.println(student.getName());
}

အထက#ပ3အတiuင#$ showStudent method ထ-မH+ student object ရ-I class ကeန getDeclaredFields()
method ကiu အသuB$CပuKပ?$ Student Class ထ-မH+ eရ$သ+$ထ+$တ-6 Field eတ&အ+$လuB$ကiu for statement န-9 Loop
ပတ#ပ3တယ#။

Kပ?$eတ+6မH Field ကeန အ-6ဒ? Field မH+ NullWithBlank Annotation ကiu eရ$သ+$ထ+$သလ+$ဆiuတ+ကiu
f.getDeclaredAnnotation(NullWithBlank.class) method န-9Q+ eဖ&ပ3တယ#။ တကယ#လiu @NullWithBlank
Annotation ကiu eရ$သ+$ထ+$တယ#ဆiuရင# အ-6ဒ? Field ရ-I တန#ဖiu$ကiu “” န-9 set လuပ#eပ$ပ3တယ#။

ဒ36eFက+င#6 အထက#ပ3 Class ကiu Cပန#Kပ?$ Run Fကည#6မယ#ဆiuရင# null ထ&က#မလ+eတ+6တ+ကiu eတ&Jရပ3မယ#။ ဒ?လiuမGiu$
@NullWithBlank Annotation ကiu Runtime မH+ အသuB$CပuAiuင#တ+ကလ- Annotation ကiu eရ$သ+$တ-6အခ3မH+
@Retention(RUNTIME) လiu သတ#မHတ#eရ$သ+$ထ+$ခ-6တ-6 အတ&က# Cဖစ#ပ3တယ#။

Learning Java 149 မင#$လ&င#


Java Developer Class

Annotation with Parameter


Annotation ကiu eရ$သ+$တ-6 eနရ+မH+ Annotation ကeန Parameter eတ&ကiu လက#ခBယOလiuရAiuင#ပ3တယ#။
Annotation ကeန Parameter eတ&ကiu လက#ခBလiuပ3က Annotation ရ-I Body ထ-မH+ Abstract Method eတ&ကiu
eရ$သ+$Kပ?$ရယOAiuင#ပ3တယ#။

Annotation ထ-မH+ Abstract Method eတ&ကiu eရ$သ+$တ-6eနရ+မH+ ပuBစBတစ#မGiu$ထ-သ+ eရ$သ+$Aiuင#ပ3တယ#။


eရ$သ+$တ-6 Method ဟ+ Return Type တစ#ခuကiu eရ$သ+$ထ+$ဖiuလiuအပ#သလiu Argument ကiu eတ+6 eရ$သ+$လiu
မရAiuင#ပ3ဘO$။ Return Type အeနန-9ကeတ+6 Parameter အeနန-9 လက#ခBလiuတ-6 Type ကiu eရ$သ+$ရမH+ Cဖစ#ပ3
တယ#။ Return Type အeနန-9ကeတ+6 AHစ#သက#ရ+ Type ကiu eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။ Java Basic Data
Type eတ&Cဖစ#တ-6 Primitive Type, String, Array န-9 Enum တiuကiuလ- eရ$သ+$အသuB$CပuAiuင#သလiu၊ Customer
Java Data Type ကiuလ- eရ$သ+$Aiuင#ပ3တယ#။ အCခ+$eသ+ Annotation Type eတ&ကiuလ- eရ$သ+$ အသuB$CပuAiuင#ပ3
တယ#။

Kပ?$eတ+6 လiuခGင#တ-6 Parameter အeရအတ&က# အလiuက# Abstract Method eတ&ကiu eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။
က\န#eတ+#တiu e^မH+eရ$သ+$ခ-6တ-6 @NullWithBlank Annotation ထ-မH+ Parameter တစ#ခuကiu လက#ခBeရ$သ+$
Fကည#6Fကရeအ+င#။

@Retention(RUNTIME)
@Target(FIELD)
public @interface NullWithBlank {
String name();
}

အထက#ပ3အတiuင#$ @NullWithBlank Annotation ရ-I Body အတ&င#$မH+ name() ဆiuတ-6 Abstract Method တစ#ခu
ကiu eရ$သ+$ထ+$Aiuင#ပ3တယ#။ ဤသiueရ$သ+$ထ+$Cခင#$အ+$Cဖင#6 @NullWithBlank Annotation ကiu eရ$သ+$
အသuB$Cပuတ-6eနရ+မH+ name ဆiuတ-6 တန#ဖiu$ကiu မeရ$သ+$လiu မရeတ+6ပ3ဘO$။

public class Student {

@NullWithBlank(name = "No name")


private String name;

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}
}

အထက#ပ3အတiuင#$ @NullWithBlank Annotation ကiu eရ$သ+$တ-6အခ3မH+ name ရ-I တန#ဖiu$ကiu သတ#မHတ# eရ$သ+$
eပ$ရမH+ Cဖစ#တယ#။ ဆက#လက#Kပ?$ eရ$သ+$ထ+$တ-6 Parameter ကiu Cပန#Kပ?$ အသuB$Cပuတ-6 အပiuင#$ကiu eရ$သ+$Fကည#6
Fကရeအ+င#။

Learning Java 150 မင#$လ&င#


Java Developer Class
အထက#ပ3အတiuင#$ f.set(student, anno.name()) ဆiuKပ?$ eရ$သ+$eပ$Aiuင#ပ3တယ#။ @NullWithBlank
Annotation ထ-မH+ name() ဆiuတ-6 Abstract Method ကiu eရ$သ+$ထ+$တ+ Cဖစ#တ-6အတ&က# anno.name() ဆiuတ-6
Method ကiu အသuB$CပuAiuင#မH+ Cဖစ#တယ#။

အထက#ပ3 AnnotationDemo Class ကiu Run Fကည#6တ-6 အခ3မH+ Student Class ထ-မH+ eရ$သ+$ထ+$တ-6 No
Name ဆiuတ+ကiu eတ&JQiရမH+ Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+ တစ#ခuသတiCပuစရ+Qiတ+က Annotation ထ-မH+ eရ$သ+$ထ+$တ-6 Abstract Method eတ&အ+$လuB$ကiu


Annotation ကiu eရ$သ+$တ-6 eနရ+မH+ သတ#မHတ#eပ$ဖiuလiuတယ#ဆiuတ-6 အခGက#Cဖစ#ပ3တယ#။ တကယ#လiu Method
Name ကiu value လiu eပ$ထ+$ခ-6ရင# Parameter ကiu သတ#မHတ#တ-6အခ3မH+ Parameter Name ကiu မeရ$ပ- ထ+$လiu
ရပ3တယ#။

Default Value for Annotation Methods


Annotation eတ&ထ-မH+ Method ကiu eရ$သ+$တ-6eနရ+မH+ default keyword ကiu အသuB$CပuKပ?$ Default Value ကiu
သတ#မHတ#ထ+$လiuရပ3တယ#။

@Retention(RUNTIME)
@Target(FIELD)
public @interface NullWithBlank {
String name() default “Default Name”;
}

အထက#ပ3အတiuင#$ Default Value ကiu သတ#မHတ#ထ+$ပ3က တကယ#လiu name ရ-I တန#ဖiu$ကiu Annotation ကiu
အသuB$Cပuတ-6 အခ3မH+ သတ#မHတ#မeပ$ခ-6ရင# Default တန#ဖiu$ကiu အသuB$Cပuသ&+$မH+ Cဖစ#ပ3တယ#။ name ရ-I တန#ဖiu$ကiu
သတ#မHတ#ထ+$ခ-6ရင#eတ+6 သတ#မHတ#ထ+$တ-6 တန#ဖiu$ကiu အသuB$Cပuသ&+$မH+ပ3။

Learning Java 151 မင#$လ&င#


Java Developer Class

Enum

က\န#eတ+#တiu ပUiuဂရမ#eတ& eရ$သ+$တ-6 အခ3မH+ AHစ#တစ#AHစ#ရ-I လeတ&တiu တပတ#မH+Qiတ-6 ရက#eတ&လiu မeCပ+င#$လ-တ-6


တန#ဖiu$eတ&ကiu အသuB$Cပuလiuတ-6 အခ3eတ&Qiတတ#ပ3တယ#။ AHစ#တစ#AHစ#ရ-I လeတ&အeနန-9လ- ဇA~ဝ3ရ?ကeန ဒ?ဇင#ဘ+
eCပ+င#$လ-မH+ မဟuတ#သလiu၊ ရက#အeနန-9လ- တနဂsလ+eန9ကeန တနဂseA&eန9 အထi eCပ+င#$လ-မH+ မဟuတ#ပ3ဘO$။ ဒ?
လiuတန#ဖiu$eတ&ကiu Constant eတ&လiu eခ2ဆiueလ6Qiပ3တယ#။ Enum ဆiuတ+က Constant eတ&ကiu eဖ2CပAiuင#တ-6
Static Class အမGi$အစ+$eတ& Cဖစ#ပ3တယ#။

က\န#eတ+#တiu Enum eတ&ကiu eလ6လ+တ-6အခ3မH+ Enum မeပ2ခင#တuန#$က ဘယ#လiueရ$ခ-6Fကသလ-၊ Kပ?$eတ+6 Enum


eပ2လ+eတ+6 ဘယ#လiueCပ+င#$သ&+$လ-ဆiuတ+ရယ# Enum န-9 ဘ+eတ&လuပ#လiuရလ- ဆiuတ-6 အခGက#eတ&န-9 eလ6လ+သ&+$
Fကရeအ+င#။

Before Enum
Enum eတ&မeပ2ခင#က Constant eတ&ကiueရ$သ+$လiuတ-6အခ3မH+ Interface ထ-မH+ Static Final Variable eတ&န-9
eရ$သ+$ခ-6Fကပ3တယ#။ ဆiuFကပ3စiu က\န#eတ+#တiu ရက#သတပတ#မH+ပ3တ-6 ရက#eတ&ကiu က\န#eတ+#တiu eရ$ခGင#တယ#ဆiu
ရင# ဒ?လiu eရ$သ+$ခ-6Fကရပ3တယ#။

public interface DaysOfWeek {

static final int MON = 1;


static final int TUE = 2;
static final int WED = 3;
static final int THU = 4;
static final int FRI = 5;
static final int SAT = 6;
static final int SUN = 7;
}

အထက#ပ3အတiuင#$ Interface တစ#ခuကiu eရ$Kပ?$eတ+6 ပ3မည#6 Item eတ&ကiu Static Final Variable eတ&အeနန-9
တန#ဖiu$တစ#ခuခuကiu အeသသတ#မHတ#Kပ?$ eရ$သ+$ခ-6Fကရပ3တယ#။

Learning Java 152 မင#$လ&င#


Java Developer Class
အ-6ဒ?လiu Static Final Variable eတ&ကiu eရ$သ+$Kပ?$ Constant eတ&အeနန-9 eရ$သ+$ အသuB$Cပuခ-6Fကရပ3တယ#။ အ-6ဒ?
Variable eတ&ဟ+ Static Final Cဖစ#တ-6 အတ&က# eCပ+င#$လiu မရAiuင#ပ3ဘO$။ ဒ3eပမ-6 အ-6ဒ? Constant eတ&ကiu အCခ+$
eသ+ Variable eတ&ဆ?ကiu Assign လuပ#လiuက#ရင#eတ+6 သတ#မHတ#ထ+$တ-6 Type ရ-I Variable eတ&သ+ Cဖစ#သ&+$ပ3
မယ#။

public class DaysOfWeekDemo {

public static void main(String[] args) {

int monday = DaysOfWeek.MON;

monday = 11;

System.out.println(monday);
}
}

အထက#ပ3အတiuင#$ monday variable မH+ DaysOfWeek.MON ဆiuKပ?$ Assign လuပ#လiuရပ3တယ#။


DaysOfWeek.MON ရ-I Type ဟ+လ- int Cဖစ#သလiu monday ရ-I Type ဟ+ int Cဖစ#တ-6 အတ&က# Cဖစ#ပ3တယ#။ ဒ?
eနရ+အထi ဘ+မH Cပဿန+ မQieသ$ပ3ဘO$။ Database ထ-မH+ int အeနန-9 သiမ#$မယ#။ Kပ?$ရင# View မH+ Cပန#Cပမယ#။
Cပဿန+ မQiပ3ဘO$။

ဒ3eပမ-6 monday variable ဟ+ int type Cဖစ#တ-6အတ&က# ရက# ခuAHစ#ရက# အCပင# အCခ+$eသ+ int တန#ဖiu$eတ&ကiu
အစ+$ထiu$လiuရပ3တယ#။ ဒ36eFက+င#6 monday = 11 ဆiuKပ?$eရ$လiuရeနပ3တယ#။ ရက# ခuAHစ#ရက#ရ-I တန#ဖiu$အCပင# အCခ+$
eသ+ တန#ဖiu$eတ&ကiuလ- အစ+$ထiu$လiuရeနပ3တယ#။

ဆiuလiuတ+က DaysOfWeek.MON ရ-I တန#ဖiu$ကiu eCပ+င#$လiuမရeပမ-6 monday ရ-I တန#ဖiu$ကeတ+6 eCပ+င#$လiuရeနပ3


တယ#။ monday ကiu Days Of Week အeနန-9 အသuB$Cပuလiueပမ-6 မရAiuင#ပ3ဘO$။ သOဟ+ int type Cဖစ#တ-6 အတ&က# int
type variable တစ#ခuက လuပ#လiuရသမZ လuပ#လiuရeနမH+Cဖစ#တယ#။ monday ++ လiu increment eတ& monday —
လiu decrement eတ&လ- eရ$လiuရeနပ3မယ#။ ဒ3eတ&က ရက# ခuAHစ#ရက#ရ-I တန#ဖiu$အတ&င#$မH+Qieနရင# Cပဿန+မQiဘO$။
၁ န-9 ၇ ထက#လ&န#သ&+$ရင#လ- သiAiuင#မH+ မဟuတ#ပ3ဘO$။

တဖန# System.out.println(monday) လiueရ$ရင#လ- Monday ဆiuKပ?$ထ&က#မလ+ပ- သbရ-I တန#ဖiu$Cဖစ#တ-6 int တန#ဖiu$


သ+ ထ&က#လ+မH+ Cဖစ#ပ3တယ#။ အ-6ဒ?လiu Cပဿန+မGiu$ကiu eCဖQင#$ဖiuအတ&က# enum Type ဆiuတ+ကiu Constants eတ&
ကiu eရ$သ+$ဖiu Java SE 5 အeရ+က#မH+ ထည#6သ&င#$လ+ခ-6ရCခင#$Cဖစ#ပ3တယ#။

ဆက#လက#Kပ?$ Enum ကiu ဘယ#လiueရ$ရတယ#၊ Enum ကiu အသuB$Cပuတ-6 အတ&က# အထက#ပ3 Cပဿန+eတ&ကiu
ဘယ#လiu eCဖQင#$Aiuင#ခ-6တယ# ဆiuတ+ကiu ဆက#Kပ?$eလ6လ+သ&+$Fကရeအ+င#။

After Enum
Java SE 5 အeရ+က#မH+ Enum ဆiuတ-6 Static Class အမGiu$အစ+$တစ#ခuကiu ထည#6သ&င#$ခ-6Fကပ3တယ#။ Enum န-9
eရ$သ+$ထ+$တ-6 Data Type eတ&ကiu Enum Type လiueခ2ဆiuFကKပ?$ Constant eတ&ကiu eရ$သ+$တ-6 eနရ+မH+
အသuB$Cပuခ-6Fကပ3တယ#။

Enum Type Class ကiu eရ$သ+$ဖiuဆiuရင# enum ဆiuတ-6 Keyword ကiu အသuB$CပuရKပ?$ Body ထ-မH+eတ+6 Enum
Type ထ-မH+ အသuB$CပuAiuင#တ-6 Element eတ&ကiu eရ$သ+$Aiuင#ပ3တယ#။
Learning Java 153 မင#$လ&င#
Java Developer Class

public enum DaysOfWeek {


MON, TUE, WED, THU, FRI, SAT, SUN
}

Enum Type ကiu eရ$သ+$တ-6 eနရ+မH+ အထက#ပ3အတiuင#$ Source File ရ-I Top Level မH+eရ$သ+$ သ?$Cခ+$
eရ$သ+$Aiuင#သလiu Class ရ-I Body အတ&င#$မH+လ- Nested Member အeနန-9 eရ$သ+$Aiuင#ပ3တယ#။ ဆက#လက#Kပ?$
Enum Type Data eတ&ကiu ဘယ#လiu အသuB$Cပuရမလ- ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

public class DaysOfWeekDemo {

public static void main(String[] args) {


DaysOfWeek monday = DaysOfWeek.MON;
System.out.println(monday);
}
}

Enum အeနန-9 Constant eတ&ကiu eရ$သ+$ထ+$မယ#ဆiuရင#အ-6ဒ? Constant ကiu Enum Type အeနန-9 eရ$သ+$Aiuင#
မH+ Cဖစ#ပ3တယ#။ အ-6ဒ3eFက+င#6 monday ဆiuတ-6 Variable ကiu DaysOfWeek လiuသတ#မHတ#လiuက#တ-6အတ&က#
monday eနရ+ကiu DaysOfWeek ထ-မH+ သတ#မHတ#ထ+$တ-6 တန#ဖiu$eတ&အCပင# အCခ+$eသ+ တန#ဖiu$eတ&ကiu
သတ#မHတ#လiu မရAiuင#eတ+6ပ3ဘO$။

Enum Type Variable eနရ+ကiu အ-6ဒ? Enum ထ-မH+ Pကiuတင#သတ#မHတ#ထ+$တ-6 Constant Element eတ&အCပင#
အCခ+$eသ+ တန#ဖiu$eတ&ကiu သတ#မHတ#လiu မရAiuင#eတ+6ပ3ဘO$။ Kပ?$eတ+6 System.out.println(monday) လiu eရ$
လiuက#ရင#လ- Enum ရ-I Name ကiu Cပeပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Enum ကiu အသuB$CပuKပ?$ Constant eတ&ကiuမHန#ကန#စ&+eရ$သ+$လ+Aiuင#တယ#ဆiuတ+ကiu သiQiAiuင#ပ3တယ#။

What can we do with Enum?


ဆက#လက#Kပ?$ Enum ကiu အသuB$CပuKပ?$ ဘ+eတ&လuပ#လiuရတယ#ဆiuတကiu eလ6လ+သ&+$Fကရeအ+င#။ Enum ကiu
eရ$သ+$ရတ-6 အဓiက ရည#ရ&ယ#ခGက#ကeတ+6 Constant eတ&ကiu eရ$သ+$ဖiuCဖစ#ပ3တယ#။ Enum န-9 လuပ#လiuရတ+eတ&
ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။

Enum Type တiuင#$မH+ အသuB$CပuAiuင#တ-6 Method eတ&ကiuလ- Cပင#ထ+$ပ3တယ#

Enum Constant eတ&ဟ+လ- Static Object eတ& Cဖစ#Fကတ-6 အတ&က# Object ကeန Inheritance လuပ#လ+
တ-6 Behavior eတ&ကiu မPကiuက#လiuQiရင# Override လuပ#Kပ?$eရ$Aiuင#ပ3တယ#

Enum Constant eတ&မH+ State eတ& Behavior eတ&ကiu eရ$သ+$မယ#ဆiuရင#လ- ရပ3တယ#။

Abstraction ကiuအသuB$CပuKပ?$ Abstract Behavior eတ&ကiuလ- Enum eတ&မH+ eရ$သ+$လiuရAiuင#ပ3တယ#။

Interface eတ&ကiuလ- Implement လuပ#Aiuင#ပ3တယ#။

တဖန# JVM Memory eပ2မH+ တစ#ခuထ-Qiတယ#ဆiuတ-6 ထO$Cခ+$ခGက#ကiu အသuB$CပuKပ?$ Enum eတ&ကiu Singleton
Object အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 154 မင#$လ&င#


Java Developer Class

static void showStudentName(Student student) throws Exception {

for(Field f : student.getClass().getDeclaredFields()) {

NullWithBlank anno =
f.getDeclaredAnnotation(NullWithBlank.class);

if(null != anno) {
f.setAccessible(true);
f.set(student, anno.name());
}
}

System.out.println(student.getName());
}

Default Behavior
Enum eတ&အ+$လuB$အတ&က# အလ&ယ#တကOအသuB$CပuAiuင#eအ+င# Method eတ&ကiu Cပင#ဆင#ထ+$ပ3တယ#။ Cပင#ဆင#
ထ+$တ-6 Method eတ&ထ-မH+ Static Method eတ&လ-ပ3သလiu Instance Method eတ&လ-ပ3ပ3တယ#။ Kပ?$eတ+6
Language Feature eတ&ထ-မH+ အလiuအeလG+က# အသuB$CပueနAiuင#တ+eတ&လ-Qiပ3တယ#။ ဒ?eနရ+မH+eတ+6 Enum
Cဖစ#တ-6အတ&က# ရeနAiuင#တ-6 Default Behavior eတ&ကiu eလ6လ+သ&+$Fကပ3မယ#။

values()
Enum Type တစ#ခuအတ&င#$မH+ Declare လuပ#ထ+$တ-6 Constant Object eတ&အ+$လuB$လiu ရယOလiuတ-6 အခ3မGiu$မH+
အသuB$CပuAiuင#ပ3တယ#။ eရသ+$ထ+$တ-6 Constant Object အ+$လuB$ကiu eရ$သ+$ထ+$တ-6 အစ?အစT#အတiuင#$ Array
Object တစ#ခuအeနန-9 ရQiAiuင#မH+Cဖစ#ပ3တယ#။

public enum Status {

On, Off;

public static void main(String[] args) {


Status [] array = Status.values();
for(Status s : array) {
System.out.println(s);
}
}
}

အထက#ပ3နမOန+ထ-မH+လiu Status.values() Method ကiu Invoke လuပ#လiuက#တ-6အခ3မH+ Status Enum Type ထ-မH+
Declare လuပ#ထ+$တ-6 Constant Object eတ&ကiu Array ပuBစBန-9 Cပန#ရမH+Cဖစ#ပ3တယ#။ ဒ? Method ကeတ+6 အသuB$Cပu
မည#6 Enum Type ထ-မH+ ဘယ#လiu Constant eတ&Qiတယ#ဆiuတ+ကiu သiခGင#တ-6အခ3မGiu$မH+ အသuB$CပuAiuင#ပ3တယ#။

Learning Java 155 မင#$လ&င#


Java Developer Class

valueOf(String name)
eရ$သ+$ထ+$တ-6 Enum Type ရ-I Constant Name ကeန Enum Constant ကiu ရယOလiuတ-6အခ3မGiu$မH+ အသuB$Cပu
Aiuင#တ-6 Method Cဖစ#ပ3တယ#။

public enum Status {

On, Off;

public static void main(String[] args) {


Status status = Status.valueOf("On");
System.out.println(status);
}
}

Parameter Cဖစ#တ-6 String Type န-9 န+မည#တOတ-6 Enum Constant ကiu Q+eဖ&eပ$မH+ Cဖစ#Kပ?$တကယ#လiu မeတ&Jခ-6ပ3
က IllegalArgumentException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

name() and ordinal() methods


Enum Constant Object eတ&မH+ အသuB$CပuAiuင#တ-6 Instance Method eတ&Cဖစ#Fကပ3တယ#။ name() method
ကeတ+6 Enum Constant ကiueရ$သ+$ထ+$တ-6 န+မည#ကiu Cပန#eပ$Aiuင#တ-6 Method Cဖစ#Kပ?$ ordinal() method
ကeတ+6 Enum Constant ကiu eရ$သ+$ထ+$တ-6 eနရ+ကiu eဖ2Cပတ-6 Index တန#ဖiu$ကiu သiQiAiuင#တ-6 Method Cဖစ#ပ3
တယ#။ Enum eတ&ရ-I Index eတ&ကiu eဖ2Cပတ-6eနရ+မH+ Array eတ&လiuပ- အရင#ဆuB$ Index ဟ+ သuညကeန စပ3
တယ#။

public enum Status {

On, Off;

public static void main(String[] args) {

for(Status s : values()) {
System.out.printf("Ordinal : %d, Name : %s%n",
s.ordinal(), s.name());
}
}
}

အထက#ပ3 Program ကiu Run Fကည#6တ-6အခ3မH+ eအ+က#ပ3အတiuင#$ အeCဖထ&က#တ+ကiu eတ&Jရပ3မယ#။

Ordinal : 0, Name : On
Ordinal : 1, Name : Off

Learning Java 156 မင#$လ&င#


Java Developer Class
Enum Constant On ရ-I Ordinal ဟ+ 0 Cဖစ#Kပ?$ Off ရ-I Ordinal ဟ+ 1 Cဖစ#တယ#ဆiuတ+ကiu eဖ2CပAiuင#တ+ကiu eတ&Jရ
ပ3တယ#။

Sorting Enum
Enum Type eတ&ဟ+ Serializable Interface န-9 Comparable<E> Interface တiuကiu Implement လuပ#ထ+$ပ3
တယ#။ ဒ36eFက+င#6 Enum Constance eတ&ကiu Serialize လuပ#Aiuင#သလiu တစ#ခuန-9 တစ#ခu Compare လuပ#Aiuင#မH+ Cဖစ#ပ3
တယ#။ အ-6ဒ?လiuပ- Arrays ဒ3မHမဟuတ# Collections Utility Class eတ&ကiu အသuB$CပuKပ?$ Sort လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။

Serializable န-9 ပတ#သက#Kပ?$ Essential Java API Cဖစ#တ-6 Java IO အခန#$eရ+က#တ-6အခ3မH+ eဖ2Cပသ&+$မH+ Cဖစ#
ပ3တယ#။ ဒ?eနရ+မH+eတ+6 Comparable<T> န-9 Sorting eတ&အeFက+င#$ကiu eလ6လ+သ&+$Fကရeအ+င#။

Enum Type eတ&ဟ+ Comparable<T> Interface ကiu Implement လuပ#ထ+$ပ3တယ#။ Class တစ#ခuဟ+
Interface တစ#ခuကiu Implement လuပ#ထ+$Kပ?ဆiuတ+န-9 Implement လuပ#ထ+$တ-6 Interface ထ-မH+ ပ3တ-6 Abstract
Method eတ&ကiu Implement လuပ#Kပ?$eရ$သ+$eပ$ရeတ+6မH+ Cဖစ#ပ3တယ#။ ဆiuလiuတ+က Interface ဟ+
Abstraction Cဖစ#တ-6 အတ&က# ဘ+လuပ#လiuရတယ#ပ- သတ#မHတ#eပ$ထ+$ပ3တယ#။ ဘယ#လiu လuပ#ရမယ#ဆiuတ+ကiueတ+6
အ-6ဒ? Interface ကiu Implement လuပ#ထ+$တ-6 Class eတ&မH+ eရ$သ+$eပ$ရမH+ပ3။

ဒ3Cဖင#6 Comparable Interface က ဘ+လuပ#လiuရတ-6 Interface လ- ဆiuတ+ကiu Comparable Interface ထ-မH+ပ3တ-6


Abstract Method ကeနeလ6လ+Fကည#6Fကရeအ+င#။

public interface Comparable<T> {


public int compareTo(T o);
}

အထက#ပ3အတiuင#$ Comparable Interface ထ-မH+ compareTo(T o) Method တစ#ခuကiu eရ$သ+$ထ+$ပ3တယ#။


ဆiuလiuတ+က Comparable Interface ကiu Implement လuပ#သOတiuင#$ ဒ? Method ကiu ဘယ#လiu Compare လuပ#မယ#
ဆiuတ+ကiu eရ$သ+$eပ$ရမယ# လiu သတ#မHတ#ထ+$တ+ Cဖစ#ပ3တယ#။

ဆက#လက#Kပ?$ compareTo() method ဟ+ ဘ+လuပ#တ-6 Method လ-ဆiuတ+ကiu eလ6လ+Fကည#6Fကရeအ+င#။


Argument အeနန-9 (T o) လiuယOထ+$ပ3တယ#။ Enum Type န-9တOတ-6 အCခ+$eသ+ Object တစ#ခuကiu Parameter
အeနန-9 လက#ခBမယ#လiu eရ$ထ+$တ+ Cဖစ#ပ3တယ#။ Return Type အeနန-9 int type တန#ဖiu$တစ#ခuကiu eရ$ထ+$ပ3
တယ#။ ဘ+ အဓiပW3ယ#လ-။

Enum Type ကeန compareTo() Method ကiu Implement လuပ#ထ+$တ-6 ကuဒ#eတ&ကeန eလ6လ+Fကည#6Fက
ရeအ+င#။

public final int compareTo(E o) {


Enum<?> other = (Enum<?>)o;
Enum<E> self = this;
if (self.getClass() != other.getClass() && // optimization
self.getDeclaringClass() != other.getDeclaringClass())
throw new ClassCastException();
return self.ordinal - other.ordinal;
}

Learning Java 157 မင#$လ&င#


Java Developer Class
Enum Class ထ-မH+ eရ$သ+$ထ+$တ-6 compareTo() method ဟ+ အထက#ပ3အတiuင#$Cဖစ#ပ3တယ#။ အရင#ဆuB$
other န-9 Self ကiu Declare လuပ#ပ3တယ#။ self န-9 other မတOဘO$Kပ?$eတ+6 self န-9 other တiuရ-I Class eတ&မတOဘO$ဆiu
ရင# ClassCastException ကiu Throw လuပ#ပ3တယ#။ ဒ3ဟ+ Compare မလuပ#ခင# သOတiuရ-I Type တOမတOစစ#eဆ$
eနတ+ပ-Cဖစ#ပ3တယ#။ မတOခ-6ရင#eတ+6 ClassCastException ကiu Cဖစ#eပ2eစမယ#လiu သiAiuင#ပ3တယ#။

တကယ#တမ#$ အလuပ#လuပ#eနတ+ကeတ+6 eအ+က#ဆuB$ Return Statement ပ-Cဖစ#ပ3တယ#။ Self ရ-I Ordinal ထ-က
Other ရ-I Ordinal ကiu AHတ#Kပ?$ရတ-6 ရလဒ#ကiu Return Cပန#တယ#ဆiuတ+ကiu eတ&Jရပ3တယ#။ ဆiuလiuတ+က Enum eတ&
ကiu ဘယ#သOကPက?$Kပ?$ ဘယ#သOက ငယ#တယ#ဆiuတ+ကiu သOတiueတ&ရ-I Ordinal (Index Number) န-9A[င#$ယHT#eနတယ#
ဆiuတ+ကiu eတ&Jရပ3တယ#။ Kပ?$eတ+6လ- အ-6ဒ? Method ကiu final လiu eရ$သ+$ထ+$တ-6အတ&က# ဒ? Method ကiu
Override လuပ#Kပ?$eရ$လiu မရAiuင#ဘO$ဆiuတ+ကiu သiAiuင#ပ3တယ#။

အထက#ပ3ကuဒ#ကiu Fကည#6Kပ?$ Enum AHစ#ခu ဘယ#သOPက?$လ- ဘယ#သOငယ#လ- ဆiuတ+ကiu A[င#$ယHT#တ-6အခ3မH+တနည#$


eCပ+ရမယ#ဆiuင# Enum ခGင#$တOeနရင#၊ Ordinal ခGင#$တOပ3မယ#။ အ-6ဒ?အတ&က# ရလဒ#ဟ+ သuညCဖစ#ပ3မယ#။ ဒ36eFက+င#6
compareTo() method ရ-I ရလဒ#ဟ+ သuညCဖစ#eနရင#အ-6ဒ? Enum AHစ#ခuဟ+တOeနလiuပ- Cဖစ#ပ3မယ#။

Kပ?$eတ+6 Other Enum ရ-I တန#ဖiu$က Pက?$eနရင# အA[တ# (Minus) တန#ဖiu$ရပ3မယ#။ ဒ36eFက+င#6 ရလဒ#ဟ+ အAHတ#
တန#ဖiu$Cဖစ#eနရင# ကiuယ#ကငယ#eနKပ?$ တစ#Cခ+$ Enum Constant ကPက?$eနပ3မယ#။ Kပ?$eတ+6 ရလဒ#ဟ+ သuညထက#
Pက?$eနရင#လ- ကiuယ#က Pက?$တယ#ဆiuတ+ကiu သiAiuင#ပ3တယ#။

Sorting Algorithm eတ&မH+ Element AHစ#ခuဟ+ ဘယ#သOကPက?$Kပ?$ ဘယ#သOက ငယ#တယ#ဆiuတ+ကiu eဝခ&-လiuမရရင#


Sort လuပ#လiu မရAiuင#ပ3ဘO$။ ဒ3ကiu Fကည#6ခGင#$အ+$Cဖင#6က\န#eတ+#တiu eအ+က#ပ3အeFက+င#$အရ+eတ&ကiu သiQiAiuင#ပ3
တယ#။

Enum eတ&ဟ+ Sort လuပ#လiuရပ3တယ#။

Sort လuပ#တ-6အခ3မH+ သOတiuရ-I Ordinal အစ?အစT#အတiuင#$ Sort လuပ#သ&+$ပ3တယ#

Enum eတ&ရ-I compareTo() method ဟ+ final method Cဖစ#တ-6 အတ&က# Override လuပ#လiuမရAiuင#ပ3ဘO$

က\န#eတ+#တiu AHစ#သက#တ-6 ပuBစBအတiuင#$ Sort လuပ#ခGင#ရင#eတ+6 Comparator Object ကiu အသuB$Cပuရပ3မယ#

Sort လuပ#Cခင#$ Comparator ကiu အသuB$CပuCခင#$န-9 ပတ#သက#Kပ?$ Collections Framework အeFက+င#$eရ+က#တ-6


အခ3မH+ ထပ#မBeဖ2Cပသ&+$ပ3မယ#။

Learning Java 158 မင#$လ&င#


Java Developer Class

Equality Operator
Enum Constant eတ&ဟ+ Constant eတ&Cဖစ#တ-6အတ&က# တန#ဖiu$တOမတOဆiuတ+ကiu Object ရ-I equals() Method
သ+မက Equality Operator ကiu အသuB$CပuKပ?$eရ$သ+$Aiuင#ပ3တယ#။

public enum Status {

On, Off;

public static void main(String[] args) {

Status status = Status.On;

System.out.println(status == On); // true


System.out.println(status == Off); // false
System.out.println(status != On); // false
System.out.println(status != Off); // true
}
}

အထက#ပ3အတiuင#$ main method ထ-မH+ status variable ရ-I တန#ဖiu$အeနန-9 Status.On လiu eရ$သ+$ထ+$ပ3တယ#။
ဆiuလiuတ+က status ရ-I တန#ဖiu$ဟ+ On Cဖစ#ပ3တယ#။

eဖ2Cပပ3အတiuင#$ status န-9 အCခ+$eသ+ Constant တန#ဖiu$မG+$ကiu Equality Operator ကiu အသuB$CပuKပ?$ စစ#eဆ$
သ&+$Aiuင#ပ3တယ#$ status == On ရ-I တန#ဖiu$ဟ+ true Cဖစ#မH+ Cဖစ#Kပ?$ status == Off ရ-I တန#ဖiu$ဟ+ false Cဖစ#ပ3မယ#။
အလ+$တOပ- status != On ရ-I တန#ဖiu$ဟ+ false Cဖစ#မH+ Cဖစ#Kပ?$ status != Off ရ-I တန#ဖiu$ဟ+လ- true Cဖစ#မH+ Cဖစ#ပ3
တယ#။ eဖ2Cပပ3 status variable ကeန Reference လuပ#eနတ-6 တန#ဖiu$ဟ+ On Cဖစ#တ-6 အတ&က# On န-9တOတယ#
eCပ+လ+ရင# true Cဖစ#မH+ Cဖစ#Kပ?$ Off န-9တOတယ#ဆiuရင# false Cဖစ#ပ3မယ#။ ဒ?လiuပ- On န-9 မတOဘO$eCပ+တ-6အခ3မH+ false
Cဖစ#မH+ Cဖစ#Kပ?$ Off န-9 မတOဘO$ဆiuရင# true Cဖစ#မH+ Cဖစ#ပ3တယ#။

Enum Object eတ&တOမတOဆiuတ+ကiu အCခ+$eသ+ Object eတ&အတiuင#$ equals method ကiu အသuB$CပuKပ?$ စမ#$သပ#
Aiuင#မH+Cဖစ#Kပ?$ Operator န-9 စစ#eဆ$တ-6 ရလဒ#န-9 အတOတOပ- Cဖစ#ပ3မယ#။

Learning Java 159 မင#$လ&င#


Java Developer Class

Switch Parameter
Enum eတ&ဟ+ Constant eတ&Cဖစ#တ-6အတ&က# switch statement ရ-I Argument eတ&အeနန-9လ- အသuB$CပuAiuင#ပ3
တယ#။ Java SE 5 မတiuင#ခင#က Enum ကiuလ- အသuB$Cပuလiu မရeသ$ပ3ဘO$။ အ-6ဒ?အတ&က# Switch Statement ရ-I
Parameter အeနန-9 Primitive Type eတ&Cဖစ#Fကတ-6 Character, Byte, Short, Integer eတ&ကiuပ- အသuB$CပuAiuင#ခ-6ပ
တယ#။

Java SE 5 အeရ+က#မH+ Enum ကiu Java Language မH+ အသuB$Cပuလ+Aiuင#Kပ?$ Enum Type eတ&ကiu Switch
Statement ရ-I Parameter အeနန-9 အသuB$Cပuလ+Aiuင#ပ3တယ#။ Java SE 7 အeရ+က#မH+eတ+6 Project Coin န-9
String Type ကiuလ- Switch Statement ရ-I Parameter အeနန-9 အသuB$Cပuလ+Aiuင#ပ3တယ#။

public class DaysOfWeekDemo {

public enum DaysOfWeek {


MON, TUE, WED, THU, FRI, SAT, SUN
}

public void showWorkOrOff(DaysOfWeek day) {


switch (day) {
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println(day + " is work day.");
break;
case SAT:
case SUN:
System.out.println(day + " is off day.");
break;
default:
break;
}
}
}

အထက#ပ3အတiuင#$ Enum Type Variable Cဖစ#တ-6 day ကiu switch ရ-I Argument အeနန-ရယOAiuင#Kပ?$ Case
Statement eတ&မH+လ- Enum Constant eတ&ကiu eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။

အထက#ပ3 Method ရ-I day ဟ+ MON ကeန FRI အထiဆiuရင# Work Day လiueဖ2CပAiuင#မH+ Cဖစ#Kပ?$ SAT န-9 SUN
ဆiuပ3က Off Day လiu eဖ2Cပeပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 160 မင#$လ&င#


Java Developer Class

Object’s Behaviors
Enum Constant eတ&ဟ+ Pကiuတင#eရ$သ+$ထ+$ရတ-6 Constant Object eတ&Cဖစ#Fကပ3တယ#။ အ-6ဒ3eFက+င#6 Enum
Constatnt တiuင#$မH+ java.lang.Object ရ-I Method eတ&ကiuလ- အသuB$Cပuလiuရပ3တယ#။ Kပ?$eတ+6 Enum Class ထ-
မH+ အခGiu Method eတ&ကiu Override လuပ#ထ+$ပ3တယ#။

equals() method

public final boolean equals(Object other) {


return this==other;
}

Enum Class ထ-မH+ equals method ကiu Override လuပ#Kပ?$eရ$သ+$ထ+$ပ3တယ#။ အတ&င#$မH+ equality
Operator ကiu အသuB$CပuKပ?$ ရလ+တ-6 ရလဒ#ကiu Return Cပန#ထ+$ပ3တယ#။ Kပ?$eတ+6 အ-6ဒ? final modifier ကiu အသuB$Cပu
ထ+$တ-6အတ&က# Enum Class eတ&ရ-I equals method ကiu Override လuပ#Kပ?$ eရ$လiuရမH+ မဟuတ#eတ+6ပ3ဘO$။

clone() method

protected final Object clone() throws CloneNotSupportedException {


throw new CloneNotSupportedException();
}

Enum Class ထ-မH+ clone method ကiuလ- Override လuပ#Kပ?$ eရ$သ+$ထ+$ခ-6ပ3တယ#။ Access Modifier အeနန-9
protected Modifier ကiu အသuB$Cပuထ+$တ-6 အတ&က# Sub Class eတ&ကeနသ+ အသuB$CပuAiuင#Kပ?$ Cပင#ပကeနeတ+6
သuB$လiuရမH+ မဟuတ#ပ3ဘO$။ တဖန# Method Body အတ&င#$မH+eတ+6 CloneNoSupportedException ကiu throw
လuပ#ထ+$ပ3တယ#။ အ-6ဒ?အတ&က# Enum eတ&မH+ Clone Operation ကiu Support မလuပ#ဘO$လiuသiAiuင#ပ3တယ#။
eန+က#ဆuB$ final modifier ကiu eရ$သ+$ထ+$တ-6 အတ&က# ဘယ# Enum Type မH+မH clone method ကiu Override
လuပ#လiuမရeတ+6ပ3ဘO$။ ဒ36eFက+င#6 ဘယ# Enum Type မGiu$မH+မဆiu Clone Operation ကiu eရ$လiuရမH+ မဟuတ#eတ+မ
ပ3ဘO$။

toString() method

public String toString() {


return name;
}

Object ရ-I toString() method ကiuလ- Enum Class က Override လuပ#Kပ?$eရ$သ+$ထ+$ပ3တယ#။ Method Body
ထ-မH+ name ကiu Return Cပန#eနတ-6 အတ&က# Enum eတ&ရ-I toString method ကiu Invoke လuပ#ရင# Enum
Constant ကiueရ$သ+$ထ+$တ-6 Name ကiu Cပန#ရမH+ Cဖစ#ပ3တယ#။

Kပ?$eတ+6 toString() method ကiu final လiu မeရ$ထ+$တ-6 အတ&က# Enum Class eတ&ထ-ကeန Override လuပ#Kပ?$
eရ$မယ#ဆiuရင#ရAiuင#ပ3တယ#။ ဆက#လက#Kပ?$ Override လuပ#Fကည#6Fကရeအ+င#။

Learning Java 161 မင#$လ&င#


Java Developer Class
Enum Type eတ&ကeန Override လuပ#ရင# ပuBစB ၂ မGiu$န-9 eရ$သ+$လiuရAiuင#ပ3တယ#။ ပထမတစ#မGiu$ကeတ+6 Enum
Class Body eအ+က#မH+ eရ$သ+$တ-6 ပuBစBပ3။

public enum DaysOfWeek {


MON, TUE, WED, THU, FRI, SAT, SUN;

@Override
public String toString() {
return String.format("%d : %s", ordinal(), name());
}
}

Class Body eအ+က#မH+ Override လuပ#ထ+$တ-6 Method eတ&ကiu Enum Constant တiuင#$မH+ အသuB$CပuAiuင#မH+ Cဖစ#
ပ3တယ#။

public static void main(String[] args) {

for(DaysOfWeek d : DaysOfWeek.values()) {
System.out.println(d);
}
}

အထက#ပ3အတiuင#$ Enum Constant eတ&ကiu System.out.println(d) လiueရ$သ+$Kပ?$ Run Fကည#6မယ#ဆiuရင#


Constant တiuင#$ဟ+ Override လuပ#ထ+$တ-6 toString() Method ကiu အသuB$Cပuသ&+$တယ#ဆiuတ+ကiu eတ&Jရပ3မယ#။

0 : MON
1 : TUE
2 : WED
3 : THU
4 : FRI
5 : SAT
6 : SUN

Learning Java 162 မင#$လ&င#


Java Developer Class
Method eတ&ကiu Override လuပ#တ-6အခ3မH+ Enum Constant တစ#ခuခGင#$ဆ?မH+လ- eရ$သ+$လiuရAiuင#ပ3တယ#။

public enum DaysOfWeek {


MON {
public String toString() {
return "Monday";
}
}, TUE, WED, THU, FRI, SAT, SUN;

@Override
public String toString() {
return String.format("%d : %s", ordinal(), name());
}
}

အထက#ပ3အတiuင#$ DaysOfWeek ရ-I MON Constant ရ-I Body ထ-ကeန toString() Method ကiu Override လuပ#
လiuရပ3တယ#။ MON ရ-I toString() Method ကiu အသuB$Cပuရင# သb Body ထ-မH+ eရ$ထ+$တ-6 Method ကiuပ- အသuB$Cပu
သ&+$တ+ကiu eတ&Jရပ3မယ#။အe^မH+eရ$ခ-6တ-6 Main Method ကiu Run Fကည#6တ-6အခ3မH+ MON Constant တခuပ-
Constant Body ထ-က Override လuပ#ခ-6တ-6 toString() Method ကiu အသuB$Cပuသ&+$တယ#ဆiuတ+ကiu eတ&Jရပ3လiမ#6
မယ#။

Monday
1 : TUE
2 : WED
3 : THU
4 : FRI
5 : SAT
6 : SUN

Learning Java 163 မင#$လ&င#


Java Developer Class

Writing Object Members


Enum Type eတ&မH+လ- Object eတ&ရ-I Member eတ&Cဖစ#Fကတ-6 Instance Variable eတ& Instant Method eတ&
ကiu eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။

public enum DaysOfWeek {

MON ("Monday") , TUE ("Tuesday"), WED ("Wednesday"),


THU ("Thursday"), FRI ("Friday"), SAT ("Saturday"),
SUN ("Sunday");

private String viewName;

private DaysOfWeek(String viewName) {


this.viewName = viewName;
}

public String getViewName() {


return viewName;
}
}

Enum Class eတ&မH+ Object eတ&ရ-I State eတ&Cဖစ#တ-6 Instance Variable eတ&ကiu eရ$သ+$လiuရAiuင#ပ3တယ#။
eရ$သ+$တ-6 eနရ+မH+ AHစ#သက#ရ+ Access Modifier ကiu eရ$သ+$လiuရAiuင#ပ3တယ#။ Constructor ကiu လ-eရ$သ+$လiu
ရပ3တယ#။ ဒ3eပမ-6 Access Modifier အeနန-9eတ+6 private ဒ3မHမဟuတ# Default ကiuပ- အသuB$CပuလiuရမH+ Cဖစ#ပ3
တယ#။

ဒ3eFက+င#6 Enum Constant eတ&ကiu Enum ရ-I Body ထ-မH+ပ- eရ$သ+$လiuရမH+ Cဖစ#ပ3တယ#။ Enum Class အCပင#
ကeန Enum Constant eတ&ရ-I Object eတ&ကiu တည#eဆ+က#လiu ရAiuင#မH+ မဟuတ#ပ3ဘO$။

Kပ?$eတ+6 Enum Class eတ&မH+ Object ရ-I Behavior ကiu သတ#မHတ#eပ$Aiuင#တ-6 Instance Method eတ&ကiu
eရ$သ+$Aiuင#မH+Cဖစ#Kပ?$ Enum Constant တiuင#$ကeန အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Inheritance
Enum Class eတ&ဟ+ အCခ+$eသ+ Class eတ&ကiu Inheritance လuပ#လiuမရသလiu အCခ+$ Class eတ&ကeနလ-
Enum Class eတ&ကiu Inheritance လuပ#လiuမရပ3ဘO$။ အ-6ဒ?လiuပ- Enum အခGင#$ခGင#$လ- Inheritance လuပ#လiuမရAiuင#
ပ3ဘO$။

Enum Type မH+ရတ-6 Inheritance ဆiuလiu Default Inheritance eတ&ပ-Qiပ3တယ#။ အ-6ဒ3eတ&ကeတ+6


java.lang.Enum<E extends Enum<E>> class န-9 java.lang.Object Class တiuပ- Cဖစ#ပ3တယ#။ ဒ36eFက+င#6
Enum Type eတ&မH+ မiမiကiuယ#တiuင# AHစ#သက#ရ+ Inheritance ကiu သuB$လiuရမH+ မဟuတ#ပ3ဘO$။

Learning Java 164 မင#$လ&င#


Java Developer Class

Abstraction
Java Class eတ&မH+ Abstraction ကiu Abstract Class eတ&န-9 eရ$သ+$လiuရAiuင#သလiu Interface eတ&န-9လ-
eရ$သ+$လiu ရAiuင#ပ3တယ#။ ဒ3eပမ-6 Enum Class eတ&ဟ+ အCခ+$ Class eတ&ကiu Inherantance လuပ#လiu မရAiuင#တ-6
အတ&က# Abstract Class eတ&ကiu သuB$လiu မရAiuင#ပ3ဘO$။ အ-6ဒ?အစ+$ Enum Class eတ&ထ-မH+ Abstract Method
eတ&ကiu eရ$လiuရAiuင#ပ3တယ#။

ဒ36eFက+င#6 Java မH+ Abstract Method eတ&ကiu Abstract Class eတ&၊ Interface eတ&န-9 Enum Class eတ&မH+
eရ$သ+$လiuရAiuင#တယ#လiu ဆiuAiuင#ပ3တယ#။

Abstract Method in Enum Class

public enum Status {


Request{
@Override
public boolean isEndOperation() {
return false;
}

}, Approved {
@Override
public boolean isEndOperation() {
return true;
}
}, Cancel {
@Override
public boolean isEndOperation() {
return true;
}
};

public abstract boolean isEndOperation();


}

အထက#ပ3အတiuင#$ Status Enum Class အတ&င#$မH+ Request, Approved န-9 Cancel ဆiuတ-6 Constant eတ&ကiu
ပiuင#ဆiuင#ပ3တယ#။ Kပ?eတ+6 အ-6ဒ? Constant တiuင#$ကeန မတOည?တ-6 Behavior eတ&ကiu ရQieစလiuတယ#ဆiuရင#
အထက#ပ3အတiuင#$ Abstract Method Cဖစ#တ-6 isEndOperation() Method ကiu eရ$သ+$ထ+$Aiuင#ပ3တယ#။

Enum Class အတ&င#$မH+ Abstract Method ကiu eရ$သ+$လiuက#Kပ?ဆiuတ+န-9 Enum Constant eတ&တiuင#$ကeန
Override လuပ#Kပ?$eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။ ဒ?လiu eရ$သ+$Cခင#$အ+$Cဖင#6 Status Constant တiuင#$ကeန
Operation Kပ?$သ&+$Kပ?လ+$ မKပ?$eသ$ဘO$လ+$ဆiuတ+ကiu သiAiuင#တ-6 isEndOperation() Method ကiu အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 Enum Constant တစ#ခuခGင#$ဆ?ကeန မတOည?တ-6 Behavior မGiu$ကiu လuပ#eဆ+င#eစလiuတ-6 အခ3မGiu$မH+


Enum Class ထ-မH+ Abstract Method eတ&ကiu eရ$သ+$ အသuB$CပueစAiuင#ပ3တယ#။

Learning Java 165 မင#$လ&င#


Java Developer Class

Interface Implementation
Enum Type eတ&ဟ+ Abstract Class eတ&ကiu Extends မလuပ#Aiuင#eပမ-6 Interafce eတ&ကiueတ+6 Implement
လuပ#Aiuင#ပ3တယ#။

public interface FileGenerator {


File generate();
}

public enum Settings implements FileGenerator{

ViewNameSetting ("views.properties"),
TitleSetting ("titles.properties");

private String fileName;

private Settings(String fileName) {


this.fileName = fileName;
}

@Override
public File generate() {
return new File(fileName);
}
}

အထက#ပ3နမOန+ထ-မH+ FileGenerator Interface တစ#ခuကiu eရ$သ+$ထ+$Kပ?$ File ကiu Return Cပန#eပ$Aiuင#တ-6


generate() method တစ#ခuကiu eရ$သ+$ထ+$ပ3တယ#။ Kပ?$eတ+6 Setting Enum ကeန FileGenerator ကiu
Implement လuပ#ထ+$ပ3တယ#။ အ-6ဒ?အတ&က# Enum Class Body ထ-မH+ generate() method ကiu Override လuပ#
Kပ?$eရ$သ+$ထ+$ပ3တယ#။

Override လuပ#တ-6eနရ+မH+ e^မH+ eဖ2Cပခ-6သလiu Constant တစ#ခuခGင#$ဆ?ကeနလ- လiuအပ#သလiu Override လuပ#Aiuင#


မH+ Cဖစ#ပ3တယ#။ က- ဒ?လiu Interface ကiu Implement လuပ#တ-6အတ&က# ဘ+Cဖစ#သ&+$မလ- ဆiuတ+ကiu ဆက#Kပ?$ eလ6လ+
Fကည#6Fကရeအ+င#။

Settings Enum ဟ+ FileGenerator Interface ကiu Implement လuပ#ထ+$တ-6အတ&က# Setting ထ-က Constant
eတ&ကiu FileGenerator Object အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ တဖန# FileGenerator Interface ကiu
Implement လuပ#ထ+$တ-6 အCခ+$ Class eတ&ရ-I Object eတ&န-9 အတOတO Setting Enum Constant eတ&ကiuလ-
FileGenerator အeနန-9 အသuB$CပuလiuရAiuင#မH+ Cဖစ#ပ3တယ#။ ဆiuလiuတ+က Interface ကiu အသuB$CပuCခင#$အ+$Cဖင#6 Enum
Constant eတ&ကiu Polymorphic Cဖစ#eအ+င# eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 166 မင#$လ&င#


Java Developer Class

public class TestFileGenerator implements FileGenerator {


@Override
public File generate() {
return new File("test.txt");
}
}

public void generateFile(FileGenerator generator) {


try {
generator.generate().createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}

public void test() {


Settings viewName = Settings.ViewNameSetting;
Settings title = Settings.TitleSetting;

TestFileGenerator test = new TestFileGenerator();

generateFile(viewName);
generateFile(title);
generateFile(test);
}

အထက#ပ3နမOန+ထ-မH+ TestFileGenerator Class ဟ+ FileGenerator Interface ကiu Implement လuပ#ထ+$ပ3


တယ#။ Kပ?$eတ+6 generateFile(FileGenerator) Method ကeတ+6 FileGenerator Interface Object တစ#ခuကiu
Argument အနeနန-9 လက#ခBထ+$ပ3တယ#။

Settings Enum ကiueက+ TestFileGenerator ကiuပ3 FileGenerator Interface ကiu Implement လuပ#ထ+$တ-6
အတ&က# test() Method ထ-မH+ generateFile() Method ထ-ကiu Setting Enum eတ&ကiuလ- Parameter အeနန-9
အသuB$CပuAiuင#သလiu TestFileGenerator Object ကiuလ- အသuB$Cပuလiuရသ&+$ပ3တယ#။

ဒ?eနရ+မH+ eလ6လ+Aiuင#တ+ကeတ+6 Interface eတ&ကiu အသuB$CပuKပ?$ Enum eတ&န-9 အCခ+$eသ+ Object eတ&ကiu
တOည?စ&+ အသuB$CပueစAiuင#မယ# ဆiuတ-6 အခGက#Cဖစ#ပ3တယ#။

Learning Java 167 မင#$လ&င#


Java Developer Class

Singleton (Only One) Object


e^မH+ eဖ2Cပထ+$ခ-6သလiu Enum Type eတ&မH+ Public Constructor မပ3တ-6 အတ&က# Enum Object eတ&ကiu
အCပင#ကeနတည#eဆ+က#လiuမရပ3ဘO$။ Enum Constant eတ&ကiu Enum Type ကiu eရ$သ+$ကထ-က PကiuKပ?$
eရ$သ+$ထ+$ရပ3တယ#။ ဒ36eFက+င#6 Enum Constant eတ&ဟ+ JVM Memory eပ2မH+ တစ#ခuထ-eသ+ Object eတ&
Cဖစ#Fကပ3တယ#။

ဒ?လiu Enum ရ-I ထO$Cခ+$ခGက#ကiu အသuB$CပuKပ?$ JVM Memory eပ2မH+ တစ#ခuထ-သ+QieနeစခGင#တ-6 Singleton Object
eတ&eနရ+မH+ Enum Constant eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

public enum BookStore {

instance;

private List<String> books;

private BookStore() {
books = new ArrayList<>();
}

public void add(String book) {


books.add(book);
}

public List<String> getAllBooks() {


return new ArrayList<>(books);
}
}

အထက#ပ3အတiuင#$ BookStore Enum Object ကiu eရ$သ+$ထ+$Kပ?$ instance constant တစ#ခuကiu eရ$သ+$ထ+$
ရင# instance Object ကiu အCခ+$ဘယ#eနရ+ကမH Object ထပ#eဆ+က#လiuရမH+ မဟuတ#eတ+6ပ3ဘO$။ ဒ36eFက+င#6 JVM
Memory ထ-မH+ တစ#ခuထ-သ+Qiတ-6 Singleton Object eတ& Cဖစ#လ+မH+ Cဖစ#ပ3တယ#။

Learning Java 168 မင#$လ&င#


Java Developer Class

Generics
Generics ဟ+ Java SE 5 အeရ+က#မH+ အသuB$Cပuလ+Aiuင#ခ-6တ-6 Programming eရ$သ+$ပuB eရ$သ+$နည#$အသစ#
Cဖစ#ပ3တယ#။ Generics Programming Concept ကiu Java မH+ eရ$သ+$Aiuင#eအ+င# ထည#6သ&င#$ခ-6တ+လ- Cဖစ#ပ3
တယ#။

ဆiuFကပ3စiu။ က\န#eတ+#တiu Cup တစ#ခuအတ&က# Class တစ#ခueရ$မယ#။ Kပ?$eတ+6 အ-6ဒ?အထ-မH+ Coffee eတ&ကiu
အသuB$Cပuမယ#ဆiuKပ?$ eရ$သ+$ထ+$ခ-6ရင# အ-6ဒ? Cup ဟ+ Coffee Cup ပ- Cဖစ#သ&+$ပ3မယ#။ Tea Cup တစ#ခuကiu လiuခGင#
ရင# eန+က#ထပ# Cup Class တစ#ခuကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

Coffee Cup ပ- Cဖစ#Cဖစ# Tea Cup ပ-Cဖစ#Cဖစ# Cup Cဖစ#တ-6အတ&က# လuပ#လiuရတ-6 အလuပ#ကeတ+6 အတOတOပ- Cဖစ#ပ3
မယ#။ အသuB$Cပueနတ-6 Data မတOတ+န-9 Class eတ&ကiu eရ$eနရပ3တယ#။ ဒ?လiueနရ+မGiu$မH+ အသuB$CပuAiuင#တ-6 Data
Type ကiu Abstraction Cဖစ#eအ+င# eရ$ထ+$Aiuင#မယ#ဆiuရင# အသuB$Cပueနတ-6 Data Type မတOလiuဆiuKပ?$ eန+က#ထပ#
Class eတ&ကiu ထပ#Kပ?$eရ$စရ+လiuမH+ မဟuတ#eတ+6ပ3ဘO$။ အခuလiu Cပဿန+eတ&ကiu eCဖQင#$Aiuင#eအ+င#ဆiuKပ?$ Java
SE 5 အeရ+က#မH+ Class တစ#ခuမH+ အသuB$Cပueနတ-6 Data Type eတ&ကiu Abstraction Cဖစ#eအ+င# လuပ#eပ$Aiuင#တ-6
Generics ဆiuတ-6 Programming Concept ကiu Java ထ-ကiu ထည#6သ&င#$လ+ခ-6Fကပ3တယ#။

Before Generics
နမOန+အeနန-9 စT#$စ+$Fကည#6Fကရeအ+င#။ က\န#eတ+#တiu Container ဆiu
တ-6 Object တစ#ခueရ$eနတယ#။ အ-6ဒ? Container ထ-မH+ က\န#eတ+#တiu
String တန#ဖiu$တစ#ခuကiu သiမ#$ထ+$Aiuင#တယ#။

String Argument တစ#ခuပ3တ-6 Constructor တစ#ခuQiပ3မယ#။ Kပ?$eတ+6


Data ကiu Cပန#eပ$Aiuင#တ-6 getData ဆiuတ-6 Method တစ#ခuQiပ3မယ#။ Kပ?$
eတ+6မH အ-6ဒ? data ကiu eCပ+င#$eပ$Aiuင#တ-6 setData(String) Method
တစ#ခuပ3ဝင#ပ3မယ#

Learning Java 169 မင#$လ&င#


Java Developer Class
Container Class ကiu လက#eတ&Jeရ$Fကည#6Fကရeအ+င#။

public class Container {

private String data;

public Container(String data) {


super();
this.data = data;
}

public void setData(String data) {


this.data = data;
}

public String getData() {


return data;
}
}

ဒ?လiu Class မGiu$ကiu eရ$သ+$Kပ?$၊ မFက+ခင#မH+ပ- Integer eတ&ကiu သiမ#$ထ+$တ-6 Container လiuမGiu$လiuခGင#တယ#တiu၊
မဟuတ#eသ$ဘO$ Date Class eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6 Container လ-လiuခGင#တယ#တiu Cဖစ#လ+Aiuင#ပ3တယ#။ ဒ?
eနရ+မH+ က\န#eတ+#တiueရ&$စရ+လမ#$ AHစ#ခuQiပ3မယ#။ တစ#ခuကeတ+6 လiuခGင#တ-6 Data Type eတ&အလiuက# Container
Class eတ&ကiu eရ$eပ$Cခင#$Cဖစ#ပ3တယ#။ ဟင# ဒ3လ-မနiပ#eသ$ဘO$။ တOည?တ-6 ကuဒ#eတ&ကiu Class eတ&အမG+$Pက?$မH+
လiuက#eရ$eနရတယ#။

public class Container {

private Object data;

public Container(Object data) {


super();
this.data = data;
}

public void setData(Object data) {


this.data = data;
}

public Object getData() {


return data;
}
}

ဒ?eနရ+မH+ eတ&$Aiuင#တ+ကeတ+6 ဘယ# Type မGiu$မဆiu အသuB$CပuAiuင#တ-6 Object ကiu သuB$လiuက#ရင#Kပ?$တ+ပ-လiu။

Learning Java 170 မင#$လ&င#


Java Developer Class
ဟuတ#တယ#။ Object ဟ+ Java Class eတ&အ+$လuB$ရ-I Super Class Cဖစ#eနတယ#။ Class eတ&ကiu eရ$ထ+$ထ+$
မeရ$ထ+$ထ+$ Java Class eတ&အ+$လuB$ဟ+ java.lang.Object ရ-I Sub Class eတ& Cဖစ#Fကတယ#။ ဒ36eFက+င#6
Data Type eနရ+မH+ Object လiuသuB$လiuက#ရင# အ+$လuB$အစT#eCပသ&+$Kပ?။ ထင#ပ3လiမ#6မယ#။

Container ထ-ကiu သ&င#$တ-6အခGiန#eတ&မH+eတ+6 အစT#eCပပ3လiမ#6မယ#။ Instance Member Cဖစ#တ-6 Data ရ-I Type ကiu
Object လiuယOထ+$တ-6 အတ&က# ဘယ#လiu Java Object မGiu$မဆiuလ+Kပ?$ အစ+$ထiu$လiuရပ3တယ#။ ဒ?လiuပ- Constructor
ရ-I Argument eနရ+မH+လ- Object လiueရ$ထ+$eတ+6 ဘယ#လiu Object မGiu$မဆiu အသuB$Cပuလiuရပ3မယ#။ Setter
Method Cဖစ#တ-6 setData(Object) method ရ-I Argument ဟ+လ- Object Cဖစ#တ-6အတ&က# ဘယ#လiu Object မGiu$မ
ဆiuလ+Kပ?$ ဒ? Method န-9 အသuB$Cပuလiuရပ3မယ#။ Happy! Cဖစ#သ&+$ပ3Kပ?။ Class eတ&အမG+$Pက?$eရ$eနရတ+eတ&ကiu
Object ကiu အသuB$CပuKပ?$ eCဖQင#$လiuက#Aiuင#Kပ?။ ထင#eက+င#$ထင#ပ3လiမ#6မယ#။

ဒ3eပမ-6 Cပဿန+က Container ကeန သiမ#$ထ+$တ-6 Data ကiu အCပင#ကiu Cပန#ထuတ#eပ$တ-6 getData() Method မH+
Cဖစ#ပ3တယ#။ Member Cဖစ#တ-6 data ရ-I Type ဟ+ Object Cဖစ#တ-6 အတ&က# Return Cပန#တ-6 Type ဟ+လ- Object ပ-
Cဖစ#eနမH+ပ3။ တကယ#သuB$Fကည#6တ-6အခ3ကGမH ဒ?eနရ+က Cပဿန+ Cဖစ#လ+ပ3တယ#။

public class ContainerDemo {

public static void main(String[] args) {


Container c1 = new Container("String Data");
Container c2 = new Container(1000);
Container c3 = new Container(new Date());

showContents(c1, c2, c3);


}

static void showContents(Container ... containers) {

for(Container c : containers) {
String data = (String) c.getData();
System.out.printf("Data is %s%n", data);
}
}
}

အထက#ပ3နမOန+ထ-က showContents() Method မH+ Container Class ရ-I Verarges Type ကiu Argument
အeနန-9 လက#ခBယOထ+$ပ3တယ#။ အ-6ဒ?အတ&က# main() method ထ-မH+ showContents(c1, c2, c3) ဆ?uKပ?$
Container Object eတ&ကiu Parameter အeနန-9 eပ$လiuရeနပ3တယ#။ ဘ+လiuလ-ဆiueတ+6 c1, c2 န-9 c3 eတ&ဟ+
Container Type Object eတ& Cဖစ#တ-6 အတ&က#Cဖစ#ပ3တယ#။

တစ#ခuသတiထ+$eစခGင#တ+က အ-6ဒ? Object eတ&ကiu တည#eဆ+က#တ-6 eနရ+မH+ Constructor Argument အeနန-9


အသ?$သ?$ String, Integer န-9 Date Object eတ&ကiu eပ$ထ+$တယ#ဆiuတ-6 အခGက#ပ3ပ-။ ဒ?လiueပ$လiuရတ+လ-
Container Class ထ-က Constructor ကiu Container(Object data) လiueရ$သ+$ထ+$တ-6 အတ&က#Cဖစ#ပ3တယ#။
Constructor ရ-I Argument မH+ Object ကiu အသuB$Cပuထ+$တ-6 အတ&က# ဘယ#လiu Type မGiu$မဆiu Container Class
န-9 အသuB$Cပuလiuရeနတ+ပ- Cဖစ#ပ3တယ#။

Type အ+$လuB$ကiu သuB$လiuရeနတ+ မeက+င#$ဘO$လ+$လiu eတ&$စရ+Qiပ3မယ#။ အeCဖထuတ#မeလ+eသ$ပ- eရ$ထ+$တ-6


ကuဒ#eတ&ကiu ဆက#Kပ?$ eလ6လ+Fကည#6Fကeအ+င#။

Learning Java 171 မင#$လ&င#


Java Developer Class
အထက#ပ3နမOန+ထ-က showContents() method ထ-က ကuဒ#eတ&ကiu Fကည#6Fကရeအ+င#။ Argument Cဖစ#တ-6
containers ထ-က Container eတ&ကiu for loop န-9 Iterate လuပ#ထ+$ပ3တယ#။ Container Object တစ#ခuခGင#$စ?ကiu
for loop ထ-မH+ c ဆiuတ-6 reference variable န-9 Reference လuပ#Aiuင#ပ3တယ#။

အ-6ဒ?eတ+6 c ဟ+ Container Object Cဖစ#ပ3တယ#။ c object ရ-I getData() method ကiu သuB$တ-6အခ3မH+ Cပဿန+က
စeတ+6တ+ပ3ပ-။ Container Class ရ-I Member Cဖစ#တ-6 data ရ-I Type ဟ+ Object Cဖစ#တ-6 အတ&က# getData()
method ရ-I Return Type ဟ+လ- Object Type Cဖစ#eနပ3တယ#။ Container Class ရ-I Member Cဖစ#တ-6 data ရ-I
Type ဟ+ Object Cဖစ#eနတ-6 အတ&က# ဘယ#လiu Type မGiu$မဆiu Container န-9 အသuB$CပuAiuင#တယ#။ ဒ3eပမ-6 data ရ-I
Type ဟ+ Object Cဖစ#eနတ-6 အတ&က# getData() ရ-I Return Type ဟ+လ- Object ပ- Cဖစ#eနမH+ပ3။

Container Object ရ-I getData() method ကiu အသuB$Cပuတ-6 အခ3မH+ ရလ+တ-6 ရလဒ#ဟ+ Object Cဖစ#eနတ-6
အတ&က# တကယ#တမ#$ ဘယ#လiu Type Cဖစ#တယ#ဆiuတ+ကiu ဒ?eနရ+မH+ မသiAiuင#eတ+6ပ3ဘO$။ ကiuယ#အသuB$Cပuလiuတ-6
Type Cဖစ#eအ+င#ဆiuရင# Cပန#Kပ?$ Cast လuပ#eပ$eနရမH+ Cဖစ#ပ3တယ#။ Type Casting ဟ+ တကယ#ဆiuရင# အရမ#$ကiu
အA lရ+ယ#Qiတ-6 အလuပ#တစ#ခuCဖစ#ပ3တယ#။

eန+က#က&ယ#မH+Qiတ-6 Object ရ-I Type န-9 Casting လuပ#လiuတ-6 Type တiu မတOဘO$ဆiuရင# Runtime ကGမH Exception
ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ အထက#ပ3နမOန+မH+eတ+6 String အeနန-9 အသuB$Cပuလiuတ-6 အတ&က# getData() ရ-I
ရလဒ#ကiu (String)getData() လiueရ$သ+$Kပ?$ String Type အeနန-9 Cast လuပ#eနရပ3တယ#။ ဒ?eနရ+မH+ Cပဿန+ စ
eတ+6တ+ပ3ပ-။ c1 မH+eတ+6 String ကiu data အeနန-9 Set လuပ#ထ+$တ-6 အတ&က# Class Cast လuပ#တ-6 အခ3မH+
Cပဿန+မတက#eပမ-6 c2 န-9 c3 မH+eတ+6 အသ?$သ?$ Integer န-9 Date Type တiuကiu အသuB$Cပuထ+$ပ3တယ#။ ဒ36eFက+င#6
for loop ရ-I ဒuတiယအပတ#မH+ ClassCastException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

အiueက၊ ဒ?eနရ+မH+ အe^မH+ eမ$ခ-6တ-6 eမ$ခ&န#$ကiu Cပန#Kပ?$ eCဖFကည#6Fကရeအ+င#။ Type အ+$လuB$ကiu သuB$လiuရတiuင#$
eက+င#$လ+$ဆiuတ+။ အeCဖက သiမ#$ထ+$တuန#$ကeတ+6 Object Cဖစ#တ-6 အတ&က# အကuန#သiမ#$လiuရတယ#။ Cပန#ထuတ#
တ-6အခ3ကGမH Object အeနန-9ပ- ထuတ#လiuရတ-6အတ&က# လiuခGင#တ-6 Type Cဖစ#eအ+င# Cast လuပ#တ-6 eနရ+မH+ Cပဿန+
တက#Aiuင#တယ#။ အ-6ဒ?eတ+6 မeက+င#$ဘO$ ဆiuတ-6 အeCဖထ&က#ပ3တယ#။ ဒ3ဟ+ Java 5 မတiuင#ခင#က Collections
Framework eတ&မH+ Cဖစ#eနတ-6 Cပဿန+Cဖစ#ပ3တယ#။ ဒ?လiu Cပဿန+eတ&ကiu eCဖQင#$ဖiuအတ&က# Java SE 5 မH+
Generics ဆiuတ-6 Programming Concept ကiu Java ထ-ကiu ထည#6eခ2လ+ခ-6ရတ+ Cဖစ#ပ3တယ#။ ဆက#လက#Kပ?$
Generics န-9 ဒ?လiuCပဿန+eတ&ကiu eCဖQင#$ခ-6လ- ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

Learning Java 172 မင#$လ&င#


Java Developer Class

After Generics
Java ဟ+ အထက#ပ3 Cပဿန+eတ&ကiu Generics ဆiuတ-6 Programming Concept ကiuအသuB$CပuKပ?$ eCဖQင#$ခ-6ပ3
တယ#။ Generics ဆiuတ+ဟ+လ- OOP တiu Functional Programming တiuလiu Programming Paradigm တစ#
မGiu$Cဖစ#ပ3တယ#။ Programming Module eတ&မH+အသuB$Cပueနတ-6 Data Type eတ&ကiu Abstraction Cဖစ#eအ+င#
eရ$သ+$Cခင#$အ+$Cဖင#6 လuပ#eဆ+င#မ[တOတ-6 Module eတ&ကiu အPကiမ#Pကiမ# မeရ$ရeအ+င# အကOအည?eပ$Aiuင#တ-6
Programming Concept တစ#မGiu$Cဖစ#ပ3တယ#။

Generics ရ-I Concept ကiu စ+န-9 Qင#$Cပeနတ+ထက# အထက#ပ3 Cပဿန+မGiu$ကiu Generics န-9 ဘယ#လiu eCဖQင#$သ&+$
တယ#ဆiuတ+ကiu Fကည#6လiuက#တ+က အဆeပ3င#$မG+$စ&+ပiuKပ?$န+$လည#လ&ယ#ပ3လiမ#6မယ#။

Generics ကiu အသuB$Cပuမယ#ဆiuရင# Class eတ& Method eတ&မH+ အသuB$CပuAiuင#


တ-6 Type eတ&ကiu Type Parameter အeနန-9 eရ$သ+$ အသuB$CပuAiuင#ပ3မယ#။

Class Diagram ထ-မH+လi Container ဆiuတ-6 Class မH+ အသuB$Cပuမည#6 Type


ကiu T ဆiuKပ?$ type parameter အeနန-9 သတ#မHတ#ထ+$လiuရပ3တယ#။

အ-6ဒ?လiu eရ$သ+$ထ+$တ-6 Type Parameter T ကiu Container Class ရ-I


Scope ထ-မH+ eရ$သ+$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Member Cဖစ#
တ-6 instance variable data ရ-I Type အeနန-9လ- T ကiu အသuB$CပuAiuင#ပ3တယ#။

ဒ?လiuပ- Constructor Argument eနရ+မH+လ- T ကiu အသuB$CပuAiuင#တယ#။ Method eတ&ရ-I Argument eတ&မH+eက+
Return Type eတ&မH+ T လiueရ$သ+$Aiuင#ပ3တယ#။ Class ကiu eရ$သ+$တ-6 အခGiန#မH+eတ+6 ဘ+ Type ကiu သuB$မH+လ-
ဆiuတ+ကiueတ+6 မသieသ$ဘO$။ eလ+eလ+ဆယ# သeဘ+တရ+$အရသ+Qiတ-6 T ဆiuKပ?$ eရ$သ+$ထ+$မယ#eပ36။

တကယ#တမ#$ Object eဆ+က#တ-6 အခ3ကGမH T ရ-I eနရ+မH+ ဘ+သuB$မလ- ဆiuတ+ကiu သတ#မHတ#eပ$ရမH+ပ3။ Object
eဆ+က#တ-6 အခ3မH+ သတ#မHတ#eပ$လiuက#တ-6 Type Parameter ရ-Iတန#ဖiu$ကiu အ-6ဒ? Object က အသuB$Cပuသ&+$မH+ Cဖစ#ပ3
တယ#။ ကuဒ#eတ&န-9 eရ$Fကည#6Fကရeအ+င#။

public class Container<T> {

private T data;

public Container(T data) {


super();
this.data = data;
}

public void setData(T data) {


this.data = data;
}

public T getData() {
return data;
}
}

Learning Java 173 မင#$လ&င#


Java Developer Class
Generics ကiu အသuB$Cပuမယ#ဆiuရင# Type Parameter ကiu အသuB$CပuAiuင#ပ3တယ#။ Generics ကiu Class eတ&၊
Interface eတ&န-9 Method eတ&မH+ eရ$သ+$Aiuင#ပ3တယ#။ Generics ကiu အသuB$CပuKပ?$eရ$သ+$ထ+$တ-6 Type eတ&ကiu
Generics Type လiueခ2ပ3တယ#။ Class eတ&န-9 Interface eတ&မH+ Generics ကiu အသuB$Cပuထ+$ရင# Generics
Type လiueခ2Aiuင#မH+ Cဖစ#ပ3တယ#။ အ-6ဒ?လiuပ- Method eတ&မH+ Generics ကiu အသuB$CပuKပ?$ eရ$သ+$ထ+$ရင# Generics
Method eတ&လiueခ2Aiuင#ပ3တယ#။

Generics အeFက+င#$ကiu အသ$စiတ#မသ&+$eသ$ခင#၊ Generics ကiu အသuB$Cပuတ-6 အတ&က# အe^မH+ eဖ2Cပခ-6တ-6


Cပဿန+ကiu ဘယ#လiu eCဖQင#$Aiuင#ခ-6တယ#ဆiuတ+ကeန eလ6လ+သ&+$Fကရeအ+င#။ Kပ?$eတ+6မH Generics န-9 ဘ+လuပ#
လiuရAiuင#Kပ?$ eန+က#က&ယ#မH+ ဘယ#လiu အလuပ#လuပ#eနလ-ဆiuတ+ကiu ဆက#Kပ?$ eလ6လ+သ&+$Fကရeအ+င#။

public class Container<T> {

Container Class ကiu eရ$သ+$တ-6 eနရ+မH+ Generics ကiu အသuB$CပuKပ?$ Type Parameter ကiu eရ$သ+$ခ-6ပ3တယ#။
Type Parameter ဆiuတ+က Class eတ& Interface eတ&ကiu Declare လuပ#တ-6အခ3မH+ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။
<T> လiueရ$သ+$ထ+$တ+က Type Parameter Cဖစ#ပ3တယ#။ eဒ3င#6က&င#$ထ-မH+ eရ$သ+$ထ+$တ-6 T က Type
Parameter Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+ eရ$သ+$ထ+$တ-6 T ဟ+ Container Class မH+ အသuB$CပuAiuင#တ-6 Data Type ရ-I Abstraction Cဖစ#ပ3
တယ#။ ဒ?လiuမGiu$ Generices ကiu အသuB$CပuKပ?$ Class eတ&မH+ Type Parameter ကiu အသuB$CပuAiuင#တ-6အတ&က# Type
Abstraction ကiu Cဖစ#eပ2eစပ3တယ#။ eရ$သ+$ထ+$တ-6 Abstract Type ကiu Class တစ#ခuလuB$မH+ eရ$သ+$ အသuB$Cပu
Aiuင#ပ3တယ#။

private T data;

public Container(T data) {


super();
this.data = data;
}

ဒ36eFက+င#6 Type Abstraction Cဖစ#တ-6 T ကiu Container Class ရ-I Instance member Cဖစ#တ-6 data ရ-I Type Cဖစ#တ-6
eနရ+မH+လ- အသuB$CပuAiuင#သလiu Constructor Argument မH+လ- အသuB$CပuAiuင#ပ3တယ#$

public void setData(T data) {


this.data = data;
}

public T getData() {
return data;
}

ဒ?လiuပ- အထက#ပ3 Setter Method ရ-I Argument eတ&ရ-I Type အeနန-9eက+ getter method ရ-I Return Type မH+
ပ3 Type Parameter ကiu အသuB$CပuလiuရAiuင#ပ3တယ#။ တကယ#တန#$eCပ+ရရင# Class တစ#ခuမH+Type Parameter ကiu
eရ$သ+$ထ+$ရင# အ-6ဒ? Type ကiu အ-6ဒ? Class တစ#ခuလuB$မH+ eရ$သ+$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 174 မင#$လ&င#


Java Developer Class
ဒ?လiuမGiu$ Type Parameter ကiu အသuB$Cပuလiuရလiu ဘ+Cဖစ#သ&+$လ-။ ဒ3က တကယ#အသuB$CပuFကည#6တ-6အခ3ကGမH ပiuKပ?$
သeဘ+eပ3က#မH+ Cဖစ#ပ3တယ#။ ဆက#Kပ?$ eရ$Fကည#6Fကရeအ+င#။ အရင#ဆuB$ Generics Type eတ&ကiu Object eဆ
က#တ-6 eနရ+ကeန Fကည#6Fကရeအ+င#။

Container<String> c1 = new Container<>("String Data");


Container<Integer> c2 = new Container<>(1000);
Container<Date> c3 = new Container<>(new Date())

အထက#ပ3အတiuင#$ Generics Type eတ&ကiu Object eဆ+က#တ-6 အခ3မH+ Type Parameter eနရ+မH+ ဘ+ Type
ကiu သuB$မလ-ဆiuတ+ကiu သတ#မHတ#eပ$ရပ3တယ#။ အ-6ဒ?လiu သတ#မHတ#eပ$လiuက#တ-6အခ3မH+ Type Parameter Cဖစ#တ-6 T
ဆiuတ-6 eနရ+eတ&အ+$လuB$ကiu Object eဆ+က#တ-6 အခ3မH+ သတ#မHတ#eပ$လiuက#တ-6 Type က အစ+$ထiu$သ&+$မH+ Cဖစ#ပ3
တယ#။

အထက#ပ3နမOန+ထ-ကအတiuင#$ဆiuရင# c1 Object အတ&က# Type Parameter eနရ+မH+ String ကiu eရ$သ+$လiuက#တ-6


အတ&က# c1 Object အတ&က# T လiueရ$ထ+$တ-6 eနရ+တiuင#$ဟ+ String Cဖစ#သ&+$မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6
Constructor ရ-I Argument eနရ+မH+ String Cဖစ#တ-6 “String Data” ကiu အသuB$CပuလiuရမH+ Cဖစ#ပ3တယ#။

အ-6ဒ?လiuပ- Method Argument Cဖစ#တ-6 eနရ+မH+လ- Generics Type ကiu သတ#မHတ# အသuB$CပuAiuင#ပ3တယ#။

static void showContents(Container<String> ... containers) {

for(Container<String> c : containers) {
String data = c.getData();
System.out.printf("Data is %s%n", data);
}
}

အထက#ပ3 နမOန+ထ-က showContents() method ရ-I Argument eနရ+မH+ Container<String> … containers


လiu eရ$သ+$လiuက#တ-6အတ&က# String eတ&ကiuသ+ အသuB$Cပuတ-6 Container Object eတ&Pက?$ အသuB$Cပuလiuရသ&+$ပ3
မယ#။ Kပ?$eတ+6 For Loop ထ-မH+Qiတ-6 Container Object ကလ- String eတ&ကiuသ+ အသuB$CပuAiuင#တ-6 Container
Obeject Cဖစ#သ&+$တ-6 အတ&က# getObject() Method ရ-I Return Type ဟ+လ- String ကလ&-Kပ?$ တစ#Cခ+$Cဖစ#စရ+
အeFက+င#$မQieတ+6ပ3ဘO$။ ဒ36eFက+င#6 ဒ?eနရ+မH+ String အeနန-9 အသuB$CပuAiuင#ဖiu Type Casting လuပ#စရ+မလiueတ+6
ပ3ဘO$။ ဒ?eနရ+က Generics ကiu Java ထ-ကiu ထည#6eခ2လ+ခ-6ရတ-6 အဓiက အခGက#Cဖစ#ပ3တယ#။

ဒ?လiuပ- String Type ကiuသ+ အသuB$Cပuတ-6 showContents() method မH+ Integer ကiu အသuB$Cပuတ-6 c2 တiu Date ကiu
အသuB$Cပuတ-6 c3 တiuကiu အသuB$Cပuလiu မရAiuင#eတ+6ပ3ဘO$။ Generics ဟ+ Type Parameter ကiu အသuB$CပuKပ?$ Object
တစ#ခuခGင#$စ?မH+ အသuB$CပuAiuင#တ-6 Data Type ကiuသတ#မHတ#eပ$Aiuင#ပ3တယ#။ Object eဆ+က#တ-6 အခGiန#မH+ ဘ+ Type
ကiu သuB$မH+လ- ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#Kပ?$ Type Parameter eနရ+ကiu အ-6ဒ? Type က အစ+$ထiu$သ&+$ပ3တယ#။

Learning Java 175 မင#$လ&င#


Java Developer Class
ဒ?eနရ+မH+ Generics ကiu အသuB$Cပuတ-6 အတ&က# eCပ+င#$သ&+$တ-6 အခGက# ၄ ခGက#Qiပ3တယ#။

Generics Type Variable ကiu Declare လuပ#တ-6အခ3မH+ သတ#မHတ#ထ+$တ-6 Type အတiuင#$ Type Parameter
ကiu သတ#မHတ#သ&+$တ-6 အတ&က# Setter eတ&န-9 Constractor eတ&မH+ သတ#မHတ#ခ-6တ-6 Type အCပင# အCခ+$ Type
eတ&ကiu သuB$လiuမရeတ+6ပ3ဘO$။ Container<String> c1 လiueရ$လiuက#တ-6 အတ&က# T QiသမZeနရ+eတ&ဟ+
String Cဖစ#သ&+$ပ3မယ#။


ဒ36eFက+င#6 Constructor ဟ+ Container(String) Cဖစ#သ&+$Kပ?$ String ကလ&-ရင# အCခ+$ Type eတ&ကiu သuB$လiu မ
ရeတ+6ပ3ဘO$။ ဒ?လiuပ- Setter Method Cဖစ#တ-6 setData(String) ရ-I Argument ဟ+လ- String Cဖစ#သ&+$တ-6
အတ&က# String ကလ&-ရင# အCခ+$ Type eတ&ကiu Set လuပ#လiuမရeတ+6ပ3ဘO$။

ဒuတiယအခGက#ကeတ+6 Getter Method eတ&Cဖစ#တ-6 getData() method ရ-I Return Type ဟ+လ- String Cဖစ#
သ&+$ပ3တယ#။ အ-6ဒ?အတ&က# eရ$ထ+$တ-6 Variable ရ-I Return Type ဟ+ သတ#မHတ#Kပ?$သ+$Cဖစ#သ&+$တ-6 အတ&က#
Type Casting eတ&eရ$စရ+မလiueတ+6ပ3ဘO$

တတiယအခGက#က Generics Type eတ&ကiu Argument အeနန-9 အသuB$Cပueနတ-6 Method eတ&၊ Constructor
eတ&မH+လ- သတ#မHတ#ထ+$တ-6 Type ကလ&-ရင# အCခ+$ Type eတ&ကiu အသuB$Cပuတ-6 Object eတ&ကiu အသuB$Cပuလiuရ
eတ+6 မH+မဟuတ#ဘO$။


အထက#ပ3နမOန+ထ-ကလiu showContents(Container<String>) လiu အသuB$CပuAiuင#တ-6 Type ကiu
Container<String> လiueရ$လiuက#တ-6အတ&က# String eတ&ကiu အသuB$Cပueနတ-6 Container eတ&ကလ&-Kပ?$ အCခ+$
Container eတ&ကiu အသuB$Cပuလiu မရeတ+6ပ3ဘO$။ ဒ36eFက+င#6 Integer ကiu အသuB$Cပueနတ-6 c2 Object န-9 Date ကiu
အသuB$Cပuတ-6 c3 Object တiuကiu showContents(Container<String>) method န-9 အသuB$CပuလiuမရAiuင#eတ+6ပ3
ဘO$။

eန+က#ဆuB$အခGက#ကeတ+6 Generics ကiu အသuB$Cပuရတ-6 အဓiက ရည#ရ&ယ#ခGက#Cဖစ#ပ3တယ#။ Generics ကiu


အသuB$Cပuလiuရတ-6 အတ&က# Type Abstraction ကiu Cဖစ#eပ2eစပ3တယ#။ အထက#ပ3 နမOန+ထ-မH+လiu Container
Class လiu တစ#ခ3eရ$လiuက#UuBန-9 အမGiu$မGiu$eသ+ Data Type eတ&န-9 တ&-Kပ?$ အသuB$Cပuသ&+$Aiuင#မH+ Cဖစ#ပ3တယ#။ Kပ?$
eတ+6လ- Type Safe Cဖစ#တ-6 ပuBစBန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

က\န#eတ+#တiu ဆက#လက#Kပ?$ Generics ကiu ဘယ#လiu eရ$လiuရမလ-၊ Kပ?$eတ+6 Generics ကiu အသuB$Cပuတ-6 အတ&က#
eန+က#က&ယ#မH+ ဘယ#လiu အလuပ#လuပ#eနလ- ဆiuတ+ကiu ဆက#Kပ?$ eလ6လ+သ&+$Fကရeအ+င#။

Learning Java 176 မင#$လ&င#


Java Developer Class

Writing Generics
ဒ?eနရ+မH+eတ+6 Generics ကiu ဘယ#လiu eရ$ရမလ-၊ eရ$သ+$ထ+$တ-6 Generics ကiu ဘယ#လiu အသuB$ခGမလ-ဆiuတ+န-9၊
Generics ကiu ဘယ#လiueနရ+eတ&မH+ eရ$သ+$Aiuင#သလ- ဆiuတ-6 အခGက#eတ&ကiu eလ6လ+သ&+$Fကပ3မယ#။

Generics မH+ အဓiက အeရ$ပ3တ+ကeတ+6 Type Parameter ပ3ပ-။ Type Parameter ဆiuတ+ဘ+လ- Kပ?$eတ+6
Type Parameter ကiu ဘယ#လiueရ$ရလ-၊ Kပ?$eတ+6 Type Parameter ကiu ဘယ#လiu Customize လuပ#လiuရလ- ဆiuတ+
ကiu eလ6လ+တ+ဟ+ Generics ကiu eလ6လ+တ+န-9 အတOတOပ3ပ-။

Kပ?$eတ+6မH+ Generics ကiu Cဖစ#eအ+င# Java Ecosystem ရ-Ieန+က#က&ယ#မH+ ဘ+eတ&လuပ#eပ$eနရလ- ဆiuတ+ကiu သi


သ&+$ရင# Generics eတ&ကiu မမH+$ပ- eရ$သ+$Aiuင#မH+ Cဖစ#သလiu၊ Generics eတ&ကiuလ- မHန#မHန#ကန#ကန# အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။

Type Parameter
Type Parameter ကiu <> ထ-မH+ eရ$သ+$ရတ+မHန#eပမ-6 Class eတ& Interface eတ&မH+ eရ$သ+$ပuB eရ$သ+$နည#$န-9
Method eတ&မH+ eရ$သ+$ပuBeရ$သ+$နည#$က မတOပ3ဘO$။ အရင#ဆuB$ Class eတ& Interface eတ&မH+ eရ$သ+$ပuBကeန
စKပ?$ eလ6လ+သ&+$Fကရeအ+င#။

Type Parameter in Interface

public interface Repository<T> {


void insert(T t);
T findById(Object id);
List<T> findAll();
}

အထက#ပ3အတiuင#$ Interface ကiu eရ$သ+$တ-6အခ3မH+ Identifier ရ-I Name ရ-Ieန+က#မH+ <> အတ&င#$မH+ အသuB$Cပuလiu
တ-6 Type Parameter ကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ T က Type Parameter ပ3။ eရ$သ+$ထ+$တ-6 Type
Parameter T ကiu Method Arguments eတ&န-9 Return Type eတ&မH+ အသuB$CပuAiuင#ပ3တယ#။ Type Parameter ကiu
တစ#ခGiueသ+ OOP Programming Language eတ&မH+ Type Template လiuလ-eခ2ဆiueလ6Qiပ3တယ#။ UML
Diagram eတ&မH+ Type Parameter eတ&ကiu Type Template ဆiuKပ?$eရ$သ+$အသuB$CပuFကတ+ကiu eတ&Jရပ3တယ#။

တကယ#လiu Reference Type Variable ကiu Declare လuပ#တ-6အခ3မH အသuB$Cပuမည#6 Type ကiu Type Parameter
eနရ+မH+ သတ#မHတ#eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

အထက#ပ3အတiuင#$ Reference Variable ကiu Declare လuပ#တ-6အခGiန#မH+ Customer Type ကiu Type Parameter
မH+ သတ#မHတ#eရ$သ+$လiuက#တ-6အတ&က# repo.insert() method မH+လ- Customer Object ကiu အသuB$Cပuသ&+$Aiuင#ပ3
တယ#။ Customer Object ကလ&-ရင#လ- အCခ+$ Type eတ&ကiu အသuB$CပuလiuရမH+ မဟuတ#eတ+6ပ3ဘO$။

Learning Java 177 မင#$လ&င#


Java Developer Class

public static void main(String [] args) {

Repository<Customer> repo = ....;

Customer c = new Customer();

// set other members

repo.insert(c);

Customer c1 = repo.findById(1);

List<Customer> list = repo.findAll();

အ-6ဒ?လiuပ- repo.findById() method ရ-I Return Type ဟ+လ- Customer Cဖစ#သ&+$တ-6 အတ&က# Type Cast လuပ#
စရ+မလiueတ+6ပ3ဘO$။ အလ+$တO repo.findAll() method ရ-I Return Type ဟ+လ- List<Customer> Cဖစ#သ&+$တ+
ကiu eတ&Jရပ3တယ#။ ဒ36eFက+င#6 Generics ကiu အသuB$CပuခGင#$အ+$Cဖင#6 Argument eတ&ကiu ကန#9သန#9Aiuင#သလiu၊ Return
Type eတ&ကiuလ- Type Cast လuပ#စရ+မလiueတ+6တ+ကiu eတ&Jရပ3တယ#။

Type Parameter In A Class

Class eတ&မH+ Generics ကiu အသuB$Cပuတ-6 eနရ+မH+ တစ#ခuထ-သ+ Class ထ-မH+ Generics Type အeနန-9 eရ$သ+$
အသuB$Cပuတ+လ-QiAiuင#သလiu Generics Type Class eတ& Generics Type Interface eတ&ကiu Extends ဒ3မHမဟuတ#
Implement လuပ#Kပ?$ eရ$တ-6 အခ3လ-Qiပ3လiမ#6မယ#။

Writing Generics Type Class


Concrete Class eတ&န-9 Abstract Class eတ&မH+ Generics ကiu အသuB$Cပuလiuတ-6အခ3မH+ Interface မH+ eရ$သ+$ခ-6
တuန#$ကလiuပ- Class Name ရ-I eန+က#မH+ <T> လiueရ$သ+$Kပ?$ Type Parameter ကiu အသuB$CပuAiuင#ပ3တယ#။
အသuB$Cပuလiuတ-6အခ3 Reference Variable ကiu Declare လuပ#တ-6အခ3ကGမH Type ကiu သတ#မHတ#eရ$သ+$eပ$ရမH+
Cဖစ#ပ3တယ#။

အ-6ဒ?အခGiန#မH+ eရ$သ+$eပ$လiuက#တ-6 Type က eတ+က#eလG+က# Reference Variable ကeန အသuB$Cပuသ&+$Aiuင#မH+


Cဖစ#ပ3တယ#။ ဥပမ+အ+$Cဖင#6 CustomerRepo<Customer> လiueရ$သ+$လiuက#ရင# အ-6ဒ? Class ထ-မH+ eရ$သ+$
ထ+$တ-6 Type Cဖစ#တ-6 Customer Type က Type Parameter Cဖစ#တ-6 T Qiတ-6 eနရ+eတ&ကiu အစ+$ထiu$သ&+$မH+ Cဖစ#
ပ3တယ#။

Constructor Argument မH+ရ-Iတ-6 Type eက+ Method Argument eနရ+မH+Qiတ-6 Type eတ&ပ3 Customer Cဖစ#
သ&+$တ-6အတ&က# Customer ကလ&-Kပ?$ အ-6ဒ? Object န-9 အသuB$CပuလiuရမH+ မဟuတ#eတ+6ပ3ဘO$။ ဒ?လiuပ- Method Return
Type မH+ သuB$ထ+$တ-6 Type ဟ+လ- Customer Cဖစ#သ&+$တ-6 အတ&က# တစ#Cခ+$ Type eတ&အeနန-9 Cast လuပ#စရ+မ
လiueတ+6ပ3ဘO$။

Learning Java 178 မင#$လ&င#


Java Developer Class

public class CustomerRepo<T> {

private List<T> list;

public CustomerRepo(T ... data) {


// codes
}

public T findById(int id) {


return null;
}

public void add(T t) {


// codes
}
}

Implementing Generics Type Interface


Class တစ#ခuက Generics Type Abstract Class ကiu Extends လuပ#တ-6အခ3၊ ဒ3မHမဟuတ# Generics Type
Interface တစ#ခuကiu Implement လuပ#တ-6အခ3မGiu$မH+ က\န#eတ+#တiuအeနန-9 အeနအထ+$ AHစ#မGiu$ကiu eရ&$ခGယ#
eရ$သ+$Aiuင#ပ3တယ#။ ဒ?eနရ+မH+eတ+6 Generics Type ကiu Implement လuပ#တ-6အခ3မGiu$မH+ ဘယ#လiu လuပ#မလ- ဆiu
တ+ကiu နမOန+အeနန-9 eရ$သ+$သ&+$ပ3မယ#။

e^မH+ eဖ2Cပခ-6တ-6 Repository Interface ကiuပ- နမOန+အeနန-9 အသuB$Cပuသ&+$ပ3မယ#။

public interface Repository<T> {


void insert(T t);
T findById(Object id);
List<T> findAll();
}

Generics Type Interface ကiu Class တစ#ခuက Implement လuပ#eတ+6မယ#ဆiuရင# eရ&$ခGယ#ရမH+က လက#Qi
eရ$သ+$မည#6 Class မH+ Generics ကiu ဆက#ထ+$မလ+$ ဒ3မHမဟuတ# ဒ?eနရ+မH+ Type ကiu သတ#မHတ#သ&+$မလ+$ဆiu
တ+ပ3ပ-။ ပထမဆuB$ Generics ကiu ဆက#Kပ?$သuB$မယ#ဆiuရင# ဘယ#လiu eရ$မယ#ဆiuတ+ကiu eလ6လ+Fကည#6Fကရeအ+င#။
လက#Qieရ$သ+$တ-6 Class ကiu Generics အeနန-9 ဆက#Kပ?$ သuB$လiuတယ#ဆiuရင# Class Name eန+က#မH+ Type
Parameter ကiu ယOKပ?$ Interface Cဖစ#တ-6 eနရ+မH+လ- အ-6ဒ? Type ကiuပ- eရ$သ+$Kပ?$ Class တစ#ခuလuB$မH+ Type
Parameter ကiu အသuB$CပuAiuင#ပ3တယ#။ Reference Variable ကiu eရ$တ-6အခ3ကGမH Type ကiu သတ#မHတ#eပ$ရမH+ပ3။

eန+က#တစ#ခueရ&$ခGယ#စရ+ကeတ+6 လက#Qi Class ကiu eရ$သ+$တ-6 အခ3မH+ Type ကiu သတ#မHတ#လiuရသ&+$Kပ?လ+$ ဆiu
တ-6 အeနအထ+$ပ- Cဖစ#ပ3တယ#။ ဒ3ဆiuရင#eတ+6 လက#Qieရ$သ+$တ-6 Class ကiu Generics အeနန-9 eရ$သ+$စရ+မလiu
eတ+6ပ3ဘO$။

Learning Java 179 မင#$လ&င#


Java Developer Class

public class CustomerRepository implements Repository<Customer>{

@Override
public void insert(Customer t) {
// TODO Auto-generated method stub
}

@Override
public Customer findById(Object id) {
// TODO Auto-generated method stub
return null;
}

@Override
public List<Customer> findAll() {
// TODO Auto-generated method stub
return null;
}
}

အထက#ပ3နမOန+ထ-မH+ CustomerRepository Class ဟ+ Generics Type Cဖစ#တ-6 Repository ကiu Implement


လuပ#ထ+$ပ3တယ#။ ဒ?eနရ+မH+ CustomerRepository ဟ+ Customer Class ကiu သuB$မယ#ဆiuတ+ကiu သတ#မHတ#Kပ?$
သ+$ Cဖစ#eနတ-6 အတ&က# Repository<Customer> လiu eရ$သ+$လiuက#ပ3တယ#။ ဒ36eFက+င#6 Repository Interface
ရ-I T QiသမZeနရ+eတ&အ+$လuB$ကiu Customer က အစ+$ထiu$သ&+$တ+ကiu eတ&Jရပ3တယ#။

public static void main(String[] args) {


CustomerRepository cRepo = new CustomerRepository();
Repository<Customer> repo = cRepo;
}

ဒ?လiueရ$သ+$လiuက#တ-6အတ&က# CustomerRepository Object ကiu CustomerRepository အeနန-9လ- အသuB$CပuAiuင#


သလiu Repository<Customer> အeနန-9လ- အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

eန+က#တစ#မGiu$QiAiuင#တ+က Generics Type Interface လuပ#တ-6 Class မH+ Type ကiu မသတ#မHတ#eသ$Aiuင#တ-6
အeနအထ+$မGiu$ Cဖစ#ပ3တယ#။

public class BaseRepository<T> implements Repository<T> {

// Override methods
}

ဒ?လiuအခ3မGiu$eတ&မH+ ဆiuရင#eတ+6 Class Declaration Cဖစ#တ-6 BaseRepository မH+ Type Parameter Cဖစ#တ-6
<T> ကiu eရ$သ+$Kပ?$ Interface မH+လ- T Type ကiu ဆက#Kပ?$ အသuB$CပuAiuင#ပ3တယ#။

Learning Java 180 မင#$လ&င#


Java Developer Class

Type Parameter in a Method

Generics eတ&ကiu Class eတ&လiu Interface eတ&လiu Type အeနန-9 eရ$သ+$Aiuင#တ-6 eနရ+eတ&မH+လ- eရ$သ+$Aiuင#
သလiu Method eတ&မH+လ- eရ$သ+$Aiuင#ပ3တယ#။ Type eတ&မH+ Generics eတ&ကiu သuB$ထ+$ရင# Generics Type
eတ&လiueခ2ဆiuKပ?$ Method eတ&မH+ Generics eတ&ကiu အသuB$Cပuထ+$ရင# Generics Method eတ&လiu eခ2ဆiueလ6Qiပ3
တယ#။ Static Method eတ&eက+ Instance Method eတ&မH+ပ3 Generics ကiu အသuB$CပuAiuင#ပ3တယ#။

static<T> T hello(T t) {
T local = t;
// other codes
return local;
}

Static Method eတ&မH Generics ကiu အသuB$Cပuမယ#ဆiuရင# static modifier ရ-I အeန+က# Return Type ရ-I အe^မH+
Type Parameter ကiu eရ$သ+$ရပ3မယ#။ Method တစ#ခuမH+ Type Parameter ကiu သတ#မHတ#လiuက#Kပ?ဆiuတ+န-9 အ-6ဒ?
Type Parameter ကiu Methd ရ-I Return Type မH+လ-အသuB$CပuAiuင#သလiu Methd ရ-I Argument eနရ+မH+လ-
အသuB$CပuAiuင#ပ3မယ#။ အ-6ဒ?အCပင# Method ထ-မH+Qiတ-6 Local Variable eတ&ရ-I Type အCဖစ#လ- အသuB$CပuAiuင#ပ3တယ#။

public static void main(String[] args) {


String str = hello("Hello Java");
System.out.println(str);
}

အထက#ပ3အတiuင#$ hello method ကiu Invoke လuပ#တ-6 အခ3မH+ အသuB$Cပuတ-6 Type အတiuင#$ကGန#တ-6 Type eတ&လ-
သတ#မHတ#သ&+$တ+Cဖစ#ပ3တယ#။ ဆက#လက#Kပ?$ Instance Method eတ&မH+လ- Generics ကiu အသuB$CပuFကည#6Fကပ3
မယ#။

public class Demo {

<T> T hello(T t) {
T local = t;
return local;
}

public static void main(String[] args) {


String str = new Demo().hello("Hello Java");
System.out.println(str);
}
}

Instance Method eတ&မH+ဆiuရင#eတ+6 Return Type ရ-I e^မH+ Type Parameter ကiu eရ$သ+$Aiuင#ပ3တယ#။
Instance Method eတ&Cဖစ#တ-6 အတ&က# Object eတ&ကeန အ-6ဒ? Method ကiu eခ2ယOAiuင#မH+Cဖစ#ပ3တယ#။ ကGန#တ+
eတ&ကeတ+6 Static Method eတ&န-9 အတOတOပ- Cဖစ#ပ3တယ#။


Learning Java 181 မင#$လ&င#


Java Developer Class

Multiple Type Parameters


Generics Type eတ& Generics Method eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Type Parameter ကiu တစ#ခuထက#မက
သတ#မHတ# အသuB$CပuလiuရAiuင#ပ3တယ#။ အ-6ဒ?လiuအခ3မGiu$မH+ Type Parameter တစ#ခuန-9 တစ#ခuFက+$မH+ Comma (,) ကiu
ခBKပ?$ eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။ နမOန+အeနန-9 Type A ကiu ယOKပ?$ Type B ကiu eCပ+င#$eပ$Aiuင#တ-6 Converter
Interface ကiu eရ$သ+$Fကည#6ပ3မယ#။

interface Converter<A,B> {
B convert(A a);
}

class IntToStringConverter implements


Converter<Integer, String>() {

@Override
public String convert(Integer a) {
return a.toString();
}
}

အထက#ပ3နမOန+ထ-မH+eတ+6 Converter Interface မH+ <A, B> လiueရ$သ+$ထ+$တ-6 အတ&က# Type Parameter
အeနန-9 A န-9 B ကiu အသuB$Cပuမယ#လiu အဓiပW3ယ#ရပ3တယ#။ တဖန# convert() method ရ-I Return Type eနရ+မH+ B
ကiu အသuB$Cပuထ+$Kပ?$ Argument eနရ+မH+ A ကiu အသuB$Cပuထ+$ပ3တယ#။

ဆက#လက#Kပ?$ IntToStringConverter Class ကeန Converter Interface ကiu Implement လuပ#တ-6 eနရ+မH+
<Integer, String> ဆiuKပ?$ Type eတ&ကiu သတ#မHတ#eပ$ထ+$ပ3တယ#။ ဒ36eFက+င#6 A eနရ+eတ&က Integer Cဖစ#သ&+$
Kပ?$ B eနရ+eတ&က String Cဖစ#သ&+$ပ3တယ#။

တစ#ခuသတiထ+$ဖiuလiuအပ#တ+က Type Parameter eတ&eနရ+မH+ Primitive Type eတ&ကiu eရ$သ+$ အသuB$Cပuလiu မ


ရAiuင#ပ3ဘO$။ ဒ36eFက+င#6 Primitive Type Cဖစ#တ-6 int ကiu မသuB$ပ- Wrapper Type Cဖစ#တ-6 Integer ကiu အသuB$Cပuထ+$
တ+ Cဖစ#ပ3တယ#။

public class ConvertDemo {

public static void main(String[] args) {


Converter<Integer, String> c =
new IntToStringConverter();
String str = c.convert(20);
}
}

ဒ36eFက+င#6 Converter<Integer, String> Type Cဖစ#တ-6 c Reference Variable ကeန IntToStringConverter


Object ကiu Reference လuပ#eနAiuင#တ+ Cဖစ#ပ3တယ#။ 


Learning Java 182 မင#$လ&င#


Java Developer Class

Bounded Type in Writing Generics


Generics အeFက+င#$ကiu eလ6လ+တ-6 eနရ+မH+ Generics eတ&ကiu eရ$သ+$တ-6 အပiuင#$န-9 Generics eတ&ကiu
အသuB$CပuKပ?$ eရ$သ+$ထ+$တ-6 API eတ&ကiu အသuB$Cပuတ-6 အပiuင#$ဆiuKပ?$ Qiပ3တယ#။ Java ကiu စတင#eလ6လ+သOeတ&
အeနန-9 Generics eတ&ကiu ဘယ#လiu eရ$မယ#ဆiuတ+ထက# ဘယ#လiuသuB$မယ#ဆiuတ+ကiu သiရင#လuBeလ+က#ပ3တယ#။
က\န#eတ+# e^မH+ eရ$သ+$ခ-6တ-6 အပiuင#$eတ&က Generics eတ&ကiu ဘယ#လiueရ$မလ- ဆiuတ-6 အပiuင#$Cဖစ#ပ3တယ#။

က\န#eတ+#တiu Generics eတ&မH+ အသuB$Cပuတ-6 Type Parameter eတ&ကiu ဘယ#လiueရ$မယ#ဆiuတ+ကiu သiသ&+$Kပ?$တ-6


eန+က#မH+ Type Parameter eတ&မH+ အစ+$ထiu$အသuB$CပuAiuင#တ-6 Type eတ&ကiu ဘယ#လiu ကန#9သတ#မယ#ဆiuတ-6 အပiuင#$
ကiu ဆက#Kပ?$ eလ6လ+သ&+$Fကရeအ+င#။

Generics Type eတ& Generics Method eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Type Parameter eတ&ကiu အသuB$CပuAiuင#ပ3
တယ#။ ဒ3eပမ-6 ဘယ#လiu Type eတ&ပ- အသuB$CပuAiuင#တယ#ဆiuတ+ကiu သတ#မHတ#မထ+$ခ-6ပ3ဘO$။ ဒ36eFက+င#6 က\န#eတ+#တiu
eရ$ထ+$တ-6 Generics Type eတ&မH+ Pကiuက#တ-6 Type ကiu အသuB$CပuKပ?$eရ$သ+$eနAiuင#မH+ Cဖစ#ပ3တယ#။

ဆiuFကပ3စiu က\န#eတ+#တiuက Database Operation eတ&ကiu Generics အeနန-9 eရ$သ+$ခGင#တယ#။ ဘ+လiuလ-ဆiu


eတ+6 Database Operation eတ&ဟ+ အeCခခBအ+$Cဖင#6 လuပ#eဆ+င#မ[eတ&တOည?Kပ?$ အသuB$Cပueနတ-6 Data Type
eတ&ပ- မတOFကတ+ပ3။ Database အသuB$CပuပuBဆiuလiuကeတ+6 CRUD ဆiuတ-6 Create, Reference, Update န-9
Delete eတ&ပ-မG+$ပ3တယ#။ မတOတ+ကeတ+6 Table eတ&ပ- Cဖစ#ပ3မယ#။ အ-6ဒ3eတ&ကiu အသuB$Cပuဖiu Interface တစ#ခuကiu
eရ$ခGင#တယ#ဆiuရင# ဒ?လiu eရ$ရမယ#ထင#ပ3တယ#။

public interface Repository<T> {


void insert(T t);
T findById(Object id);
List<T> getAll();
int update(T t);
int delete(T t);
}

ဟuတ#Kပ?။ အထက#ပ3အတiuင#$ Repository ဆiuတ+ကeတ+6 Database ထ-က Table eတ&ရ-I CURD Operation ကiu
eဆ+င#ရ&က#eပ$Aiuင#တ-6 Interface ကiu သတ#မHတ#eပ$ထ+$တ+ပ- Cဖစ#ပ3တယ#။ ဒ?eနရ+မH+ Type Parameter ကiu T လiu
သတ#မHတ#ထ+$တ-6 အတ&က# က\န#eတ+#တiueတ&က Repository ကiu Type အ+$လuB$န-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6ဗG+။ eသeသCခ+Cခ+စT#$စ+$Fကည#6ရင# ဒ? Repository eတ&န-9 အသuB$CပueစခGင#တ+က Database ထ-က Table


eတ&ကiu ကiuယ#စ+$Cပuတ-6 Java Class eတ&ပ- အသuB$CပueစခGင#တ+ပ3။ Repository န-9 Date eတ&၊ String eတ&
Interger eတ&ကiu မသuB$eစခGင#ပ3ဘO$။ ဒ?လiueနရ+မGiu$မH+ Bounded Type ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Bounded Type ဆiuတ+ကeတ+6 Type Parameter eတ&ကiu ဘယ#အထiသuB$Aiuင#တယ#ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ-6


eရ$သ+$ပuBeရ$သ+$နည#$ပ-Cဖစ#ပ3တယ#။ Type Parameter eတ&eနရ+မH+ အCမင#6ဆuB$ဘယ#အထi အသuB$CပuAiuင#တယ#၊
Kပ?$eတ+6 အနiမ#6ဆuB$ဒ?eလ+က#ကမH စKပ?$ အသuB$CပuAiuင#လiမ#6မယ#ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ-6 eရ$သ+$ပuBeရ$သ+$
နည#$eတ& Cဖစ#ပ3တယ#။ Type Parameter eတ&ရ-I eနရ+မH+ အCမင#6ဆuB$ ဘယ#eလ+က#အထieရ$သ+$ အသuB$CပuAiuင#
တယ#ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ+ကeတ+6 Upper Bounded Cဖစ#Kပ?$ ဒ?eလ+က#မHမQiရင#eတ+6 အသuB$Cပuလiuမရပ3
ဘO$ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ+ကeတ+6 Lower Bounded Cဖစဒ#ပ3တယ#။

Generics eတ&ကiu eရ$သ+$တ-6eနရ+မH+eတ+6 Upper Bounded တစ#မGiu$ထ-ကiuသ+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။


က\န#eတ+#တiu ဆက#လက#Kပ?$ Upper Bounded eတ&ကiu လက#Qieရ$သ+$ထ+$တ-6 Interface မH+ အသuB$Cပuလiuရမယ#၊
Kပ?$eတ+6 အသuB$Cပuတ-6 အတ&က# ဘယ#လiu အကGiu$Qiသ&+$တယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

Learning Java 183 မင#$လ&င#


Java Developer Class
က\န#eတ+#တiu POS အeရ+င#$ System တစ#ခuကiu eရ$သ+$eနFကတယ#ဆiuFကပ3စiu။ က\န#eတ+#တiu အသuB$Cပuမည#6
Database System ရ-I ERD က eအ+က#ပ3အတiuင#$Cဖစ#eနပ3တယ#။

ဒ36eFက+င#6 Repository Interface ကeန အသuB$CပuခGင#တ+ကလ- အ-6ဒ? Data eတ&ပ- Cဖစ#ပ3တယ#။ ဒ3ဆiuရင# က\န#eတ+#
တiu ဘယ#လiu လuပ#Fကမလ-။ ဘယ#လiu Class eတ&ကiu eရ$Fကမလ- ဆiuတ+ကiu Class Diagram န-9 eလ6လ+Fကည#6Fက
ရeအ+င#။

အထက#ပ3အတiuင#$ Table eတ&ကiu ကiuယ#စ+$Cပuတ-6 Class eတ&ကiu eရ$သ+$မH+ Cဖစ#ပ3တယ#။

Learning Java 184 မင#$လ&င#


Java Developer Class
ဒ?eနရ+မH+ Cပန#Kပ?$ စT#$စ+$Fကည#6Fကရeအ+င#။ က\န#eတ+#တiu eရ$ခ-6တ-6 Repository ဆiuတ+က Database ထ-က
Table ထ-က Data eတ&ကiu CRUD လuပ#ခGင#UuBသက#သက#ပ-။ Table မဟuတ#တ-6 Data eတ&န-9 လ+သuB$eနရင# အခက#
eတ&Jပ3မယ#။ ဒ3ဆiuရင# က\န#eတ+#တiu ဘယ#လiu လuပ#Fကမလ-။

က\န#eတ+#တiu Database ထ-က Table eတ&ကiu ကiuယ#စ+$Cပuတ-6 Class ကiu သတ#မHတ#နiင#ရင# Kပ?$တ+ပ3ပ-။ အ-6ဒ? Type
န-9 အ-6ဒ? Type ရ-I Sub Class eတ&သ+ အသuB$CပuAiuင#တ-6 Generics Type ကiu က\န#eတ+#တiu Bounded Type ကiu
အသuB$CပuKပ?$ သတ#မHတ#Aiuင#ပ3တယ#$

ဒ3ကQင#$ပ3တယ#။ က\န#eတ+#တiu OOP အခန#$မH+ကထ-က eလ6လ+Kပ?$သ+$ပ3။ Class eတ&ကiu အuပ#စuဖ&-Kပ?$ အသuB$Cပuဖiu


အတ&က# Abstraction ကiu အသuB$Cပuလiu ရAiuင#ပ3တယ#။ Abstraction ကiu သuB$ရင# IS A Relationship ကiu Cဖစ#eပ2eစ
Kပ?$ Class eတ&ကiu တOရ+စuKပ?$ အသuB$CပuAiuင#မH+Cဖစ#ပ3တယ#။ Abstraction ကiuCဖစ#ဖiu Abstract Class eတ&န-9လ-
eရ$သ+$Aiuင#သလiu Interface ကiu အသuB$CပuKပ?$လ- eရ$သ+$Aiuင#ပ3တယ#။ Abstract Class ကiu သuB$သင#6သလ+$
Interface ကiu သuB$သင#6သလ+$ဆiuတ+ကeတ+6 OOP ရ-I Abstraction အခန#$မH+ အeသ$စiတ# eဖ2CပKပ?$ Cဖစ#ပ3တယ#။
ဒ?eနရ+မHeတ+6 Interface ကiuပ- Marker Interface အeနန-9 အသuB$Cပuသ&+$ပ3မယ#။

ဒ?eနရ+မH+ Table ဆiuတ-6 Interface ကiu ဘ+ Method မHမပ3ပ-eရ$သ+$ပ3မယ#။ Kပ?$eတ+6မH Category, Item, Sale န-9
SaleDetails Class eတ&ကeန Implement လuပ#ပ3မယ#။ Class တစ#ခuဟ+ Interface ကiu Implement လuပ#လiuက#
Cခင#$အ+$Cဖင#6 Class န-9 Interface Fက+$မH+ IS - A Relationship ကiu Cဖစ#eပ2eစပ3တယ#။

Category က Table ကiu Implement လuပ#လiuက#Cခင#$အ+$Cဖင#6 Category ကiu Table အeနန-9 အသuB$Cပuသ&+$Aiuင#ပ3
တယ#။ က\န#eတ+#တiu eရ$သ+$ထ+$တ-6 Repository က Database Operation eတ&ကiu လuပ#Aiuင#တ-6 Class eတ&ကiu
ပ- အသuB$CပuခGင#တယ#။ Table ဆiuတ-6 Interface ကလ- Database ထ-က Table eတ&ကiuပ- ကiuယ#စ+$Cပuပ3တယ#။

ဒ?လiuအeနအထ+$မGiu$မH+လ- Interface ကiu အသuB$CပuAiuင#တယ#။ Serializable လiu Marker Interface လiuမGiu$ Table
Interface ကiu Implement လuပ#ထ+$တ-6 Class မHန#သမZကiu Database ထ-က Table ကiu ကiuယ#စ+$CပuAiuင#တ-6 Class
eတ&Cဖစ#eFက+င#$ သတ#မHတ#eပ$Aiuင#ပ3တယ#။ ဘယ# Class eတ&ဟ+ Table eတ&ကiu ကiuယ#စ+$CပuAiuင#တယ#ဆiuတ+ကiu
သတ#မHတ#Kပ?$ရင# Repository ကiu ဒ? Class eတ&ကiuသ+သuB$Aiuင#တ-6 Interface Cဖစ#eအ+င# eရ$eပ$UuBပ3ပ-။

Learning Java 185 မင#$လ&င#


Java Developer Class

import java.util.*;

interface Table {}

public interface Repository<T extends Table> {


void insert(T t);
T findById(Object id);
List<T> getAll();
int update(T t);
int delete(T t);
}

အထက#ပ3 နမOန+ထ-က Repository ဟ+ Bounded Type ကiu အသuB$Cပuထ+$ပ3တယ#။ e^မH+ eဖ2Cပထ+$သလiuပ3ပ-၊


Generics Type ကiu eရ$သ+$တ-6 eနရ+မH+ အမG+$ဆuB$ ဘယ# Type အထiအသuB$CပuAiuင#တယ#ဆiuတ-6 Upper Bounded
ကiu သ+ အသuB$CပuAiuင#တ+ပ- Cဖစ#ပ3တယ#။ အ-6ဒ3ကiu Type ကiu Declare လuပ#တ-6 eနရ+မH+ extends keyword ကiu
အသuB$CပuKပ?$ အCမင#6ဆuB$ အသuB$CပuAiuင#တ-6 Type ကiu eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

Type Parameter ကiu eရ$သ+$တ-6 eနရ+မH+ T extends Table လiu eရ$သ+$ထ+$တ-6 အတ&က# Repository ကiu
အသuB$Cပueရ$သ+$တ-6 eနရ+မH+ Table န-9 IS - A Relationship Qiတ-6 Type eတ&ကiuပ- အသuB$Cပuလiuရeတ+6မH+ Cဖစ#ပ3
တယ#။

အထက#ပ3အတiuင#$ Upper Bounded ကiu eရ$သ+$လiuက#တ-6 အတ&က# Table Interface ကiu Implement လuပ#ထ+$
တ-6 Category, Item, Sale န-9 SaleDetails Class eတ&ကiuသ+ Repository န-9တ&-ဖက# အသuB$Cပuလiuရeတ+6မH+ Cဖစ#ပ3
တယ#။ Table မဟuတ#တ-6 အCခ+$ Class eတ&ကiu eရ$သ+$မယ#ဆiuရင#eတ+6 Compile Time မH+တင# Error ကiu Cဖစ#
eပ2eစမH+ Cဖစ#ပ3တယ#။ ဒ?လiuနည#$န-9 Upper Bounded ကiu အသuB$CပuKပ?$ အCမင#6ဆuB$အသuB$CပuAiuင#တ-6 Type ကiu
သတ#မHတ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

Using Generics Type Objects


Generics န-9ပတ#သက#Kပ?$ Generics Type eတ&ကiu ဘယ#လiueရ$ရမယ#ဆiuတ+ကiu e^မH+ eလ6လ+ခ-6Fကပ3တယ#။
ဆက#လက#Kပ?$ eရ$သ+$ထ+$တ-6 Generics Type eတ&ကiu ဘယ#လiu အသuB$Cပuမယ#ဆiuတ+ကiu ဆက#လက#Kပ?$eလ6လ+
သ&+$Fကည#6Fကရeအ+င#။

class Container<T> {
T data;

public void setData(T t) {


this.data = t;
}

public T getData() {
return data;
}
}

Learning Java 186 မင#$လ&င#


Java Developer Class
အထက#ပ3အတiuင#$ Container Class ကiueရ$သ+$ထ+$တ-6အခ3မGiu$မH+ Container Object ကiu eရ$သ+$eတ+6မယ#ဆiu
ရင# အသuB$Cပuမည#6 Type ကiu သတ#မHတ#eရ$သ+$eပ$ရပ3eတ+6မယ#။

public static void main(String[] args) {


// Before Java SE 7
Container<String> c1 = new Container<String>();

// After Java SE 7
Container<String> c2 = new Container<>();
}

Reference Variable ကiu Declare လuပ#တ-6eနရ+မH+ Type ကiu သတ#မHတ#eပ$ရမH+ Cဖစ#ပ3တယ#။ Object eဆ+က#
တ-6eနရ+မH+ ဆiuရင#eတ+6 Java SE 7 မတiuင#ခင#တuန#$ကeတ+6 Reference Variable မH+ သတ#မHတ#ခ-6တ-6 Type ကiu
Cပန#Kပ?$ eရ$သ+$eနရပ3တယ#။ ဒ3eပမ-6 Java SE 7 ကiueရ+က#တ-6အခ3မH+ Diamond ဆiuတ-6 eရ$သ+$ပuBအသစ#
eပ2eပ3က#လ+Kပ?$ Constructor ကiu eခ2တ-6eနရ+မH+ Type ကiu eရ$စရ+မလiuပ- <> လiu eရ$သ+$Aiuင#လ+ပ3တယ#။

Wildcards
Generics Type Variable eတ&ကiueရ$သ+$တ-6 eနရ+မH+ Type eတ&ကiu သတ#မHတ#လiu မရAiuင#eသ$ဘO$ဆiuရင#
Wildcard Keyword Cဖစ#တ-6 ? ကiu အသuB$CပuAiuင#ပ3တယ#။ Object eဆ+က#တ+ကeတ+6 အသuB$Cပuမည#6 Type ကiu eပ$
Kပ?$ တည#eဆ+က#လiuရAiuင#သလiu Java 7 ရ-I Diamond ပuBစBန-9လ- တည#eဆ+က#လiu ရAiuင#ပ3တယ#။

public static void main(String[] args) {


// Using Wildcard
Container<?> c1 = new Container<String>();

// Java 7 Diamond Style


Container<?> c2 = new Container<>();
}

eန+က#Kပ?$ Wildcard န-9 eရ$သ+$ထ+$တ-6 Generics Type Reference eတ&ဟ+ Type ကiuမသiတ-6 အတ&က# Set
လuပ#တ-6eနရ+မH+န-9 Get လuပ#တ-6eနရ+မH+ ဘ+ Type Cဖစ#eနတယ#ဆiuတ+ကiuလ- ခ&-Cခ+$သiAiuင#မH+ မဟuတ#ပ3ဘO$။

public static void main(String[] args) {

Container<?> c = new Container<>();


// compile error
c.setData("Hello Java"); Error

// compile error
String s = c.getData(); Error
}

Learning Java 187 မင#$လ&င#


Java Developer Class

Bounded in Wildcards
Wildcard ကiueရ$သ+$တ-6eနရ+မH+လ- Bounded Type eတ&ကiu eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။ Wildcard eတ&ရ-I
eန+က#မH+ extends ကiu eရ$Kပ?$ Upper Bounded ကiu eရ$သ+$Aiuင#သလiu super ကiu eရ$Kပ?$ Lower Bounded eတ&
ကiu eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

class A {}
class B extends A {}
class C extends B {}

class Container<T> {
T data;

public void setData(T data) {


this.data = data;
}

public T getData() {
return data;
}
}

အထက#ပ3အတiuင#$ Class A ကiu Class B က Extends လuပ#ထ+$Kပ?$ Class B ကiu Class C က Extends လuပ#ထ+$
ပ3တယ#။ Kပ?$eတ+6 Generics ကiu အသuB$Cပuထ+$တ-6 Container Class Qiပ3တယ#။

Upper Bounded Wildcard

Generics Type eတ&ကiu Declare လuပ#တ-6 eနရ+မH+ Wildcard ကiu အသuB$CပuAiuင#Kပ?$ extends keyword ကiu
အသuB$CပuKပ?$ Upper Bound eတ&ကiu သတ#မHတ#Aiuင#ပ3တယ#။

static void useUpper(Container<? extends B> container) {


B b = container.getData();
}

public static void main(String[] args) {

Container<B> bContainer = new Container<>();


bContainer.setData(new B());
useUpper(bContainer);

Container<C> cContainer = new Container<>();


cContainer.setData(new C());
useUpper(cContainer);
}

Learning Java 188 မင#$လ&င#


Java Developer Class
အထက#ပ3နမOန+ထ-မH+ Container<? extends B> လiueရ$သ+$ထ+$တ-6 အတ&က# Wildcard မH+ Upper Bound ကiu
အသuB$Cပuထ+$ပ3တယ#။ ဒ?လiueရ$သ+$ထ+$တ-6 အတ&က# useUpper() method ရ-I Parameter eနရ+မH+ B ဒ3မH
မဟuတ# B ရ-I Sub Class eတ&ကiu အသuB$Cပuထ+$တ-6 Container eတ&ကiu အသuB$CပuAiuင#တ+ကiu eတ&Jရပ3တယ#။

ဒ?လiuပ- useUpper() method ထ-မH+ container ကeနတဆင#6 getData() method ကiu Cပန#eခ2သuB$တ-6အခ3မH+လ-
Type B ကiu Cပန#လည#ရQiမH+ Cဖစ#ပ3တယ#။ တဖန# B ကiu အစ+$ထiu$Kပ?$ အသuB$CပuAiuင#တ-6 A အeနန-9လ- လက#ခB ရယOAiuင#
မH+ Cဖစ#ပ3တယ#။ Wildcard Upper Bounded ကiu အသuB$Cပuတ-6eနရ+မH+ မရတ+eတ&လ-တယ#။

ပထမအခGက#ကeတ+6 Upper Bounded Wildcard ကiu အသuB$Cပuထ+$တ-6 Reference ကeန Type eတ&ကiu
Return အeနန-9 ရယOတ-6 အခ3မH+ Bounded လuပ#ထ+$တ-6 Type ကiuသ+ ရယOAiuင#မH+ Cဖစ#ပ3တယ#။ Sub Type eတ&ကiu
eတ+6 Return အeနန-9 လက#ခBAiuင#မH+ မဟuတ#ပ3ဘO$။ container.getData() ရ-I တန#ဖiu$ကiu C မH+ အစ+$ထiu$လiuမရပ3
ဘO$။ B န-9 A အeနန-9ပ-လက#ခBAiuင#မH+ Cဖစ#ပ3တယ#။

ဒuတiယ အခGက#ကeတ+6 Upper Bounded Wildcard ကiu အသuB$Cပuထ+$တ-6 Reference ကeန တန#ဖiu$eတ&ကiu Set
လuပ#eပ$လiu မရAiuင#ပ3ဘO$။ contaiener.setData() method ကeန ဘယ#လiu Type မGiu$ကiuမH Set လuပ#Aiuင#မH+ မဟuတ#
ပ3ဘO$။ Upper Bounded Wildcard ရ-I Reference eတ&ဟ+ တန#ဖiu$eတ&ကiu ထuတ#ယOတ-6 eနရ+မH+ပ- အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။

Lower Bounded Wildcard

Lower Bounded eတ&ကiu eရ$သ+$လiuတ-6 အခ3မGiu$မH+ super Keyword ကiu အသuB$Cပueရ$သ+$Aiuင#ပ3တယ#။

static void useLower(Container<? super B> container) {


container.setData(new B());
}

public static void main(String[] args) {

Container<A> aContainer = new Container<>();


Container<B> bContainer = new Container<>();

useLower(aContainer);
useLower(bContainer);
}

အထက#ပ3 နမOန+ထ-က useLower() method ရ-I Parameter မH+ Container<? super B> လiueရ$သ+$ထ+$တ-6
အတ&က# Lower Bounded ကiu အသuB$Cပuထ+$တ+ပ3။ အ-6ဒ?အတ&က# useLower() method ကiu အသuB$Cပuတ-6 eနရ+မH+
B Type ကiu အသuB$Cပuထ+$တ-6 Container န-9 B ရ-I Super Type eတ&ကiu အသuB$Cပuထ+$တ-6 Container eတ&ကiu
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ B ရ-I Sub Type Cဖစ#တ-6 A ရ-I Container eတ&ကiu အသuB$Cပuလiu ရeတ+6မH+ မဟuတ#ပ3ဘO$။

တဖန# Lower Bounded Wildcard ကiu အသuB$Cပuထ+$တ-6 Reference eတ&ကeနလ- Input eတ&ကiuပ- လက#ခBAiuင#မH+
Cဖစ#Kပ?$ Output eတ&ကiueတ+6 သတ#မHတ#eပ$Aiuင#မH+ မဟuတ#eတ+6ပ3ဘO$။ Set လuပ#တ-6eနရ+မH+လ- B Type အeနန-9
အသuB$CပuAiuင#တ-6 Type eတ&ကiuသ+ Set လuပ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။ အ-6ဒ?အတ&က# B န-9 C Type eတ&ကiueတ+6 Set
လuပ#Aiuင#မH+ Cဖစ#Kပ?$ B ရ-I Super Cဖစ#တ-6 A ကiueတ+6 Set လuပ#လiu မရAiuင#ပ3ဘO$။ Lower Bounded Wildcard ကiu
အသuB$Cပuထ+$တ-6 Reference eတ&ကeန Getter eတ&ကeန Type ကiuသတ#မHတ#eပ$လiu မရeတ+6တ-6 အတ&က#
လက#ခBမယ#ဆiuရင#eတ+6 Object အeနန-9ပ- လက#ခBAiuင#မH+ Cဖစ#ပ3တယ#။
Learning Java 189 မင#$လ&င#
Java Developer Class

Sub Typing of Generics


OOP အခန#$မH+ Inheritance eတ& Abstraction eတ&ကiu eလ6လ+ခ-6စT#က IS - A Relationship eFက+င#6 Sub
Class eတ&ကiu Super Class အeနန-9 အသuB$CပuAiuင#တယ#ဆiuတ+ကiu eတ&Jရပ3တယ#။

အထက#eဖ2Cပပ3 ပuBအတiuင#$ B က A ကiu Extends လuပ#Kပ?$ C က A ကiu Extends လuပ#ထ+$တ-6 အတ&က# B န-9 C ကiu A
အeနန-9 အသuB$CပuAiuင#သလiu C ကiuလ- B အeနန-9 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6 Generics Type eတ&ကiu အသuB$Cပuတ-6အခ3မH+eတ+6 Type eတ&ရ-I IS - A Relationship ဟ+ Generics


Type eတ&ရ-I IS - A Relationship Cဖစ#မလ+ပ3ဘO$။ B ကiu အသuB$Cပuတ-6 Container ဟ+ A ကiu အသuB$Cပuတ-6
Container ရ-I Sub Type Cဖစ#မလ+ပ3ဘO$။

Container<A> န-9 Container<B> အFက+$မH+ IS - A Relationship ကiu မCဖစ#eပ2eစပ3ဘO$။ ဒ36eFက+င#6 a ရ-Ieနရ+


မH+ b ကiu အစ+$ထiu$Kပ?$ eရ$သ+$လiu မရAiuင#ပ3ဘO$။ Variable a ဟ+ A ကiu အသuB$CပuAiuင#တ-6 Container Cဖစ#Kပ?$
Variable b ဟ+ B ကiu အသuB$Cပuလiuရတ-6 Container သ+ Cဖစ#ပ3မယ#။

ဒ3eပမ-6 Generics Type eတ&အခGင#$ခGင#$Fက+$မH+eတ+6 IS - A Relationship ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ဆiu


Fကပ3စiu Generics Type Cဖစ#တ-6 Box ဆiuတ-6 Class ကiu eရ$သ+$ထ+$မယ#။ Kပ?$ရင# Generics Type ကiu အသuB$Cပuတ-6
Container Class ကiu eရ$သ+$ထ+$ပ3မယ#။ အ-ဒ?eနရ+မH+ Container<T> ကeန Box<T> ကiu Extends လuပ#
လiuက#မယ#ဆiuရင# Container န-9 Box အFက+$မH+ Is - A Relationship ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

Learning Java 190 မင#$လ&င#


Java Developer Class

ဒ?လiuအeနအထ+$မGiu$မH+ A Type eတ&ကiu အသuB$Cပueရ$သ+$ထ+$တ-6 Box eတ&eနရ+ကiu A Type eတ&ကiu အသuB$CပuKပ?$


eရ$သ+$ထ+$တ-6 Container eတ&က အစ+$ထiu$Kပ?$ အသuB$Cပuလ+Aiuင#ပ3မယ#။

ဒ3eပမ-6 A Type eတ&ကiu အသuB$Cပuထ+$တ-6 Box ရ-Ieနရ+မH+ B Type ကiu အသuB$Cပuထ+$တ-6 Container ကiu eတ+6
အစ+$ထiu$လiu ရAiuင#မH+ မဟuတ#ပ3ဘO$။

ဒ?လiueနရ+မGiu$မH+ Wildcards eတ&ကiu အသuB$CပuKပ?$ eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Wildcard ကiu အသuB$Cပuထ+$တ-6 Container eနရ+မH+ မည#သည#6 Type မGiu$ကiu အသuB$Cပuထ+$တ-6 Container Object
ကiu အစ+$ထiu$အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ တဖန# Upper Bounded Wildcard ကiu အသuB$Cပuထ+$တ-6 Container ရ-I
eနရ+မH+ Bounded လuပ#ထ+$တ-6 Type န-9 သbရ-I Sub Type eတ&ကiu အသuB$Cပuထ+$တ-6 Container eတ&ကiu အစ+$ထiu$
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ဒ?လiuပ- Lower Bounded Wildcard ကiu အသuB$CပuKပ?$ eရ$သ+$ထ+$တ-6 Container ရ-I
eနရ+မH+ Bounded Type န-9 သbရ-I Super Type eတ&ကiu အသuB$Cပuထ+$တ-6 Container eတ&ကiu အသuB$CပuAiuင#မH+ Cဖစ#
ပ3တယ#။

Learning Java 191 မင#$လ&င#


Java Developer Class

How Generics Work!


Generics ကiu အသuB$CပuCခင#$အ+$Cဖင#6 မiမieရ$သ+$ထ+$တ-6 Class တစ#ခuကiu အမGi$မGiu$eသ+ Data eတ&ကiu အသuB$Cပu
Aiuင#တ-6 Object eတ&ကiu တည#eဆ+က#Aiuင#တယ#ဆiuတ+ကiu သiCမင#Aiuင#ပ3တယ#။ Kပ?$eတ+6လ- Generics ကiu အသuB$Cပuတ-6
အတ&က# Method eတ&န-9 Conctructor ရ-I Argument eတ&ရ-I Type ကiu သတ#မHတ#Aiuင#Cခင#$အ+$Cဖင#6 Method eတ&ရ-I
Return Type ကiu သတ#မHတ#eပ$Aiuင#Kပ?$ Type Safe Cဖစ#တ-6 ပuBစBန-9 မiမiရ-I Program eတ&ကiu eရ$သ+$Aiuင#မH+ Cဖစ#ပ3
တယ#။

ဒ?eနရ+မH+eတ+6 Generics ဟ+ eန+က#က&ယ#မH+ ဘယ#လiu အလuပ#လuပ#eနတယ#ဆiuတ+ကiu eလ6လ+Fကည#6Fက


ရeအ+င#။

public class Container<T> {


T data;

public void setData(T data) {


this.data = data;
}

public T getData() {
return data;
}
}

အထက#ပ3 Code eတ&ကiu Compile လuပ#လiuရလ+တ-6 Class eတ&ကiu Decompile လuပ#Fကည#6တ-6အခ3မH+ eအ+က#ပ3
အတiuင#$ eတ&JQiရမH+ Cဖစ#ပ3တယ#။

public class Container {

Object data;

public Container(){}

public void setData(Object obj){


data = obj;
}

public Object getData(){


return data;
}
}

Container Class မH+eရ$သ+$ထ+$တ-6 Type Parameter eတ&ဟ+ Compile လuပ#လiuရလ+တ-6 Class eတ&မH+ ပ3မ
လ+eတ+6သလiu Type Parameter eတ&ရ-I eနရ+မH+လ- Object eတ& အစ+$ထiu$ဝင#eရ+က#သ&+$တ+ကiu eတ&Jရပ3
တယ#။ ဒ3ကiu Fကည#6Cခင#$အ+$Cဖင#6 Generics ဟ+ Compile Time မH+ စစ#eဆ$eပ$eနတယ#ဆiuတ+ကiu သiCမင#Aiuင#ပ3
တယ#။ Compile လuပ#လiuက#တ-6 အခ3မH+eတ+6 နဂiuမOလ Type eတ&အCဖစ#Cပန#eရ+က#သ&+$တ+ကiu eတ&Jရပ3တယ#။

Learning Java 192 မင#$လ&င#


Java Developer Class
ဒ?လiuမGiu$ Generics ရ-I Type Parameter eတ&ကiu Raw Type eတ&အCဖစ#eCပ+င#$လ-eပ$Aiuင#တ-6 Process ကiu Type
Erasure လiueခ2ဆiuပ3တယ#။ ဆက#လက#Kပ?$ Bounded Type ကiu အသuB$CပuKပ?$ eရ$သ+$ထ+$တ-6 Generics Type
eတ&မH+eက+ Type Erasure က ဘယ#လiu အလuပ#လuပ#eပ$သ&+$တယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

public class Container<T extends Number> {


T data;

public void setData(T data) {


this.data = data;
}

public T getData() {
return data;
}
}

အထက#ပ3နမOန+မH+eတ+6 Container Class ရ-I Type Parameter ကiu <T extends Number> လiueရ$သ+$ထ+$
တ-6 အတ&က# Number န-9 Number ရ-I Sub Class eတ&ကiu Type Parameter eတ&eနရ+မH+ အစ+$ထiu$အသuB$Cပuလiu
ရမH+ Cဖစ#ပ3တယ#။

public class Container {


Number data;

public Container() {}

public void setData(Number number) {


data = number;
}

public Number getData() {


return data;
}
}

Reverse Engineering န-9 Compile လuပ#လiuရလ+တ-6 Class eတ&ကiu Decompile လuပ#Fကည#6တ-6 အခ3မH+eတ+6
Type Parameter eတ&ဟ+ Bounded လuပ#ထ+$တ-6 Type Cဖစ#တ-6 Number eတ&အCဖစ#eCပ+င#$လ-သ&+$တ+ကiu eတ&J
ရမH+ Cဖစ#ပ3တယ#။

ဒ3ကiu Fကည#6Cခင#$အ+$Cဖင#6 Type Erasure ဟ+ Type Parameter eတ&ကiu Compile လuပ#တ-6အခ3မH+ Upper
Bounded န-9 eရ$သ+$ထ+$ရင# Bounded လuပ#ထ+$တ-6 Type အCဖစ#eCပ+င#$eပ$Kပ?$ Bounded မလuပ#ထ+$ဘO$ဆiuပ3
က အCမင#6ဆuB$ Type Cဖစ#တ-6 Object အCဖစ#eCပ+င#$eပ$တယ#ဆiuတ+ကiu eတ&JရမH+ Cဖစ#ပ3တယ#။


Learning Java 193 မင#$လ&င#


Java Developer Class

Type Erasure in Generics Methods

Generics Type eတ&မH+ Type Erasure က ဘယ#လiuအလuပ#လuပ#တယ#ဆiuတ+က အe^မH+eလ6လ+Kပ?$ခ-6ပ3Kပ?။


ဆက#လက#Kပ?$ Generics Method eတ&မH+eက+ Type Erasure က ဘယ#လiu အလuပ#လuပ#တယ#ဆiuတ+ကiu eလ6လ+
သ&+$Fကရeအ+င#။

public class GenericsMethodDemo {

static<T> void use(T t) {

static<T extends Number> void use(T t) {

}
}

အထက#ပ3နမOန+မH+eတ+6 Generics Method တစ#ခuန-9 Bounded Type ကiu အသuB$Cပuတ-6 Generics Method တစ#ခu
တiuကiu eရ$သ+$ထ+$ပ3တယ#။ Reverse Engineering ကiu အသuB$CပuKပ?$ Type Erasure က ဘယ#လiu အလuပ#လuပ#
သ&+$တယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

public class GenericsMethodDemo {

public GenericsMethodDemo() {
}

static void use(Object obj) {


}

static void use(Number number) {


}
}

Generics Method မH+လ- Type Erasure ဟ+ Generics Type eတ&တuန#$ကလiuပ- Bounded လuပ#ထ+$တ-6 Type
Parameter eတ&ကiu Bounded Type အCဖစ#eCပ+င#$eပ$Kပ?$၊ Bounded မလuပ#ထ+$ရင#eတ+6 Object အCဖစ#eCပ+င#$
eပ$တ+ကiu eတ&JရမH+ Cဖစ#ပ3တယ#။

Learning Java 194 မင#$လ&င#


Java Developer Class

Bridge Method
Generics Type မဟuတ#တ-6 Type eတ&ကeန Generics Type eတ&ကiu Extends လuပ#တ-6အခ3မGiu$မH+ Java
Compiler ကeန Type Erasure Process AHင#6အတOCဖည#6စ&က#eပ$ရတ-6 Synthetic Method eတ&Qiပ3တယ#။ အ-6ဒ?
Method မGiu$ကiu Bridge Method လiueခ2ပ3တယ#။

public interface Box<T> {


void add(T t);
T get();
}

class IntegerBox implements Box<Integer> {

private Integer data;

@Override
public void add(Integer i) {
this.data = i;
}

@Override
public Integer get() {
return data;
}
}

အထက#ပ3နမOန+ထ-မH+ Generics Type Cဖစ#တ-6 Box<T> Interface ကiu Generics Type မဟuတ#တ-6 IntegerBox
ကeန Implement လuပ#ထ+$ပ3တယ#။ Type Erasure Process eFက+င#6ရလ+တ-6 Box Interface ကiu eလ6လ+Fက
ည#6Fကရeအ+င#။

public interface Box {

public abstract void add(Object obj);

public abstract Object get();


}

Type Parameter Cဖစ#တ-6 T eနရ+ကiu Object eတ&က အစ+$ထiu$သ&+$တ+ကiu eတ&Jရပ3မယ#။ add() method ရ-I
Parameter ဟ+ Object Cဖစ#သ&+$သလiu get() method ရ-I Return Type ဟ+လ- Object Cဖစ#သ&+$ပ3တယ#။

Box Interface န-9 Sub Class Cဖစ#တ-6 IntegerBox Class တiuရ-I Method eတ&ကiu Override Cဖစ#သလ+$ မCဖစ#ဘO$
လ+$ဆiuတ-6 အCမင#န-9 Fကည#6Fကရeအ+င#။ မHန#ကန#တ-6 Override Rule မH+ Super Type ထ-မH+ပ3တ-6 Method န-9 Sub
Type ထ-မH+ ပ3တ-6 Method eတ&ရ-I Method Signature (Method Name & Parameter List) ဟ+ အတiအကGတO
ရမယ#လiuပ3Qiပ3တယ#။ ဒ3eပမ-6 Box Interface ရ-I add() method ရ-I Parameter Type ဟ+ Object Cဖစ#Kပ?$
IntegerBox မH+eတ+6 Parameter Type ဟ+ Integer Cဖစ#eနပ3တယ#။ Parameter Type eတ&မတOeတ+6တ-6
အတ&က# Override Rule ကiu eဖ+က#ဖGက#သ&+$ပ3Kပ?။

Learning Java 195 မင#$လ&င#


Java Developer Class
ဒ?လiuCပဿန+မGiu$ကiu eCဖQင#$ဖiuအတ&က# Java Compiler ကeန Type Erasure Process ကiu လuပ#eဆ+င#eနခGiန#
အတ&င#$မH+ Synthetic Method Cဖစ#တ-6 Bridge Method eတ&ကiu Cဖည#6စ&က#eပ$ရတ-6 အခ3လ- Qiတတ#ပ3တယ#။
Bridge Method ဆiuတ+ ဘယ#လiuဟ+လ- ဆiuတ+ကiu IntegerBox Class ကiu Decompile လuပ#ထ+$တ-6 ကuဒ#eတ&က
eနeလ6လ+Fကည#6Fကရeအ+င#။

class IntegerBox implements Box {

private Integer data;

IntegerBox() {}

public void add(Integer integer) {


data = integer;
}

public Integer get() {


return data;
}

}
public volatile Object get() {
return get();
}
Bridge Method
public volatile void add(Object obj) {
add((Integer)obj);
}
}

Object ကiu return Cပန#တ-6 get() method န-9 Object ကiu Parameter အeနန-9 လက#ခBထ+$တ-6 add() method eတ&
ဟ+ Compiler ကeန Cဖည#6စ&က#eပ$တ-6 Bridge Method eတ& Cဖစ#Fကပ3တယ#။

Bridge Method Cဖစ#တ-6 add() Method ကeတ+6 Super Type ထ-က Method န-9 Override လuပ#တ-6 Method တiu
ရ-I Method Signature ကiuတOeအ+င# Cဖည#6eပ$ရတ-6 bridge method Cဖစ#ပ3တယ#။ get() method ကeတ+6 Java 5
မH+ စတင#ပ3ဝင#လ+ခ-6တ-6 Covariant Return eFက+င#6Cဖစ#ပ3တယ#။ Java 5 မတiuင#ခင#က Override Rule မH+ Super
Class မH+ Return Cပန#ထ+$တ-6 အတiuင#$ Override လuပ#တ-6 Method ကeန Return မCပန#လiu မရပ3ဘO$။ ဒ?လiuမH
မဟuတ#ရင# Override မCဖစ#eCမ+က#ပ3ဘO$။

Java SE 5 အeရ+က#မH+ Covariant Return ဆiuတ+ကiu Cဖည#6စ&က#လ+Kပ?$ Super Type ထ-မH+ Return Cပန#တ-6
Type ရ-I Sub Type eတ&ကiuလ- Override Method eတ&ကeန Return Cပန#လiuရလ+ပ3တယ#။ ဒ?လiu Cဖစ#ရပ#မGiu$ကiu
Covariant Return လiueခ2ပ3တယ#။ အထက#eဖ2Cပပ3 နမOန+ထ-မH+ပ3တ-6 Object ကiu Return Cပန#eနတ-6 get()
Method ဟ+ Covariant Return ကiu Cဖစ#eCမ+က#eစဖiu Compiler ကeန Cဖည#6စ&က#eပ$ထ+$တ-6 Bridge Method
တစ#ခu Cဖစ#ပ3တယ#။

Learning Java 196 မင#$လ&င#


Java Developer Class

Side Effect of Type Erasure


က\န#eတ+#တiu Generics eတ&ကiu အသuB$Cပuတ-6eနရ+မH+ Type Erasure ကiu အသuB$CပuKပ?$ Generics Type eတ&ကiu
နဂiuမOလပuBစB (Raw Type) eတ&အCဖစ#eCပ+င#$လ- eပ$Aiuင#တယ#ဆiuတ+ကiu eလ6လ+ခ-6ပ3တယ#။ Generics Type Cဖစ#တ-6
Box<T> ကiu Raw Type Cဖစ#တ-6 Box အCဖစ# Compile Time မH+ eCပ+င#$လ-eပ$Cခင#$ကiu ဆiuလiuပ3တယ#။ Type
Erasure eတ&eFက+င#6 က\န#eတ+#တiueတ& eမZ+#လင#6မထ+$တ-6 အeCခအeနeတ&ကiu eရ+က#Qiသ&+$Aiuင#ပ3eသ$တယ#။

class Box<T> {
T data;

Box(T t) {
data = t;
}
void setData(T t) {
data = t;
}
}

class IntBox extends Box<Integer> {


IntBox(Integer i) {
super(i);
}
void setData(Integer integer) {
data = integer;
}
}

အထက#ပ3နမOန+ထ-မH+eတ+6 Generics Type Cဖစ#တ-6 Box<T> ကiu IntBox က Extends လuပ#ထ+$ပ3တယ#။ ရလ+
တ-6 IntBox Class ကiu Decompile လuပ#Fကည#6တ-6အခ3 eအ+က#ပ3အတiuင#$ ကuဒ#eတ&ကiu Generate လuပ#သ&+$ပ3
တယ#။

class IntBox extends Box {


IntBox(Integer integer) {
super(integer);
}
void setData(Integer integer) {
data = integer;
}
volatile void setData(Object obj) {
setData((Integer)obj);
}
}

Generate လuပ#လ+တ-6 ကuဒ#ထ-မH+ Object ကiu Parameter အeနန-9 လက#ခBတ-6 setData() method တစ#ခuကiu
Bridge အeနန-9 Generate လuပ#သ&+$တ+ကiu eတ&Jရပ3တယ#။

Learning Java 197 မင#$လ&င#


Java Developer Class
ဆက#လက#Kပ?$ Type Erasure eFက+င#6 ဘယ#လiu Side Effect eတ& Cဖစ#Aiuင#တယ#ဆiuတ+ကiu eအ+က#ပ3 ကuဒ#eတ&က
eန တဆင#6 eလ6လ+Fကည#6Fကရeအ+င#။

public class EffectDemo {


public static void main(String[] args) {
IntBox box = new IntBox(10);
changeData(box);
Integer i = box.data;
}

static void changeData(Box box) {


box.setData("Hello");
}
}

အထက#ပ3 changeData() method ဟ+ Box<T> ရ-I Raw Type ကiu Parameter အeနန-9 ရယOထ+$ပ3တယ#။ ဒ?လiu
eရ$သ+$ထ+$ရင# Compiler ကeန Raw Types eတ&ကiu သuB$ထ+$ပ3တယ#ဆiuKပ?$ Warning ကiu ထuတ#eပ$ပ3မယ#။
အလ+$တOပ- box.setData() Method ကiu eရ$သ+$တ-6eနရ+မH+လ- Compiler ကeန Check မလuပ#Aiuင#eတ+6ဘO$ဆiu
Kပ?$ Unchecked Called Warning ကiu ထuတ#eပ$ပ3မယ#။ ဒ3eပမ-6 Compile Time Exception eတ+6မCဖစ#သ&+$ပ3
ဘO$။

main() method ထ-မH+eတ+6 IntBox Type box ကiu Object eဆ+က#ထ+$ပ3တယ#။ Kပ?$eတ+6 changeData()
method ရ-I Parameter အeနန-9 IntBox Type Variable ကiu eပ$လiuက#ပ3တယ#။ ဒ3eပမ-6 changeData() method
ထ-က သiတ+ကeတ+6 box ရ-I Type ဟ+ Box ပ-Cဖစ#ပ3တယ#။ Box ဟ+ Raw Type Cဖစ#တ-6 အတ&က# setData() ရ-I
Parameter ဟ+ Object Cဖစ#ပ3မယ#။

static void changeData(Box box) {


box.setData("Hello");
}

ဒ36eFက+င#6 အထက#ပ3အတiuင#$ changeData() method ထ-မH+ box.setData(“Hello”) ဆiuKပ?$ String တစ#ခuကiu


အသuB$Cပuသ&+$Aiuင#တ+ Cဖစ#ပ3တယ#။ ဒ?eနရ+မH+ သတiCပuဖiuလiuတ+က changeData() method ရ-I box ကeန
Reference လuပ#eနတ+က IntBox Object Cဖစ#eနတယ#ဆiuတ+ပ3ပ-။ IntBox ကiu eရ$သ+$ခ-6တuန#$က setData()
method ရ-I Argument ဟ+ Integer Cဖစ#eပမ-6၊ Type Erasure ကeန Generate လuပ#eပ$လiuက#တ-6 Bridge
Method eFက+င#6 Object ကiuလ- လက#ခBလiuရသ&+$ပ3တယ#။

volatile void setData(Object obj) {


setData((Integer)obj);
}

ဒ? Bridge Method ထ-မH+ Cပဿန+က စeတ+6တ+ပ3ပ-။ ဒ? Method ထ-မH+ (Integer)obj ဆiuKပ?$ Object ကiu Integer
အeနန-9 Type Cast လuပ#eနပ3တယ#။ Parameter အeနန-9 ရQiလ+တ-6 “Hello” ကiu Integer အCဖစ# Type Cast လuပ#
ဖiuPကiu$စ+$တ-6 အခ3မH+ ClassCastException ကiuCဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

Learning Java 198 မင#$လ&င#


Java Developer Class

Generics မ:" လuပ%လiuမရeသ" အရ"မ7"9


Generics မH+ eရ$သ+$လiuမရAiuင#တ-6 ကန#9သတ#ခGက#eတ&QiFကပ3တယ#။ အ-6ဒ3eတ&ကeတ+6 eအ+က#ပ3အတiuင#$ Cဖစ#Fက
ပ3တယ#။

✓ Primitive eတ&ကiu Type Parameter အeနန-9 eရ$သ+$လiu မရAiuင#ပ3ဘO$


✓ Type Parameter eတ&ကiu new keyword န-9 Object eဆ+က#လiu မရAiuင#ပ3ဘO$
✓ Static Variable eတ&မH+ Type Parameter ကiu အသuB$Cပuလiu မရပ3ဘO$
✓ Generics Type eတ&မH+ Cast န-9 instanceof ကiuသuB$လiuမရပ3ဘO$
✓ Parameterized Type eတ&ရ-I Array eတ&ကiu Create လuပ#လiuမရAiuင#ပ3ဘO$
✓ Exception eတ&အeနန-9 Generics Type eတ&ကiuသuB$လiuမရAiuင#ပ3ဘO$
✓ Generics Type eတ&ကiu Argument အeနန-9 eရ$Kပ?$ Overload eရ$လiu မရAiuင#ပ3ဘO$

Primitive eတ3ကiu Type Parameter အeနန/A eရ9သ"9လiu မရKiuင%


eအ+က#ပ3အတiuင#$ Generics Type Cဖစ#တ-6 Box<T> ကiu eရ$သ+$ထ+$ပ3တယ#။

class Box<T> {
T data;
Box(T t) {
data = t;
}
}

BoxDemo Class ရ-I Main Method ထ-မH+ Primitive Type Cဖစ#တ-6 int ကiu Parameter အeနန-9 ထ+$Kပ?$
Compile လuပ#Fကည#6ပ3မယ#။
eအ+က#ပ3အတiuင#$ Compile Error ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

public class BoxDemo {


public static void main(String[] args) {
Box<int> b = new Box<>(10);
}
}

Generics Type eတ&ရ-I Type Parameter eနရ+မH+ Reference Type ကiuသ+ လက#ခBတ-6 အတ&က# Primitive Cဖစ#

BoxDemo.java:10: error: unexpected type


Box<int> b = new Box<>(10);
^
required: reference
found: int
1 error

တ-6 int ကiu လက#မခBတ+ပ- Cဖစ#ပ3တယ#။

Learning Java 199 မင#$လ&င#


Java Developer Class

Type Parameter eတ3ကiu Object eဆ"က%လiu မရKiuင%ပ,ဘP9


Java မH+ Type eတ&အeနန-9 Class eတ&၊ Interface eတ&၊ Abstract Class eတ&န-9 Enum eတ&ကiu eရ$သ+$လiuရAiuင#
ပ3တယ#။ ဒ? Type eတ&ထ-မH+မH Object eဆ+က#လiuရတ+ကeတ+6 Concrete Class eတ&သ+ Cဖစ#ပ3တယ#။
Abstract Class eတ&န-9 Interface eတ&ကeတ+6 ဒ?အတiuင#$ new ဆiuKပ?$ Constructor ကiueခ2Kပ?$ Object eဆ+က#
လiu မရAiuင#ပ3ဘO$။ Anonymous Class eတ&ကeနeတ+6 eဆ+က#လiuရတ+eပ36ဗG+။ ဒ3eပမ-6 အ-6ဒ? Class ကeန
တiuက#Uiuက# eဆ+က#လiuမရဘO$ဆiuတ+ကiu ဆiuလiuတ+ပ3။ Enum Type eတ&က PကiuKပ?$ တည#eဆ+က#ထ+$ရတ-6 Static
Class အမGiu$အစ+$eတ&Cဖစ#တ-6 အတ&က# Runtime ကGမH Object eတ&ကiu တည#eဆ+က#လiu မရAiuင#ပ3ဘO$။

ဒ?လiuပ- Generics Type eတ&မH+ အသuB$Cပueနတ-6 Type Parameter eတ&ကeန new Keyword ကiu အသuB$CပuKပ?$
Object ကiu မတည#eဆ+က#Aiuင#ပ3ဘO$။ ဆiuFကပ3စiu၊ Object eတ&ကiu ထuတ#eပ$Aiuင#တ-6 Generics Method တစ#ခuကiu
eရ$FကKပ?ဆiuပ3စiu။

public static <T> T getNewBox() {


return new T();
}

အထက#ပ3အတiuင#$ T Object ကiu လiuခGင#တ-6 အတ&က# new T() ဆiuKပ?$ eရ$မiမယ#ထင#ပ3တယ#။ ဒ3eပမ-6 မရAiuင#ပ3ဘO$။
Compile လuပ#Fကည#6တ-6 အခ3မH+ eအ+က#ပ3အတiuင#$ Compile Error ကiu Cဖစ#eပ2eစပ3တယ#။

BoxFactory.java:4: error: unexpected type


return new T();
^
required: class
found: type parameter T
where T is a type-variable:
T extends Object declared in method <T>getNewBox()
1 error

လiuခGင#တ-6 Type က Class Cဖစ#Kပ?$ တကယ#သuB$ထ+$တ+က Type Parameter T Cဖစ#တယ#ဆiuKပ?$ Compile Time
Error ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ ဟuတ#ပ3တယ# Java မH+က ဘ+ Class မHန#$မသiရင# Object eဆ+က#လiu မရ
Aiuင#ပ3ဘO$။ Type Parameter Cဖစ#တ-6 T eနရ+မH+ ဘယ#လiu Class ကeရ+က#လ+မယ#ဆiuတ+ကiu မခန#9မHန#$Aiuင#တ-6
အတ&က# Type Parameter ရ-I Construtor ကiu eခ2Kပ?$ Object eဆ+က#လiu မရAiuင#ပ3ဘO$။

public static <T> T getNewBox(Class<T> type)


throws Exception {
return type.newInstance();
}

ဒ3eပမ-6 အထက#ပ3အတiuင#$ Class<T> ကiu သiမယ#ဆiuရင#eတ+6 အ-6ဒ? Class ရ-I newInstance() method ကiuအသuB$Cပu
Kပ?$ Object eဆ+က#လiuရမH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 အ-6ဒ? Type ကလ- Object eဆ+က#လiuရတ-6 Type Cဖစ#eနဖiuလiuအပ#
သလiu Argument မပ3တ-6 Default Constructor တစ#ခiuQieနဖiuလ- လiuအပ#ပ3တယ#။ Abstract Class eတ&၊ Interface
eတ&န-9 Enum eတ&ဆiuရင#eတ+6 ဒ?ပuBစBန-9လ- Object ကiu တည#eဆ+က#လiuရမH+မဟuတ#ပ3ဘO$။ Concrete Class Cဖစ#eပ
မ-6 Default Constructor မQiCပန#ရင#လ- ဒ?ပuBစBန-9 Object eဆ+က#လiu မရAiuင#ပ3ဘO$။

Learning Java 200 မင#$လ&င#


Java Developer Class

Static Variable eတ3မ:" Type Parameter ကiu သu<9လiuမရဘP9


Generics Type eတ&ထ-မH+eရ$သ+$ထ+$တ-6 Type Parameter eတ&ဟ+ Generics Type eတ&ရ-I Object eတ&မH+
သ+ အသuB$CပuAiuင#ပ3တယ#။ ဒ36eFက+င#6 Type Parameter eတ&ကiu Static Variable eတ&ရ-I Type eတ&အeနန-9
eရ$သ+$လiu မရAiuင#ပ3ဘO$။

public class StaticTest<T> {


static T testData;
}

အထက#ပ3အတiuင#$ Generics Type Class တစ#ခuကiu eရ$သ+$Kပ?$ Type Parameter Cဖစ#တ-6 T ကiu Static
Variable ရ-I Type အCဖစ# အသuB$CပuFကည#6ပ3မယ#။ အထက#ပ3 ကuဒ#ကiu Compile လuပ#Fကည#6တ-6 အခ3မH+ က&န#ပiuင#$လuပ#
လiu ရမH+ မဟuတ#ပ3ဘO$။

StaticTest.java:2: error: non-static type variable T cannot


be referenced from a static context
static T testData;
^
1 error

Type Parameter T ကiu Static Context တစ#ခuကeန Reference လuပ#လလiuမရဘO$ဆiuKပ?$ Compile Error ကiu
Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ တကယ#တမ#$ကGeတ+6 Static Variable eတ&ဟ+ Class Loader ကeန Class ကiu
JVM Memory eပ2ကiu ဆ&-တင#လiuက#ကထ-က သတ#မHတ# ထ+$ဖiuလiuအပ#ပ3တယ#။ Kပ?$eတ+6 Static Variable eတ&ဟ+
JVM Memory eပ2မH+ တစ#ခuထ-eသ+ Variable eတ&Cဖစ#eနပ3တယ#။ ဒ36eFက+င#6 Type Parameter ကiu Type
အမGiu$မGiu$န-9 လ+သတ#မHတ#eနရင# Static Variable ကiu ဘယ# Type န-9 သတ#မHတ#ရမလ- ဆiuတ+ကiu eဝခ&-လiu ရမH+
မဟuတ#eတ+6ပ3ဘO$။

Generics Type eတ3မ:" Cast န/A instanceof ကiu သu<9လiuမရKiuင%ဘP9

static<T> void checkType(Box<T> box) {


if(box instanceof Box<String>) {
System.out.println("String Box");
}
}

အထက#ပ3ကuဒ#ကiu eရ$သ+$ထ+$ရင# Compile Time မH+ Error တက#မH+ Cဖစ#ပ3တယ#။ တကယ#တမ#$ကGeတ+6


Generics ဆiuတ+ဟ+ Compile Time မH+သ+ စစ#eဆ$eပ$Aiuင#တ-6 အရ+Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Box<String> န-9
Box<Integer> eတ&ဟ+ Compile လuပ#Kပ?$တ-6 အခ3မH+ အတOတOပ- Cဖစ#သ&+$Fကပ3မယ#။

public static void main(String[] args) {


Box<String> b1 = new Box<>();
Box<Integer> b2 = new Box<>();
}

Learning Java 201 မင#$လ&င#


Java Developer Class
အထက#ပ3နမOန+ထ-မH+ Box<String> န-9 Box<Integer> တiuကiu eရ$သ+$ထ+$ပ3တယ#။ Compile လuပ#Kပ?$ရလ+တ-6
Class ကiu Decompile လuပ#Fကည#6တ-6 အခ3မH+ အ-6ဒ? Type eတ&ဟ+ အတOတOပ- Cဖစ#eနတ+ကiu eတ&Jရပ3တယ#။

public static void main(String args[]) {


Box box = new Box();
Box box1 = new Box();
}

Generics Type eတ&ကiu Compile လuပ#တ-6 အခ3မH+ Type Erasure eFက+င#6 Generics Type eတ&ဟ+ Raw
Type eတ&Cဖစ#သ&+$Fကပ3တယ#။ Compile လuပ#Kပ?$တ-6 အခ3မH+ရလ+တ-6 Raw Type ဟ+ တစ#ခuထ-Cဖစ#တ-6 အတ&က#
ခ&-Cခ+$လiu မရAiuင#eတ+6ပ3ဘO$။ ဒ36eFက+င#6 Generis Type eတ&မH+ Casting ကiuလ- eရ$သ+$လiu မရAiuင#တ+ Cဖစ#ပ3တယ#။

static void checkType(Box<?> box) {


if(box instanceof Box<?>) {
System.out.println("Object Box");
}
}

ဒ3eပမ-6 အe^မH+eဖ2Cပခ-6တ-6 checkType() Method ကiu အထက#ပ3အတiuင#$Cပင#Kပ?$eရ$မယ#ဆiuရင#eတ+6 Compile


လuပ#လiuရပ3လiမ#6မယ#။ Type Parameter eနရ+မH+ Wildcard ကiueရ$သ+$လiuက#တ-6 အတ&က# ဘယ# Type မGiu$မဆiu
အသuB$Cပuလiu ရသ&+$ပ3မယ#။ Raw Type ကiu သuB$တ-6 ပuBစBCဖစ#သ&+$တ+eပ36။

public class BoxDemo {

public static void main(String[] args) {


Box<String> b1 = new Box<>();
Box<Integer> b2 = new Box<>();

checkType(b1);
checkType(b2);
}

static void checkType(Box<?> box) {


if(box instanceof Box<?>) {
System.out.println("Object Box");
}
}
}

အထက#ပ3 အတiuင#$ eရ$သ+$Kပ?$ Run Fကည#6မယ#ဆiuရင# Box<String> eက+ Box<Integer> ပ3 တOည?တ-6 ရလဒ#ကiu
ရမH+ Cဖစဒ#ပ3တယ#။ အထက#မH+ eဖ2Cပထ+$တ-6 အတiuင#$ Generics Type eတ&ကiu Compile လuပ#Kပ?$တ-6 အခ3မH+
အ+$လuB$ဟ+ Object ကiu အသuB$Cပuတ-6 Raw Type eတ& Cဖစ#သ&+$မH+ Cဖစ#တ-6 အတ&က# အ+$လuB$ရ-I Type ဟ+ အတOတO
ပ-လiu သတ#မHတ#သ&+$တ+ Cဖစ#ပ3တယ#။ ရသ+ရတ+ပ3 တကယ#တမ#$ကGeတ+6 ဘ+မH အဓiပW3ယ#မQiပ3ဘO$။

က-ဆက#လက#Kပ?$ Generics Type eတ&ရ-I Casting အeFက+င#$ကiueလ6လ+သ&+$Fကရeအ+င#။ တကယ#တမ#$ကGeတ+6


Generics eတ&ရ-I Sub Typing eတ&အeFက+င#$မH+ eဖ2CပKပ?$ Cဖစ#ပ3တယ#။
Learning Java 202 မင#$လ&င#
Java Developer Class

class Box<T> {}

class Container<T> extends Box<T> {}

public class BoxDemo {

public static void main(String[] args) {

Box<Number> b1 = new Box<>();


Box<Integer> b2 = (Box<Integer>)b1; // compile error

Box<Integer> b3 = new Container<>();


Container<Integer> b4 = (Container<Integer>)b3; // OK
}
}

Generics Type eတ&ရ-I Sub Type eတ&အeFက+င#$ကiu eလ6လ+ခ-6တuန#$က Type Parameter Fက+$မH+ Qiတ-6 IS- A
Relationship ဟ+ Generics Type eတ&Fက+$ကiu သယ#မသ&+$Aiuင#ဘO$ဆiuတ+ကiu eလ6လ+ခ-6ပ3တယ#။ ဆiuFကပ3စiu
Integer ဟ+ Number ရ-I Sub Type Cဖစ#eပမ-6 Box<Integer> ဟ+ Box<Number> ရ-I Sub Type Cဖစ#မလ+ပ3
ဘO$။ ဒ36eFက+င#6 Is - A Relationshp မQiတ-6 eနရ+မH+ Type Casting ကiu အသuB$Cပueနတ-6 အတ&က# Compile Time
Error ကiu Cဖစ#eပ2eစတ+ Cဖစ#ပ3တယ#။

ဒ?လiuပ- Generics Type အခGင#$ခGင#$ Inheritance Qiတ-6 eနရ+eတ&မH+ ဆiuရင#eတ+6 Type Casting ကiu အသuB$Cပuလiuရ
မH+ Cဖစ#ပ3တယ#။ ဒ3eFက+င#6 Container<Integer> b4 = (Container<Integer>)b3; ဆiuKပ?$ Casting ကiu eရ$သ+$
လiu ရeနတ+ Cဖစ#ပ3တယ#။

Exception eတ3မ:" Generics Type eတ3ကiu သu<9လiu မရKiuင%ဘP9

public class GenericsException<T> extends Exception {

အထက#ပ3 Class ကiu Compile လuပ#Fကည#6တ-6 အခ3မH+ Generics Type eတ&ဟ+ Throwable ကiu Extends လuပ#
လiuမရဘO$ဆiuKပ?$ Compile Error ကiu Cဖစ#eစပ3တယ#။ Throwable ကiu Extends လuပ#လiuမရဘO$ဆiueတ+6မH Generics
Class eတ&ဟ+ Exception အeနန-9 eရ$သ+$လiuရမH+ မဟuတ#eတ+6ပ3ဘO$။

GenericsException.java:1: error: a generic class may not


extend java.lang.Throwable
public class GenericsException<T> extends Exception {
^
1 error

ဘယ#နည#$န-9မH Generics eတ&ဟ+ Exception Cဖစ#မလ+Aiuင#ဘO$ဆiuမHeတ+6 Generics Type eရ$သ+$ထ+$တ-6 Type


Parameter eတ&ကiu Catch လ-လuပ#လiuရမH+ မဟuတ#သလiu Method eတ&ရ-I Throw eနရ+မH+လ- eရ$သ+$လiuရမH+
မဟuတ#ပ3ဘO$။

Learning Java 203 မင#$လ&င#


Java Developer Class

Generics Type eတ3ကiu Argument အeနန/A eရ9DပE9 Overload eရ9လiu မရ


Kiuင%ပ,ဘP9

import java.util.*;

public class OverrideDemo {

public void showList(List<String> list) {


// Codes
}

public void showList(List<Date> list) {


// Codes
}
}

Overload ဆiuတ+က Class တစ#ခuအတ&င#$မH+ Method Name တOKပ?$ Argument List မတOတ-6 Method eတ&ကiu
ထပ#ခ3 ထပ#ခ3eရ$သ+$Cခင#$ကiu ဆiuလiuပ3တယ#။ အထက#ပ3 ကuဒ#eတ&ထ-မH+ showList() method AHစ#ခuကiu eရ$သ+$
ထ+$Kပ?$ Generics Type Cဖစ#တ-6 List<Stirng> န-9 List<Date> တiuကiueရ$သ+$ထ+$ပ3တယ#။ Parameter List မတO
ဘO$လiu Cမင#ရပ3မယ#။ ဒ3eပမ-6 Compile လuပ#Kပ?$ရလ+တ-6 Raw Type eတ&ဟ+ အတOတOCဖစ#တ-6 အတ&က# ဒuတiယ
Method ကiu Compile လuပ#တ-6 အခ3မH+ Compile Error ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

OverrideDemo.java:9: error: name clash: showList(List<Date>)


and showList(List<String>) have the same erasure
public void showList(List<Date> list) {
^
1 error

Learning Java 204 မင#$လ&င#


Java Developer Class

Essential Java API

API ဆiuတ+က Application Programming Interface ဆiuတ-6 စက+$လuB$ရ-I အတiueက+က# အeခ2အeဝ2Cဖစ#ပ3


တယ#။ က\န#eတ+#တiu Java Programming ကiu အသuB$CပuKပ?$ Application eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Program
eတ&ထ-ကeန အလ&ယ#တကOအသuB$CပuAiuင#eအ+င# Pကiuတင#Cပင#ဆင#eပ$ထ+$တ-6 Class Library eတ& Cဖစ#Fကပ3တယ#။
ဆiuFကပ3စiu က\န#eတ+#တiu Application ထ-ကeန File eတ&ကiu Read Write လuပ#ခGင#တ-6 အခ3Qiမယ#။ ဒ?လiuပ- Data
eတ&ကiu အစuလiuက# အသuB$Cပuတ+တiu၊ သiမ#$ထ+$လiuတ-6 Data eတ&ကiu ဘယ#လiu Data Structure eတ&ကiu အသuB$CပuမH+
လ-တiu သuB$လiuတ-6 အခ3လ-Qiပ3မယ#။ ဒ?လiuပ- eန9ရက# အခGiန#eတ&ကiu အသuB$Cပuမယ#၊ Kပ?$eတ+6 eန9ရက#eတ&ရ-I က&+Cခ+$ခGiန#
eတ&ကiu တ&က#ခGက#လiuတ-6 အခ3eတ&လ-Qiပ3မယ#။ ဒ?လiuပ- Internet ကiu Cဖတ#Kပ?$ Cloud တစ#eနရ+ရ+က Web Service
eန ပB6ပiu$eပ$ထ+$တ-6 Service eတ&ကiu အသuB$Cပuလiuတ-6 အခ3မGiu$လ-Qiပ3မယ#။

အ-6ဒ?လiu လiuအပ#ခGက#eတ&မH+ ကiuယ#6ဘ+သ+ကiuယ# Low Level အထi ဝင#eရ$စရ+မလiueအ+င# Java SE မH+ Standard
API eတ&ကiu Cပင#ဆင#eပ$ထ+$ပ3တယ#။ Java SE 8 မH+တင# JRE ထ-မH+ Class eပ3င#$ ၄၂၄၀ ခu eရ$သ+$Cပင#ဆင#
eပ$ထ+$ပ3တယ#။ တစ#ခGiu Class eတ&ကeတ+6 API eတ&ရ-I အတ&င#$ပiuင#$မH+သ+ အသuB$Cပuတ-6 Class eတ& Cဖစ#FကKပ?$၊
တစ#ခGiuကGeတ+6လ- Framework eရ$သ+$သOeတ& အသuB$CပuAiuင#တ-6 Class eတ&Cဖစ#FကKပ?$၊ က\န#eတ+#တiuလiu
Application Developer eတ&မH+ အသuB$Cပuသင#6တ-6 API eတ&ဆiuKပ?$QiAiuင#ပ3တယ#။

က\န#eတ+#တiu ဒ?အခန#$ထ-မH+eတ+6 Java Application Developer တစ#eယ+က#အeနန-9 မသiမCဖစ#သiထ+$သင#6တ-6


API eတ&အeFက+င#$ကiu စuစည#$eဖ2Cပသ&+$မH+ Cဖစ#ပ3တယ#။

Learning Java 205 မင#$လ&င#


Java Developer Class

Exceptions Handling

လOဆiuတ+ အမH+$န-9 မကင#$Fကပ3ဘO$။ မမH+$eသ+e^eန မeသeသ+ eဆ$သမ+$ဆiuKပ?$လ- eCပ+eလ6QiFကပ3တယ#။ ဒ?


လiuပ- က\န#eတ+#တiuလiu Program ကiu eရ$သ+$တ-6 Developer eတ&ဟ+လ- ကuဒ#eတ&eရ$တ-6eနရ+မH+ အမH+$eတ&ကiu
eရ$မieနတ-6 အခ3မGiu$Qiတတ#ပ3တယ#။

တစ#ခ3တစ#eလeတ+6 eရ$တuန#$ကeတ+6 မမH+$ဘO$။ သuB$Fကည#6လiuက#တ-6 အခ3မGiu$မH+ က\န#eတ+#တiu အစတuန#$က ထင#မ


ထ+$တ-6 အသuB$CပuပuBမGiu$န-9FကuBတ-6အခ3မH+ အမH+$eတ& Cဖစ#သ&+$တတ#Fကပ3တယ#။ လOeတ&ဆiuရင#eတ+6 ခiuင#$တ+မH+$eနရင#
မဟuတ#eသ$ဘO$။ ဘယ#လiuလuပ#ရမH+လ- အစQiသCဖင#6 Complain တက#တ+တiu မလuပ#ပ-eနတ+တiu ဆuB$Cဖတ#Kပ?$ လuပ#
သ&+$Aiuင#ပ3တယ#။ ဒ3eပမ-6 Computer အeနန-9eတ+6 eရ$သ+$ထ+$တ-6 Program အတiuင#$ အလuပ#လuပ#သ&+$မH+ Cဖစ#ပ3
တယ#။ တစ#ခGiueသ+ Program eတ&မH+ ဆiuရင# မiမieရ$သ+$ထ+$တ-6 Application ထ-မH+သ+မက ပတ#ဝန#$ကGင#Cဖစ#တ-6
OS ကiueတ+င# ပGက#စ?$eစAiuင#တ-6 အထi Cဖစ#သ&+$တတ#ပ3တယ#။

User Input မH+$တ+eFက+င#6ပ-Cဖစ#Cဖစ#၊ System ရ-I ခGiuယ&င#$မ[eFက+င#6ပ- Cဖစ#Cဖစ# အလuပ#လuပ#eနစT#မH+ မH+$ယ&င#$မ[eတ&


ကiu Cဖစ#eပ2eစပ3တယ#။ ဘယ#လiueFက+င#6ပ-မH+$မH+$ဒ?လiuအeနအထ+$မGiu$မH+ Application အeနန-9 ဘယ#လiu ဆက#လuပ#
မလ- ဆiuတ+ကiu eဆ+င#ရ&က#eပ$Aiuင#ဖiuလiuအပ#ပ3တယ#။ ဒ3မHသ+ Application က ဆက#အလuပ#မလuပ#ပ- ရပ#သ&+$တ+တiu၊
eန+က#ထပ# လuပ#eဆ+င#မ[eတ&ကiu ဆက#မလuပ#Aiuင#တ+တiu User ကiu Data အမH+$eတ& Cပမiတ+တiu မCဖစ#eအ+င#
eဆ+င#ရ&က#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

Java မH+eတ+6 Exception ဆiuတ-6 Mechanism ကiu အသuB$CပuKပ?$ Error အCဖစ#မG+$တ-6 eနရ+eတ&ကiu Pကiuတင#
Cပင#ဆင#ထ+$Aiuင#eအ+င#န-9၊ Error eတ&Cဖစ#လ+တ-6အခ3မH+လ- Handle လuပ#Aiuင#eအ+င# eဆ+င#ရ&က#ထ+$ပ3တယ#။
Application တစ#ခuရ-I တန#ဖiu$ဟ+ ဘယ#eလ+က#အထiမHန#ကန#မ[ကiuအ+မခBAiuင#သလ-၊ ဘယ#eလ+က#အထi အသuB$Cပuတ-6
သOကiu အစT#eCပeCပန-9 eဆ+င#ရ&က#နiင#eအ+င# စ?စT#ထ+$Aiuင#သလ- ဆiuတ-6 အeပ2မH+ မOတည#eနပ3တယ#။ ဒ36eFက+င#6 မiမi
ရ-I Application ကiu မHန#ကန#မ[Qieအ+င# ဘယ#လiuလuပ#မလ-န-9 အမH+$eတ&န-9 FကuBeတ&Jတ-6eနရ+မH+ ဘယ#eလ+က#အထi
အသuB$CပuသOအတ&က# န+$လည#လ&ယ#eအ+င# eဆ+င#ရ&က#eပ$ရမလ- ဆiuတ+ကiu Application ကiu စတင#eရ$သ+$ကထ-
က Pကiuတင#Cပင#ဆင#ထ+$ဖiuလiuအပ#ပ3တယ#။

ဒ36eFက+င#6 Essential Java API eတ&အeFက+င#$eရ$eတ+6မယ#ဆiuတ+န-9 Exception အeFက+င#$ကiu e^ဆuB$ကeန


eရ$သ+$ထ+$တ+Cဖစ#ပ3တယ#။

Learning Java 206 မင#$လ&င#


Java Developer Class

What is Exception?
Method Invocation eတ&ကiu လuပ#eဆ+င#eနစT# eမZ+#Jလင#6မထ+$တ-6 အမH+$တစ#ခuခuန-9 eတ&JFကuBတ-6အခ3 Java
Runtime ဟ+ ဘ+ဆက#လuပ#ရမHန#$ eဝခ&-မရeတ+6ပ- ကGန#တ+eတ&ကiu ဆက#မလuပ#eတ+6ပ- Event Object တစ#မGiu$ကiu
Create လuပ#က+ Runtime ကiu Cပန#eပ$လiuက#ပ3တယ#။

အ-6ဒ? Event Object eတ&ဟ+ Exception eတ&Cဖစ#Fကပ3တယ#။ Exception Object ထ-မH+ Cဖစ#eပ2eစတ-6 Error န-9
ပတ#သက#တ-6 အခGက#အလက#eတ&၊ အ-6ဒ? Exception ရ-I အမGiu$အစ+$န-9 အ-6ဒ? Exception ကiu Cဖစ#eပ2eနစT#Qieနတ-6
Program ရ-I State eတ&ကiu eဖ2Cပeပ$Aiuင#တ-6 အခGက#အလက#eတ&ကiu eဖ2Cပထ+$ပ3တယ#။

က\န#eတ+#တiu eရ$သ+$ထ+$တ-6 Application eတ&ထ-မH+ Exception Cဖစ#လ+Kပ?ဆiuရင# အ-6ဒ? Exception Object ကiu
Fကည#6Cခင#$အ+$Cဖင#6၊ ဘ+eFက+င#6 ဘယ#eနရ+မH+ ဘယ#လiuအမH+$မGiu$ကiu Cဖစ#eစတယ#ဆiuတ+ကiu သiQieစAiuင#မH+ Cဖစ#ပ3
တယ#။ က\န#eတ+#တiu Java ကiu စတင#eလ6လ+Kပ?$ Java Program eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ မFက+ခဏဆiu
သလiu Exception eတ&န-9 eတ&JFကရမH+ Cဖစ#ပ3တယ#။ eရ$Kပ?$ Run လiuက#တ-6 Program မH+ Exception Cဖစ#သ&+$Kပ?ဆiu
ရင# စ+eတ&အမG+$Pက?$ထ&က#လ+တတ#ပ3တယ#။ Uuတ#တရက# အ-6ဒ?လiuအeနအထ+$န-9 FကuBeတ&Jတ-6 အခ3မH+ က\န#eတ+#တiu
eတ&ဟ+ Cပ+eလ+င#သ&+$Kပ?$ ဘ+လuပ#လiu လuပ#ရမHန#$မသiပ- Cဖစ#သ&+$တတ#ပ3တယ#။

အထO$သCဖင#6 Programming ကiu စတင#eလ6လ+သOeတ&ဆiuရင# အ-6ဒ?စ+eတ&eတ&Jရင# ဘ+လuပ#ရမHန#$မသiCဖစ#သ&+$တ-6


အတ&က# IDE န-9 Application ကiu Run eနတ-6 အခ3မGiu$မH+eတ+င# Console ကiu ပiတ#ထ+$တတ#eလ6Qiပ3တယ#။
တကယ#တမ#$ကGeတ+6 အ-6ဒ3ဟ+ မH+$ယ&င#$မ[တစ#ခuCဖစ#ပ3တယ#။ အ-6ဒ?ဘ+မHန#$မသiတ-6 စ+eတ&ထ-မH+ ဘယ#eနရ+မH+
ဘ+eFက+င#6 ဒ?အမH+$ကiu မH+$ရတယ#ဆiuတ-6 အခGက#အလက#eတ&ကiu eဖ2Cပထ+$ပ3တယ#။ ဘ+eFက+င#6မH+$တယ#ဆiuတ+
ကiu သiမH ဘယ#လiu eCဖQင#$ရမယ#ဆiuတ+ကiu သiQiAiuင#မH+Cဖစ#ပ3တယ#။ အ-6ဒ3eFက+င#6 က\န#eတ+# အထO$မH+ခGင#တ+က
Exception Message eတ&ကiu ဖတ#ဖiu မပGင#$ပ3န-9 ဆiuတ+ပ3ပ-။

ဆက#လက#Kပ?$ Java Runtime မH+ ဘယ#လiu Exception ကiu Cဖစ#ပ&3$eစKပ?$၊ အ-6ဒ? Exception ကiu Runtime မH+
ဘယ#လiu Handle လuပ#သ&+$တယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

Call Stacks
Program eတ&ကiu လuပ#eဆ+င#eနစT# Error Cဖစ#eပ2လ+Kပ?$ Exception Object ကiu Create လuပ#Kပ?$ Runtime ကiu
Cပန#eပ$တ+ကiu Exception ကiu Throw လuပ#တယ#လiu eခ2ဆiuပ3တယ#။

Main Program Hospital MedicalBox

Java Application eတ&ကiu Run မယ#ဆiuရင# အKမ-တမ#$ Main Method ကeန စတင# အလuပ#လuပ#ခiuင#$ရမH+ Cဖစ#ပ3
တယ#။ Hospital မH+ Qiတ-6 eဆ$eတ&ကiu Cပန#Cပတ-6 Application ကiu eရ$eနFကတယ#ဆiuFကပ3စiu။ Hospital Object မH+
showAllMedicine() ဆiuတ-6 Method ကiu eရ$သ+$ထ+$ပ3မယ#။ Hospital ထ-မH+ MedicalBox ဆiuတ-6 Object ကiu
ပiuင#Kပ?$ အ-6ဒ? Object ထ-မH+ Medicine eတ&ကiu သiမ#$ထ+$ပ3မယ#။ အ-6ဒ? MedicalBox Object မH+eတ+6
getAllMedicine() ဆiuတ-6 Method ကiu ပiuင#ဆiuင#Kပ?$၊ Hospital ရ-I showAllMedicine() ကiu လuပ#ခiuင#$တ-6 အခ3မH+
Hospital က သOပiuင#တ-6 MedicalBox ရ-I getAllMedicine() ကiu အသuB$CပuKပ?$ ရလ+တ-6 Medicine eတ&ကiu Cပန#Cပeပ$
မH+ Cဖစ#ပ3တယ#။

Learning Java 207 မင#$လ&င#


Java Developer Class

အထက#ပ3အတiuင#$ Main Program ရ-I main() method ထ-ကeန Hospital Object ရ-I showAllMedicine() ကiu
လHမ#$eခ2ပ3မယ#။ အ-6ဒ?အခ3မH+ Hospital ရ-I showAllMedicine() Method ထ-ကeန MedicalBox Object ရ-I
getAllMedicine() ကiu ဆက#eခ2ပ3မယ#။ MedicalBox ရ-I getAllMedicine() Method ရ-I Return တန#ဖiu$Cဖစ#တ-6
Medicine List ကiu အသuB$CပuKပ?$ Hospital Object က သbရ-I ကiuယ#ပiuင# Method Cဖစ#တ-6 showAll() Method ကiu Cပန#
eခ2ပ3လiမ#6မယ#။ အ-6ဒ? လuပ#eဆ+င#မ[Kပ?$သ&+$တ-6 အခ3ကGမH Main Method ကiu Control ကiuCပန#eပ$မH+ Cဖစ#ပ3တယ#။
ဒ?လiuမGiu$ Main Method ကeန စKပ?$ အCခ+$eသ+ Method eတ&ကiu အဆင#6ဆင#6 Invoke လuပ#သ&+$တ+ကiu Call
Stack လiueခ2ဆiuပ3တယ#။

အ-6ဒ? Call Stack အတ&င#$ တစ#eနeနရ+မH+ Exception ကiu Cဖစ#eပ2eစခ-6ရင# Java Runtime ဟ+ e^ကiuဆက# မ
လuပ#eတ+6ပ-၊ Call Stack တစ#eလG+က# Cဖစ#eပ2လ+တ-6 Exception ကiu Handle လuပ#Aiuင#မည#6 Exception Handler
ကiu လiuက#Q+ပ3တယ#။ Handler ကiu eတ&Jခ-6ရင#eတ+6 အ-6ဒ? Handler ကiu Handle လuပ#ခiuင#$ပ3တယ#။ ဒ?လiuမGiu$ သင#6eတ+#
တ-6 Exception handler ကiueတ&JKပ?$ Handler ကeန Exception ကiu လက#လ&-ယOလiuက#တ+ကiueတ+6 Exception ကiu
Catch လuပ#တယ#လiueခ2ပ3တယ#။

မeတ&Jခ-6ဘO$ဆiuပ3က Call Stack အတiuင#$ Main Method ကiu eရ+က#တ-6အထi တဆင#6ခGင#$ Handler ကiu ဆက#Q+
သ&+$ပ3တယ#။ Call Stack ရ-I အစCဖစ#တ-6 Main Method ကiueရ+က#တ-6အထi Exception Handler ကiu မeတ&Jခ-6ဘO$
ဆiuပ3က Cဖစ#eပ2လ+တ-6 Exception အeFက+င#$ကiu Console eပ2မH+ eဖ2CပKပ?$ System ကiu Error Status န-9 Kပ?$ဆuB$
eစမH+ Cဖစ#ပ3တယ#။

အထက#ပ3 နမOန+ကiu လက#eတ&J ကuဒ#eတ&န-9 eရ$သ+$Kပ?$ စမ#$သပ#Fကည#6ပ3မယ#။ eအ+က#eဖ2Cပပ3ကuဒ#ကeတ+6


MedicalBox Class Cဖစ#ပ3တယ#။

class MedicalBox {
private List<String> medicines;

public List<String> getAllMedicine() {


return new ArrayList<>(medicines);
}
}

ဒ?eနရ+မH+ Exception ကiu Cဖစ#eပ2eစeအ+င# getAllMedicine() Method ထ-မH+ Null တန#ဖiu$ရ-Iတ-6 medicines ကiu
ArrayList Constructor ရ-I parameter အeနန-9 အသuB$Cပuထ+$ပ3တယ#။ ဒ36eFက+င#6 ဒ?eနရ+ကiueရ+က#တ-6အခ3မH+ null
တန#ဖiu$Qiတ-6 medicines ကiu သ&+$သuB$မiတ-6 အတ&က# NullPointerException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။
Learning Java 208 မင#$လ&င#
Java Developer Class

class Hospital {

private MedicalBox box;

Hospital() {
box = new MedicalBox();
}

public void showAllMedicine() {


List<String> medicines = box.getAllMedicine();
for(String str : medicines) {
System.out.println(str);
}
}
}

အထက#ပ3 Class ကeတ+6 MedicalBox ကiu အသuB$Cပuမည#6 Hospital Class Cဖစ#ပ3တယ#။ Hospital ရ-I
showAllMedicine() method ထ-ကeန MedicalBox ရ-I getAllMedicine() ကiu Cပန#Kပ?$ Invoke လuပ#eနပ3တယ#။

public class MainProgram {


public static void main(String[] args) {
Hospital hospital = new Hospital();
hospital.showAllMedicine();
}
}

အထက#ပ3 Class ကeတ+6 Program ကiu စတင#eစမည#6 MainProgram Class Cဖစ#ပ3တယ#။ main() method က
eနစKပ?$ Hospital ရ-I showAllMedicine() ကiu eခ2တယ#။ အ-6ဒ? Method ထ-ကeန ဆက#လက#Kပ?$ MedicalBox ရ-I
getAllMedicine() method ကiu eခ2ပ3မယ#။ အ-6ဒ? getAllMedicine() method ထ-မH+ ArrayList ရ-I Constructor
ကiuသuB$Cပu Object eဆ+က#တ-6eနရ+မH+ Exception ကiu Cဖစ#eပ2 eစမH+ Cဖစ#ပ3တယ#။
Constructor Invocation
showAllMedicine()

getAllMedicine()
MainProgram

MedicalBox

ArrayList
Hospital
main()

Learning Java 209 မင#$လ&င#


Java Developer Class
အထက#ပ3 Program ကiu Run Fကည#6ပ3မယ#။

Exception in thread "main" java.lang.NullPointerException


at java.util.ArrayList.<init>(ArrayList.java:177)
at MedicalBox.getAllMedicine(MainProgram.java:24)
at Hospital.showAllMedicine(MainProgram.java:12)
at MainProgram.main(MainProgram.java:31)

Call Stack တeလG+က#မH+ ဘ+ Exception Handler ကiu မeရ$သ+$ထ+$ခ-6တ-6 အတ&က# eန+က#ဆuB$ Main Thread
ကiu Kပ?$ဆuB$eစKပ?$ Exception ကiu ဘယ#လiu Cဖစ#ခ-6eFက+င#$ကiu eဖ2Cပeပ$eနတ+ပ- Cဖစ#ပ3တယ#။ Message ကiu Fကည#6
Cခင#$အ+$Cဖင#6 ArrayList ကiu Initialize လuပ#တ-6 eနရ+မH+ NullPointerException ကiu Cဖစ#eပ2eစခ-6eFက+င#$ကiu သiရ
Aiuင#ပ3တယ#။ Exception Cဖစ#eပ2ပuBအဆင#6ဆင#6ကiu Program ကiu စတင#ခ-6တ-6 eနရ+အထi တဆင#6Cခင#$ Line Number
AHင#6တက& eဖ2Cပeပ$eနတ+ကiu eတ&Jရပ3တယ#။

Types of Exception
Exception eတ&ကiu အeCခခBအ+$Cဖင#6 Checked Exception န-9 Unchecked Exception ဆiuKပ?$ခ&-Cခ+$Aiuင#ပ3တယ#။
Checked Exception eတ&ကeတ+6 ကuဒ#eရ$သ+$တ-6နရ+မH+ အမH+$မG+$တ-6အတ&က# Pကiuတင#စစ#eဆ$Kပ?$ ဘယ#လiu
Handle လuပ#မယ#ဆiuတ+ကiu ဆuB$Cဖတ#ဖiuလiuအပ#တ-6 Exception အမGiu$အစ+$eတ&Cဖစ#Fကပ3တယ#။ Unchecked
Exception eတ&ကeတ+6 အKမ-eတ+6မH+$တ+မဟuတ#ဘO$၊ ပတ#ဝန#$ကGင#eFက+င#6ဒ3မHမဟuတ# User Operation eFက+င#6
မH+$တ-6 အမH+$eတ&ဆiuရင#eတ+6 Unchecked Exception eတ&ကiu အသuB$Cပueလ6QiFကပ3တယ#။

တဖန# Exception eတ&ကiu Inheritance Hierarchy အရလ- ခ&-Cခ+$သတ#မHတ#Aiuင#ပ3တယ#။

✓ Exception

Checked Exception အမGiu$အစ+$Cဖစ#Kပ?$ Exception Class န-9 RuntimeException အမGiu$အစ+$မဟuတ#တ-6
Exception ရ-I Sub Class eတ&ဟ+ Exception eတ&Cဖစ#Fကပ3တယ#။ FileNotFoundException,
IOException န-9 SQLException တiuဟ+ ထင#Q+$တ-6 Checked Exception အမGiu$အစ+$eတ& Cဖစ#Fကပ3တယ#။

✓ RuntimeException

Unchecked Exception အမGiu$အစ+$တစ#မGiu$Cဖစ#Kပ?$ RuntimeException Class န-9 RuntimeException ရ-I
Sub Class eတ&အ+$လuB$ဟ+ Runtime Exception အမGiu$အစ+$eတ& Cဖစ#Fကပ3တယ#။

Learning Java 210 မင#$လ&င#


Java Developer Class
NullPointerException, ArrayIndexOutOfBoundsException န-9 ArithmeticException တiuဟ+အသiမG+$
တ-6 Runtime Exception တiuCဖစ#Fကပ3တယ#။ Runtime Exception eတ&ဟ+ Unchecked Exception အမGiu$
အစ+$ထ-မH+ပ3ဝင#ပ3တယ#။

✓ Error

Unchecked Exception အမGiu$အစ+$တစ#မGiu$Cဖစ#Kပ?$ Application eတ&ကeန Catch လuပ#Kပ?$ Handle မလuပ#
သင#6တ-6 အမH+$မGiu$eတ&ကiu Error အeနန-9 eရ$သ+$ အသuB$Cပueလ6QiFကပ3တယ#။ Error Class န-9 Error eအ+က#
က Sub Class eတ&အ+$လuB$ဟ+ Error အမGiu$အစ+$eတ& Cဖစ#Fကပ3တယ#။ NoClassDefFoundError,
OutOfMemoryError န-9 StackOverflowError တiuဟ+ ထင#Q+$တ-6 Error eတ& Cဖစ#Fကပ3တယ#။ Error eတ&က
လ- Unchecked Exception အမGiu$အစ+$Cဖစ#ပ3တယ#။

Handling Exceptions
က\န#eတ+#တiu e^မH+ Java Runtime ကeန Method Invocation eတ&ရ-I Statement eတ&ကiu လuပ#eဆ+င#eနစT#
အeFက+င#$eFက+င#$eFက+င#6 ဆက#လuပ#လiuမရတ-6 အeနအထ+$န-9 FကuBeတ&ရတတ#ပ3တယ#။ အ-6ဒ?အခ3မGiu$မH+ Method
Invocation eတ&ကiu ဆက#မလuပ#eတ+6ပ- Event Object တစ#ခuကiu Create လuပ#Kပ?$ Runtime ကiu Cပန#eပ$လiuက#ပ3
တယ#။ ဒ3ကiu Exception ကiu Throw လuပ#တယ#လiueခ2လiuက#ပ3တယ#။

Runtime ကeန Cဖစ#eပ2လ+တ-6 Exception Object ကiu အမGiu$အစ+$အလiuက# Handle လuပ#Aiuင#မည#6 Handler eတ&
ကiu Call Stack eတ+က#eလG+က#လiuက#Q+Kပ?$ eတ&Jတ-6 အခ3မH+ အ-6ဒ? Handler ကiu Exception Object ကiu eပ$Kပ?$
Handle လuပ#ခiuင#$ပ3တယ#။ ဒ?လiu အCဖစ#အပGက#ကiu Exception ကiu Catch လuပ#တယ#လiu eခ2Cပန#တယ#။

တဖန# Checked Exception eတ&ကiu Throw လuပ#ထ+$တ-6 Method eတ& Constructor eတ&ကiu အသuB$Cပuမiတ-6အခ3
မGiu$မH+လ- Exception eတ&ကiu Handle လuပ#ဖiuCပင#ဆင#ထ+$ဖiuလiuအပ#ပ3တယ#။ ဒ?eနရ+မH+ Catch လuပ#Kပ?$ Handle
လuပ#မလ+$ လတ#တeလ+ Handle မလuပ#ပ- Throw လuပ#မလ+$ ဆiuတ+ကiu eရ&$ခGယ#ရeတ+6မH+ Cဖစ#ပ3တယ#။

Catching Exception
Exception eတ&ကiu Catch လuပ#ဖiuအတ&က# Statement eတ&ကiu Cပင#ဆင#ထ+$ပ3တယ#။ အသuB$CပuAiuင#တ-6 Statement
eတ&ကeတ+6 TRY - CATCH Statement, TRY - CATCH - FINALLY Statement, TRY - MULTI CATCH
Statement န-9 TRY - WITH - RESOURCE Statement တiu Cဖစ#Fကပ3တယ#။

TRY - CATCH

Try - Catch Statement ဟ+ Java မH+ Exception ကiu Handle လuပ#ဖiuအတ&က# eရ$သ+$ရeသ+ အeCခခB eရ$သ+$
ပuB Statement တစ#ခuCဖစ#ပ3တယ#။ Try - Catch Statement တစ#ခuမH+ အeCခခBအ+$Cဖင#6 Try Clause န-9 Catch
Clause တiuပ3ဝင#Fကပ3တယ#။ တစ#ခuသတiCပuဖiuလiuတ+က Try Catch Statement ကiu ဘယ#လiu eရ$သ+$ရမယ#ဆiuတ-6
အပiuင#$န-9 Try Catch Statement ကiu ဘယ#eနရ+မH+eရ$သ+$သင#6တယ#ဆiuတ+က တစ#ပiuင#$စ?Cဖစ#ပ3တယ#။
ဒ?eနရ+မH+eတ+6 ဘယ#လiueရ$သ+$ရမယ#ဆiuတ+ကiuပ- အဓiထ+$Kပ?$eလ6လ+သ&+$Fကရeအ+င#။

try {
// code that can happen exceptions
} catch (Exception e) {
// code that handle exception
}

Learning Java 211 မင#$လ&င#


Java Developer Class
Try Clause ကiueတ+6 try {} ဆiuKပ?$eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ try ရ-I eန+က#က Code Block ထ-မH+eတ+6
Exception ကiu Cဖစ#eစAiuင#တ-6 ကuဒ#eတ&ကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

Catch Clause ကeတ+6 Exception Handler အပiuင#$Cဖစ#ပ3တယ#။ Catch Clause ကiu eရ$သ+$တ-6eနရ+မH+
catch(Exception) {} ကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ catch ရ-Ieန+က#က () အထ-မH+eတ+6 Handle လuပ#Aiuင#တ-6
Exception ကiu Argument အeနန-9 eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

Try Catch Statement ထ-မH+ Try ကiueတ+6 တစ#Pကiမ#သ+eရ$သ+$Aiuင#eပမ-6 Catch Clause ကiueတ+6 အPကiမ#Pကiမ#
eရ$သ+$Aiuင#မH+ Cဖစ#ပ3တယ#။

try {
// code that can happen exceptions
} catch (NullPointerException e) {
// code that handle NullPointerException
} catch (Exception e) {
// code that handle Exception
}

အထက#ပ3အတiuင#$ Try - Catch Statement မH+ NullPointerException ကiu Handle လuပ#မည#6 Exception
Handler န-9 Exception ကiu Handle လuပ#မည#6 Handler တiuကiu eရ$သ+$ထ+$Aiuင#ပ3တယ#။ ဒ?လiueရ$သ+$တ-6eနရ+မH+
Exception Object ရ-I Inheritance Hierarchy ကiu သတiCပuဖiueတ+6 လiuအပ#ပ3တယ#။ Inheritance Hierarchy ထ-
မH+ အCမင#6ဆuB$ Type ကiu eအ+က#ဆuB$မH+eရ$သ+$ထ+$ဖiuလiuအပ#ပ3တယ#။

TRY - CATCH - FINALLY

Try - Catch Clause eတ&န-9 အတO Finally Clause ကiu တ&-ဖက#eရ$သ+$လiuရပ3တယ#။ Finally Clause ဟ+ အ-6ဒ?
Statement ကiuလuပ#eဆ+င#Kပ?$ eန+က#ဆuB$မH+ eသCခ+eပ3က# လuပ#eဆ+င#eစလiuတ-6 ကuဒ#eတ&ကiueရ$သ+$လiuတ-6 eနရ+
မH+ အသuB$CပuAiuင#ပ3တယ#။ Exception Cဖစ#Cဖစ# မCဖစ#Cဖစ# Finally Clause ထ-ကကuဒ#eတ&ကiueတ+6 eန+က#ဆuB$မH+
လuပ#eဆ+င#eပ$မH+ Cဖစ#ပ3တယ#။ တကယ#လiu Try Block ထ-မH+ Return Cပန#ထ+$မယ#ဆiuရင#eတ+င#မH eန+က#ဆuB$မH+
Finally Clause ထ-က ကuဒ#eတ&ကiu လuပ#eဆ+င# eစမH+ Cဖစ#ပ3တယ#။

try {
// code that can happen exceptions
} catch (NullPointerException e) {
// code that handle NullPointerException
} catch (Exception e) {
// code that handle Exception
} finally {
// eန+က#ဆuB$မH+ eသCခ+eပ3က#လuပ#eဆ+င#eစလiuတ-6 ကuဒ#eတ&ကiu eရ$သ+$ရပ3မယ#
}

Finally Clause ကiueရ$သ+$တ-6eနရ+မH+ Catch eတ&ရ-I eန+က#ဆuB$မH+ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Finally Clause
ရ-Ieန+က#မH+ Catch Clause eတ&ကiu eရ$သ+$လiu မရAiuင#ပ3ဘO$။

Learning Java 212 မင#$လ&င#


Java Developer Class

TRY - MULTI CATCH

Java SE 7 အeရ+က#မH+ Exception Handling eရ$သ+$ပuB Statement AHစ#ခu အသစ#ပ3ဝင#လ+ခ-6ပ3တယ#။ အ-6ဒ?ထ-


ကတစ#ခuကeတ+6 Try With Multi Catch န-9 Try With Resource Statement တiuပ- Cဖစ#Fကပ3တယ#။

Try With Multi Catch ဆiuတ+ကeတ+6 အeCခခBအ+$Cဖင#6 Try - Catch Statement န-9 အတOတOပ- Cဖစ#ပ3တယ#။
ထO$Cခ+$တ+ကeတ+6 Catch Block eတ&မH+ Exception Type eတ&ကiu တစ#ခuထက#မက eရ$သ+$လ+Aiuင#တ+ပ- Cဖစ#
ပ3တယ#။ ဒ?eနရ+မH+လ- Exception Type eတ&ရ-I Class Hirarechy ကiuလ- သတiCပuဖiuလiuအပ#ပ3တယ#။ Exception
Type eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Super Type eတ&ကiu e^မH+ eရ$သ+$လiu မရAiuင#ပ3ဘO$။

try {
// code that can happen exceptions
} catch(NullPointerException | IOException e) {
// Exception Handling Codes
}

အထက#ပ3အတiuင#$ Catch Block ထ-မH+ eရ$သ+$ထ+$Cခင#$အ+$Cဖင#6 လက#Qi Handler မH+ NullPointerException


န-9 IOException တiuကiu Handle လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Multi Catch Statement ကiu Exception
Handler တစ#ခuန-9 အမGiu$အစ+$မတOတ-6 Exception eတ&ကiu Handle လuပ#လiuတ-6 အခ3မGiu$မH+ eရ$သ+$အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။

TRY - WITH - RESOURCE

Try - With - Resource Statement ဟ+ AutoClosable Interface ကiu Implement လuပ#ထ+$တ-6 Object eတ&
ကiu အသuB$Cပuတ-6 အခ3မH+ eရ$သ+$Aiuင#တ-6 Statement အမGiu$အစ+$Cဖစ#ပ3တယ#။

try (Connection conn = this.getConnection();


Statement stmt = conn.createStatement()){

// Database Operation

} catch (Exception e) {
// codes for handeling

AutoClosable Interface ကiu Implement လuပ#ထ+$တ-6 Object eတ&ကiu try eန+က#က () ထ-မH+ ထည#6သ&င#$
eရ$သ+$ထ+$ရပ3မယ#။ ထiuသiueရ$သ+$ထ+$Cခင#$အ+$Cဖင#6 မiမiကiuယ#တiuင# Resource eတ&ကiu Close လuပ#စရ+မ
လiuအပ#eတ+6ပ3ဘO$။ Statement Kပ?$ဆuB$တ-6 အခ3မH+ အလiuအeလG+က# Close လuပ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။
Close လuပ#eစလiuတ-6 Resource Object eတ& တစ#ခuထက#မက Qiတ-6အခ3မGiu$မH+ အထက#ပ3အတiuင#$ Seme
Column (;) ကiuအသuB$CပuKပ?$ eရ$သ+$Aiuင#ပ3မယ#။

Learning Java 213 မင#$လ&င#


Java Developer Class

Throwing Exceptions
Checked Exception eတ&ကiu Throw လuပ#ထ+$တ-6 Method eတ&၊ Constructor eတ&ကiu အသuB$CပuမiKပ?$
လတ#တeလ+ မeCဖQင#$Aiuင#eသ$တ-6 အခ3၊ မiမieရ$သ+$ထ+$တ-6 Application eတ&ရ-I မHန#ကန#မ[ကiu ထiမ#$သiမ#$လiuတ-6
အတ&က# eန+က#က Code eတ&ကiu ဆက#မလuပ#eစလiuတ-6အခ3မGiu$မH+ Application eတ&ထ-ကeနလ- Exception eတ&
ကiu Throw လuပ#Aiuင#ပ3တယ#။

Exception eတ&ကiu Throw လuပ#တ-6အခ3မH+ Checked Exception eတ&ကiu Throw လuပ#တ+န-9 Unchecked
Exception eတ&ကiu Throw လuပ#တ+က မတOည?ပ3ဘO$။

Throwing Unchecked Exception

မiမieရ$သ+$ထ+$တ-6 Application ကiu မHန#ကန#မ[Qieစရန# Cပင#ပ3မH Data မG+$ကiu Set လuပ#တ-6eနရ+မGiu$မH+ စစ#eဆ$Kပ?$
မH+$ယ&င#$eနပ3က Unchecked Exception eတ&ကiu Throw လuပ#Kပ?$ က+က&ယ#Aiuင#ပ3တယ#။

public class Person {

private String name;


private int age;

public Person(String name, int age) {

if(age <= 0) {
throw new IllegalArgumentException(
“Age must be greater than 0");
}

this.name = name;
this.age = age;
}
}

အထက#ပ3အတiuင#$ Person Class ထ-မH+ name န-9 age ကiu ယOတ-6 Constructor တစ#ခuကiu eရ$သ+$ထ+$ပ3တယ#။ ဒ?
eနရ+မH+ eရ$သ+$ထ+$တ-6 Person Class ရ-I Data eတ&ကiu မHန#ကန#မ[Qieအ+င# စစ#eဆ$ဖiuလiuအပ#ပ3တယ#။ အသက#
က Minus တန#ဖiu$Qiတ-6 Person တiuဆiuတ+ အဓiပW3ယ#မQiပ3ဘO$။

ဒ36eFက+င#6 Constructor ထ-မH+ age <= 0 ဆiuရင#လ- IllegalArgumentException ကiu Throw လuပ#ထ+$ပ3တယ#။
IllegalArgumentException ဟ+ Runtime Exception အမGiu$အစ+$Cဖစ#တ-6 အတ&က# Unchecked Exception
အမGiu$အစ+$Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Throw လuပ#ထ+$eပမ-6 အ-6ဒ? Constructor Body ထ-မH+ Handle လuပ#ထ+$စရ+မ
လiuအပ#ပ3ဘO$။

ဒ36eFက+င#6ဒ?eနရ+မH+ Try Catch တiu Method Declaration eတ&မH+ Throw eတ&ကiu eရ$ထ+$စရ+မလiuအပ#ပ3ဘO$။
အလ+$တOပ- Error eတ&ဟ+လ- Unchecked Exception အမGiu$အစ+$eတ& Cဖစ#Fကတ-6 အတ&က# Handle လuပ#စရ+မ
လiuအပ#ပ3ဘO$။

Learning Java 214 မင#$လ&င#


Java Developer Class

Throwing Checked Exception

Method ဒ3မHမဟuတ# Constructor တစ#ခuခuထ-မH+ Checked Exception တစ#ခuကiu Throw လuပ#မယ#ဆiuရင#eတ+6


Unchecked Exception eတ&န-9 မတOeတ+6ပ3ဘO$။ Checked Exception eတ&ဟ+ အမH+$မG+$တ-6eနရ+မH+
Programmer eတ&ကiu Pကiuတင#Cပင#ဆင#eစခGင#တ-6 အခ3မH+ အသuB$CပuFကရတ-6 Exception အမGiu$အစ+$Cဖစ#တ-6 အတ&က#
eရ$သ+$ထ+$တ-6 Method ထ-မH+ Handle လuပ#eပ$ဖiuလiuအပ#ပ3တယ#။

e^မH+eရ$သ+$ထ+$တ-6 IllegalArgumentException eနရ+မH+ Exception ကiu eCပ+င#$Kပ?$eရ$လiuက#ပ3မယ#။


Person Class ထ-မH+ Checked Exception ကiu Throw လuပ#ထ+$တ+ Cဖစ#ပ3တယ#။

public class Person {

private String name;


private int age;

public Person(String name, int age) {

if(age <= 0) {
throw new Exception(
"Age must be greater than 0");
}

this.name = name;
this.age = age;
}
}

အထက#ပ3 Class ကiu Compile လuပ#တ-6eနရ+မH+ Checked Exception ကiu Throw လuပ#ထ+$တ-6 အတ&က# catch
ဒ3မHမဟuတ# throws declaration ကiu eရ$သ+$ထ+$ဖiuလiuအပ#တယ#ဆiuKပ?$ Compiler မH+ စစ#eဆ$eပ$eနတ+ကiu eတ&J
ရပ3တယ#။

Person.java:9: error: unreported exception Exception; must


be caught or declared to be thrown
throw new Exception("Name must not be
null!");
^
1 error

Checked Exception eတ&ကiu Throw လuပ#eတ+6မယ#ဆiuရင#eရ&$ခGယ#စရ+ Option AHစ#ခuQiလ+ပ3တယ#။ Catch လuပ#


မလ+$ Throw လuပ#မလ+$ ဆiuတ+ပ3ပ-။ ဘ+ကiuFကည#6Kပ?$ Catch လuပ#မလ+$ Throw လuပ#မလ+$ဆiuတ+ကiu eရ&$ခGယ#
FကရမH+လ- ဆiuတ+ကiu ဆက#Kပ?$ eလ6လ+သ&+$Fကရeအ+င#။

Catch လuပ#မလ+$ Throw လuပ#မလ+$ဆiuတ+ကeတ+6 မiမieရ$သ+$eနတ-6 Method ရ-I အeCခအeနအပ2မH+ပ- မOတည#


Kပ?$ ဆuB$Cဖတ#ရမH+ Cဖစ#ပ3တယ#။ တစ#ခGiu Exception eတ&ကeတ+6 eရ$eနတ-6 Method ထ-မH+ပ- Handle လuပ#လiuရတ-6
အခ3မGiu$လ-QiAiuင#သလiu တစ#ခGiuကGeတ+6လ- လက#Qi Method ထ-မH+eတ+6 Handle လuပ#လiuမရဘO$။ eရ$ထ+$တ-6
Method ကiu အသuB$Cပuတ-6 eနရ+မH+မH Handle လuပ#လiuရတ+မGiu$Qiတတ#ပ3တယ#။ လက#Qi Method ထ-မH+ပ- Handle
Learning Java 215 မင#$လ&င#
Java Developer Class
လuပ#Aiuင#တ-6 အခ3မGiu$မH+ဆiuရင# Catch လuပ#Kပ?$ eCဖQင#$သင#6eပမ-6 လက#Qi Method ထ-မH+ Handle မလuပ#Aiuင#တ-6 အခ3
မGiu$မH+ဆiuရင#eတ+6 Declaration ကeန Throw လuပ#eပ$တ+ သင#6eတ+#ပ3တယ#။

e^မH+ Exception eတ&ကiu ဘယ#လiu Catch လuပ#မယ#ဆiuတ+ကiu eဖ2CပKပ?$ Cဖစ#တ-6 အတ&က# ဒ?eနရ+မH+eတ+6 ဘယ#လiu
Throw Declaration ကiu eရ$သ+$ရမယ#ဆiuတ+ကiuပ- eဖ2Cပသ&+$ပ3မယ#။

public class Person {

private String name;


private int age;

public Person(String name, int age) throws Exception {

if(age <= 0) {
throw new Exception(
"Age must be greater than 0");
}

this.name = name;
this.age = age;
}
}

Throw Declaration ကiu eရ$သ+$မယ#ဆiuရင# Constructor ဒ3မHမဟuတ# Method Declaration eတ&ရ-I eန+က#မH+
throws ဆiuKပ?$ Throw လuပ#လiuတ-6 Exception eတ&ကiu eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Exception တစ#ခuထက#မက
Throw လuပ#ခGင#တယ#ဆiuရင# Comma (,) ကiu ခBKပ?$eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

public void readAndSaveToDB()


throws IOException, SQLException {
// other codes
}

တကယ#လiu IOException န-9 SQLException ကiu Method ထ-ကeန Throw လuပ#ခGင#တယ#ဆiuရင# အထက#ပ3
အတiuင#$ throws IOException, SQLException ဆiuKပ?$ eရ$သ+$eပ$ရမH+ Cဖစ#ပ3တယ#။

Throw Declaration eတ&မH+ Unchecked Exception eတ&ကiu eရ$သ+$ထ+$ရင#လ- ရပ3တယ#။ ဒ3eပမ-6 မeရ$ထ+$
ရင#လ- Cပဿန+မQiတ-6 အတ&က# eရ$ထ+$ထ+$ မeရ$ထ+$ထ+$ အတOတOပ- Cဖစ#ပ3မယ#။

Learning Java 216 မင#$လ&င#


Java Developer Class

One more Option


Checked Exception eတ&ကiu Throw လuပ#ထ+$တ-6 Method eတ& Constructor eတ&ကiu အသuB$Cပuမiတ-6 အခ3မGiu$မH+၊
Catch လuပ#Kပ?$ eCဖQင#$မလ+$၊ Throw Declaration ကiu eရ$မလ+$လiu e^မH+ eဖ2Cပခ-6ပ3တယ#။ ဒ3eပမ-6 အCခ+$
eရ&$ခGယ#စရ+ လမ#$တစ#ခuQieနပ3eသ$တယ#။ ဒ3ကeတ+6 Catch လuပ#Kပ?$ အCခ+$eသ+ Exception တစ#ခuအeနန-9 Cပန#
Kပ?$ Throw လuပ#ပစ#တ+ပ- Cဖစ#ပ3တယ#။

ဒ3ကလ- Checked Exception eတ&ကiu ဒ?အတiuင#$ Throw လuပ#ပစ#ရင# eCဖQင#$Aiuင#တ-6 အစ&မ#$မQiပ- Catch လuပ#Kပ?$
eဖG+က#ပစ#မH+စiu$တ-6 အတ&က# Fက+$ထ-မH+ Catch လuပ#စရ+မလiuအပ#တ-6 Runtime Exception အeနန-9 Cပန#Kပ?$ Throw
လuပ#ပစ#ခGင#တ-6 အခ3မGiu$မH+ အသuB$CပuAiuင#ပ3တယ#။ ဒ3က API eတ&ကiu eရ$သ+$တ-6eနရ+မH+eတ+6 အသuB$မCပuသင#6ပ3ဘO$။
Application eတ&ကiu eရ$သ+$တ-6 eနရ+မH+eတ+6 အသuB$Cပuသင#6ပ3တယ#။

public void insert(Customer c) {

try(Connection conn == DriverManager.getConnection();


Statement stmt = conn.createStatement()) {

// Business Codes

} catch (SQLException e) {
throw new RuntimeException("Database Error", e);
}
}

အထက#ပ3နမOန+က JDBC API ကiu အသuB$Cပueနတ-6 Insert Method eလ$တစ#ခuCဖစ#ပ3တယ#။ DriverManager န-9
Connection Object ကiu ရယOKပ?ဆiuတ+န-9 SQLException ကiu Cဖစ#eပ2eစပ3တယ#။ SQLException ဟ+
Checked Exception Cဖစ#တ-6 အတ&က# Handle လuပ#ဖiuလiuပ3တယ#။ ဒ?eနရ+မH+ SQLException ကiu Catch လuပ#Kပ?$
Handle မလuပ#ပ- eန+က#ထပ# RuntimeException တစ#ခuအeနန-9 Throw လuပ#လiuက#ပ3တယ#။

RuntimeException Cဖစ#တ-6 အတ&က# insert method မH+ throw declaration ကiu eရ$သ+$စရ+မလiueတ+6ပ3ဘO$။
Kပ?$eတ+6လ- insert method ကiu အသuB$Cပueနတ-6 Call Site မH+လ- မလiuအပ#ပ- Handle လuပ#စရ+မလiuအပ#ပ3ဘO$။

တကယ#တမ#$ကGeတ+6 Exception eတ&ဟ+ Cဖစ#eပ2လ+ရင# မHန#မHန#ကန#ကန# Handle လuပ#Aiuင#ဖiuလiuအပ#ပ3တယ#။


Handle လuပ#တယ#ဆiuတ+က လက#Qiလuပ#eနတ-6 အခGက#အလက#eတ&မHန#ကန#eစဖiuအတ&က# တစ#ပiuင#$တစ#စ သ&င#$
ထ+$တ-6 Data eတ&ကiu Cပန#Kပ?$ Rollbback လuပ#တ+တiu၊ ဘ+eFက+င#6 Exception Cဖစ#တယ#ဆiuတ+ကiu User ကiu Cပန#
Kပ?$ အeFက+င#$Fက+$Aiuင#ဖiuလiuအပ#ပ3တယ#။

အ-6ဒ3eတ&ကiu မလuပ#Aiuင#ပ-၊ တစ#eနeနရ+ကeန Catch လuပ#Kပ?$ eဖG+က#ပစ#လiuက#တယ#ဆiuတ+က eFက+က#စရ+


အeက+င#$ဆuB$ အeနအထ+$တစ#ခuCဖစ#ပ3တယ#။ ဒ36eFက+င#6 Application eတ&ကiu eရ$သ+$တ-6eနရ+မH+ အသuB$Cပuတ-6
eနရ+တiuင#$ မCဖစ#မeန Handle လuပ#ဖiuလiuတ-6 Checked Exception eတ&ထက#စ+ရင#၊ လiuအပ#မHသ+ Handle လuပ#ဖiu
လiuတ-6 Unchecked Exception eတ&ကiu Throw လuပ#တ+မG+$ပ3တယ#။


Learning Java 217 မင#$လ&င#


Java Developer Class

Custom Exception
e^မH+eလ6လ+ခ-6Fကသလiu Exception eတ&ကiu Developer eတ&က Create လuပ#Kပ?$ Throw လuပ#Aiuင#ပ3တယ#။ ဒ?လiu
Throw လuပ#တ-6eနရ+မH+ QiKပ?$သ+$ Exception တစ#ခuကiu Throw လuပ#လiuက#ရင#လ-ရသလiu မiမiကiuယ#ပiuင# Custom
Exception တစ#ခuကiu eရ$သ+$Kပ?$ Throw လuပ#ရင#လ- ရAiuင#ပ3တယ#။

Platform မH+ပ3တ-6 Exception eတ&န-9 မiမiရ-I Application ထ-ကeန Cဖစ#တ-6 Exception eတ&ကiuခ&-Cခ+$လiuတ-6အခ3၊ ဒ3မH
မဟuတ# Exception ထ-မH+ အCခ+$eသ+ State eတ&ကiu ပiuင#ဆiuင#ထ+$eစလiuတ-6 အခ3မGiu$မH+ Custom Exception eတ&
ကiu eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။

Writing Custom Exception


Custom Exception တစ#ခuကiu eရ$သ+$မယ#ဆiuရင# Throwable Class အမGiu$အစ+$ AHစ#သက#ရ+ Exception တစ#
ခuကiu Extends လuပ#Kပ?$eရ$သ+$Aiuင#ပ3တယ#။ e^မH+eဖ2Cပခ-6သလiuပ- Checked Exception မဟuတ#တ-6 Unchecked
Exception Cဖစ#တ-6 RuntimeException အမGiu$အစ+$တစ#ခuခuကiu Extends လuပ#Kပ?$eရ$သ+$Fကတ+မG+$ပ3တယ#။

public class HotelAppException extends RuntimeException {

HotelAppException ဟ+ RuntimeException ကiu Extends လuပ#ထ+$တ-6အတ&က# Unchecked Exception


အမGiu$အစ+$ Exception တစ#ခuCဖစ#လ+ပ3တယ#။ ဒ36eFက+င#6 မလiuအပ#ပ- Handle လuပ#စရ+မလiuအပ#ပ3ဘO$။

public void insert(Customer c) {

try(Connection conn == DriverManager.getConnection();


Statement stmt = conn.createStatement()) {

// Data Validation
if(null == c.getName()) {
throw new HotelAppException(
"Customer Name must not be null!");
}

// Business Codes

} catch (SQLException e) {
throw new HotelAppException("Database Error", e);
}
}

Custom Exception Cဖစ#တ-6 HotelAppException ကiu Throw လuပ#ထ+$တ-6အတ&က# Handle လuပ#တ-6eနရ+မH+ မiမi
Application ကeန Throw လuပ#တ-6 Exception န-9 Platform ကeန Throw လuပ#တ-6 Exception eတ&ကiu ခ&-Cခ+$Kပ?$
Handle လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 218 မင#$လ&င#


Java Developer Class

Throwing Custom Exception


Custom Exception eတ&ကiu Throw လuပ#တယ#ဆiuတ-6eနရ+မH+ အeနအထ+$AHစ#မGiu$QiAiuင#ပ3တယ#။ တစ#ခuကeတ+6
အCခ+$ Exception eတ&ကiu Catch လuပ#Kပ?$ Throw လuပ#တ+Cဖစ#Kပ?$၊ eန+က#တစ#ခuကeတ+6 မiမiရ-I Application Data
eတ&ကiu မHန#ကန#eစရန# စစ#eဆ$Kပ?$ မသင#6eတ+#တ-6eနရ+မGiu$မH+ Throw လuပ#တ+မGiu$Cဖစ#ပ3တယ#။ အeနအတ+$အeပ2
မH+မOတည#Kပ?$ Exception Object ထ-မH+ ထည#$eပ$သင#6တ-6 Information eတ&ဟ+ မတOAiuင#ပ3ဘO$။

အeCခခBအ+$Cဖင#6 Exception တစ#ခuထ-မH+ String message န-9 Throwable cause တiuကiu သတ#မHတ#eပ$Aiuင#ပ3
တယ#။ String message ကeတ+6 ဘ+eFက+င#6ဘယ#လiuCဖစ#တယ#ဆiuတ+ကiu eဖ2Cပတ-6eနရ+မH+ အသuB$Cပuသင#6Kပ?$
Exception Object ကeန getMessage() Method ကiu အသuB$CပuKပ?$ Cပန#လည#ရယOAiuင#ပ3တယ#။ Exception ကiu
Create လuပ#တ-6eနရ+မH+ Message ကiu သတ#မHတ#eပ$ထ+$ခ-6ရင#၊ Exception ကiu Handle လuပ#တ-6eနရ+မH+ Cပန#Kပ?$
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ Throwable cause ကeတ+6 လက#Qi Exception ကiu Cဖစ#eစတ-6 မOရင#$ Exception
Object ကiu သတ#မHတ#eပ$တ-6eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#။

public void insert(Customer c) {

try(Connection conn == DriverManager.getConnection();


Statement stmt = conn.createStatement()) {
// Business Codes

} catch (SQLException e) {
throw new HotelAppException("Database Error", e);
}
}

အCခ+$ Exception တစ#ခuကiu Catch လuပ#Kပ?$ Custom Exception ကiu Throw လuပ#တ-6 အeနအထ+$မGiu$မH+ဆiuရင#၊ ဒ?
Exception ကiu Cဖစ#eစတ-6 Root Cause Exception ကiu သတ#မHတ#eပ$သင#6ပ3တယ#။ ဒ3မHသ+ Handle လuပ#တ-6
eနရ+မH+ ဒ? Exception ကiu Cဖစ#eပ2eစတ-6 အeFက+င#$အရင#$အCပည#6အစuBကiu သiAiuင#မH+ Cဖစ#ပ3တယ#။ အထက#ပ3
အတiuင#$ HotelAppException ကiu တည#eဆ+က#တ-6eနရ+မH+ SQLException Object Cဖစ#တ-6 e ကiuထည#6eပ$လiuက#
တ+ဟ+ Root Cause ကiu သတ#မHတ#eပ$လiuက#တ+ပ- Cဖစ#ပ3တယ#။ အ-6ဒ?အတ&က# HotelAppException ကiu Cဖစ#eစ
တ+ဟ+ SQLException ဆiuတ+ကiu သieစAiuင#မH+ Cဖစ#ပ3တယ#။

// Data Validation
if(null == c.getName()) {
throw new HotelAppException(
"Customer Name must not be null!");
}

Customer ကiu Insert လuပ#တ-6eနရ+မH+ Name မပ3ဘO$ဆiuတ+ဟ+ မQiသင#6ပ3ဘO$။ အ-6ဒ?လiu မCပည#6စuBတ-6 Information
eတ&ကiu Database ထ-ကiu Insert မလuပ#eအ+င# Exception eတ&ကiu Throw လuပ#Aiuင#ပ3တယ#။ Handle လuပ#တ-6
eနရ+ကeန ဘ+eFက+င#6 Exception ကiu Cဖစ#eစတယ#ဆiuတ+ကiu သiQiAiuင#eအ+င# Message eတ&န-9 Exception ကiu
Create လuပ#Aiuင#ပ3တယ#။ ဒ3မHသ+ User ဆ?ကiu ဘ+eFက+င#6 Insert လuပ#လiuမရဘO$ဆiuတ+ကiu eဖ2Cပeပ$Aiuင#မH+ Cဖစ#ပ3
တယ#။

Learning Java 219 မင#$လ&င#


Java Developer Class

Additional States in Custom Exception


Custom Exception eတ&ကiu eရ$သ+$တ-6eနရ+မH+ Throwable Class မH+ပ3တ-6 State eတ&ကiuလ- အသuB$CပuAiuင#
သလiu၊ လiuအပ#ပ3က မiမiကiuယ#ပiuင# State eတ&ကiuလ- eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#။ Exception ကiu Handle လuပ#တ-6
eနရ+မH+ Message eတ&ကiu Alert Box န-9CပမH+လ+$၊ Message Bar မH+CပမH+လ+$ အစQiတ-6 Information eတ&ကiu
ထည#6သ&င#$အသuB$Cပuလiuတ-6အခ3မGiu$မH+ ကiuယ#ပiuင# State eတ&ကiu eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။

public class HotelAppException extends RuntimeException {

private boolean needToAlert;

public HotelAppException(String message, boolean needToAlert) {


super(message);
this.needToAlert = needToAlert;
}

public boolean isNeedToAlert() {


return needToAlert;
}
}

အထက#ပ3အတiuင#$ needToAlert ဆiuတ-6 boolean variable တစ#ခuကiu State အeနန-9ထ+$Kပ?$၊ Exception Object
ကiu eဆ+က#တ-6အခ3မH+ သတ#မHတ#ခiuင#$မH+ Cဖစ#ပ3တယ#။ Exception ကiu Handle လuပ#တ-6အခ3ကGမH ဒ? State ကiuFကည#6
Kပ?$ Alert န-9Cပမလ+$ ဆiuတ+ကiu ဆuB$Cဖတ#Aiuင#မH+ Cဖစ#ပ3တယ#။

Benefit of Exception
Exception ကiu အသuB$CပuKပ?$ ရQiAiuင#တ-6 အကGiu$eတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။

✓ Exception Handling Code eတ&န-9 Business Logic eတ&ကiu ခ&-ထuတ#eပ$Aiuင#



Try - Catch Statement eတ&ကiu အသuB$CပuCခင#$အ+$Cဖင#6 Business Logic န-9 Error Handling Code eတ&ကiu
သ?$Cခ+$စ?Qieအ+င# ခ&-ထuတ#eပ$Aiuင#ပ3တယ#။ 


✓ Error eတ&ကiu Cဖစ#eစတ-6 မOလeနရ+ကiueရ+က#eအ+င# Cပန#ပiueပ$Aiuင#Cခင#$



Exception Cဖစ#Kပ?ဆiuတ+န-9 Call Stack အလiuက# eCဖQင#$Aiuင#မည#6 Handler eတ&ကiu Q+eဖ&သ&+$Kပ?$မeတ&JQiခ-6ပ3က
စတင#eခ2ဆiuခ-6တ-6 eနရ+အထieရ+က#eအ+င# Cပန#ပiueပ$Aiuင#ပ3တယ#


✓ Error အမGiu$အစ+$အ+$ခ&-Cခ+$သiQiAiuင#

Exception eတ&ကiu Inheritance Hirarechy အလiuက#ခ&-Cခ+$ထ+$Aiuင#Cခင#$၊ မiမiကiuယ#ပiuင# Custom Exception
တiuကiu eရ$သ+$ထ+$Aiuင#Cခင#$တiueFက+င#6 ဘ+eFက+င#6ဒ? Exception ကiu Cဖစ#eစတယ#ဆiuတ+ကiu အလ&ယ#တကOသiQi
eစAiuင#ပ3တယ#

Learning Java 220 မင#$လ&င#


Java Developer Class

Method Overriding
OOP ရ-I Inheritance အeFက+င#$ကiu eလ6လ+ခ-6တuန#$က Super Class ကeန Inheritance လuပ#လ+တ-6 Method
eတ&ကiu Sub Class ကeန Override လuပ#Aiuင#တယ#ဆiuတ+ကiu eလ6လ+ခ-6Fကပ3တယ#။ Exception ကiu Throw လuပ#
ထ+$တ-6 Method တစ#ခuကiu Override လuပ#eတ+6မယ#ဆiuရင# သတiCပuစရ+တစ#ခuQiပ3တယ#။ ဒ?eနရ+မH+လ- Checked
Exception န-9 Unchecked Exception တiuရ-I အeCခအeနeတ&ဟ+ မတOFကပ3ဘO$။

အeCခခBအ+$Cဖင#6 Unchecked Exception eတ&ဟ+ Compiler ကeန Check လuပ#စရ+မလiuတ-6 အတ&က# Throw
လuပ#ထ+$ရင#လ- Call Site မH+ အeထ&အထO$ Handle လuပ#စရ+မလiuအပ#ပ3ဘO$။ ဒ36eFက+င#6 Unchecked Exception
eတ&ကiu Super Class မH+ပ-Cဖစ#Cဖစ# Override လuပ#မည#6 Sub Class မH+ပ-Cဖစ#Cဖစ# Throw လuပ#လiuရပ3တယ#။ အ-6ဒ?
အတ&က# Override Rule ကiu ခGiu$eဖ3က#သ&+$တယ#ဆiuတ+ မQiAiuင#ပ3ဘO$။

ဒ3eပမ-6 Checked Exception eတ&ကeတ+6 မတOပ3ဘO$။ Checked Exception eတ&ကiu Throw လuပ#ထ+$တ-6
Method eတ&ကiu အသuB$Cပuမယ#ဆiuရင# Call Site မH+ Handle လuပ#ထ+$တယ# မလuပ#ထ+$ဘO$ဆiuတ+ကiu Compiler
ကeန စစ#eဆ$eနပ3တယ#။ Kပ?$eတ+6 Inheritance Cဖစ#Kပ?ဆiuကထ-က IS - A Relationship ကiu Cဖစ#eပ2eစKပ?$ Sub
Type eတ&ကiu Super Type အeနန-9 အသuB$CပuAiuင#ရပ3မယ#။ ဒ3eFက+င#6မiuလiu Override လuပ#မည#6 Method eတ&ဟ+
Super Type မH+ Throw လuပ#မထ+$တ-6 Checked Exception eတ&ကiu Throw လuပ#လiu မရAiuင#ပ3ဘO$။

ဘ+eတ&လuပ#လiuရKပ?$ ဘ+eတ&လuပ#လiuမရဘO$ဆiuတ+ကiueတ+6 eအ+က#မH+ eဖ2Cပထ+$ပ3တယ#။

Unchecked Exception
✓ Unchecked Exception eတ&ဟ+ Compiler ကeန စစ#eဆ$စရ+မလiuတ-6 Exception eတ& Cဖစ#Fကတ-6 အတ&က#
Override မH+ အကGiu$သက#eရ+က#မ[မQiပ3ဘO$
✓ Super Class ရ-I Method ထ-မH+ Unchecked Exception ကiu Throw လuပ#ထ+$တယ#၊ Override လuပ#မည#6
Method မH+ Throw မလuပ#လ-ရပ3တယ#။
✓ Super Class ရ-I Method ထ-မH+ Unchecked Exception ကiu Throw လuပ#ထ+$တယ#၊ Override လuပ#မည#6
Method မH+ အCခ+$ Unchecked Exception တစ#ခuကiu Throw ခGင#ရင#လ-ရပ3တယ#။
✓ Super Class ရ-I Method မH+ ဘ+ Exception ကiuမH Throw မလuပ#ထ+$တ-6 အခ3မGiu$မH+လ- Override လuပ#မည#6
Method ထ-ကeန Unchecked Exception ကiu Throw လuပ#လiuလ-ရမH+ Cဖစ#ပ3တယ#။

Checked Exception
✓ Super Class ရ-I Method ထ-က Throw လuပ#မထ+$ပ- Override လuပ#မည#6 Method ထ-ကeန Checked
Exception တစ#ခuကiu Throw လuပ#လiu မရAiuင#ပ3ဘO$

✓ Super Class ရ-I Method ထ-မH+ Checked Exception တစ#ခuကiu Throw လuပ#ထ+$eပမ-6 Override လuပ#မည#6
Method မH+ Exception ကiu Throw လuပ#မထ+$ရင#လ- ရပ3တယ#
✓ Super Class ရ-I Method ထ-က Throw လuပ#ထ+$တ-6 Checked Exception န-9 ထပ#တO ဒ3မHမဟuတ# Sub Type
မGiu$ကiu Override လuပ#တ-6 Method ကeန Throw လuပ#ပiuင#ခ&င#6Qiပ3တယ#
✓ Super Class ရ-I Method ထ-က Throw လuပ#ထ+$တ-6 Checked Exception ရ-I Super Type ဒ3မHမဟuတ# မ
ဆiuင#တ-6 အCခ+$ Checked Exception တစ#မGiu$မGiu$ကiu Override လuပ#မည#6 Method ထ-ကeန Throw လuပ#လiu မ
ရAiuင#ပ3ဘO$

Learning Java 221 မင#$လ&င#


Java Developer Class

Using Strings

က\န#eတ+#တiu Java Programming ကiueလ6လ+တ-6 အခ3မH+ အသuB$အမG+$ဆuB$ Data Type လiueCပ+မယ#ဆiuရင#


String ပ- Cဖစ#ပ3တယ#။ Java ဆiuတ+ဘ+မHန#$မသiခင# စစKပ?$eရ$တ-6 Hello World ကiu eရ$မယ#ဆiuရင#eတ+င# String
ဆiuတ+ကiu ဘ+မHန#$မသiပ- eရ$သ+$ခ-6ရမH+ eသခG+ပ3တယ#။ ဒ?အခန#$မH+eတ+6 က\န#eတ+#တiu အသuB$အမG+$ဆuB$ Data
Type Cဖစ#တ-6 String အeFက+င#$ကiu eလ6လ+သ&+$Fကပ3မယ#။ String ဆiuတ+ဘ+လ- String eတ&ရ-I ထO$Cခ+$ခGက#eတ&
က ဘယ#လiuလ-၊ eန+က#က&ယ#မH+ String eတ&က ဘယ#လiu အလuပ#လuပ#eနFကသလ- ဆiuတ+န-9 String eတ&ကiu
Compose လuပ#မယ#ဆiuရင# ဘယ#လiu eရ$သ+$Fကမလ- ဆiuတ+ကiu ဒ?အခန#$မH+ eလ6လ+သ&+$Fကပ3မယ#။

About String
String ဟ+ အသuB$အမG+$ဆuB$ Data Type Cဖစ#Kပ?$၊ Object တစ#မGiu$Cဖစ#ပ3တယ#။ Java မH+က Charactor တစ#လuB$စ?
ကiu ကiuယ#စ+$Cပuဖiuအတ&က# Primitive data type Cဖစ#တ-6 char ကiu အသuB$CပuAiuင#ပ3တယ#။ String ဆiuတ+ကeတ+6
charactor array ကiu ကiuယ#စ+$CပuAiuင#တ-6 Object Cဖစ#Kပ?$၊ ထည#6သ&င#$ထ+$တ-6 charactor တစ#လuB$စ?ရ-I အစ?အစT#ကiu
သiမ#$ထ+$eပ$Aiuင#ပ3တယ#။

အသuB$အမG+$ဆuB$ Data Type Cဖစ#တ-6 အeလG+က# String eတ&မH+ အCခ+$eသ+ Object eတ&န-9 မတOတ-6 အခGက#eတ&ပ3
ထည#6သ&င#$eရ$သ+$ထ+$ခ-6Fကပ3တယ#။ က\န#eတ+#တiu ဒ?eနရ+မH+ String ဟ+ ဘယ#လiu သဘ+ဝQiတယ#ဆiuတ+ကiu
eလ6လ+သ&+$Fကရeအ+င#။

String has own Literals like Primitives


Java Source file eတ&ထ-မH+ ဘ+eတ&eရ$လiuရလ-။ Source Code eတ&၊ Comment eတ& အCပင#ကiu Value eတ&ကiu
တiuက#Uiuက#eရ$သ+$လiuရပ3တယ#။

int intData = 0;
char charData = 'c';
Object objData = null;

အထက#eဖ2Cပပ3 Assignment Statement eတ&ထ-မH+ 0 တiu ‘c’ တiu null တiuဟ+ ကuဒ#eတ&မဟuတ#ပ3ဘO$။
Assignmrny eတ&မH+ အစ+$ထiu$မည#6 Value eတ&Cဖစ#ပ3တယ#။ ဤက-6သiu Source Code eတ&ထ-မH+ Value eတ&ကiu
eရ$သ+$ထ+$တ+eတ&ကiu Literals လiu eခ2Fကပ3တယ#။

Learning Java 222 မင#$လ&င#


Java Developer Class
e^မH+ Java Basic Data Type eတ&အeFက+င#$ကiueလ6လ+ခ-6စT#တuန#$က Primitive Data Type eတ&အeFက+င#$ကiu
eလ6လ+ခ-6Fကပ3တယ#။ Primitive Data Type eတ&မH+ သOတiuရ-I ကiuယ#ပiuင# Literals eတ&ကiu ပiuင#ဆiuင#FကKပ?$eတ+6
Refernce Data Type eတ&မH+eတ+6 Literals အeနန-9 null တစ#ခuပ- အသuB$Cပuလiuရပ3တယ#။ Strring eတ&ကeတ+6
eခင#$ခGက#လiu eရ$သ+$eဖ2Cပခ-6ပ3တယ#။

ဟuတ#ပ3တယ# String eတ&ဟ+ Reference Type eတ&Cဖစ#eပမ-6 Primitive Type eတ&လiuပ- ကiuယ#ပiuင# literals eတ&
ကiu ပiuင#ဆiuင#ပ3တယ#။ က\န#eတ+#တiu String Type Variable တစ#ခuကiu အသuB$CပuKပ?$ Assignment Statement eတ&ကiu
eရ$သ+$တ-6 eနရ+မH+ Source Code eတ&ထ-မH+ Value ကiu တiuက#Uiuက#eရ$သ+$Aiuင#ပ3တယ#။

String name = null;


name = “Mike”;

String Literals eတ&ကiu eရ$သ+$တ-6eနရ+မH+ Double Quotation (“) ကiu အသuB$CပuKပ?$ eရ$သ+$Aiuင#ပ3တယ#။
အထက#ပ3 Statement ထ-မH+ name ဟ+ String Type Variable Cဖစ#Kပ?$ “Mike” ဟ+ name eနရ+မH+ အစ+$ထiu$မ
ည#6 တန#ဖiu$Cဖစ#ပ3တယ#။

ဒ?eနရ+မH+ အထင#မမH+$eစလiuတ+က String eတ&eနရ+မH+ Value က တiuက#Uiuက#အစ+$ထiu$လiuရeနတ+ မဟuတ#ပ3


ဘO$။ Strring eတ&ဟ+ Object eတ&ပ- Cဖစ#ပ3တယ#။ ဒ?လiu Literal န-9 eရ$သ+$ထ+$တ-6 String eတ&ဟ+ ဘယ#လiu
အလuပ#လuပ#သလ- ဆiuတ+ကiu ဆက#Kပ?$ eလ6လ+သ&+$Fကရeအ+င#။

String take String Pools


String eတ&ဟ+ အသuB$အမG+$ဆuB$ Data Type Cဖစ#တ-6 အတ&က# Java ကiu eရ$သ+$သOeတ&က eရ$သ+$ရလ&ယ#ကOeစ
ရန# Literal eတ&ကiu Cပင#ဆင#eပ$ထ+$ခ-6ပ3တယ#။ အ-6ဒ3အCပင# String တiuင#$ကiu Object တစ#ခueဆ+က#eနရင# Memory
အeပ2မH+ eနရ+အမG+$Pက?$ Cဖစ#ကuန#ပ3မယ#။ အ-6ဒ?အတ&က# Literal န-9 eရ$သ+$ထ+$တ-6 String eတ&ကiu Heap
Memory အeပ2မH+ String Pools ဆiuတ-6 eနရ+တစ#eနရ+မH+ သiမ#$ထ+$eစပ3တယ#။

တကယ#လiu က\န#eတ+#တiu Program ထ-မH+ Literal န-9 eရ$သ+$ထ+$တ-6 String Value တစ#ခuကiu eတ&JKပ?ဆiuတ+န-9
String Pools ထ-မH+ အ-6ဒ?တန#ဖiu$န-9 String Object Qiလ+$ဆiuတ+ကiu သ&+$Q+ပ3တယ#။ Qieနရင#eတ+6 အ-6ဒ? String
Object ရ-I Referrence ကiu String Variable eနရ+မH+ အသuB$Cပuပ3တယ#။ မQiဘO$ဆiuရင#eတ+6 String Pools ထ-မH+
Literal Value Qiတ-6 String Object ကiuတည#eဆ+က#Kပ?$ String Variable eနရ+မH+ Reference ကiu အစ+$ထiu$ပ3
တယ#။

Learning Java 223 မင#$လ&င#


Java Developer Class
ဒ?eနရ+မH+ Reference လiueCပ+တ+က အ-6ဒ? String Object တည#Qiတ-6 Memory Address ကiu eCပ+တ+ Cဖစ#ပ3
တယ#။ Reference န-9ပတ#သက#Kပ?$ Reference Data Type eတ&အeFက+င#$မH+ eဖ2Cပခ-6Kပ?$ Cဖစ#ပ3တယ#။ String
Pools ကiu အသuB$CပuCခင#$အ+$Cဖင#6 တန#ဖiu$တO String eတ&ကiu JVM ရ-I Memory eပ2မH+ အမG+$Pက?$ eနရ+eပ$ထ+$
စရ+မလiuအပ#eတ+6ပ3ဘO$။

String Variable eတ&ကiu eရ$သ+$အသuB$Cပuတ-6eနရ+မH+ Object ကiu ဘယ#လiu တည#eဆ+က#ထ+$သလ- ဆiuတ-6


အeနအထ+$အeပ2မH+မOတည#Kပ?$ က&-Cပ+$eလ6QiFကပ3တယ#။

public static void main(String[] args) {

String string1 = "Hello Java";


String string2 = "Hello Java";
String string3 = new String("Hello Java");

// true
System.out.println(string1 == string2);

// false
System.out.println(string1 == string3);

// true
System.out.println(string1.equals(string3));
}

အထက#ပ3 ကuဒ#နမOန+ထ-မH+ “Hello Java” ဆiuတ-6 တန#ဖiu$Qiတ-6 String Variable သuB$ခuကiu eရ$သ+$ထ+$ပ3တယ#။
string1 န-9 string2 ကiueတ+6 Literals န-9 eရ$သ+$ထ+$Kပ?$ string3 ကiueတ+6 String Constructor ကiu အသuB$CပuKပ?$
eရ$သ+$ထ+$ပ3တယ#။

အထက#eဖ2Cပပ3ပuBထ-မH+လiu string1 န-9 string2 ဟ+ String Pools ထ-မH+Qiတ-6 “Hello Java” ကiu လHမ#$Kပ?$
Reference လuပ#eနတ-6 အတ&က# string1 == string2 ရ-I တန#ဖiu$ဟ+ true Cဖစ#ပ3မယ#။ ဒ3eပမ-6 string3 ဟ+ String
Constructor ကiu အသuB$CပuKပ?$ တည#eဆ+က#ထ+$တ-6 အတ&က# Heap Memory eပ2မH+ Object တစ#ခuကiu
တည#eဆ+က#သ&+$ပ3တယ#။ ဒ36eFက+င#6 string1 == string3 ရ-I တန#ဖiu$ဟ+ false Cဖစ#eနမH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6
String eတ&ရ-I Equality ကiu စမ#$စစ#ခGင#ရင# equals() method ကiu အသuB$Cပuသင#6ပ3တယ#။

Learning Java 224 မင#$လ&င#


Java Developer Class

Strings are Immutable


e^မH+ eဖ2Cပခ-6သလiu String eတ&ကiu String Pools ထ-မH+ သiမ#$ထ+$Kပ?$ အ-6ဒ? Object ကiu အCခ+$eသ+ Variable
eတ&ကeန တKပiuင#နက#ထ- Reference လuပ#eနAiuင#ပ3တယ#။ အ-6ဒ?အတ&က# String Object တစ#ခuရ-I တန#ဖiu$eတ&ကiu
eCပ+င#$လ-လiuရeနရင# အ-6ဒ? Object ကiu Reference လuပ#eနတ-6 Variabe eတ&မH+ မသiလiuက#ပ- တန#ဖiu$eတ&eCပ+င#$
ကuန#တ+eတ& Cဖစ#လ+Aiuင#ပ3တယ#။

အ-6ဒ3eFက+င#6 String Object eတ&ကiu တစ#ခ3တည#eဆ+က#Kပ?$ရင# တန#ဖiu$ကiu eCပ+င#$လiuမရeအ+င# စ?စT#ထ+$ခ-6Fကပ3


တယ#။ ဒ?လiuမGiu$ Object တစ#ခuကiu တည#eဆ+က#Kပ?$တ-6 အခ3မH+ တန#ဖiu$eCပ+င#$လiu မရAiuင#Cခင#$ကiu Immutable Cဖစ#
တယ#လiueခ2ဆiueလ6Qiပ3တယ#။

public static void main(String[] args) {

String hello = "Hello ";


String java = "Java";

// Code 1 - Print "Hello Java"


System.out.println(hello.concat(java));

// Code 2 - Print "Hello "


System.out.println(hello);

// Code 3 - Print "Java"


System.out.println(java);
}

အထက#ပ3ကuဒ#နမOန+ထ-မH+ hello န-9 java ဆiuတ-6 String Type Variable eတ&ကiu eရ$သ+$ထ+$ပ3တယ#။ Code 1 ဆiu
တ-6 eနရ+မH+ hello.concat(java) ဆiuတ-6 Method Invocation ကiu Print လuပ#ခiuင#$eနပ3တယ#။ concat(String)
method ဟ+ String Object ရ-I Member Method Cဖစ#Kပ?$ String AHစ#ခuကiu eပ3င#$တ-6 eနရ+မH+ အသuB$CပuAiuင#ပ3
တယ#။ Console eပ2မH+ “Hello Java” ဆiuKပ?$ Print လuပ#သ&+$တ+ကiu eတ&Jရပ3မယ#။

Kပ?$တ-6eန+က#မH+ Code 2 န-9 Code 3 တiuမH+ hello န-9 java တiuကiu Print လuပ#ခiuင#$eနပ3တယ#။ hello န-9 java ကiu
concat လuပ#ထ+$eပမ-6 ဒ?eနရ+မH+eတ+6 သOတiueတ&ဟ+ နဂiuတန#ဖiu$အတiuင#$Qieနတ+ကiu eတ&Jရပ3မယ#။ ဘ+လiuလ- ဆiu
eတ+6 hello.concat(java) လiueခ2လiuက#eပမ-6 String eတ&ဟ+ Immutable Cဖစ#တ-6 အတ&က# သOတiueတ&ရ-I တန#ဖiu$
eတ&ဟ+ eCပ+င#$မသ&+$ပ- “Hello Java” ဆiuတ-6 eန+က#ထပ# String Object တစ#ခuကiu တည#eဆ+က#eပ$လiuက#တ-6
အတ&က# Cဖစ#ပ3တယ#။

String eတ&ဟ+ Immutable Object eတ&Cဖစ#တ-6 အတ&က# String ရ-I ဘယ#လiu Method မGiu$ကiu သuB$သuB$ String
Variable eတ&ရ-I တန#ဖiu$ဟ+ eCပ+င#$လ-သ&+$မH+ မဟuတ#ပ3ဘO$။

String can use Arithmetic Operator


String eတ&အခGင#$ခGင#$ ဆက#Kပ?$ eန+က#ထပ# String တစ#ခuကiu ရယOလiuတ-6 အခ3မGiu$မH+ Arithmetic Operator Cဖစ#
တ-6 + ကiu အသuB$CပuKပ?$ eရ$သ+$Aiuင#ပ3တယ#။ ဒ?လiu + Operator ကiu အသuB$Cပueရ$သ+$တ-6 eနရ+မH+လ- String eတ&
အခGင#$ခGင#$အFက+$မH+ eရ$သ+$Aiuင#သလiu၊ String eတ&န-9 အCခ+$eသ+ Number Type eတ&Fက+$မH+လ- eရ$သ+$Aiuင#
ပ3တယ#။ String န-9 အCခ+$eသ+ Number eတ&အFက+$မH+ + ကiuအသuB$CပuKပ?$ Expression eတ&ကiu eရ$သ+$တ-6
eနရ+မH+ အCခ+$eသ+ Number eတ&ဟ+ String လiuပ- အလuပ#လuပ#Fကပ3တယ#။ ဒ3eပမ-6 Operator Precedence
အeပ2မOတည#Kပ?$ ရလ+တ-6 ရလဒ#eတ&ကiueတ+6 သတiCပuသင#6ပ3တယ#။

Learning Java 225 မင#$လ&င#


Java Developer Class

public static void main(String[] args) {

// Code 1 -> "Hello Java"


String str1 = "Hello " + "Java";
System.out.println(str1);

// Code 2 -> "101"


String str2 = "10" + 1;
System.out.println(str2);

// Code 3
String str3 = "10" + 1 + 1;
System.out.println(str3);

// Code 4 -> "105"


String str4 = "10" + 1 * 5;
System.out.println(str4);
}

အထက#ပ3နမOန+ထ-မH+ String eတ&ကiu + Operator အသuB$CပuKပ?$ eပ3င#$ဆက#တ+ကiu eရ$သ+$ထ+$ပ3တယ#။ Code 1


ကiu Fကည#6ပ3။ “Hello “ န-9 “Java” ကiu eပ3င#$လiuက#တ-6 အခ3မH+ String AHစ#ခueပ3င#$တ+ Cဖစ#တ-6 အတ&က# “Hello Java”
ဆiuKပ?$ထ&က#ပ3လiမ#6မယ#။

Code 2 ကeတ+6 “10” ဆiuတ-6 String န-9 1 ဆiuတ-6 int ကiueပ3င#$ထ+$တ+ပ3။ ဒ?eနရ+မH+ 1 ဟ+ int Cဖစ#eပမ-6 +
Operator ရ-I တစ#ဘက#ဘက#က String Cဖစ#eနတ-6 အတ&က# 1 ကiuလ- String အeနန-9 eCပ+င#$Kပ?$ အလuပ#လuပ#eစပ3
တယ#။ အ-6ဒ? အတ&က# ရလဒ#ဟ+ “101” ဆiuတ-6 String တစ#ခuCဖစ#လ+ပ3တယ#။

Code 1 န-9 Code 2 တiuမH+လiu Operator တစ#ခuန-9 Variable AHစ#ခuပ3တ-6 Simple Expression eတ&မH+ဆiuရင#eတ+6
Cပဿန+မQiပ3ဘO$။ တစ#ဘက#ဘက#မH+ String ပ3eနရင# ကGန#တ-6 Number ကiu String အeနန-9 eCပ+င#$သ&+$တ+ကiu
မHတ#ရလ&ယ#ပ3တယ#။ ဒ3eပမ-6 Expression တစ#ခuမH+ Operator တစ#ခuထက#မက အသuB$Cပuလ+Kပ?ဆiuရင#eတ+6
Operator Precedence ကiu သတiCပuဖiuလiuအပ#ပ3တယ#။

Arithmetic Operator eတ&ကiu တစ#ခuထက#မက အသuB$CပuKပ?$ Expression eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Operator
eတ&ရ-I Precedence အeပ2မOတည#Kပ?$ Evaluate လuပ#တ-6 အစ?အစT#eတ&က မတOည?Fကပ3ဘO$။ အeပ3င#$ (+) န-9 အ
AHတ# (-) ဟ+ Precedence တOည?Kပ?$ အeCမq+က# (*) န-9 အစ+$ (/) ဟ+ တOည?Fကပ3တယ#။ ပ3ဝင#တ-6 Operator eတ&
ဟ+ Precedent ခGင#$တOeနရင# ဘယ#ဘက# Expression ကeန စKပ?$ Evaluate လuပ#Fကပ3တယ#။ Code 3 မH+ “10”
+ 1 + 1 လiueရ$ထ+$တ-6 Expression မH+ ဘယ#ဘက#က Operator ကiu အရင# Evaluate လuပ#တ-6 အခ3မH+ “101” +
1 ဆiuKပ?$ အeCဖရပ3တယ#။ အ-6ဒ?အတ&က# ရလဒ#ဟ+ “1011” Cဖစ#သ&+$ပ3တယ#။

အeပ3င#$အAHတ#eတ&ထက# အeCမq+က#အစ+$ Operator eတ&ဟ+ Precedence Cမင#6မ+$Fကပ3တယ#။ Expression


တစ#ခuမH+ အeပ3င#$အAHတ#eတ&န-9 အeCမ+က#အစ+$ Operator eတ&eရ+eAH+Kပ?$ပ3လ+ရင# Precedence Cမင#6တ-6
Expression ကiu အရင# Evaluate လuပ#ပ3တယ#။ Kပ?$မH ကGန#တ-6 Expression ကiu Evaluate လuပ#မH+ Cဖစ#ပ3တယ#။
Code 4 မH+ “10” + 1 * 5 လiu eရ$သ+$ထ+$တ-6 အတ&က# 1 * 5 ကiu အရင# Evaluate လuပ#သ&+$မH+ Cဖစ#ပ3တယ#။ ဒ36
eFက+င#6 ပထမအPကiမ# Evaluate လuပ#လiuက#တ-6အခ3 “10” + 5 လiu Cဖစ#လ+Kပ?$ အ-6ဒ? Expression ကiu Evaluate လuပ#
တ-6 အခ3မH+ ရလဒ#ဟ+ “105” Cဖစ#သ&+$ပ3တယ#။

Learning Java 226 မင#$လ&င#


Java Developer Class

Manipulating Strings
String eတ&ကiu အသuB$Cပuမယ#ဆiuရင# အeCခခBအ+$Cဖင#6 eအ+က#ပ3 လuပ#eဆ+င#မ[eတ&ကiu လuပ#eဆ+င#Aiuင#မH+ Cဖစ#ပ3
တယ#။

• Character eတ&ကiu Index Number eတ&န-9 Q+eဖ&Aiuင#ပ3တယ#


• String တစ#ခuကeန အCခ+$eသ+ String eတ&အeနန-9 (Sub String) Cဖတ#eတ+က#Aiuင#ပ3တယ#
• String ထ-မH+ပ3ဝင#တ-6 Character eတ&ရ-I eနရ+ကiu Q+eဖ&Aiuင#ပ3တယ#
• String ထ-မH+Qiတ-6 စ+လuB$eတ&ကiu အCခ+$စ+လuB$eတ&န-9 အစ+$ထiu$Aiuင#ပ3တယ#
• String eတ&အခGင#$ခGင#$ Compare လuပ#Aiuင#ပ3တယ#

Character with Index

String eတ&ဟ+ Character eတ&ကiu Array အeနန-9 သiမ#$ဆည#$ထ+$eပ$Aiuင#တ-6 Object eတ&Cဖစ#တ-6 အတ&က#
သiမ#$ထ+$တ-6 Character eတ&ကiu Index Number eတ&န-9 Cပန#လည# ထuတ#ယOAiuင#ပ3တယ#။ အသuB$Cပuရမ-6 method
ကeတ+6 charAt(int) method Cဖစ#ပ3တယ#။ အထက#ပ3ပuBထ-မH+လiu charAt(0) ဆiuရင# Index Number 0 မH+Qiတ-6 ‘H’
ကiu Cပန#လည#ရQiမH+ Cဖစ#Kပ?$ charAt(6) ဆiuရင#eတ+6 ‘J’ ကiu ရQieစမH+ Cဖစဒ#ပ3တယ#။

Sub String to Another Strings

substring(1,5)

String Object eတ&ကiu Cဖတ#eတ+က#လiuတ-6အခ3မGiu$မH+ substring(int) န-9 substring(int, int) Method တiuကiu
အသuB$CပuAiuင#ပ3တယ#။ Integer Argument တစ#ခuပ3တ-6 subString() method ဟ+ Argument ရ-I eနရ+ကeန စKပ?$
String ကiu အဆuB$အထi Cဖတ#eတ+က#eပ$မH+ Cဖစ#ပ3တယ#။ Argument AHစ#ခuပ3တ+ကeတ+6 From Index န-9 To
Index eတ&Cဖစ#FကKပ?$ From ကeန To ရ-I အe^eနရ+အထi Cဖတ#eတ+က#eပ$မH+ Cဖစ#ပ3တယ#။ substring(1, 5) လiu
eရ$သ+$ထ+$ရင# 1 eနရ+ကeန 5 ရ-I အe^အထiCဖတ#eတ+က#eပ$မH+ Cဖစ#တ-6 အတ&က# “ELLO” ကiu ရQiမH+ Cဖစ#ပ3
တယ#။

Learning Java 227 မင#$လ&င#


Java Developer Class

Searching Character
String Object ထ-မH+ပ3တ-6 Character eတ&ကiu Q+eဖ&တ-6eနရ+မH+ eအ+က#ပ3 Method eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

Return Type Method


int indexOf(int ch)
int lastIndexOf(int ch)
int indexOf(int ch, int fromIndex)
int lastIndexOf(int ch, int fromIndex)
int indexOf(String str)
int lastIndexOf(String str)
int indexOf(String str, int fromIndex)
int lastIndexOf(String str, int fromIndex)
boolean contains(CharSequence seq)

String ဟ+ Character eတ&ကiu Array အeနန-9 သiမ#$eပ$ထ+$Aiuင#တ-6 Object Cဖစ#တ-6အတ&က# Q+eဖ&လiuတ-6


character တစ#လuB$ရ-I Array ထ-မH+Qiတ-6 Index Number ကiu Q+eဖ&Aiuင#ပ3တယ#။ Q+လiuတ-6 Character ဟ+ String
ထ-မH+ တစ#လuB$ထက#မက ပ3eနရင#eတ+6 e^ဆuB$ကeန စQ+မလ+$ eန+က#ဆuB$ကeနQ+မလ+$ စT#$စ+$ဖiuလiuပ3တယ#။
တဖန# From Index ကiu အသuB$CပuKပ?$ Q+ခGင#တ-6 eနရ+ကeန စQ+Aiuင#eအ+င# Method eတ&ကiuလ- Cပင#eပ$ထ+$ပ3
တယ#။ Q+ဖ&-တ-6eနရ+မH+ String ကiuလ-Q+eဖ&Aiuင#မH+ Cဖစ#ပ3တယ#။

public class StringDemo {

public static void main(String[] args) {


String extension = getExtension("StringDemo.java");
System.out.println(extension);
}

public static String getExtension(String fileName) {

if(fileName.contains(".")) {
int indexOfLastDot = fileName.lastIndexOf('.');
return fileName.substring(indexOfLastDot + 1);
}

return null;
}
}

အထက#ပ3နမOန+ထ-က getExtension(String) Method ဟ+ File Name eတ&ကeန Extension Type ကiu Q+eပ$
Aiuင#တ-6 Method Cဖစ#ပ3တယ#။ contains(“.”) ကiu အသuB$CပuKပ?$ Dot Qiလ+$ဆiuတ+ကiu စစ#ပ3တယ#။ eတ&Jခ-6ရင#
lastIndexOf(‘.’) ကiu အသuB$CပuKပ?$ Dot ရ-I eန+က#ဆuB$eနရ+ကiu Q+Kပ?$ substring(indexOfLastDot + 1) ကiu
အသuB$CပuKပ?$ Dot eန+က#က Extension Type ကiu Cဖတ#ယOKပ?$ Return Cပန#eပ$eနပ3တယ#။
Learning Java 228 မင#$လ&င#
Java Developer Class

Replacing Characters
String Object ထ-မH+ပ3တ-6 Character eတ&၊ ဒ3မHမဟuတ#ရင# String အစiတ#အပiuင#$eတ&ကiu အCခ+$ တန#ဖiu$eတ&န-9
အစ+$ထiu$Kပ?$ eန+က#ထပ# String Object တစ#ခuကiu တည#eဆ+က#eပ$Aiuင#တ-6 Method eတ&ကeတ+6 eအ+က#ပ3
အတiuင#$ Cဖစ#Fကပ3တယ#။

Return Type method


String replace(char oldChar, char newChar)
String replace(CharSequence target, CharSequence replacement)
String replaceAll(String regex, String replacement)
String replaceFirst(String regex, String replacement)

Character န-9လ- Replace လuပ#Aiuင#သလiu၊ CharSequence အလiuက#လ- Replace လuပ#Aiuင#ပ3တယ#။ Regular


Expression ကiu အသuB$CပuKပ?$ Pattern အလiuက# Match Cဖစ#တ-6 String eတ&ကiuလ- Replace လuပ#Aiuင#မH+ Cဖစ#ပ3
တယ#။

public static void main(String[] args) {

String original = "Java Programming";

// Code 1 -> Jzvz Progrzmming


String replace1 = original.replace('a', 'z');
System.out.println(replace1);

// Code 2 -> Jzvz Progrzmming


String replace2 = original.replace("a", "z");
System.out.println(replace2);

// Code 3 -> Jzvz Progrzmming


String replace3 = original.replaceAll("a", "z");
System.out.println(replace3);

// Code 4 -> Jzva Programming


String replace4 = original.replaceFirst("a", "z");
System.out.println(replace4);
}

Code 1 ကeတ+6 Character ကiu အသuB$CပuKပ?$ Replace လuပ#တ+Cဖစ#Kပ?$၊ Code 2 ကeတ+6 Character
Sequence ကiu အသuB$CပuKပ?$ Replace လuပ#တ+ Cဖစ#ပ3တယ#။ Code 1 eက+ Code 2 ပ3 Replace လuပ#ခGင#တ-6
စ+လuB$န-9 တOသမZ စ+လuB$eတ&အ+$လuB$ကiu Replace လuပ#Aiuင#တ+ကiu eတ&Jရပ3တယ#။

Code 3 န-9 Code 4 ကeတ+6 Regular Expression ကiu အသuB$CပuKပ?$ Pattern Match Cဖစ#တ-6 String eတ&ကiu
Replace လuပ#တ+Cဖစ#ပ3တယ#။ Code 3 မH+ replaceAll() Method ကiu အသuB$Cပuထ+$တ-6 အတ&က# Match Cဖစ#သမZ
String eတ&အ+$လuB$ကiu Replace လuပ#သ&+$Kပ?$၊ Code 4 မH+eတ+6 replaceFirst() Function ကiu အသuB$Cပuထ+$တ-6
အတ&က# ပထမဆuB$ Match Cဖစ#တ-6 String ကiuသ+ Replace လuပ#သ&+$တယ#ဆiuတ+ကiu eတ&JAiuင#ပ3တယ#။

Learning Java 229 မင#$လ&င#


Java Developer Class

Comparing Strings
Compare လuပ#တယ#ဆiuတ+ဟ+ ဘယ#သOPက?$သလ- ဘယ#သOငယ#သလ-ဆiuတ+ကiu Ai[င#$ယHT#တ+Cဖစ#ပ3တယ#။
Compare လuပ#Aiuင#မHသ+ ငယ#စT#Pက?$လiuက#၊ Pက?$စT#ငယ#လiuက# အစQiတ-6 Sorting လuပ#တ+eတ&ကiu eဆ+င#ရ&က#Aiuင#မH+
Cဖစ#ပ3တယ#။ Java မH+က Collection eတ&န-9 Array eတ&ထ-က Element eတ&ကiu Sort လuပ#Aiuင#ဖiu Collections
Framework ထ-မH+ Utility Class eတ&ကiu Cပင#eပ$ထ+$ပ3တယ#။ Utility Class eတ&ကiu အသuB$CပuKပ?$ Sort လuပ#Aiuင#ဖiu
အတ&က# Comparable Interface ကiu Implement လuပ#ထ+$ဖiuလiuအပ#ပ3တယ#။

String ဟ+လ- Comparable Interface ကiu Implement လuပ#ထ+$တ-6 အတ&က# compareTo() Method ကiu
eရ$သ+$ထ+$Kပ?$ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 String eတ&ကiuလ- Collection Framework ရ-I Utility Class eတ&ကiu
အသuB$CပuKပ?$ Natural Ordering အလiuက# Sort လuပ#လiuရပ3တယ#။ Sort လuပ#တ+န-9 ပတ#သက#Kပ?$ Collection
Framework အeFက+င#$ကiu eရ$သ+$တ-6အခ3မH+ အeသ$စiတ# eဖ2Cပသ&+$ပ3မယ#။

String မH+က String Cဖစ#သည#အeလG+က# Compare လuပ#တ+န-9 ပတ#သက#Kပ?$ အသuB$မG+$Aiuင#တ-6 Method eတ&ကiu
လ- ထပ#မBCပင#ဆင#ထ+$ပ3eသ$တယ#။

Return Type Method


boolean endsWith(String suffix)
boolean startsWith(String prefix)
boolean startsWith(String suffix, int offset)
int compareTo(String anotherString)
int compareToIgnoreCase(String anotherString)
boolean equals(Object object)
boolean equalsIgnoreCase(String anotherString)
boolean reginMatchs(int toOffset, String other, int offset,int len)
boolean reginMatchs(boolean ignorecase, int toOffset, String other, int offset, int len)

String တစ#ခuဟ+ သတ#မHတ#ထ+$တ-6 String တစ#ခuန-9 စသလ+$ ဆuB$သလ+$ဆiuတ+ကiu သiQiAiuင#ဖiu startsWith() န-9
endsWidth() Method eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

public static void main(String[] args) {


String original = "Java Programming”;

// Code 1 -> true


boolean result1 = original.startsWith("Java");
System.out.println(result1);

// Code 2 -> true


boolean result2 = original.startsWith("Pro", 5);
System.out.println(result2);

// Code 3 -> true


boolean result3 = original.endsWith("ming");
System.out.println(result3);
}

Learning Java 230 မင#$လ&င#


Java Developer Class
String AHစ#ခuကiu Compare လuပ#တ-6eနရ+မH+ Case ကiuပ3 Ignore လuပ#Kပ?$ Compare လuပ#Aiuင#eအ+င#
compareToIgnoreCase() Method ကiuလ- Cပင#ဆင#eပ$ထ+$ပ3eသ$တယ#။

public static void main(String[] args) {

// Code 1 -> -32


int result1 = "Java".compareTo("java");
System.out.println(result1);

// Code 2 -> 0
int result2 = "Java".compareToIgnoreCase("java");
System.out.println(result2);
}

Compare လuပ#တ-6 Method eတ&ရ-I Return Type ဟ+ Integer eတ&Cဖစ#Fကပ3တယ#။ သuညဆiuရင# String AHစ#ခuဟ+
တOတယ#လiu အဓiပW3ယ#ရKပ?$၊ အeပ3င#$ကiန#$ဆiuရင#eတ+6 ဘယ#ဘက#က String ဟ+ Pက?$တယ#လiu အဓiပW3ယ#ရပ3တယ#။
Return တန#ဖiu$ အAuတ#ကiန#$ဆiuပ3က ဘယ#ဘက#က String က ငယ#တယ#လiu အဓiပW3ယ#ရပ3တယ#။

အထက#ပ3 ကuဒ#ထ-က Code 1 မH+ “Java”.compareTo(“java”) လiu Compare လuပ#eနပ3တယ#။ “J” ဟ+ “j” ထက#
ငယ#တ-6 အတ&က# ရလဒ#ဟ+ -32 အAuတ#ကiန#$Cဖစ#ပ3တယ#။ တဖန# Code 2 မH+eတ+6 e^မH+ပ3တ-6 String AHစ#ခuကiuပ-
compareToIgnoreCase() Method ကiu အသuB$CပuKပ?$ Compare လuပ#ပ3တယ#။ Case eတ&ကiu ထည#6မတ&က#ပ-
Compare လuပ#တ-6 အတ&က# “Java” န-9 “java” ဟ+ တOပ3တယ#လiu အeCဖရပ3တယ#။

တဖန# String AHစ#ခuကiu တOမတO စစ#eဆ$Aiuင#ဖiuအတ&က# equals() န-9 equalsIgnoreCase() Method တiuကiu Cပင#eပ$
ထ+$ပ3တယ#။ အတiအကGတOမတOကiu သiခGင#ရင#eတ+6 equals() method ကiu အသuB$Cပuသင#6Kပ?$၊ စ+လuB$ အPက?$အeသ$
ကiu ထည#6မတ&က#ပ- တOမတOစစ#ခGင#ရင#eတ+6 equalsIgnoreCase() method ကiu အသuB$Cပuသင#6ပ3တယ#။

public static void main(String[] args) {

// Code 1 -> false


boolean result1 = "Java".equals("java");
System.out.println(result1);

// Code 2 -> true


boolean result2 = "Java".equalsIgnoreCase("java");
System.out.println(result2);

// Code 3 -> true


boolean result3 = "JAVA".equalsIgnoreCase("java");
System.out.println(result3);
}

အထက#ပ3 ကuဒ#နမOန+ထ-က Code 1 မH+ “Java”.equals(“java”) လiueရ$ထ+$တ-6 eနရ+မH+ J စ+လuB$န-9 j စ+လuB$ဟ+


မတOတ-6 အတ&က# ရလဒ#ဟ+ false Cဖစ#eနပ3တယ#။ Case 2 န-9 Case 3 ကeတ+6 equalsIgnoreCase() method
ကiu အသuB$Cပuထ+$တ-6 အတ&က# စ+လuB$အPက?$အeသ$က&-eနလ- ပ3ဝင#တ-6 Letter eတ&တOeနတ-6 အတ&က# ရလဒ#ဟ+ true
eတ&ပ- Cဖစ#eနတ+ကiu eတ&Jရပ3တယ#။

Learning Java 231 မင#$လ&င#


Java Developer Class
String မH+က String AHစ#ခuရ-I အစiတ#အပiuင#$eတ& တOမတOကiu စစ#eဆ$Aiuင#ဖiu regionMatch() Method eတ&ကiu Cပင#eပ$
ထ+$ပ3eသ$တယ#။

Argument Type Definition

toOffset int String Object ရ-I Match လuပ#ခGင#တ-6 Region ရ-I အစ Index

other String Match လuပ#လiuတ-6 အCခ+$ String Object

offset int အCခ+$ String Object ရ-I Match လuပ#ခGင#တ-6 Region ရ-I အစ Index

len int Region Match လuပ#လiuတ-6 စ+လuB$အeရအတ&က#

ignorecase boolean Case ကiu Ignore လuပ#မလuပ#ဆuB$Cဖတ#ရန#တန#ဖiu$

Region Match ကiu အသuB$Cပuဖiuအတ&က# regionMatch() Method AHစ#ခuကiu Overload လuပ#Kပ?$ eရ$သ+$ထ+$ပ3
တယ#။ Case ကiu Ignore လuပ#Kပ?$ Match လuပ#မယ#ဆiuရင#eတ+6 ignorecase Argument ပ3တ-6 method ကiu
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

public static void main(String[] args) {

String self = "Hello JAVA Programming";


String other = "Java Programmer";

// Code 1 -> true


boolean result1 = self.regionMatches(11, other, 5, 5);
System.out.println(result1);

// Code 2 -> false


boolean result2 = self.regionMatches(6, other, 0, 4);
System.out.println(result2);

// Code 3 -> true


boolean result3 = self.regionMatches(true, 6, other, 0, 4);
System.out.println(result3);
}

Code 1 န-9 Code 2 တiuကeတ+6 ignorecase Argument မပ3တ-6 regionMatches() method ကiu အသuB$Cပuထ+$
Fကတ+ပ3။ Code 1 မH+ self ရ-I 11 လuB$eCမ+က# စ+လuB$ဟ+ P Cဖစ#Kပ?$ other ရ-I ၅ လuB$eCမ+က# စ+လuB$ဟ+လ- P Cဖစ#ပ3
တယ#။ အ-6ဒ?အစစ+လuB$eတ&ကeန ၅ လuB$အထiတiuက#စစ#လiuက#တ-6အခ3မH+ AHစ#ခuစလuB$ Progr Cဖစ#eနတ-6 အတ&က# ရလဒ#
ဟ+ true Cဖစ#ပ3တယ#။

Case 2 မH+ကGeတ+6 self ရ-I ၆ လuB$eCမ+က# စ+လuB$ဟ+ J Cဖစ#Kပ?$ ၄ လuB$အထiယOရင# JAVA Cဖစ#ပ3မယ#။ otherr ရ-I 0
ကeန စ+လuB$ ၄ လuB$ယOရင# Java Cဖစ#eနပ3တယ#။ Case မတOတ-6 အတ&က# regionMatch() Method ရ-I ရလဒ#ဟ+
false Cဖစ#ပ3မယ#။ Case 3 ကeတ+6 Case 2 န-9 ကGန#တ-6 တန#ဖiu$eတ&ကeတ+6 အတOတOပ-။ caseignore Argument
ကiu true လiueပ$ထ+$တ-6 အတ&က# JAVA န-9 Java ကiu Case ကiu Ignore လuပ#Kပ?$ Match လuပ#ပ3မယ#။ ဒ36eFက+င#6
ရလဒ#ဟ+ ture Cဖစ#သ&+$တ+ Cဖစ#ပ3တယ#။

Learning Java 232 မင#$လ&င#


Java Developer Class

Other Useful Methods


String eတ&ကiu အသuB$Cပuတ-6 eနရ+မH+ အCခ+$eသ+ အသuB$မG+$eသ+ Method eတ&လ-QiFကပ3eသ$တယ#။

Return Type Method


String [] split(String regex)
String [] split(String regex, int limit)
CharSequence subSequence(int beginIndex, int endIndex)
String trim()
String toLowerCase()
String toUpperCase()

String Object တစ#ခuကeန သတ#မHတ#ထ+$တ-6 eန+က# String တစ#ခuန-9 Split လuပ#လiuတ-6 အခ3မH+ split() Method
ကiu အသuB$CပuAiuင#ပ3တယ#။ System တစ#ခuကeန အCခ+$ System တစ#ခuကiu Data eတ&eပ$ပiuတ-6 အခ3မGiu$eတ&မH+
Comma Sperated File eတ& Tabb Sperrated File eတ&ကiu အသuB$Cပueလ6Qiပ3တယ#။ ထiu File eတ&ထ-က Data
eတ&ကiu Cပန#Kပ?$ ထuတ#ယOတ-6 အခ3မGiu$မH+ split() Method ကiu အသuB$CပuAiuင#ပ3တယ#။ String ရ-I split() method မH+
Overload လuပ#ထ+$တ-6 Method AHစ#ခuQiပ3တယ#။ ပထမတစ#ခuကeတ+6 String တစ#ခuကiu Argument အeနန-9
ယOထ+$တ-6 Method Cဖစ#Kပ?$ အ-6ဒ? Argument န-9 Split လuပ#မH+ Cဖစ#ပ3တယ#။ eအ+က#ပ3နမOန+ထ-ကလiu csvData ကiu
“,” န-9 Split လuပ#မယ#ဆiuရင# [“Yangon”, “Mandalay”, “Taungyi”,”Pathein”] Array ကiu Cပန#လည#ရQiမH+ Cဖစ#ပ3
တယ#။

public static void main(String[] args) {

String csvData = "Yangon,Mandalay,Taungyi,Pathien";

String [] array = csvData.split(",", 2);

for(String data : array) {


System.out.println(data);
}
}

ဒuတiယ Method ကeတ+6 String တစ#ခuန-9 Integer တစ#ခuကiu Argument အeနန-9 ယOထ+$တ-6 Method ပ3။ String
Argument ကeတ+6 Split လuပ#မည#6 String Cဖစ#Kပ?$ ဒuတiယ Integer Argument ကeတ+6 မOလ String Object ကiu
ဘယ#AHစ#ပiuင#$ပiuင#$မH+လ- ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ-6 Parameter Cဖစ#ပ3တယ#။ အထက#ပ3 နမOန+ထ-မH+လiu
csvData.split(“,”, 2) လiueရ$ထ+$ရင# [“Yangon”, “Mandalay,Taungyi,Pathein”] ဆiuတ-6 String AHစ#ခuပ3တ-6
Array Object ကiu ရQiမH+ Cဖစ#ပ3တယ#။

String Object ရ-I e^eန+က#မH+Qiတ-6 Space eတ&ကiu trim() method ကiu အသuB$CပuAiuင#Kပ?$၊ String ထ-မH+Qiတ-6 စ+လuB$
eတ&အ+$လuB$ကiu Lower Case ကiu eCပ+င#$ခGင#ရင# toLowerCase() ၊ Upper Case ကiu eCပ+င#$ခGင#ရင#
toUpperCase() Method တiuကiu အသuB$CပuAiuင#ပ3တယ#။

တစ#ခuမHတ#ထ+$ဖiuလiuတ+က String ဟ+ Immutabble Object Cဖစ#တ-6 အတ&က# ဘယ#လiu Method ကiuပ- သuB$သuB$ eန+
ကက#ထပ# String Object အသစ#တစ#ခuကiu Create လuပ#eပ$မH+ Cဖစ#Kပ?$ မOလ Object ရ-I တန#ဖiu$ဟ+ eCပ+င#$သ&+$မH+
မဟuတ#ပ3ဘO$။


Learning Java 233 မင#$လ&င#


Java Developer Class

Composing String
String eတ&ကiu eပ3င#$ခGင#ရင# + Operator ဒ3မHမဟuတ# concat() Method ကiu အသuB$CပuAiuင#တယ#လiu e^မH+ eလ6လ+
ခ-6Fကပ3တယ#။ ဒ3eပမ-6 မiမieရ$သ+$eနတ-6 Application ထ-မH+ အPကiမ#Pကiမ# String eတ&ကiu Compose လuပ#eနရမယ#
ဆiuရင#eတ+6 Memory Usage န-9 ပတ#သက#Kပ?$ သတiထ+$ဖiuလiuအပ#ပ3တယ#။

eအ+က#က ကuဒ#နမOန+eလ$န-9 ဘယ#လiu သတiထ+$သင#6သလ-ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။

static String add(String s1, String s2, String s3, String s4) {
return s1 + s2 + s3 + s4;
}

public static void main(String[] args) {

// Code 1 -> “Hello Java World Champion"


String result1 = add("Hello ", "Java ", "World ", "Champion");

// Code 2 -> “ABCD”


String result2 = add("A", "B", "C", "D");
}

နမOန+ထ-မH+ String 4 ခuကiuယOKပ?$ eပ3င#$eပ$eနတ-6 add() Method QiKပ?$၊ Main Method ထ-ကeန add() Method
ကiu AHစ#Pကiမ#eခ2eနတ+ကiu eတ&Jရပ3မယ#။ ဘ+မH Cပဿန+မQiသလiuCမင#ရပ3မယ#။ ဒ3eပမ-6 + eတ&ကiu အသuB$CပuKပ?$
String eတ&ကiu eပ3င#$တ-6 အခ3မH+ ဘယ#လiu အလuပ#လuပ#တယ#ဆiuတ+န-9 eန+က#က&ယ#မH+ String Pools Qieနတယ#ဆiu
တ-6 အခGက#ကiu eခ3င#$ထ-မH+ ထည#6Kပ?$ လuပ#eဆ+င#ပuBeတ&ကiu တဆင#6ခGင#$eလ6လ+Fကည#6Fကရeအ+င#။

Main Method ထ-ကeန Code 1 Statement ကiu Evaluate လuပ#တ-6 အခ3မH+ “Hello “, “Java “, “World” န-9
“Champion” ဆiuတ-6 String Object eလ$ခuကiu String Pools ထ-မH+ သ&+$eဆ+က#ပ3လiမ#6မယ#။ Kပ?$eတ+6 add()
Method ကiu Invoke လuပ#တ-6အခ3မH+ s1 + s2 + s3 + s4 လiueရ$ထ+$ပ3တယ#။ က\န#eတ+#တiu စiတ#ထ-မH+eတ+6
အ+$လuB$ကiu eပ3င#$Kပ?$ “Hello Java World Champion” ဆiuKပ?$ အeCဖရမယ#လiu တ&က#ပ3မယ#။

ဒ3eပမ-6 Computer က အလuပ#လuပ#သ&+$မH+က အရင#ဆuB$ s1 န-9 s2 ကiu eပ3င#$ပ3တယ#။ အ-6ဒ?eတ+6 “Hello Java “ ဆiu
တ-6 String Object တစ#ခuကiu String Pools ထ- ထပ#တiu$ပ3မယ#။ Kပ?$မH ရလ+တ-6 ရလဒ#န-9 s3 ကiu ဆက#eပ3င#$eတ+6
“Hello Java World “ String Object အသစ#တစ#ခuထပ#ရလ+Kပ?$ String Pools ထ-ကiu ထပ#Kပ?$ ထည#6ပ3တယ#။ Kပ?$မH
s4 န-9eပ3င#$Kပ?$ “Hello Java World Champion” ဆiuတ-6 String တစ#ခuကiu String Pools ထ-ကiu ထပ#ထည#6ပ3မယ#။

+ Operator ကiu အသuB$CပuKပ?$ String eတ&ကiu Compose လuပ#မယ#ဆiuရင# ဘယ#ကမH Reference လuပ#မeနတ-6
String Object eတ&ကiu String Pools ထ-ကiu eရ+က#Qiသ&+$eစမH+ Cဖစ#ပ3တယ#။ Kပ?$eတ+6 String Pools ထ-က
String eတ&ဟ+ Application မKပ?$ဆuB$မခGင#$ ဒ?အတiuင#$ပ-တည#QieနမH+ Cဖစ#တ-6 အတ&က# မလiuလ+$အပ#ပ- Memory
eပ2မH+ eနရ+eတ&ကiu ယOသ&+$eစAiuင#ပ3တယ#။ ဒ36eFက+င#6 မiမiရ-I Appliation ထ-မH+ အPကiမ#Pကiမ# String eတ&ကiu eပ3င#$
eနရတ-6 Operation eတ&ပ3eနရင# + တiu concat() တiuကiu အသuB$မCပuသင#6ပ3ဘO$။

String eတ&ကiu Compose လuပ#တ-6eနရ+မH+ အသuB$Cပuဖiuအတ&က# Java မH+ Class AHစ#မGiu$ကiu Cပင#eပ$ထ+$ပ3တယ#။
အ-6ဒ3eတ&ကeတ+6 StringBuffer န-9 StringBuilder တiuပ- Cဖစ#ပ3တယ#။ သOတiueတ&ဟ+ Constructor eတ&လ-အတOတO
Cဖစ#သလiu ပ3တ-6 Method eတ&လ- အတOတOပ- Cဖစ#ပ3တယ#။ အ-6ဒ?အတ&က# လuပ#လiuရတ+eတ&လ- အတOတOပ- Cဖစ#ပ3တယ#။
မတOတ+ကeတ+6 StrringBuffer ဟ+ Thread Safe Cဖစ#Kပ?$ StringBuilder ဟ+ Thread Safe မCဖစ#ဘO$ဆiuတ+ပ3
ပ-။ Multi Thread ပတ#ဝန#$ကGင#မH+ဆiuရင# StringBuffer ကiu အသuB$Cပuသင#6Kပ?$၊ Multi Thread ပတ#ဝန#$ကGင#မဟuတ#
ဘO$ဆiuရင#eတ+6 StringBuilder ကiu အသuB$Cပuသင#6ပ3တယ#။

Learning Java 234 မင#$လ&င#


Java Developer Class

Return Type Methods


void setLength(int length)
void ensureCapacity(int capacity)
StringBuilder append(boolean b)
append(char c)
append(char[] str)
append(char[] str, int offset, int len)
append(double d)
append(float f)
append(int i)
append(long lng)
append(Object obj)
append(String s)
StringBuilder delete(int start, int end)
StringBuilder deleteCharAt(int index)
StringBuilder insert(int offset, boolean b)
insert(int offset, char c)
insert(int offset, char[] str)
insert(int index, char[] str, int offset, int len)
insert(int offset, double d)
insert(int offset, float f)
insert(int offset, int i)
insert(int offset, long lng)
insert(int offset, Object obj)
insert(int offset, String s)
StringBuilder replace(int start, int end, String s)
StringBuilder reverse()
String toString()

Append Method
အသuB$အမG+$ဆuB$ Method Cဖစ#Kပ?$ Argument ထ-က တန#ဖiu$eတ&ကiu StringBuilder ထ-က eန+က#ဆuB$eနရ+ကeန စ
Kပ?$ ထည#6သ&င#$eပ$Aiuင#ပ3တယ#။ Primitive Data Type eတ&န-9 Char Array eတ&အCပင# String eတ&ကiuလ- Append
လuပ#Aiuင#eအ+င# Method Overload လuပ#Kပ?$eရ$သ+$ထ+$ပ3တယ#။ Return Type ဟ+ StringBuilder မiမi
ကiuယ#တiuင#ပ- Cဖစ#တ-6အတ&က# Dot (.) ကiu အသuB$CပuKပ?$ Method Invocation Chain ပuBစBန-9 eရ$သ+$Aiuင#ပ3တယ#။

StringBuilder b1 = new StringBuilder();


b1.append("Hello ");
b1.append("Java");

StringBuilder b2 = new StringBuilder();


b2.append("Hello ").append("Java");

Learning Java 235 မင#$လ&င#


Java Developer Class

Insert Method
String eတ&ကiu Build လuပ#eနရင#$၊ Index eနရ+ကiu သတ#မHတ#Kပ?$ Insert လuပ#လiuတ-6 အခ3မH+ အသuB$CပuAiuင#ပ3တယ#။
Append Method eတ&လiuပ- Insert Method eတ&မH+ Method Overload ကiuအသuB$CပuKပ?$ eရ$သ+$ထ+$တ-6
အတ&က# Primitive Data Type eတ&၊ Char Array eတ&န-9 String eတ&ကiu Insert လuပ#Aiuင#ပ3တယ#။

StringBuilder b1 = new StringBuilder();


b1.append("Hello").append("Java");

b1.insert(5, " ").insert(6, "Happy ");

// "Hello Happy Java"


System.out.println(b1.toString());

အထက#ပ3နမOန+မH+ b1.insert(5, “ “) လiueရ$သ+$ထ+$တ-6 အတ&က# StringBuilder Object ရ-I Index Number 5


eနရ+မH+ “ “ Space ကiu Insert လuပ#ပ3တယ#။ Kပ?$တ-6eန+က#မH+ insert(6, “Happy “) လiueခ2Kပ?$ Insert လuပ#Cပန#
တယ#။ ဒ?အခGiန#မH+ StringBuilder ထ-မH+ “Hello Happy Java” ဆiuတ-6 String ကiu Compose လuပ#Kပ?$ Cဖစ#eနပ3Kပ?။

Index Number ကiu သတ#မHတ#Kပ?$ Insert လuပ#တ-6eနရ+မH+ သတiCပuစရ+အခGက#Qiပ3တယ#။ Index Number မQiတ-6
eနရ+ကiu သတ#မHတ#Kပ?$ Insert လuပ#မiရင#eတ+6 StringIndexOutOfBoundsException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3
တယ#။

Delete Methods
StringBuilder eတ&မH+ Index Number ကiu သတ#မHတ#Kပ?$ အ-6ဒ? Index မH+Qiတ-6 Character eတ& Index From န-9 To
ကiu သတ#မHတ#Kပ?$ အ-6ဒ?Fက+$ထ-က Character eတ&ကiu Delete လuပ#Aiuင#eအ+င# Method eတ&ကiu Cပင#ဆင#eပ$ထ+$ပ3
တယ#။ Index Number ကiu အသuB$Cပueနတ+Cဖစ#တ-6 အတ&က# မQiတ-6 Index Number ကiu သတ#မHတ#မiမယ#ဆiuရင#
StringIndexOutOfBoundsException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

Replace Methods

StringBuilder b1 = new StringBuilder();


b1.append("Java ").append(9).append(" is interesting.");

b1.replace(5, 6 , "11");

// "Java 11 is interesting"
System.out.println(b1.toString());

StringBuilder ထ-က From န-9 To Index ကiu သတ#မHတ#Kပ?$ အCခ+$eသ+ String တန#ဖiu$တစ#ခuန-9အစ+$ထiu$လiuတ-6အခ
ခ3မH+ replace() Method ကiu အသuB$CပuAiuင#ပ3တယ#။ ထiuအCပင# StringBuilder Object န-9 Compose လuပ#ထ+$တ-6
String ကiueတ+6 toString() Method ကiu အသuB$CပuKပ?$ ရယOAiuင#ပ3တယ#။ Composed လuပ#ထ+$တ-6 String eတ&ကiu
eCပ+င#$Cပန#Cပန#လiuတ-6 အခ3မGiu$မH+ reverse() Method ကiu အသuB$CပuAiuင#ပ3တယ#။

User Input အeပ2မH+မOတည#Kပ?$ Query eတ&ကiuတည#eဆ+က#တ-6 Method မGiu$eတ&မH+ StringBuilder eတ&ကiu


အသuB$Cပuသင#6ပ3တယ#။


Learning Java 236 မင#$လ&င#


Java Developer Class

Formatting Strings
Application eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ String eတ&ကiu Input အeနန-9 လက#ခBKပ?$ Data အeနန-9 သiမ#$ထ+$UuBသ+
မက၊ သiမ#$ထ+$တ-6 အမGiu$မGiu$eသ+ Data eတ&န-9 User ကiuန+$လည#လ&ယ#eအ+င# Cပန#Cပရတ-6 အခ3လ-Qiပ3တယ#။
Hello World Program eလ$ကiu စeရ$စT#ကထ-က Console ကeန User Input ကiuလက#ခBKပ?$ Hello ဆiuKပ?$
Console မH+ Cပန#Cပခ-6FကဘO$ပ3လiမ#6မယ#။

public static void main(String[] args) {

// Create Console
Console console = System.console();

// Read Data from Console


String name = console.readLine("Please enter your name : ");

// Write Data to Console


console.printf("Hello %s%n", name);
}

Hello World Program eလ$ကiueရ$တယ#ဆiuရင#eတ+င#မH Cမင#သ+eအ+င# String eတ&ကiu Cပင#ဆင#Kပ?$ Cပသဖiuလiuအပ#


ပ3တယ#။ Java မH+ String eတ&ကiu Format ခGAiuင#ဖiuအတ&က# နည#$လမ#$အမGiu$မGiu$Cပင#ဆင#eပ$ထ+$ပ3တယ#။

အရင#ဆuB$ဘယ#လiueနရ+မGiu$eတ&မH+ String eတ&ကiu Format ခGKပ?$ Cပသဖiuလiuသလ- ဆiuတ+ကiu စT#$စ+$Fကည#6Fက


ရeအ+င#။ e^မH+eဖ2Cပခ-6သလiu Console မH+ Print လuပ#တ-6အခ3မGiu$eတ&၊ Print Writer eတ&န-9 Output eတ&မH+
String eတ&ကiu Print လuပ#တ-6 အခ3eတ&၊ User Interface တeနeနရ+မH+ User ကiu န+$လည#eအ+င# Cပeပ$တ-6အခ3
eတ&၊ Log File eတ& Error Message eတ&မH+ Output လuပ#တ-6 အခ3မGiu$eတ&မH+ String eတ&ကiu Format လuပ#ဖiu
လiuအပ#ပ3လiမ#6မယ#။

Java ပတ#ဝန#$ကGင#မH+ String eတ&ကiu Format ခGဖiuအတ&က# eအ+က#ပ3နည#$လမ#$eတ&န-9 Cပင#ဆင#eပ$ထ+$ပ3တယ#။

• PrintWriter, PrintOutputStream န-9 Console eတ&မH+ format() န-9 printf() Method eတ&ကiu Cပင#eပ$ထ+$ပ3
တယ#။
• String Class မH+ format() method ကiu Cပင#ဆင#eပ$ထ+$ပ3တယ#။
• TextFormat Class မH+လ- Message eတ&ကiu Format ခGAiuင#ဖiu Cပင#ဆင#eပ$ထ+$ပ3တယ#။
• DateFormat န-9 NumberFormat Class eတ&န-9လ- Date eတ&န-9 Number eတ&ကiu Format ခGAiuင#eအ+င#
Cပင#ဆင#eပ$ထ+$ပ3တယ#။

Date Format န-9 Number Format eတ&န-9 ပတ#သက#Kပ?$ သက#ဆiuင#ရ+ အခန#$eတ&မH+ eဖ2Cပသ&+$မH+ Cဖစ#တ-6
အတ&က# ဒ?အခန#$မH+eတ+6 String eတ&ကiu Format ခGတ+န-9ပတ#သက#တ+eတ&ကiuပ- eလ6လ+သ&+$Fကပ3မယ#။ String
eတ&ကiu Format ခGတ+န-9 ပတ#သက#Kပ?$ Output eတ&ကiu Format ခGတ-6 အပiuင#$၊ String eတ&ကiu Format ခGတ-6 အပiuင#$
န-9 Message eတ&ကiu Format ခGတ-6 အပiuင#$ဆiuKပ?$ အပiuင#$ ၃ ပiuင#$ခ&-Kပ?$ eလ6လ+သ&+$Fကပ3မယ#။

Output eတ&ကiu Format ခGတ-6 အပiuင#$န-9 String eတ&ကiu Format ခGတ-6 အပiuင#$ကeတ+6 အeCခခBအ+$Cဖင#6 Format
eရ$သ+$ပuBခGင#$ ဆင#တOKပ?$ Message eတ&ကiu Format ခGတ-6 အပiuင#$ကeတ+6 e^က AHစ#ပiuင#$န-9 မတOပ3ဘO$။

Learning Java 237 မင#$လ&င#


Java Developer Class

Formatting Outputs
Output String eတ&ကiu Format လuပ#ဖiuအတ&က# PrintStream, PrintWriter န-9 Console Class eတ&မH+ Method
eတ&ကiuCပင#eပ$ထ+$ပ3တယ#။ System.out ဆiuတ+ကလ- System Class ထ-မH+ပ3တ-6 Static Variable တစ#ခuCဖစ#Kပ?$
Type ဟ+ PrintStream Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 System.out.printf() န-9 System.out.format() Method eတ&ကiu
အသuB$Cပuလiuရeနတ+ Cဖစ#ပ3တယ#။

Return Type Methods


void format(String format, Object … args)
void printf(String format, Object … args)
void printf(Locale l, String format, Object … args)

Arguments

Arguments Description
format String

String Format Specifier eတ&ကiu အသuB$CပuKပ?$ Format ခGမည#6ပuBစBကiu
သတ#မHတ#eပ$ထ+$eသ+ String Object

args Object …

Format String မH+ပ3တ-6 String Format Specifier eတ&eနရ+မH+
အစ+$ထiu$မည#6 Data Object Varargs

l Locale

Format String မH+ပ3တ-6 Aiuင#ငBဆiuင#ရ+သတ#မHတ#ခGက#ကiu သတ#မHတ#eပ$Aiuင#
eသ+ Locale Object

Internationalization အရ Output String eတ&ကiu Format ခGခGင#တယ#ဆiuရင#Cဖင#6 Locale ကiu သတ#မHတ#eပ$Aiuင#


eသ+ printf(Locale l, String format, Object … args) Method ကiu အသuB$CပuAiuင#Kပ?$၊ Locale ကiu သတ#မHတ#စရ+
မလiuဘO$ဆiuရင#eတ+6 format(String format, Object … args) န-9 printf(String format, Object … args) တiuကiu
အသuB$CပuAiuင#ပ3တယ#။

// String format
String format = "My name is %s and I am %d' years old.%n";

// "My name is Mike and I am 20' years old."


console.format(format, "Mike", 20);

// "My name is Mike and I am 20' years old."


console.printf(format, "Mike", 20);

String format ထ-မH+ပ3တ-6 “%s” , “%d” န-9 “%n” တiuဟ+ Format Specifier eတ&Cဖစ#FကKပ?$ Method Arguments
eတ&Cဖစ#Fကတ-6 “Mike” န-9 20 တiuဟ+ Format Specifier eတ&မH+ အစ+$ထiu$မည#6 Argument eတ&Cဖစ#Fကပ3တယ#။
Specifier eတ&ကiu % န-9စeရ$Kပ?$ %s ဆiuရင#eတ+6 String ကလ+Kပ?$ အစ+$ထiu$Aiuင#တယ#လiu အဓiပW3ယ#ရKပ?$ String
Cဖစ#တ-6 “Mike” က အစ+$ထiu$ပ3မယ#။ %d ဆiuရင#eတ+6 Digit eတ&ကiu အစ+$ထiu$Aiuင#Kပ?$ ဒ?eနရ+မH+ 20 က အစ+$ထiu$ပ3

Learning Java 238 မင#$လ&င#


Java Developer Class
တယ#။ တဖန# %n ကeတ+6 Line Sperator Cဖစ#Kပ?$ eအ+က#ကiu စ+eFက+င#$တစ#eFက+င#$ ဆင#$မယ#လiu အဓiပW3ယ#ရပ3
တယ#။ ဒ36eFက+င#6 Method AHစ#ခuလuB$ရ-I Output eတ&ဟ+ "My name is Mike and I am 20' years old.” Cဖစ#eန
တ+ Cဖစ#ပ3တယ#။ အထက#ပ3 Method AHစ#ခuလuB$ဟ+ Argument List eက+ အလuပ#လuပ#ပuBပ3 အတOတOပ- Cဖစ#တ-6
အတ&က# AHစ#သက#ရ+ Method ကiu eရ&$ခGယ# အသuB$CပuAiuင#ပ3တယ#။

Formatting String
Format လuပ#ထ+$တ-6 String eတ&ကiu ရယOဖiuအတ&က# String Class မH+ Static Method eတ&Cပင#eပ$ထ+$ပ3တယ#။

Return Type Methods


String static

format(String format, Object … args)
String static

format(Locale l, String format, Object … args)

Arguments eတ&ကeတ+6 OutputStream eတ&မH+ပ3တ-6 Argument eတ&န-9 အတOတOပ3ပ-။ Locale ကiu သတ#မHတ#Aiuင#
တ-6 Method န-9 သတ#မHတ#စရ+မလiuတ-6 Method eတ&ကiu Overload လuပ#Kပ?$ eရ$သ+$eပ$ထ+$ပ3တယ#။

// String format
String format = "My name is %s and I am %d' years old.";

// "My name is Mike and I am 20' years old."


String formattedStr = String.format(format, "Mike", 20);

System.out.println(formattedStr);

String Format eရ$သ+$ပuB၊ Argument eတ&န-9 Formatted String ကiu တည#eဆ+က#ပuBeတ&ကeတ+6 PrintStream
eတ&မH+ပ3တ-6 Method eတ&န-9 အတOတOပ- Cဖစ#ပ3တယ#။ ဒ3eပမ-6 String ရ-I format() method မH+က Formatted
String ကiu Return Cပန#eပ$Aiuင#ပ3တယ#။ Format ခGထ+$Kပ?$သ+$ String eတ&ကiu ရယOလiuတယ#ဆiuရင#eတ+6 ဒ?
Method ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ဆက#လက#Kပ?$ Format String eတ&ကiu ဘယ#လiueရ$ရသလ- ဆiuတ+ကiu
eလ6လ+သ&+$Fကရeအ+င#။

String Format Syntax


e^မH+eလ6လ+ခ-6တ-6 printf() န-9 format() Method eတ&မH+ Format String eတ&ကiu eရ$သ+$အသuB$Cပuခ-6Fကပ3တယ#။
ဒ?eနရ+မH+eတ+6 Format String eတ&ကiu ဘယ#လiueရ$သ+$တယ#ဆiuတ-6 အပiuင#$ကiu eလ6လ+သ&+$ပ3မယ#။

Calendar c = Calendar.getInstance();
String today = String.format("Today is %1$tm %1$te %1$tY", c);

Format Method မH+ပ3တ-6 ပထမဆuB$ Parameter ဟ+ format string Cဖစ#ပ3တယ#။ Format String ကiu Format ခG
ခGင#တ-6 String Fက+$မH+ “%1$™” , “%1$te” , “%1$tY” အစQiတ-6 Embedded Format Specifier eတ&န-9 ထည#6
သ&င#$eရ$သ+$ထ+$ပ3တယ#။ String တစ#ခuကiu Format ခGတ-6 eနရ+မH+ Format String ထ-မH+ပ3တ-6 Embedded
Format Specifier eတ&eနရ+မH+ Argument eတ&န-9 အစ+$ထiu$တည#eဆ+က#eပ$သ&+$မH+ Cဖစ#ပ3တယ#။

Learning Java 239 မင#$လ&င#


Java Developer Class
Format Specifier eတ&ကiu eရ$သ+$မယ#ဆiuရင# Argument eတ&ကiu သတ#မHတ#Kပ?$ သuB$မလ+$ မသuB$ဘO$လ+$ဆiuတ-6
အeပ2မH+မOတည#Kပ?$ AHစ#မGiu$ခ&-Cခ+$Aiuင#ပ3တယ#။ တဖန# Argument eတ&ကiu သတ#မHတ#Kပ?$ သuB$မယ#ဆiuရင#လ- Date
အမGiu$အစ+$eတ&ကiu အသuB$Cပuတ-6 ပuBစBန-9 အCခ+$eသ+ Char, String န-9 Numeric Data Type eတ&ကiu သuB$မည#6ပuBစBဆiu
Kပ?$ AHစ#မGiu$ခ&-Cခ+$ eရ$သ+$Aiuင#ပ3တယ#။ ဒ36eFက+င#6 Format Specifier eတ&ကiu ပuBစBသuB$မGiu$ eရ$သ+$Aiuင#ပ3တယ#။

Argument Type Format Specifier


Yes General, Char,
%[argument_index$][flags][width][.precision]conversion
Numeric Type
Yes Date & Calendar %[argument_index$][flags][width]conversion
No All Types %[flags][width]conversion

Format Specifier eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ % န-9 conversion eတ&ဟ+ မပ3မCဖစ#ပ3ရပ3မယ#။ ဆiuလiuတ+က %
န-9 conversion မပ3ပ-န-9 Format Specifier အeနန-9 မသuB$Aiuင#ပ3ဘO$။ ကGန#တ-6 [ ] န-9ပiတ#Kပ?$eရ$သ+$ထ+$တ-6 အရ+eတ&
ကeတ+6 လiuအပ#ပ3မH eရ$သ+$ရမည#6 အစiတ#အပiuင#$eတ&Cဖစ#Fကပ3တယ#။

Argument Index
Format Specifier eနရ+မH+ အသuB$Cပuမည#6 Argument List ထ-က Argument ရ-I eနရ+ကiu သတ#မHတ#လiuတ-6 eနရ+
မH+ အသuB$CပuAiuင#Kပ?$ Digit eတ&န-9 $ ကiuတ&-ဖက#eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Digit eတ&ကeတ+6 အသuB$Cပuမည#6
Argument ရ-I Index Number ကiu ရည#ညpန#$ပ3တယ#။ တဖန# < ကiu အသuB$CပuKပ?$ e^မH+ အသuB$Cပuခ-6တ-6 Argument
Index ကiuCပန#Kပ?$ အသuB$CပuAiuင#ပ3တယ#။

// Code 1 -> “A B C D"


String str1 = String.format("%s %s %s %s", "A", "B", "C", "D");

// Code 2 -> “A B A A"


String str2 = String.format("%s %s %1$s %1$s", "A", "B", "C", "D");

// Code 3 -> “A A B C"


String str3 = String.format("%s %1$s %s %s", "A", "B", "C", "D");

// Code 4 -> “A B B C"


String str4 = String.format("%s %s %<s %s", "A", "B", "C", "D");

Code 1 မH+ကeတ+6 Argument Index eတ& eရ$မထ+$ပ3ဘO$။ အ-6ဒ?အတ&က# %s eတ&eနရ+မH+ အစT#အလiuက#


Argument eတ& အစ+$ထiu$သ&+$Kပ?$ “A B C D” လiu Format ခGeပ$မH+ Cဖစ#ပ3တယ#။

Code 2 မH+eတ+6 eန+က#ဆuB$က Format Specifier AHစ#ခuကiu %1$s လiueရ$သ+$ထ+$ပ3တယ#။ 1$ ဟ+ Argument


Index 1 ကiu ရည#ညpန#$ပ3တယ#။ ဒ3eFက+င#6 အ-6ဒ?eနရ+eတ&ကiu A က အစ+$ထiu$သ&+$Kပ?$ “A B A A” ကiuရQiပ3တယ#။

Code 3 မH+eတ+6 ဒuတiယ Format Specifier eနရ+မH+ 1$ ကiu eရ$သ+$ထ+$တ-6အတ&က# Argument 1 ကiu
အသuB$CပuKပ?$ “A A B C” လiuထ&က#ပ3တယ#။

Code 4 မH+eတ+6 တတiယ Format Specifier eနရ+မH+ < ကiu eရ$သ+$ထ+$တ-6 အတ&က# အe^က Argument
Index Cဖစ#တ-6 2 ကiu အသuB$Cပuသ&+$ပ3တယ#။ ဒ36eFက+င#6 “A B B C” ဆiuKပ?$ Format ခGeပ$မH+ Cဖစ#ပ3တယ#။

Learning Java 240 မင#$လ&င#


Java Developer Class

Conversions
Format Specifier ကiueရ$သ+$တ-6 eနရ+မH+ မCဖစ#မeန eရ$သ+$ရမည#6 အစiတ#အပiuင#$Cဖစ#Kပ?$၊ ဘယ#လiu Data Type
မGiu$အeနန-9 Format လuပ#တ-6eနရ+မH+ အသuB$Cပuမယ#ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#ပ3တယ#။ အသuB$CပuAiuင#တ-6
Conversion Category eတ&ကeတ+6 General, Character, Numeric, Date / Time, Percent န-9 Line
Separator တiuပ- Cဖစ#ပ3တယ#။

General, Character, Percent and Line Separator

Conversion Category Description

b, B General Argument ဟ+ null Cဖစ#eနရင#eတ+6 false လiuပ- eဖ2CပမH+ Cဖစ#ပ3တယ#



Boolean Type ဆiuရင#eတ+6 Boolean တန#ဖiu$ကiu အသuB$Cပuပ3မယ#

အCခ+$တန#ဖiu$တစ#ခuခuဆiuရင#eတ+6 TRUE လiuCပန#Cပeပ$Aiuင#မH+ Cဖစ#ပ3တယ#

h, H General Argument ဟ+ null Cဖစ#eနရင#eတ+6 null လiuပ- eဖ2CပမH+ Cဖစ#ပ3တယ#



မဟuတ#ရင#eတ+6 Integer.toHexString(arg.hashCode()) ကiu အသuB$Cပuပ3မယ#

s, S General Argument ဟ+ null Cဖစ#eနရင#eတ+6 null လiuပ- eဖ2CပမH+ Cဖစ#ပ3တယ#



Formattable Interface ကiu Implement လuပ#ထ+$တ-6 Object eတ&ဆiuရင#eတ+6
formatTo() Method ကiu Invoke လuပ#Kပ?$ သuB$ပ3မယ#

မဟuတ#ရင#eတ+6 toString() ကiu အသuB$Cပuပ3မယ#

c, C Character Unicode Character eတ&ကiu အသuB$Cပuပ3မယ#

% Percent ရ+ခiuင#A[န#$ Char ကiu eဖ2Cပတ-6eနရ+မH+ အသuB$Cပuပ3တယ#

n Line Separator Line Separator Char တစ#လuB$ကiu Cဖည#6စ&က#eပ$မH+Cဖစ#Kပ?$ အသuB$Cပueနတ-6 OS


အလiuက# မHန#ကန#စ&+ Cဖည#6စ&က#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#

// "false TRUE false TRUE"


String str1 = String.format("%b %B %b %B", null, true, false, "D");

// "null 1 42 84567C67"
String str2 = String.format("%h %H %h %H", null, 1, "B", new Date());

အထက#ပ3နမOန+ကeတ+6 Boolean န-9 Hash String ကiu အသuB$Cပuတ-6 နမOန+Cဖစ#ပ3တယ#။ Boolean eတ&မH+က
Argument တန#ဖiu$က null Cဖစ#eနရင# false လiueဖ2CပKပ?$၊ Hash String မH+ကeတ+6 null Cဖစ#eနရင# null လiuပ- eဖ2
CပမH+ Cဖစ#ပ3တယ#။

// "10%"
String result = String.format("%d%%", 10);

Percent Character ‘%’ ဟ+ Format Specifier eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ သuB$eနတ-6 အတ&က# Format
String eတ&Fက+$ထ-မH+ ဒ?အတiuင#$eရ$သ+$ထ+$လiu မရAiuင#ပ3ဘO$။ ဥပမ+အ+$Cဖင#6 10% လiu Format မH+CပခGင#ရင#
“%d%” လiueရ$သ+$လiuမရAiuင#ပ3ဘO$။ ဒuတiယ % ကiueတ&Jရင#6 eန+က#မH+ Conversion မQiလiuဆiuKပ?$
UnknownFormatConversionException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။ အထက#ပ3 နမOန+မH+ %d ဟ+ Digit ကiu
eဖ2Cပဖiu Format Specifier တစ#ခuCဖစ#Kပ?$ %% ဟ+ % ကiu eဖ2Cပဖiuအတ&က# အသuB$Cပuရတ-6 Format Specifier တစ#
ခuCဖစ#ပ3တယ#။

Learning Java 241 မင#$လ&င#


Java Developer Class
Numeric Conversions

Conversion Category Description

d Integral Decimal Integer အeနန-9 Format လuပ#eပ$မH+ Cဖစ#ပ3တယ#

o Integral Octal Integer အeနန-9 Format လuပ#eပ$မH+ Cဖစ#ပ3တယ#

x, X Integral Hexadecimal Integer အeနန-9 Format လuပ#eပ$မH+ Cဖစ#ပ3တယ#

e, E Floating Number Floating Number eတ&ကiu Scientific Notation န-9 Format လuပ#eပ$မH+ Cဖစ#ပ3
တယ#

f Floating Number Floating Number eတ&ကiu Decimal Number အeနန-9 Format လuပ#eပ$မH+ Cဖစ#ပ3
တယ#

g, G Floating Number Precision န-9 Rounding Number အeပ2မOတည#Kပ?$ Floating Number eတ&ကiu
Scientific Notation န-9 Format လuပ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#

a, A Floating Number Floating Number eတ&ကiu Hexadecimal Number အeနန-9 Format လuပ#eပ$မH+
Cဖစ#ပ3တယ#

Integral Number eတ&ကiu Format အတ&င#$ အသuB$Cပuမယ#ဆiuရင#eတ+6 eအ+က#ပ3 အတiuင#$eရ$သ+$ရမH+ Cဖစ#ပ3


တယ#။ Hexadecimal Number eတ&မH+ x ကiu အသuB$Cပuရင# lower case န-9 eဖ2CပAiuင#မH+ Cဖစ#Kပ?$ X ကiu သuB$ထ+$ရင#
eတ+6 Upper Case န-9 eဖ2Cပeပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

// Decimal : 10
String result1 = String.format("Decimal : %d", 10);

// Octal : 12
String result2 = String.format("Octal : %o", 10);

// Hexa : a
String result3 = String.format("Hexa : %x", 10);

// Hexa : A
String result4 = String.format("Hexa : %X", 10);

Floating Number eတ&ကiu Format မH+ eရ$သ+$ခGင#ရင#eတ+6 eအ+က#ပ3အတiuင#$ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။


Conversion e ကiu အသuB$Cပuရင# Lower Case န-9 eဖ2CပKပ?$ E ကiu သuB$ထ+$ရင#eတ+6 Upper Case န-9 eဖ2Cပတ+ကiu
eတ&Jရပ3တယ#။

// Floating : 3.141593e+00
String result1 = String.format("Floating : %e", Math.PI);

// Floating : 3.141593E+00
String result2 = String.format("Floating : %E", Math.PI);

// Floating : 3.141593
String result3 = String.format("Floating : %f", Math.PI);

Conversion G န-9 ပတ#သက#Kပ?$ Precision အeFက+င#$AHင#6အတO eဖ2Cပသ&+$ပ3မယ#။


Learning Java 242 မင#$လ&င#


Java Developer Class
Date / Time Conversions

Conversion Category Description

tH Time န+ရ?eတ&ကiu 00 - 23 အထi

tI Time န+ရ?eတ&ကiu 01 - 12 အထi

tk Time န+ရ?eတ&ကiu 0 - 23 အထi

tl Time န+ရ?eတ&ကiu 1 - 12 အထi

tM Time မiနစ#ကiu 00 - 59 အထi

tS Time စက€ န#9ကiu 00 - 60 အထi (60 ကiu Leap Seconds မH+သ+ အသuB$Cပu)

tL Time မiလ?စက€ န#9ကiu 000 - 999 အထi

tN Time န+Aiuစက€ န#9ကiu 000000000 - 999999999 အထi

tP Time နBနက#ပiuင#$၊ မ&န#$လ&-ပiuင#$ကiu am, pm Cဖင#6Cပeပ$Aiuင#

tz Time Numeric Time Zone

tZ Time String Time Zone Name


ts Time Epoch Time (1970/1/1 00:00:00 UTC) ကeန စက€ န#9အeရအတ&က#

tQ Time Epoch Time (1970/1/1 00:00:00 UTC) ကeန မ?လ?စက€ န#9အeရအတ&က#

tB Date လအမည# အCပည#6အစuB "January", "February"

tb Date လ အတiueက+က#အမည# "Jan", "Feb"

th Date လ အတiueက+က#အမည# "Jan", "Feb"

tA Date ရက#အမည# "Sunday", “Monday"

ta Date ရက#အမည# အတiueက+က# "Sun", “Mon"

tC Date ၄ လuB$ပ3AHစ#ကiu ၁၀၀ AHင#6စ+$Kပ?$ Cပမည# (00 - 99)

tY Date ၄ လuB$ပ3AHစ# (2018, 0095)

ty Date ၂ လuB$ပ3 AHစ# (00 - 99)

tj Date တစ#AHစ#စ+မH ရက#စ&- (001 - 366)

tm Date လအ+$ ကiန#$ ၂ လuB$Cဖင#6Cပ (01 - 13)

td Date လတစ#လ၏ ရက#စ&-အ+$ ကiန#$ ၂ လuB$Cဖင#6Cပ (01 - 31)

te Date လတစ#လ၏ ရက#စ&- (1 - 31)

tR Date Time ၂၄ န+ရ?Cဖင#6 န+ရ?မiနစ#အ+$eဖ2Cပ (%tH:%tM)

tT Date Time ၂၄ န+ရ?Cဖင#6 န+ရ?မiနစ#စက€ န#9အ+$eဖ2Cပ (%tH:%tM:%tS)

tr Date Time ၁၂န+ရ?Cဖင#6 န+ရ?မiနစ#စက€ န#9အ+$eဖ2Cပ (%tI:%tM:%tS %Tp)

tD Date Time ရက#စ&-အ+$ (%ty/%tm/%td) Cဖင#6eဖ2Cပ

tF Date Time ရက#စ&-အ+$ ISO 8601 Format (%ty-%tm-%td) Cဖင#6eဖ2Cပ

tc Date Time eန9ရက#အခGiန#အ+$ (%ta %tb %td %tT %tZ %tY) Cဖင#6eဖ2Cပ

Learning Java 243 မင#$လ&င#


Java Developer Class

Date today = new Date();

// I wrote this at August 29, 2018.


System.out.format("I wrote this at %tB %<td, %<tY.%n", today);

// The day is Wednesday.


System.out.format("The day is %tA.%n", today);

// Time is at 05:07:48 PM.


System.out.format("Time is at %tr.%n", today);

အထက#ပ3အတiuင#$ Date / Time eတ&ကiu String Format အတ&င#$ ထည#6သ&င#$eရ$သ+$Aiuင#ပ3တယ#။ Date Time
Format န-9ပတ#သက#Kပ?$ Date & Calendar အခန#$န-9 Date & Time API အခန#$တiuမH+ ဆက#လက#eဖ2Cပသ&+$ပ3ဦ$
မည#။

Width

✓ Width Cဖင#6 Output မH+eဖ2Cပမည#6 အန-ဆuB$ Character Count ကiu သတ#မHတ#eပ$Aiuင#ပ3တယ#


✓ Width eတ&ကiu General, Numeric န-9 Date / Time Conversion eတ&မH+ eရ$သ+$ အသuB$CပuAiuင#ပ3တယ#
✓ Line Separator Conversions မH+ Width ကiu သတ#မHတ#လiuမရAiuင#ပ3ဘO$၊ eရ$သ+$မiရင#
IllegalFormatWidthException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#
✓ Percent Conversion မH+ eရ$သ+$မiရင#eတ+6 Exception eတ+6မCဖစ#ပ3ဘO$၊ ဒ3eပမ-6 Width ပ3ဝင#Cခင#$QiမH+
မဟuတ#ပ3ဘO$

// Code 1 -> " Mike"


System.out.format("%10s%n", "Mike");

// Code 2 -> " 100"


System.out.format("%10d%n", 100);

// Code 3 -> "0000000100"


System.out.format("%010d%n", 100);

// Code 4 -> " 3.141593"


System.out.format("%10f%n", Math.PI);

Code 1 ထ-မH+ %10s လiueရ$ထ+$တ+ဟ+ Format Specifier တစ#ခuCဖစ#Kပ?$ 10 ဟ+ Width Cဖစ#ပ3တယ#။ String
Argument တစ#ခuကiu Character 10 လuB$စ+ Format ခGမယ#လiu အဓiပW3ယ#ရပ3တယ#။ တကယ#လiu Argument String
ရ-I Length ဟ+ ၁၀ လuB$မCပည#6ခ-6ရင# ဘယ#ဘက#Cခမ#$မH+ Space eတ&ကiu Cဖည#6Kပ?$ Format ခGသ&+$မH+ Cဖစ#ပ3တယ#။
တကယ#လiu Argument String ဟ+ 10 လuB$eကG+#ခ-6မယ#ဆiuရင# Qiသeလ+က# အeရအတ&က#ကiu Cပန#Cပeပ$မH+ Cဖစ#ပ3
တယ#။

Code 2 ကeတ+6 Integer ကiu Format ခGeနတ+ပ3။ %10d လiueရ$ထ+$တ-6 အတ&က# ၁၀ လuB$မCပည#6တ-6 eနရ+eတ&
ကiu Space န-9 ဘယ#ဘက#မH+ Cဖည#6Kပ?$ Format ခGသ&+$ပ3တယ#။

Code 3 မH+eတ+6 %010d Cဖစ#တ-6 အတ&က# ၁၀ မCပည#6တ-6 eနရ+eတ&ကiu 0 အစ+$ထiu$Cဖည#6Kပ?$ Format ခGeပ$Aiuင#ပ3
တယ#။ အလ+$တOပ- Floating Number eတ&ကiuလ- Width သတ#မHတ#Kပ?$ Format ခGလiuရပ3တယ#။

Learning Java 244 မင#$လ&င#


Java Developer Class
Precision

Format Specifier eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Precision eတ&ကiu eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။ Precision


eတ&ကiu “.precision” ကiu eရ$သ+$ရမH+ Cဖစ#Kပ?$ Conversion eတ&ရ-I e^မH+ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Precision
eတ&ကiu General Conversion eတ&န-9 Floating Number Conversion eတ&မH+သ+ eရ$သ+$အသuB$CပuAiuင#မH+Cဖစ#ပ3
တယ#။ တစ#Cခ+$ Conversion eတ&န-9တ&-Kပ?$ eရ$သ+$မiပ3က IllegalFormatPrecisionException ကiu Cဖစ#eပ2eစမH+
Cဖစ#ပ3တယ#။

General Conversion eတ&န-9 Precision ကiu eရ$သ+$ထ+$ရင# အမG+$ဆuB$eဖ2CပAiuင#တ-6 Character Count ကiu
သတ#မHတ#eပ$Aiuင#ပ3တယ#။

// “Mike Is Te"
System.out.format("%.10s%n", "Mike Is Test Data");

အထက#ပ3အတiuင#$ “%10.10s” လiueရ$သ+$ထ+$တ-6 eနရ+မH+ “.10” ဟ+ Precision Cဖစ#ပ3တယ#။ အမG+$ဆuB$ စ+လuB$


၁၀ လuB$စ+ကiuပ- eဖ2Cပeပ$မH+ Cဖစ#ပ3တယ#။ Argument ဟ+ “Mike is Test Data” Cဖစ#eပမ-6 Precision ကiu 10 လiu
သတ#မHတ#ထ+$တ-6 အတ&က# ရလဒ#အeနန-9 “Mike is Te” အထiပ- eဖ2Cပeပ$Aiuင#တ+Cဖစ#ပ3တယ#။

Floating Number Conversion eတ&န-9 Precision ကiu eရ$သ+$ရင#eတ+6 အဓiပW3ယ#တစ#မGiu$ရပ3တယ#။ “e”, “E” န-9
“f” မH+ဆiuရင# ဒဿမကiန#$ရ-I အမG+$ဆuB$eဖ2CပAiuင#တ-6 အeရအတ&က#ကiu သတ#မHတ#eပ$မH+ Cဖစ#ပ3တယ#။

// “3.142"
System.out.format("%.3f%n", Math.PI);

Conversion “g” န-9 “G” eတ&မH+ဆiuရင# Round လuပ#Kပ?$တ-6အခ3မH+ Qieနတ-6 Digit အeရအတ&က# စuစueပ3င#$ကiu
သတ#မHတ#eပ$Aiuင#ပ3တယ#။

// “3.14"
System.out.format("%.3g%n", Math.PI);

Conversion “a” န-9 “A” eတ&မH+ဆiuရင#eတ+6 Precision eတ&ဟ+ အလuပ#လuပ#မH+ မဟuတ#ပ3ဘO$။

Flags

Format Specifier eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Default Format eတ&ကiu Customize လuပ#ဖiuအတ&က# Flag eတ&
ကiu အသuB$CပuAiuင#ပ3တယ#။ Flag eတ&ဟ+ Conversion eတ&ရ-I အeထ+က#အကOeတ&Cဖစ#တ-6 အတ&က# Conversion
အမGiu$အစ+$အeပ2မOတည#Kပ?$ eရ$သ+$လiu ရAiuင#တယ# မရAiuင#ဘO$ဆiuတ+Qiပ3တယ#။ String Format eတ&မH+ အသuB$Cပu
Aiuင#တ-6 Flag တ&ကeတ+6 Minus (‘-‘), Hash (‘#’), Plus (‘+’) , Space (‘ ‘) , Comma (‘,’) န-9 Left Parenthesis
‘(‘ တiuပ-Cဖစ#ပ3တယ#။

// Code 1 -> " Hello"


System.out.format("%10s%n", "Hello");

// Code 2 -> "Hello "


System.out.format("%-10s%n", "Hello");

Learning Java 245 မင#$လ&င#


Java Developer Class
Minus (‘-‘) Flag eတ&ကiu String Format ခGတ-6eနရ+မH+ Padding Side ကiu သတ#မHတ#တ-6 eနရ+မH+ အသuB$Cပuပ3
တယ#။ Kပ?$eတ+6 Width eတ&ကiu eရ$သ+$ထ+$မHသ+ Minus Flag ကiu eရ$သ+$လiuရမH+ Cဖစ#ပ3တယ#။ Width မပ3ပ-
Minus Flag ကiu eရ$သ+$မiရင# MissingFormatWidthException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

Width eတ&ကiu သတ#မHတ#ထ+$တ-6 eနရ+မH+ တကယ#လiu Argument ရ-I တန#ဖiu$သ+ သတ#မHတ#ထ+$တ-6 Width တန#ဖiu
ထက# ငယ#eနခ-6မယ#ဆiuရင# Code 1 ထ-က အတiuင#$ မeလ+က#တ-6 အeရအတ&က#အလiuက# ဘယ#ဘက#မH+ Space eတ&
ကiu Cဖည#6Kပ?$ ည+ဘက#ကiu ကပ#Kပ?$ ည?eအ+င# စ?eပ$မH+ Cဖစ#ပ3တယ#။ ဒ3eပမ-6 Code 2 မH+လiu Minus Flag ကiu
အသuB$Cပuလiuက#တ-6 အခ3မH+ (“%-10s”) ဘယ#ဘက#ကiu ကပ#Kပ?$ ည?eအ+င#စ?eပ$မH+Cဖစ#ပ3တယ#။ မeလ+က#တ-6 eနရ+
eတ&ကiueတ+6 Space eတ&ကiu အသuB$CပuKပ?$ သတ#မHတ#ထ+$တ-6 Width Cဖစ#eအ+င# စ?eပ$ပ3မယ#။

ကiန#$ဂဏန#$eတ&ကiu Format ခGတ-6eနရ+မH+ Right Justified Cဖစ#တ+ (ည+ဘက#မH+ စ?တ+) ဟ+ Fကည#6eက+င#$eပမ-6


String လiueနရ+မGiu$မH+eတ+6 Left Justified (ဘယ#ဘက#မH+စ?တ+) ဟ+ပiuKပ?$ သင#6eတ+#ပ3တယ#။

// "1750"
System.out.format("%o%n", 1000);

// "01750"
System.out.format("%#o%n", 1000);

// "3E8"
System.out.format("%X%n", 1000);

// "0x3E8"
System.out.format("%#x%n", 1000);

// "0X3E8"
System.out.format("%#X%n", 1000);

Hash (‘#’) Flag ကiueတ+6 ‘o’, ‘x’ န-9 ‘X’ Conversions တiuန-9 တ&-ဖက#အသuB$CပuAiuင#Kပ?$ အCခ+$eသ+ ပuBစBတစ#မGiu$န-9 Cပ
eပ$Aiuင#ပ3တယ#။ Octal Decimal eတ&ဆiuရင#eတ+6 ရလဒ#ရ-I e^မH+ 0 ကiu Cဖည#6Kပ?$ eဖ2Cပeပ$မH+ Cဖစ#Kပ?$
Hexadecimal eတ&မH+ဆiuရင#eတ+6 e^မH+ ‘0x’ ဒ3မHမဟuတ# ‘0X’ ကiu Cဖည#6စ&က#Kပ?$eဖ2Cပeပ$မH+ Cဖစ#ပ3တယ#။

// "-11"
System.out.format("%+d%n", new BigInteger("-11"));

// "+13"
System.out.format("%+o%n", new BigInteger("11"));

// "+B"
System.out.format("%+X%n", new BigInteger("11"));

// "+11"
System.out.format("%+d%n", 11);

// "-3.141593"
System.out.format(“%+f%n", 0 - Math.PI);

Learning Java 246 မင#$လ&င#


Java Developer Class
Plus (‘+’) Flag ကiu Number eတ&ရ-I အeပ3င#$အAuတ# သeကsတ eတ&ကiu Format ထ-မH+eဖ2Cပeပ$လiuတ-6 အခ3မGiu$မH+
အသuB$CပuAiuင#ပ3တယ#။ အeပ3င#$ကiန#$eတ&ဆiuရင# Plus Sign ကiu Format ထ-မH+eဖ2CပKပ?$၊ အAuတ#ကiန#$ကiu Minus
Sign န-9 eဖ2Cပeပ$Aiuင#ပ3မယ#။

Plus Flag ကiu BigInteger eတ&န-9 ‘d’, ‘o’, ‘x’, ‘X’ Conversions eတ&န-9 တ&-ဖက# အသuB$Cပuတ-6 eနရ+မGiu$မH+ အသuB$Cပu
Aiuင#ပ3တယ#။ Kပ?eတ+6 byte, short, int, long အစQiတ-6 Integral Data Type eတ&န-9 သက#ဆiuင#ရ+ Wrapper Type
eတ&န-9 ‘d’ conversions eတ&ကiuတ&-ဖက#eရ$သ+$တ-6 eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#။ တဖန# Floating Numberr eတ&
ကiu Format ခGတ-6 eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#။

အCခ+$eသ+eနရ+eတ&မH+ Plus Flag ကiu အသuB$Cပuမiရင#eတ+6 FormatFlagsConversionMismatchException


ကiuCဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

// " 100"
System.out.format("% d%n", 100);

// "-3.141593"
System.out.format("% f%n", 0 - Math.PI);

Space (‘ ‘) Flag eတ&ကiueတ+6 ‘d’ န-9 ‘f’ Conversions တiuန-9 တ&-ဖက#အသuB$CပuAiuင#Kပ?$ အeပ3င#$ကiန#$eတ&eနရ+မH+
အe^မH+ Space တစ#လuB$ကiuခBKပ?$ Format လuပ#eပ$Aiuင#ပ3တယ#။

// "18,985"
System.out.format("%,d%n", 18985);

// "181,715.098000"
System.out.format("%,f%n", 181715.098);

Comma (‘,’) Flag ကiueတ+6 ‘d’ conversion န-9 Floating Number Conversion eတ&မH+ eရ$သ+$Aiuင#ပ3တယ#။
အသuB$Cပueနတ-6 Locale အလiuက# ကiန#$eတ&ကiu ခ&-Kပ?$eရ$သ+$eပ$Aiuင#ပ3တယ#။

// "100"
System.out.format("%(d%n", 100);
// "(100)"
System.out.format("%(d%n", -100);

// "10.019"
System.out.format("%(.3f%n", 10.019);
// "(10.019)"
System.out.format("%(.3f%n", -10.019);

Left Parenthesis ‘(‘ Flag ကiuလ- BigInteger eတ&န-9 ‘d’, ‘o’, ‘x’, ‘X’ Conversions eတ&န-9 တ&-ဖက# အသuB$Cပuတ-6
eနရ+န-9၊ byte, short, int, long အစQiတ-6 Integral Data Type eတ&န-9 သက#ဆiuင#ရ+ Wrapper Type eတ&န-9 ‘d’
conversions eတ&ကiuတ&-ဖက#eရ$သ+$တ-6 eနရ+မH+ အသuB$CပuAiuင#ပ3တယ#။ တဖန# Floating Numberr eတ&ကiu
Format ခGတ-6 eနရ+မH+လ- အသuB$CပuAiuင#ပ3တယ#။ အဆiuပ3 Conversions eတ&မH+ Left Parenthesis ‘(‘ Flag ကiu
eရ$သ+$ထ+$ရင# အAuတ#ကiန#$eတ&eနရ+မH+ () န-9ပiတ#Kပ?$eဖ2Cပeပ$မH+ Cဖစ#ပ3တယ#။


Learning Java 247 မင#$လ&င#


Java Developer Class

Formatting Message
Application eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ End User eတ&ဆ?ကiu Message eတ&ကiu eဖ2Cပရမည#6 အခ3မGiu$eတ&န-9
FကuBeတ&Jရတတ#ပ3တယ#။ အ-6ဒ?လiuအခ3မGiu$မH+ String Message eတ&ကiu အeသeဖ2Cပလiuရတ-6 အခ3မGiu$လ- Qiသလiu၊
Program ထ-မH+ပ3တ-6 Data eတ&န-9 Message eတ&ကiuတည#eဆ+က#Kပ?$Cပရတ-6 အခ3လ-Qiပ3တယ#။

“Hello Min Lwin, you have to enter phone number!” ဆiuတ-6 Message ကiueဖ2Cပမယ#ဆiuရင# “Min Lwin” ဆiu
တ-6 eနရ+ကiu အeသeရ$ထ+$ခ-6ရင# အCခ+$ User eတ&အတ&က#ဆiuရင# eန+က#ထပ# Message ကiu အသစ#
တည#eဆ+က#eနရမH+ Cဖစ#ပ3တယ#။ Kပ?$eတ+6 “phone number” ဆiuတ-6 eနရ+ကiu အeသeရ$ထ+$ခ-6ရင# “email
address” မပ3ခ-6လiu Message Cပန#Cပမယ#ဆiuရင#eတ+င# eန+က#ထပ# Message eတ&ကiu eရ$သ+$eနရပ3မယ#။

Name န-9 Input Fields eတ&ကiu Parameter အeနန-9 ရယOAiuင#တ-6 Template တစ#ခuကiu eရ$သ+$ထ+$ခ-6ရင#
Message eတ&ကiu အမGiu$မGiu$ Format ခGKပ?$ အသuB$CပuAiuင#မH+Cဖစ#ပ3တယ#။ Java Language မH+ Message eတ&ကiu
Format ခGAiuင#ဖiuအတ&က# MessageFormat ဆiuတ-6 Class ကiuCပင#ဆင#eပ$ထ+$ပ3တယ#။

String template = "Hello {0}, You have to enter {1}!";

// Hello Min Lwin, You have to enter Phone Number!


String m1 = MessageFormat.format(template, "Min Lwin", "Phone Number");
System.out.println(m1);

// Hello Pa Pa, You have to enter Email Address!


String m2 = MessageFormat.format(template, "Pa Pa", "Email Address");
System.out.println(m2);

MessageFormat Class မH+ သတ#မHတ#ထ+$တ-6 Message Format Pattern န-9 အသuB$Cပuမည#6 Parameter Set
တiuကiu အသuB$CပuKပ?$ အလ&ယ#တကO Format လuပ#ထ+$တ-6 Message eတ&ကiu eရ$သ+$ဖiuအတ&က# format() ဆiuတ-6
Static Method တစ#ခuကiu Cပင#eပ$ထ+$ပ3တယ#။

Return Type Methods


String static

format(String pattern, Object … args)

Argument အeနန-9 Format Pattern ကiu eရ$သ+$ထ+$တ-6 String တစ#ခuန-9 Object Varargs Type တစ#ခuတiuကiu
အသuB$Cပuပ3တယ#။ Format Pattern ကeတ+6 String Object Cဖစ#Kပ?$ String Fက+$ထ-မH+ Format Element eတ&ကiu
ညqပ#Kပ?$eရ$သ+$ထ+$ပ3တယ#။ အထက#နမOန+ထ-မH+ပ3တ-6 {0} န-9 {1} တiuဟ+ Format Template eတ&Cဖစ#ပ3တယ#။
ဒuတiယ Argument ကeတ+6 Verarges Type Cဖစ#တ-6 အတ&က# Format Element eတ&မH+ အစ+$ထiu$eရ$သ+မည#6
Object eတ&ကiu အသuB$Cပuလiuသeလ+က# Comma ခBKပ?$eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

အထက#နမOန+ထ-က “Min Lwin”, “Phone Number” ဆiuတ+ကeတ+6 Arguments eတ&ပ- Cဖစ#ပ3တယ#။ Format ခG
Kပ?$တ-6 eန+က#မH+ Format Element {0} eနရ+ကiu ပထမ Argument ကအစ+$ထiu$သ&+$Kပ?$ {1} eနရ+ကiu ဒuတiယ
Argument က အစ+$ထiu$သ&+$တ-6 အတ&က# “Hello Min Lwin, You have to enter Phone Number!” ဆiuတ-6
String Message ကiu တည#eဆ+က#eပ$Aiuင#တ+ပ- Cဖစ#ပ3တယ#။

Message Format ကiu အသuB$CပuCခင#$အ+$Cဖင#6 သတ#မHတ#ထ+$တ-6 Message Pattern တစ#ခuန-9 Argument အမGiu$
မGiu$ကiu အသuB$CပuKပ?$ မတOည?တ-6 Message eတ&ကiu အလ&ယ#တကOတည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 248 မင#$လ&င#


Java Developer Class

Format Elements
Format Element eတ&ကiu Message Format Pattern eတ&ထ-မH+ eရ+Kပ?$eရ$သ+$Aiuင#ပ3တယ#။ Format
Element eတ&ကiu Argument Index, Format Type န-9 Format Style တiuန-9 ဖ&-Jစည#$တည#eဆ+က#ထ+$ပ3တယ#။
Format Element eတ&ကiu eအ+က#ပ3 ပuBစB ၃ မGiu$န-9 eရ$သ+$Aiuင#ပ3တယ#။

1. {Argument Index}
2. {Argument Index, Format Type}
3. {Argument Index, Format Type, Format Style}

Argument Index

Object [] arguments = {"A", "B", "C"};

// Code 1 -> A, B, C
String m1 = MessageFormat.format("{0}, {1}, {2}", arguments);

// Code 2 -> C, B, A
String m2 = MessageFormat.format("{2}, {1}, {0}", arguments);

// Code 3 -> A, A, A
String m3 = MessageFormat.format("{0}, {0}, {0}", arguments);

// Code 4 -> A, B, {3}


String m4 = MessageFormat.format("{0}, {1}, {3}", arguments);

Argument Index eတ&ဟ+ Format Element eတ&မH+ မCဖစ#မeနပ3ဝင#ရမည#6 အစiတ#အပiuင#$Cဖစ#Kပ?$၊ e^ဆuB$မH+


eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။ Argument Index eတ&ဟ+ Arguments eတ&ထ-က အသuB$Cပuမည#6 Index Number ကiu
သတ#မHတ#eပ$Aiuင#Kပ?$ Array eတ& List eတ&လiuပ- သuညကeနစတင#ရမH+ Cဖစ#ပ3တယ#။

Message eတ&ကiu Format ခGတ-6eနရ+မH+ Format Element ရ-I Argument Index eတ&န-9 Arguments Array
ထ-က Object ကiuယOKပ?$ Message eတ&ကiu တည#eဆ+က#eပ$တ+ပ- Cဖစ#ပ3တယ#။ Format Index eတ&အတiuင#$
Argument eတ&ထ-မH+ တန#ဖiu$ကiu Q+မeတ&Jရင#eတ+6 Code 4 ထ-မH+လiu Format မခGeတ+6ပ- Format Pattern ထ-မH+
ပ3တ-6 အတiuင#$ပ- Cပန#eဖ2Cပပ3တယ#။

Format Type

String pattern = "I am learning Java {0} at {1, date}, {1,time}";


Object [] arguments = {11, new Date()};

// I am learning Java 11 at Sep 3, 2018, 9:17:45 PM


String m1 = MessageFormat.format(pattern, arguments);
System.out.println(m1);

Format Type eတ&ဟ+ Format Element eတ&ရ-I ဒuတiယeနရ+မH+ eရ$သ+$ရKပ?$ အသuB$Cပuမည#6 Argument ရ-I
Type ကiu သတ#မHတ#eပ$Aiuင#ပ3တယ#။ number, date, time န-9 choice တiuထ-က တစ#ခuခuကiu eရ&$ခGယ# အသuB$CပuAiuင#ပ3
တယ#။

Learning Java 249 မင#$လ&င#


Java Developer Class
Format Style

Format Style eတ&ကiu Format Type eတ&န-9 တ&-ဖက#eရ$သ+$ရမH+ Cဖစ#Kပ?$၊ Format Type အလiuက# eရ$သ+$Aiuင#တ-6
Format Style eတ&ဟ+ မတOည?Fကပ3ဘO$။ တကယ#eတ+6 Format Element eတ&မH+ Format Type eတ&ပ3လ+ရင#
Format Style အလiuက# သက#ဆiuင#ရ+ Sub Format Object eတ&ကiu Create လuပ#Kပ?$ Format Element ရ-I တန#ဖiu$
ကiu Format လuပ#eပ$မH+ Cဖစ#ပ3တယ#။ တည#eဆ+က#သ&+$မည#6 Sub Format Object eတ&ကeတ+6 eအ+က#ပ3
အတiuင#$Cဖစ#ပ3တယ#။

Format Type Format Style Sub Format Created


(none) (none) null
(none) NumberFormat.getInstance(getLocale())
integer NumberFormat.getIntegerInstance(getLocale())
currency NumberFormat.getCurrencyInstance(getLocale())
number
percent NumberFormat.getPercentInstance(getLocale())
new DecimalFormat(pattern,
[sub pattern]
DecimalFormatSymbols.getInstance(getLocale()))
DateFormat.getDateInstance(DateFormat.DEFAULT,
(none)
getLocale())
DateFormat.getDateInstance(DateFormat.SHORT,
short
getLocale())
DateFormat.getDateInstance(DateFormat.DEFAULT,
medium
date getLocale())
DateFormat.getDateInstance(DateFormat.LONG,
long
getLocale())
DateFormat.getDateInstance(DateFormat.FULL,
full
getLocale())
[sub pattern] new SimpleDateFormat(pattern, getLocale())
DateFormat.getTimeInstance(DateFormat.DEFAULT,
(none)
getLocale())
DateFormat.getTimeInstance(DateFormat.SHORT,
short
getLocale())
DateFormat.getTimeInstance(DateFormat.DEFAULT,
medium
time getLocale())
DateFormat.getTimeInstance(DateFormat.LONG,
long
getLocale())
DateFormat.getTimeInstance(DateFormat.FULL,
full
getLocale())
[sub pattern] new SimpleDateFormat(pattern, getLocale())
choice [sub pattern] new ChoiceFormat(pattern)

Learning Java 250 မင#$လ&င#


Java Developer Class
FORMATTING NUMBERS

// integer -> "1,000"


String m1 = MessageFormat.format("{0,number,integer}", 1000.09);

// currency -> "MMK100,000.00"


String m2 = MessageFormat.format("{0,number,currency}", 100000);

// percent -> "79%"


String m3 = MessageFormat.format("{0,number,percent}", 0.79);

// Custom Format -> "10,790,000.80"


String m4 = MessageFormat.format("{0,number,#,##0.00}", 10790000.798);

Number Format Type eတ&န-9 Integer Format Style ကiu အသuB$CပuKပ?$ Floating Number eတ&ကiuလ- Integer
အeနန-9 eဖ2Cပeပ$Aiuင#မH+ Cဖစ#ပ3တယ#။ Number Separated Character eတ&ကiueတ+6 လiuအပ#သလiu အသuB$Cပueန
တ-6 Locale အလiuက# သတ#မHတ#eပ$သ&+$မH+ Cဖစ#ပ3တယ#။

Currency Format Style ကiu အသuB$Cပမယ#ဆiuရင# သက#ဆiuင#ရ+ Locale အလiuက# Currency eတ&န-9 တ&-ဖက#eဖ2Cပ
eပ$Aiuင#ပ3မယ#။ အထက#ပ3 အတiuင#$ “MMK100,000.00” ဆiuKပ?$eဖ2Cပeပ$သ&+$Aiuင#ပ3တယ#။ Percent Format Style
ကiu အသuB$Cပuမယ#ဆiuရင# Argument တန#ဖiu$ကiu 100 န-9 eCမq+က#Kပ?$ % ပuBစBန-9 eဖ2Cပeပ$သ&+$မH+ Cဖစ#ပ3တယ#။ မiမi
ကiuယ#ပiuင# Format ကiu eရ$သ+$မယ#ဆiuရင#eတ+6 Decimal Format eရ$သ+$ပuBအတiuင#$eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

FORMATTING DATE & TIME

// short -> "9/3/18"


String m1 = MessageFormat.format("{0,date,short}", date);

// medium -> "Sep 3, 2018"


String m2 = MessageFormat.format("{0,date,medium}", date);

// time,short -> "10:52 PM"


String m3 = MessageFormat.format("{0,time,short}", date);

// time,long -> "10:52:11 PM MMT"


String m4 = MessageFormat.format("{0,time,long}", date);

// full -> "2018-09-03 22:28"


String m5 = MessageFormat.format("{0,date,yyyy-MM-dd HH:mm}", date);

Format Type date န-9 time eတ&မH+ short, medium, long န-9 full တiuကiu အသuB$CပuAiuင#ပ3တယ#။ အသuB$Cပueနတ-6
Locale အလiuက# သတ#မHတ#ထ+$တ-6 Format Style eတ&န-9 အသ?$သ?$eပ2Cပeပ$Aiuင#ပ3တယ#။ Simple Date Format
ရ-I Style ကiu အသuB$CပuKပ?$ AHစ#သက#ရ+ Custom Format eတ&ကiu eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။ Date Format န-9
ပတ#သက#Kပ?$ Date & Calendar အခန#$မH+ အeသ$စiတ#eဖ2Cပထ+$ပ3တယ#။

Choice Format န-9ပတ#သက#Kပ?$ MessageFormat Object ရ-Ieန+က#မH+ eဖ2Cပသ&+$ပ3မယ#။


Learning Java 251 မင#$လ&င#


Java Developer Class

MessageFormat Object
Message eတ&ကiu Format ခGတ-6 eနရ+မH+ Database ထ-က Select လuပ#လ+တ-6 Data eတ&န-9 String eတ&အမG+$
Pက?$ကiu Format ခGဖiuလiuတ-6 အခ3လ- Qiတတ#ပ3တယ#။ အ-6ဒ? Message eတ&ကiu အPကiမ#Pကiမ# Format ခGဖiuလiuတ-6 အခ3
မGiu$မH+ Static Method ကiu အသuB$Cပuတ+ထက# MessageFormat Object ကiu တည#eဆ+က#Kပ?$ အသuB$Cပuတ+ပiuKပ?$
သင#6eတ+#ပ3တယ#။

public static String format(String pattern, Object ... arguments) {


MessageFormat temp = new MessageFormat(pattern);
return temp.format(arguments);
}

အထက#ပ3ကuဒ#eတ&က MessageFormat Class ရ-I format() method ကiu eရ$သ+$ထ+$တ+ Cဖစ#ပ3တယ#။


Method Body ထ-မH+ MessageFormat Object ကiu တည#eဆ+က#Kပ?$ Format လuပ#ခiuင#$eနတ+ကiu eတ&Jရပ3တယ#။
temp Object ဟ+ format() method Kပ?$ဆuB$တ-6အခ3မH+ ဆက#အသuB$မCပueတ+6ပ3ဘO$။

ဒ3eFက+င#6 အPကiမ#Pကiမ# Message eတ&ကiu Format လuပ#Kပ?$သuB$တ-6 eနရ+မGiu$မH+ဆiuရင# format() method ကiu သ+
အသuB$Cပueနခ-6ရင# MessageFormat Object ကiu အPကiမ#Pကiမ# Create လuပ#eနမiမH+ Cဖစ#ပ3တယ#။ Garbage
Collector က မသuB$eတ+6တ-6 Object eတ&ကiu ဖGက#eပ$တ+မHန#eပမ-6 ခGက#ခGင#$Pက?$ဖGက#eပ$တ+ မဟuတ#ပ3ဘO$။ ဒ36
အCပင# Object eတ&ကiu မလiuပ-အPကiမ#Pကiမ# Create လuပ#တယ#ဆiuတ+ကလ- Performance ကiu အထiuက#အeလG+က#
ထiခiuက#eစAiuင#ပ3တယ#။

public static void main(String[] args) {

String pattern = "{1} is Roll Number {0} and take {2} Course.";

Object [][] array = {


{1, "Mike", "Java Basic"},
{2, "Jeny", "Java EE"},
{3, "Julia", "Spring Framework"}
};

MessageFormat format = new MessageFormat(pattern) ;

for(Object [] arguments : array) {


String message = format.format(arguments);
System.out.println(message);
}
}

Pattern တစ#ခuန-9 Data တစ#ခuထက#မက Message eတ&ကiu Format လuပ#ခGင#တယ#ဆiuရင# အထက#ပ3အတiuင#$


MessageFormat Object ကiu တည#eဆ+က#Kပ?$ အသuB$CပuAiuင#ပ3တယ#။ MessageFormat Object ကiu
တည#eဆ+က#တ-6 eနရ+မH+ Message Format Pattern String ကiu အသuB$CပuKပ?$ တည#eဆ+က#Aiuင#ပ3တယ#။

MessageFormat Object ရ-I format() ကiu အသuB$CပuKပ?$ အPကiမ#Pကiမ# Message eတ&ကiu တည#eဆ+က#Aiuင#ပ3တယ#။
ဒ? Looping Kပ?$တ-6 အထi MessageFormat Object တစ#ခuထ-ကiuသ+ အသuB$Cပuသ&+$မH+ Cဖစ#ပ3တယ#။

Learning Java 252 မင#$လ&င#


Java Developer Class

Choice Format
Message eတ&ကiu Format ခGတ-6 eနရ+မH+ အeနအထ+$eပ2မOတည#Kပ?$ ခ&-Cခ+$Cပလiuတ-6 အခ3မG+$လ- Qiတတ#ပ3တယ#။
ဘယ#လiuလ- ဆiuတ+ကiu Cမင#သ+eအ+င# နမOန+ကuဒ#eလ$eတ&န-9 eလ6လ+Fကည#6Fကရeအ+င#။

public static void main(String[] args) {

String pattern = "{0} has {1} Apples";

Object [][] array = {


{"Mike", 0},
{"Jeny", 1},
{"Julia", 2},
{"Tom", 10}
};

MessageFormat format = new MessageFormat(pattern) ;

for(Object [] arguments : array) {


String message = format.format(arguments);
System.out.println(message);
}
}

အထက#ပ3 ကuဒ#နမOန+ကiu Run Fကည#6မယ#ဆiuရင# eအ+က#ပ3အတiuင#$ အeCဖထ&က#ပ3မယ#။

Mike has 0 Apples


Jeny has 1 Apples
Julia has 2 Apples
Tom has 10 Apples

ရလဒ#ကiu Fကည#6ရင# အဆင#မeCပဘO$ဆiuတ+ကiu eတ&Jရပ3မယ#။ “Mike has 0 Apples” ဆiuတ+က က\န#eတ+#တiuလiu


Programmer eတ&ကFကည#မယ#ဆiuရင#eတ+6 န+$လည#eပ$လiuက#လiuရeပမ-6 သ+မန# အသuB$CပuသOeတ&အတ&က#ဆiuရင#
eတ+6 “Mike has not any Apple” လiuCပeပ$တ+က ပiuKပ?$သင#6eတ+#ပ3မယ#။ အလ+$တOပ- “Jeny has 1 Apples” ဆiu
တ+ကလ- မသင#6eတ+#ပ3ဘO$။ “Jeny has an Apple” ဆiuတ+က ပiuKပ?$သဘ+ဝကGပ3မယ#။

ဒ?လiuအဆင#မeCပမ[eတ&မH+ ChoiseFormat ကiu အသuB$CပuKပ?$ eCဖQင#$Aiuင#ပ3တယ#။

double [] limits = {0, 1, 2};


String [] formats = {"not any Apple", "an Apple", "{1, number} Apples"};
ChoiceFormat choices = new ChoiceFormat(limits, formats);

ChoiceFormat Object ကiu တည#eဆ+က#မယ#ဆiuရင# double array တစ#ခuန-9 String array တစ#ခuကiu အသuB$CပuKပ?$
eရ$သ+$ထ+$ဖiuလiuအပ#ပ3တယ#။ Array AHစ#ခuစလuB$ Langth eတ&တOeနဖiuလiuအပ#ပ3တယ#။ Format လuပ#မည#6
Argument ရ-I တန#ဖiu$ဟ+ 0 Cဖစ#eနတယ#ဆiuရင# Limits Array ရ-I Index ဟ+လ- 0 Cဖစ#ပ3တယ#။ အ-6ဒ? Index
Number န-9 ကiuက#ည?တ-6 formats Arrray ထ-က String ကiu Format Pattern အeနန-9 သuB$သ&+$မH+ပ- Cဖစ#ပ3တယ#။
အ-6ဒ3eFက+င#6 “not any Apple” ကiu eဖ2Cပeပ$ပ3မယ#။

Learning Java 253 မင#$လ&င#


Java Developer Class

public static void main(String[] args) {

Object [][] array = {


{"Mike", 0},
{"Jeny", 1},
{"Julia", 2},
{"Tom", 10}
};

// ChoiceFormat ကiuတည#eဆ+က#ပ3တယ#
double [] limits = {0, 1, 2};
String [] formats = {"not any Apple", "an Apple",
"{1, number} Apples"};
ChoiceFormat choices = new ChoiceFormat(limits, formats);

// MessageFormat ကiuတည#eဆ+က#ပ3တယ#
MessageFormat format = new MessageFormat("{0} has {1}.") ;

// Argument Index 1 မH+ ChoiceFormat ကiuသuB$မယ#လiu သတ#မHတ#


format.setFormatByArgumentIndex(1, choices);

for(Object [] arguments : array) {


String message = format.format(arguments);
System.out.println(message);
}
}

အထက#ပ3အတiuင#$ ChoiceFormat Object ကiu တည#eဆ+က#Kပ?$တ-6 eန+က#မH+ MessageFormat Object ရ-I


Index Number 1 eနရ+မH+ ChoiceFormat ကiu အသuB$Cပuမယ#လiu eရ$သ+$eပ$Aiuင#ပ3တယ#။ ဒ3ဆiuရင# Argument
တန#ဖiu$အလiuက# Message eတ&ကiu eရ&$ခGယ# Format လuပ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

အထက#ပ3 Program ကiu Run Fကည#6Kပ?$ရလ+တ-6 Output ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။

Mike has not any Apple.


Jeny has an Apple.
Julia has 2 Apples.
Tom has 10 Apples.

Fကည#6မယ#ဆiuရင# Argument တန#ဖiu$အလiuက# Format eတ&ကiu eရ&$ခGယ# အသuB$CပuAiuင#တယ#ဆiuတ+ကiu eတ&JရမH+ Cဖစ#ပ3


တယ#။

Learning Java 254 မင#$လ&င#


Java Developer Class

Dates & Calendar

java.utils.Date ဟ+ အခGiန#eတ&ကiu ကiuယ#စ+$Cပuဖiu eရ$သ+$ထ+$တ-6 Java Class တစ#မGiu$Cဖစ#ပ3တယ#။ Java Date


ဟ+ Nano Seconds အထi eဖ+#CပAiuင#ပ3တယ#။ java.utils.Date ဟ+ Java ဘ+သ+ရပ#စတင#eပ2eပ3က#စT#ကတ-
က ပ3ဝင#တ-6 API တစ#မGiu$Cဖစ#Kပ?$၊ သbစ?မH+ ရက#၊ လ၊ AHစ#ရက# န+ရ? မiနစ# အစQiတ-6 ယOနစ#eတ&ကiu eCပ+င#$eပ$Aiuင#တ-6
Method eတ&ပ3ဝင#eပမ-6လ- Thread Save မCဖစ#တ+က တeFက+င#$၊ Internationalization မCဖစ#တ+ကတစ#
eFက+င#$ အeFက+င#$ အမGiu$မGiu$eFက+င#6 လက#Qi အခGiန#မH+ အသuB$မCပuသင#6eတ+6 တ+eFက+င#6 တ+$Cမစ#ထ+$ပ3တယ#။
Date Class ဟ+ တန#ဖiu$ကiu သiမ#$ဆည#$QBသ+ အသuB$CပuKပ?$၊ တ&က#ခGက#မ[eတ&၊ Interpret လuပ#တ+eတ&ကiueတ+6
Calendar Class မH တဆင#6 Cပuလuပ#ရန# စ?စT#ထ+$ပ3တယ#။

API ကiu မeလ6လ+ခင# က\န#eတ+#တiu eရ$မည#6 Program ထ-မH+ Date ကiu ဘယ#လiuသuB$ခGင#တ+လ- ဆiuတ+ကiu စKပ?$
eလ6လ+Fကည#6Fကရeအ+င#။

• Date Object eတ&ကiu တည#eဆ+က#မယ#


• တည#eဆ+က#ထ+$တ-6 Date Object ကeန Year, Month, Date, Day, Hours, Minutes , Seconds အစQiတ-6
လiuအပ#တ-6 တန#ဖiu$eတ&ကiu eCပ+င#ယOမယ#
• Date eတ&ကiu တ&က#ခGက#မယ#
• Date eတ&ကiu လiuအပ#တ-6ပuBစBန-9 eCပ+င#$Cပမယ#

Creation Of Date
Date Object ကiu ဘယ#လiu တည#eဆ+က#မလ-။ ဒ3ဟ+ အeရ$Pက?$တ-6 အခGက#Cဖစ#ပ3တယ#။ က\န#eတ+#တiu Date
Object ကiu တည#eဆ+က#တ-6 eနရ+မH+ Current Time န-9 ယOKပ?$ eဆ+က#ခGင#တ+Qiသလiu၊ အခGiန# သတ#မHတ#Kပ?$
eဆ+က#ခGင#တ-6အခ3လ- Qiပ3မယ#။ အရင#ဆuB$ Current Time ကiu သuB$Kပ?$ eဆ+က#တ-6နည#$ကiu Fကည#6ပ3မယ#။

// Current Date
// By Default Constructor
Date date1 = new Date();

// By Calendar
Calendar cal = Calendar.getInstance();
Date date2 = cal.getTime();

Learning Java 255 မင#$လ&င#


Java Developer Class
အထက#ပ3အတiuင#$ Java Date Object ကiu Current Time ကiuသuB$Kပ?$ တည#eဆ+က#လiuလZင# နည#$လမ#$AHစ#မGiu$Qi
ပ3သည#။

အလ&ယ#ဆuB$ကeတ+6 java.utils.Date ရ-I Default Constructor ကiu သuB$Kပ?$ Instantiate လuပ#တ-6နည#$ပ3ပ-။ လက#Qi
Runtime ရ-I Current Time ကiu သuB$Kပ?$ Date Object ကiu တည#eဆ+က#eပ$ပ3လiမ#6မယ#။

ဒuတiယနည#$ကeတ+6 Calendar Object ကiu သuB$တ-6 နည#$ပ3ပ-။ အထက#မH+ eဖ2Cပထ+$တ-6 အတiuင#$ Calendar
Object ကiu Calendar.getInstance() method န-9တည#eဆ+က#ပ3တယ#။ Kပ?$ရင# getTime() ကeန Date Object
ကiu ရယOAiuင#ပ3တယ#။ အ-6ဒ?လiu eခ2လiuက#ရင# Current Time န-9 Date Object ကiu Cပန#ရမH+ Cဖစ#ပ3တယ#။

Constructors of Date Object

အထက#eဖ2Cပပ3အတiuင#$ java.util.Date မH+ JDK 1.1 ကတည#$က Constructor eတ& အeတ+#မG+$မG+$ပ3


eသ+#လည#$၊ လက#QiမH+eတ+6 အeတ+#မG+$မG+$ Deprecated Cဖစ#သ&+$Kပ?$ ၂ မGiu$သ+ သuB$လiuရပ3eတ+6မယ#။ တစ#မGiu$
ကeတ+6 အထက#မH+ အသuB$Cပuခ-6တ-6 Current Time ကiuရယOAiuင#တ-6 Default Constructor Cဖစ#ပ3တယ#။

eန+က#တစ#မGiu$ကeတ+6 long တန#ဖiu$တစ#ခuကiu Parameter အCဖစ#ရယOတ-6 Constructor Cဖစ#ပ3တယ#။ အ-6ဒ? long


Parameter ဟ+ standard base time (epoch) ကeန က&+ဟမ[ကiu milliseconds န-9 တ&က#ယOထ+$တ-6 တန#ဖiu$ Cဖစ#
ရပ3မယ#။ GMT 1970-01-01 00း00း00 ကeန တ&က#ရမH+ Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 အခGiန# သတ#မHတ#Kပ?$ Date Object ကiu eဆ+က#ခGင#တယ#ဆiuရင#eတ+6 သuB$Aiuင#ပ3မယ#။ ဒ3eပမ-6 epoch
ကeန အခGiန#ဘယ#eလ+က# က&+လ- ဆiuတ+ကiu milliseconds န-9 တ&က#Kပ?$Cပဖiuဆiuတ+ လ&ယ#တ-6 ကiစ{eတ+6 မဟuတ#ပ3
ဘO$။

Learning Java 256 မင#$လ&င#


Java Developer Class
ဆက#Kပ?$ အခGiန#သတ#မHတ#Kပ?$ Date Object eတ&ကiu ဘယ#လiu တ&က#မလ- ဆiuတ+ကiu Fကည#6ရeအ+င#။

// Target Date
// By Constructor
Date date1 = new Date(1473874200000L);

// By Calendar
Calendar cal = Calendar.getInstance();
cal.set(2018,07,11);
Date date2 = cal.getTime();

// By Formatting String
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
Date date3 = df.parse("2018/07/11");

အခGiန#သတ#မHတ#Kပ?$ Date Object ကiu eဆ+က#တ-6eနရ+မH+ အထက#eဖ2Cပပ3အတiuင#$ နည#$ ၃ မGiu$န-9 eဆ+က#လuပ#Aiuင#


မH+ Cဖစ#ပ3တယ#။

ပထမဆuB$နည#$ကeတ+6 Date Constructor မH+ epoch time ကiu eပ$တ-6 နည#$ပ3ပ-။ ဒ3eပမ-6ဗG+ Epoch Time ကiu
Milliseconds န-9 တ&က#ထuတ#ရမယ#ဆiuတ+က လက#eတ&Jမဆန#ပ3ဘO$။

ဒuတiယနည#$ကeတ+6 Calendar Object ကiu သuB$တ-6နည#$ပ3။ Calendar Object ရ-I သက#ဆiuင#ရ+ Fields eတ&ကiu လiu
သလiu Update လuပ#Kပ?$မH Date Object ကiu ရယOတ-6နည#$ပ3။ သOလ-ပ- Calendar ကiu eဆ+က#Kပ?$eတ+6 တန#ဖiu$eတ&ကiu
eCပ+င#$eနရတ-6အတ&က# Step eတ& မG+$ပ3တယ#။ Kပ?$eတ+6 လတန#ဖiu$ဟ+ 0 ကeန စတ+ကiu သတiထ+$ဖiuလiuပ3တယ#။
၁ လပiuင#$ဆiuရင# တန#ဖiu$က 0 Cဖစ#Kပ?$ ၂ လပiuင#$ဆiuရင# တန#ဖiu$က 1 လiueပ$ရမH+ Cဖစ#ပ3တယ#။

eန+က#ဆuB$နည#$ကeတ+6 DateFormat Object ကiu သuB$Kပ?$ parse လuပ#တ-6နည#$ပ3။ DateFromat Object ကiu
SimpleDateFormat Class ကeန တည#eဆ+က#ပ3မယ#။ Constructor Arguments အeနန-9 yyyy-MM-dd ကiu
eပ$ထ+$Kပ?$ အ-6ဒ? Format န-9 eရ$ထ+$တ-6 String Object ကeန Date ကiu ရယOAiuင#မH+ Cဖစ#ပ3တယ#။

Format ခGထ+$တ-6 String ကiu သuB$မH+ Cဖစ#တ-6အတ&က# န+$လည#ရလ&ယ#ကOတ-6အတ&က# အသuB$မG+$တ-6 နည#$Cဖစ#ပ3


တယ#။ တစ#ခuသတiထ+$ရမH+က parse method ကiu သuB$တ-6eနရ+မH+ format မမHန#တ-6 String ကiu eပ$မiရင#
ParseException ကiu Cဖစ#ပ&+$eစAiuင#တ-6 အတ&က# အဆiuပ3 Exception ကiu Handle လuပ#eပ$ဖiuလiu အပ#ပ3တယ#။

DateFormat န-9ပတ#သက#Kပ?$ eန+က#ပiuင#$မH+ ဆက#လက#eဖ2Cပသ&+$ပ3မယ#။

Learning Java 257 မင#$လ&င#


Java Developer Class

Interpretation of Calendar Values


Date Object မH+ Calendar Field ရ-I တန#ဖiu$မG+$ကiu ရယOဖiu Method eတ&လ- Qieတ+6 Qiပ3တယ#။ ဒ3eပမ-6
Internationalization န-9 မကiuက#တ-6အတ&က# အသuB$မCပueတ+6ရန# Deprecate လuပ#ထ+$ပ3တယ#။ Calendar Object
ကeန တဆင#6 Interpret လuပ#ယOရမH+ Cဖစ#ပ3တယ#။

Calendar Class မH+ Calendar Fields eတ&ကiu Get / Set လuပ#ဖiuအတ&က# Method eတ&ကiu Cပင#ထ+$ပ3တယ#။

Method Name Return Type Arguments

set void int field



int amount

get int int field

Calendar Object ရ-I သက#ဆiuင#ရ+ Calendar Field တန#ဖiu$eတ&ကiu CပuCပင#Aiuင#ဖiuအတ&က# set method ကiu အသuB$Cပu
ရမH+ Cဖစ#ပ3တယ#။ set method မH+ Parameter ၂ ခuကiu ရယOeနKပ?$ ပထမ Parameter ဟ+ Calendar Field ကiu
ကiuယ#စ+$CပuKပ?$၊ ဒuတiယ Parameter ဟ+ အ-6ဒ? Field ရ-I တန#ဖiu$ကiu ကiuယ#စ+$Cပuပ3တယ#။

Calendar Class မH+ Calendar Field eတ&ကiu ကiuယ#စ+$CပuAiuင#ဖiu Static Variable မG+$ကiu Cပင#ဆင#ထ+$Kပ?$ အ-6ဒ?
Fields eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

တဖန# get method မH+လ- int parameter တစ#ခuကiu ရယOeနKပ?$ မiမiက ရယOလiueသ+ Calendar Field ကiu eပ$ရမH+
Cဖစ#ပ3တယ#။ အ-6ဒ?eနရ+မH+လ- Calendar ရ-I Static Variable မG+$ကiu အသuB$CပuAiuင#ပ3တယ#။

အသuB$CပuAiuင#တ-6 Static Variable eတ&ကeတ+6 eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။

Static Variable Definition

YEAR AHစ#ကiu ကiuယ#စ+$Cပuပ3တယ#

MONTH လ ကiu ကiuယ#စ+$Cပuပ3တယ#

DAY_OF_MONTH လတစ#လရ-I ရက#ကiu ကiuယ#စ+$Cပuပ3တယ#

DAY_OF_WEEK အပ3တ#ရ-I ရက#ကiu ကiuယ#စ+$Cပuပ3တယ#

DAY_OF_WEEK_IN_MONTH လရ-I အပ3တ# အတ&င#$မH+Qiတ-6 ရက#ကiu ကiuယ#စ+$Cပuပ3တယ#

DAY_OF_YEAR AHစ#တစ#AHစ#အတ&င#$မH+Qiတ-6 ရက#ကiu ကiuယ#စ+$Cပuပ3တယ#

WEEK_OF_YEAR AHစ# တစ#AHစ#အတ&င#$မH+Qiတ-6 အပ3တ#ကiu ကiuယ#စ+$Cပuပ3တယ#

WEEK_OF_MONTH လတစ#လအတ&င#$မH+Qiတ-6 အပ3တ#ကiu ကiuယ#စ+$Cပuပ3တယ#

HOUR_OF_DAY eန9တစ#eန9ရ-I န+ရ?ကiu ကiuယ#စ+$Cပuပ3တယ#

HOUR န+ရ?ကiu ကiuယ#စ+$Cပuပ3တယ#

MINUTE မiနစ#ကiu ကiuယ#စ+$Cပuပ3တယ#

SECOND စက€ န#9ကiu ကiuယ#စ+$Cပuပ3တယ#

MILLISECOND မ?လ? စက€ န#9ကiu ကiuယ#စ+$Cပuပ3တယ#

Learning Java 258 မင#$လ&င#


Java Developer Class

Setting Calendar Values

public static void main(String[] args) {

// set with fields


Calendar c1 = Calendar.getInstance();
c1.set(Calendar.YEAR, 2018);
c1.set(Calendar.MONTH, 7);
c1.set(Calendar.DAY_OF_MONTH, 20);

// set fields
Calendar c2 = Calendar.getInstance();
c1.set(2018, 7, 20);
}

အထက#ပ3 အတiuင#$ သက#ဆiuင#ရ+ Calendar Field မG+$ရ-I တန#ဖiu$ကiu တစ#ခuခGင#$ဆ?သတ#မHတ#eပ$Aiuင#ပ3တယ#။ တဖန#


eအ+က#ပ3 အတiuင#$ Calender Field အစuလiuက# တန#ဖiu$ကiu သတ#မHတ#eပ$Aiuင#တ-6 Method eတ&လ- Qiပ3တယ#။

Calendar Object ရ-I AHစ#၊ လ၊ ရက#တiuကiu သတ#မHတ#လiuပ3က int parameter ၃ ခuပ3တ-6 Method ကiu သuB$မယ#ဆiuလ-ရ
ပ3တယ#။ သတiCပuရမH+က လတန#ဖiu$ဟ+ သuညကeန စတယ#ဆiuတ+ပ3ပ-။ int တန#ဖiu$ကiu တiuက#Uiuက#မeပ$ပ- Calendar
Class ရ-I Month အတ&က# eရ$သ+$ထ+$တ-6 Static Variable eတ&ကiu သuB$မယ#ဆiuလ- ရပ3တယ#။ Calendar Class
မH+ တစ#AHစ#တ+ အတ&က# လeတ&ကiu Static Variable eတ& အeနန-9 Pကiuတင# eရ$သ+$eပ$ထ+$ပ3တယ#။

Getting Calendar Value

public static void main(String[] args) {

Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
}

Learning Java 259 မင#$လ&င#


Java Developer Class
Leniency of Calendar

Calendar Object ရ-I တန#ဖiu$eတ&ကiu တ&က#ခGက#ရ+တ&င# Leniency Mode ကiu Fကည#6Kပ?$တ&က#ခGက#eလ6Qiပ3တယ#။


Calendar Object ရ-I isLenient method န-9 Calendar Class ရ-I Leniency Mode ကiu သiQiAiuင#Kပ?$ setLenient
method Cဖင#6လ- Leniency Mode ကiu သတ#မHတ#eပ$Aiuင#ပ3တယ#။

Calendar Object တစ#ခuရ-I Default Leniency တန#ဖiu$ဟ+ true Cဖစ#ပ3တယ#။

Leniency တန#ဖiu$ဟ+ true Cဖစ#eနရင# Calendar Field ရ-Iတန#ဖiu$က သတ#မHတ#ထ+$တ-6 တန#ဖiu$ထက#eကG+#


လ&န#သ&+$ပ3က လက#Qiတန#ဖiu$ထက#Pက?$တ-6 Field eတ&ကiu ပ3ဆက#Kပ?$ eCပ+င#$လ-eပ$မH+ Cဖစ#ပ3တယ#။

ဆiuလiuတ+က လက#Qi Calendar ရ-Iတန#ဖiu$က 2016/09/15 Cဖစ#တယ#ဆiuပ3စiu။ c.set(Calendar.DAY_OF_MONT,


45) လiueရ$လiuက#ရင# တန#ဖiu$ဟ+ 2016/10/30 လiueCပ+င#$သ&+$ပ3မယ#။

public static void main(String[] args) {

Calendar c = Calendar.getInstance();

System.out.println(c.isLenient());

c.set(2016, Calendar.SEPTEMBER, 15);

c.set(Calendar.DAY_OF_MONTH, 45);

System.out.println(c.getTime());
}

အထက#ပ3 Program ကiu Run Fကည#6မယ#ဆiuရင# eအ+က#ပ3 အတiuင#$eတ&Jရပ3လiမ#6မယ#။

true
Sat Oct 15 13:14:36 MMT 2016

Calendar Object c ရ-I lenient တန#ဖiu$ဟ+ သတ#မHတ#ထ+$Cခင#$မQiတ-6 အတ&က# Default အတiuင#$ true Cဖစ#eနတ+
ကiu eတ&Jရပ3တယ#။ အ-ဒ?အတ&က# DAY_OF_MONTH ကiu တစ#လQiတ+ထက# ပiuKပ?$ 45 လiu သတ#မHတ#လiuက#တ-6အခ3
လက#Qiလကiu eကG+#Kပ?$ ၁၀ လပiuင#$ ၁၅ ရက#လiu သတ#မHတ#eပ$သ&+$တ+ Cဖစ#ပ3တယ#။

Learning Java 260 မင#$လ&င#


Java Developer Class
က\န#eတ+#တiu Leniency ကiu False ဆiuKပ?$ eCပ+င#$Fကည#6မယ#ဆiuရင# Calendar Object ရ-I Leniency တန#ဖiu$ဟ+
Non-Lenient Mode ကiu eCပ+င#$သ&+$ပ3မယ#။ ဘယ#လiu Cဖစ#မယ#ဆiuတ+ကiu လက#eတ&J eရ$Fကည#6Fကရeအ+င#။

public static void main(String[] args) {

Calendar c = Calendar.getInstance();

c.setLenient(false);
System.out.println(c.isLenient());

c.set(2016, Calendar.SEPTEMBER, 15);

c.set(Calendar.DAY_OF_MONTH, 45);

System.out.println(c.getTime());
}

အထက#ပ3အတiuင#$ c.setLenient(false) ဆiuKပ?$ eCပ+င#$လiuက#ပ3တယ#။ Lenient Mode ဟ+ Non-Lenient Mode


ကiu eCပ+င#$သ&+$ပ3မယ#။ ဒ?လiuဆiuရင# DAY_OF_MONTH Field မH+ 45 လiu သတ#မHတ#လiu ရမH+ မဟuတ#eတ+6ပ3ဘO$။
၂၀၁၆ ခu ၁၀ ပiuင#$မH+ ရက# ၃၀ သ+Qiတ-6 အတ&က# IllegalArgumentException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

false
Exception in thread "main" java.lang.IllegalArgumentException:
DAY_OF_MONTH
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2648)
at java.util.Calendar.updateTime(Calendar.java:3393)
at java.util.Calendar.getTimeInMillis(Calendar.java:1782)
at java.util.Calendar.getTime(Calendar.java:1755)
at com.jdc.dummy.GenericsDemo.main(GenericsDemo.java:18)

Leniency ရ-Iသeဘ+တရ+$ဟ+ Calendar Field eတ&ကiu Set လuပ#ရ+မH+သ+မက ရက#စ&- အခGiန#eတ&ကiu တ&က#ခGက#
တ-6eနရ+မH+လ- အသuB$Cပuပ3တယ#။ ဆက#လက#Kပ?$ အခGiန#eတ&ကiu ဘယ#လiu တ&က#ခGက#တယ#ဆiuတ+ကiu Fကည#6Fကည#6
ရeအ+င#။

Learning Java 261 မင#$လ&င#


Java Developer Class

Calculating Date & Time


အခGiန#eတ&ကiu အသuB$Cပuရ+မH+ သbရ-Iတန#ဖiu$eတ&ကiu တ&က#ခGက#ဖiuလ- လiuပ3မယ#။ Calendar Field eတ&ကiu eပ3င#$ဖiu
အတ&က# Method AHစ#ခuQiပ3တယ#။

Method Arguments Description

add int field
 အခGiန#ရက#AHစ#လတiuအ+$ အeပ3င#$အA[တ# Cပuလuပ#လiuပ3က အသuB$CပuAiuင#


int amount

roll int field
 လက#Qi Field ထက#Pက?$eသ+ Field အ+$ မeCပ+င#$လည#$eစပ- အeပ3င#$
int amount အA[တ# Cပuလuပ#

အထက#ပ3 နမOန+ထ-မH+ Calendar Object c1 ရ-I တန#ဖiu$ကiu 2016/09/15 လiuသတ#မHတ#ပ3တယ#။ Kပ?$ရင# ရက# ၃၀ ကiu
add method ကiu သuB$Kပ?$ eပ3င#$eစပ3တယ#။ Add Method ကiu သuB$Kပ?$eပ3င#$တ+ Cဖစ#တ-6အတ&က# ရက#ကiu eပ3င#$Kပ?$
လကiu ပ3 ဆက#Kပ?$တiu$eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။ အ-6ဒ? အတ&က# ရလဒ#ဟ+ 2016/10/15 Cဖစ#သ&+$ပ3မယ#။

public static void main(String[] args) throws ParseException {

DateFormat df = new SimpleDateFormat("yyyyMMdd");


Date d = df.parse("20160915");

Calendar c = Calendar.getInstance();
c.setTime(d);

c.add(Calendar.DAY_OF_MONTH, 30);
System.out.println(c.getTime());

c.setTime(d);
c.roll(Calendar.DAY_OF_MONTH, 30);
System.out.println(c.getTime());
}

တဖန# roll ကiu သuB$Kပ?$ eပ3င#$ရင#eတ+6 လက#Qi Field ရ-I တန#ဖiu$အCပင#ကiu eCပ+င#$လ- eပ$မH+ မဟuတ#ပ3ဘO$။ အ-6ဒ?
အတ&က# ရလဒ#ဟ+ 2016/09/15 ပ- Cဖစ#eနမH+ Cဖစ#ပ3တယ#။ Run Fကည#6ထ+$တ-6 ရလဒ#ကeတ+6 eအ+က#ပ3 အတiuင#$
Cဖစ#ပ3တယ#။

Sat Oct 15 00:00:00 MMT 2016


Thu Sep 15 00:00:00 MMT 2016

Learning Java 262 မင#$လ&င#


Java Developer Class

Formatting Date
Date Object ကiu View မH+ Cပန#Kပ?$ Cပသလiuတ-6အခ3မH+ User က န+$လည#လ&ယ#တ-6 ပuBစBန-9 Cပန#Kပ?$ Cပဖiuလiuအပ#ပ3
တယ#။ တဖန# Localization အရ မည#သiueဖ2Cပရမယ#ဆiuတ-6 သတ#မHတ#ခGက#eတ&လ-Qiတတ#ပ3တယ#။ User Input
ကeတ+6 String eတ&Cဖစ#eနရင#လ- String ကeန Date Object ကiu eCပ+င#$ဖiuလiuအပ#ပ3မယ#။ အ-6လiueနရ+မGiu$မH+
Date eတ&ကiu ဘယ#လiu Format န-9Cပမယ#ဆiuတ+ကiu eရ$သ+$တတ#ဖiuလiuအပ#ပ3တယ#။Date Object အ+$ String
အCဖစ# Format လuပ#လiuသည#6အခ3တ&င#၎င#$၊ Format ခGထ+$eသ+ String မHတဆင#6 Date Object အ+$ Parse လuပ#
လiuသည#6အခ3တ&င#၎င#$ အသuB$CပuAiuင#ပ3တယ#။ DateFormat သည# Abstract Class Cဖစ#Kပ?$၊ Concrete Class မH+
SimpleDateFormat Class Cဖစ#ပ3တယ#။

Date eတ&ကiu Format လuပ#လiuသည#6 အခ3 format(date date) Method ကiu အသuB$CပuAiuင#Kပ?$ သတ#မHတ#ထ+$တ-6
Format န-9 Format လuပ#ထ+$တ-6 String Object ကiu Cပန#ရမH+ Cဖစ#ပ3တယ#။ Format အတiuင#$eရ$ထ+$တ-6 String
Object ကeန Date Object ကiu Parse လuပ#လiuတ-6 အခ3 parse(String source) method ကiu အသuB$CပuAiuင#ပ3
တယ#။ String တန#ဖiu$န-9 တည#eဆ+က#ထ+$တ-6 Date Object ကiu ရQiမH+ Cဖစ#ပ3တယ#။ parse method ကiu အသuB$Cပu
တ-6 အခ3မH+ ParseException ကiu Cဖစ#eပ2eစAiuင#တ-6အတ&က# Handle လuပ#eပ$ဖiu လiuအပ#ပ3တယ#။

Date And Time Patterns


Letter Date or Time Component Presentation Examples

G Era designator Text AD

y Year Year 1996; 96

Y Week year Year 2009; 09

M Month in year Month July; Jul; 07

w Week in year Number 27

W Week in month Number 2

D Day in year Number 189

d Day in month Number 10

F Day of week in month Number 2

E Day name in week Text Tuesday; Tue

u Day number of week Number 1

a Am/pm marker Text PM

H Hour in day (0-23) Number 0

k Hour in day (1-24) Number 24

K Hour in am/pm (0-11) Number 0

h Hour in am/pm (1-12) Number 12

m Minute in hour Number 30

s Second in minute Number 55

S Millisecond Number 978

z Time zone General time zone Pacific Standard Time; PST; GMT-08:00

Z Time zone RFC 822 time zone -0800

X Time zone ISO 8601 time zone -08; -0800; -08:00

Learning Java 263 မင#$လ&င#


Java Developer Class

Examples
Date and Time Pattern Result
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u" 2001-W27-3

Date Object ကiu Format ခGထ+$တ-6 String အCဖစ#eCပ+င#$လiuရင# သတ#မHတ#လiuတ-6 Format န-9 DateFormat ကiu အ
ရင#eဆ+က#ရပ3မယ#။ Kပ?$ပ3မH Format လuပ#လiuတ-6 Date Object ကiu သuB$Kပ?$ format eCပ+င#$UuBCဖစ#ပ3မယ#။

public static void main(String[] args) throws ParseException {

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

// Formatting Date
String formatedDate = df.format(new Date());
System.out.println(formatedDate);

// Parsing Date
Date date = df.parse(formatedDate);
System.out.println(date);

တဖန# Format လuပ#ထ+$တ-6 String ကeန Date Object ကiu Cပန#လiuခGင#ရင# parse method ကiu အသuB$CပuAiuင#ပ3
တယ#။

အမHန#အတiuင#$eCပ+ရမယ#ဆiuရင# Date တစ#ခuန-9 တစ#ခuဘယ#လiuက&+တယ#ဆiuတ+ ကiu တ&က#ခGက#တတ#ဖiuလ-လiuပ3လiမ#6


မယ#။ လက#Qi Date န-9 Calendar မH+ အ-6တ+eတ&ကiu တ&က#ခGက#ဖiu Method eတ& အသင#6eပ$မထ+$တ+ဘO$။ အ-6ဒ?
အတ&က# Date Object eတ&ရ-I Time ကiu Millisecond န-9 eCပ+င#$ယOKပ?$ က&+Cခ+$ခGက#ကiu Q+၊ Kပ?$ရင# န+ရ?၊ ရက#eတ&ကiu
Cပန#Kပ?$တ&က#ထuတ#ရမH+ Cဖစ#ပ3တယ#။

Java SE 8 မတiuင#မH?ကeတ+6 Third Party API eတ&Cဖစ#တ-6 Joda Time API တiuကiu အသuB$Cပuခ-6Fကရပ3တယ#။
Java SE 8 eရ+က#တ-6 အခ3မH+eတ+6 Date & Time API အသစ#ကiu Cဖည#6စ&က#လ+ခ-6Kပ?$ Duration eတ&ကiu
တ&က#ခGက#Aiuင#လ+ခ-6ပ3တယ#။

Learning Java 264 မင#$လ&င#


Java Developer Class

Date & Times API

Java SE 8 အeရ+က#မH+ အသစ#Cဖည#6စ&က#လ+ခ-6တ-6 eန9ရက# အခGiန#eတ&ကiu အသuB$CပuAiuင#တ-6 API တစ#မGiu$Cဖစ#ပ3


တယ#။ တကယ#ဆiuရင# Java မH+ eန9ရက#အခGiန#eတ&ကiu အသuB$Cပuဖiuအတ&က# Date န-9 Calendar တiuကiu အသuB$Cပuခ-6Fက
ပ3တယ#။ ဒ3eပမ-6 Java SE 8 အeရ+က#မH+ API အသစ#တစ#ခuကiu Cဖည#6စ&က#လ+ခ-6Fကပ3တယ#။

ဒ?အခန#$မH+eတ+6 ဘ+လiu Date eတ& Time eတ&ကiu အသuB$Cပuဖiu API အသစ#တစ#ခuလiuအပ#ခ-6ရတ+လ-။ Kပ?$eတ+6 API
အသစ#မH+ Date Time eတ&ကiu အသuB$Cပuဖiu ဘယ#လiu Class eတ& Interface eတ&ကiu အသuB$Cပuရမလ-။ ဘယ#လiu eနရ+
မGiu$eတ&မH+ ဒ? API န-9 ဘယ#လiu အသuB$CပuAiuင#သလ- ဆiuတ+eတ&ကiu eလ6လ+သ&+$Fကပ3မယ#။

Why Java need new Date API?



Types of Dates
Usages of Date and Times

Learning Java 265 မင#$လ&င#


Java Developer Class

Collections Framework

က\န#eတ+#တiu Java Program eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Data eတ&ကiu တစuတစည#$ထ- အသuB$Cပuလiuတ-6 အခ3မH+
Array eတ&ကiu အသuB$Cပuခ-6Fကပ3တယ#။ Array eတ&ဟ+ အသuB$Cပuမည#6 Data Type အလiuက# ထည#6သ&င#$ထ+$တ-6
အစ?အစT#ကiu ထiမ#$eပ$ထ+$Aiuင#တ-6 Object တစ#မGiu$Cဖစ#ပ3တယ#။

ဒ3eပမ-6 Array eတ&ကiu eရ$သ+$အသuB$CပuFကတ-6 eနရ+မH+ Array Object ကiu တည#eဆ+က#eတ+6မယ#ဆiuရင# အသuB$Cပu
မည#6 အeရအတ&က#ကiu အရင#ဆuB$သတ#မHတ#eပ$ခ-6ရပ3တယ#။ eန+က#Kပ?$ Array Object eတ&ဟ+ တစ#ခ3တည#eဆ+က#
Kပ?$Kပ?ဆiuရင# အသuB$Cပuလiuတ-6 အခန#$အeရအတ&က#ကiu ထပ#Kပ?$တiu$လiuမရeတ+6ပ3ဘO$။ eန+က#Kပ?$ Array eတ&ဟ+
သiမ#$ထ+$တ-6 Data eတ&ရ-I Index အတiuင#$သ+ Data eတ&ကiu Access လuပ#လiuရမH+Cဖစ#ပ3တယ#။ အCခ+$eသ+ Data
Structure eတ&ကiu Support မလuပ#eပ$Aiuင#ပ3ဘO$။

ဒ36eFက+င#6 လက#eတ&J Java Application eတ&ကiu eရ$သ+$တ-6 eနရ+မH+ Array eတ&ဟ+ သuB$ရခက#ခ-တ-6 အတ&က#
Arrays eတ&အစ+$ Collections eတ&ကiu အသuB$CပuFကတ+မG+$ပ3တယ#။ က\န#eတ+#တiu ဒ?အခန#$မH+eတ+6 Collections
eတ&ကiu ပB6ပiu$eပ$တ-6 Collections Framework အeFက+င#$ကiu eလ6လ+သ&+$Fကပ3မယ#။

Collection Interface

Learning Java 266 မင#$လ&င#


Java Developer Class
Collection eတ&ကiu ကiuယ#စ+$Cပuဖiuအတ&က# Interface eတ&ကiuCပင#ဆင#eပ$ထ+$ပ3တယ#။ Collection eတ&အ+$လuB$ရ-I
Base Interface မH+ Collection Interface Cဖစ#Kပ?$ Generics Type Interface အမGiu$အစ+$Cဖစ#ပ3တယ#။ တဖန#
အသuB$Cပuလiuတ-6 Data Structure အလiuက# Sub Interface eတ&ကiu Cပင#ဆင#eပ$ထ+$ပ3တယ#။ အသuB$CပuAiuင#တ-6
Interface eတ&ကeတ+6 Set, List န-9 Queue တiuပ-Cဖစ#Fကပ3တယ#။

Map eတ&ဟ+ Key Value အeနန-9 တ&-Kပ?$ Data eတ&ကiu သiမ#$eပ$ထ+$Aiuင#တ-6 Collection Interface ရ-I Sub
Interface eတ+6မဟuတ#ပ3ဘO$။ ဒ3eပမ-6 Map eတ&မH+ပ3တ-6 Key, Value အတ&-ကiu Entry ဆiuတ-6 Object န-9 သiမ#$eပ$
ထ+$Kပ?$၊ အ-6ဒ? Entry eတ&ကiu Set အeနန-9 သiမ#$eပ$ထ+$ပ3တယ#။

Methods of Collection Interface

Method Return Type Description

size() int Collection ထ-မH+ပ3တ-6 Element eတ&ရ-I Size ကiu သiQiAiuင#

isEmpty() boolean Element eတ&QiမQiကiu သiQiAiuင#

contains(Object) boolean Collection ထ-မH+ Argument ထ-က Element QiမQiကiu သiQiAiuင#

iterator() Iterator<E> Iterator Object ကiuCပန#လည#ရQiAiuင#

toArray() Object [] Element eတ&ကiu Object [] ပuBစBန-9 Cပန#လည#ရQiAiuင#

toArray(T[])<T> T [] Element eတ&ကiu Array ပuBစBန-9 Cပန#လည#ရQiAiuင#

containsAll(Collection<?>) boolean အCခ+$ Collection ထ-မH+ပ3တ-6 Element eတ&အ+$လuB$ လက#Qi


Collection ထ-မH+ပ3မပ3 သiQiAiuင#ပ3တယ#

retainAll(Collection<?>) boolean လက#Qi Collection ထ-မH+လ-ပ3Kပ?$ အCခ+$ Collection ထ-မH+ပ3


တ-6 Element eတ&န-9 လက#Qi Collection ကiu Cပန#လည#
တည#eဆ+က#လiuတ-6 အခ3မH+အသuB$CပuAiuင#ပ3တယ#

add(E) boolean Parameter Element ကiu Collection ထ-ကiu Cဖည#6စ&က#Aiuင#

remove(Object) boolean Parameter Element ကiu Collection ထ-ကeန ထuတ#ပစ#Aiuင#

addAll(Collection<? extends E>) boolean Collection ထ-ကiu အCခ+$ Collection eတ&ကiu Cဖည#စ&က#Aiuင#

removeAll(Collection<?>) boolean အCခ+$ Collection ထ-မH+ပ3 Element eတ&အ+$လuB$ကiu ထuတ#ပစ#


Aiuင#

removeIf(Predicate<? super E>) boolean Predicate ထ-မH+ပ3တ-6 Condition န-9 တOတ-6 Element eတ&ကiu
ဖGက#ထuတ#ပစ#Aiuင#

clear() boolean Element eတ&အ+$လuB$ကiu ဖGက#ထuတ#ပစ#Aiuင#

spliterator() Spliterator<E> Spliterator Object ကiu Cပန#လည#ရQiAiuင#

stream() Stream<E> Sequential Stream Object ကiu Cပန#လည#ရQiAiuင#

parallelStream() Stream<E> Parallel Stream Object ကiu Cပန#လည#ရQiAiuင#

အထက#ပ3 Method eတ&ကeတ+6 Collection Interface ထ-မH+ပ3တ-6 Method eတ&Cဖစ#FကKပ?$၊ Collection ရ-I Sub
Interface eတ&Cဖစ#Fကတ-6 Set, List န-9 Queue တiuမH+လ- အထက#ပ3 Method eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။ Set,
List န-9 Queue တiuဟ+ Data Structure eတ&ကiu ကiuယ#စ+$Cပueရ$သ+$ထ+$တ-6 Interface eတ&Cဖစ#Fကတ-6 အတ&က#
Collection Interface ထ-မH+ပ3တ-6 အeCခခB Metdhod eတ&အCပင# Data Structure အလiuက# အသuB$Cပuလiuတ-6
Method eတ&ကiu ထပ#မBCဖည#6စ&က#ထ+$Fကပ3တယ#။

Learning Java 267 မင#$လ&င#


Java Developer Class

Set Interface
Set Interface ဟ+ Collection Interface ရ-I Sub Interface တစ#ခuCဖစ#Kပ?$ အထက#တန#$ သခsG+မH+ ပ3တ-6 အစu
(Set) ဆiuတ-6 Data Structure ကiu အeCခခBKပ?$eရ$သ+$ထ+$ပ3တယ#။ အစu ဆiuတ-6 အတiuင#$ Set တစ#ခuထ-မH+ Element
eတ&ဟ+ Duplicate Cဖစ#တ+ကiu လက#မခBပ3ဘO$။ Kပ?$eတ+6 ပ3ဝင#တ-6 Element eတ&ရ-I ဘယ# Element Kပ?$ရင# ဘယ#
Element လ+မယ# ဆiuတ-6 သiမ#$ထ+$တ-6 အစ?အစT#ကiuလ- မHတ#မထ+$eပ$Aiuင#ပ3ဘO$။ ဒ36eFက+င#6 Set eတ&မH+ Index
Number ကiu အသuB$Cပuတ-6 Method eတ&လ- မပ3သလiu e^ဆuB$ eန+က#ဆuB$အစQiတ-6 Element eတ&ကiu eခ2ယOတ-6
Method eတ&လ- ပ3မလ+ပ3ဘO$။

Set eတ&မH+eတ+6 Collection Interface ထ-မH+ပ3တ-6 Method eတ&ကiuသ+ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ Set ဟ+
Interface တစ#ခuCဖစ#တ-6 အတ&က# ဒ?အတiuင#$eတ+6 Object တစ#ခuကiu တည#eဆ+က#လiuမရAiuင#ပ3ဘO$။ Set Interface
ကiu Implement လuပ#ထ+$တ-6 Class eတ&ကeန တဆင#6သ+ တည#eဆ+က#လiuရပ3မယ#။ Collections Framework
ထ-မH+ Set Object eတ&ကiu အလ&ယ#တကOတည#eဆ+က#Aiuင#ဖiuအတ&က# General Purpose Implementation Class
eတ&ကiu eရ$သ+$eပ$ထ+$ပ3တယ#။

Class Data Structure ထO$Cခ+$ခGက#မG+$

HashSet Hash Table Performance အeက+င#$ဆuB$ ပuBစBCဖစ#ပ3တယ#

TreeSet Balance Tree Natural Ordering အလiuက# Sort လuပ#eပ$ထ+$Aiuင#ပ3တယ#။


ဒ3eပမ-6 Compare လuပ#လiuမရတ-6 Object eတ&န-9eတ+6
အသuB$Cပuလiu မရAiuင#ပ3ဘO$

LinkedHashSet Link List & Hash Tablee Link List Data Structure ကiu အသuB$Cပuထ+$တ-6 အတ&က# ထ
ည#6သ&င#$ထ+$တ-6 အစ?အစT#ကiu သiမ#$eပ$ထ+$Aiuင#ပ3တယ#

အရင#ဆuB$ General Purpose Implementation Class eတ&ရ-I မတOည?မ[eတ&ကiu ကuဒ#eလ$eတ&န-9 eလ6လ+Fကည#6Fက


ရeအ+င#။

public static void main(String[] args) {

Set<Integer> hash = new HashSet<>();


Set<Integer> tree = new TreeSet<>();
Set<Integer> link = new LinkedHashSet<>();

for(int i = 10; i > 0; i --) {


hash.add(i);
tree.add(i);
link.add(i);
}

System.out.println(hash);
System.out.println(tree);
System.out.println(link);
}

အထက#ပ3နမOန+ထ-မH+ Set Object eတ&ကiu အသ?$သ?$ သက#ဆiuင#ရ+ Implementation Class eတ&န-9 တည#eဆ+က#
ထ+$ပ3တယ#။ Kပ?$eတ+6 for Loop ကiu 10 ကeန 0 အထi Desending Order န-9 Loop ပတ#eစKပ?$ Set Object eတ&

Learning Java 268 မင#$လ&င#


Java Developer Class
ထ-ကiu တန#ဖiu$eတ& Cဖည#6စ&က#ထ+$ပ3တယ#။ Kပ?$တ-6eန+က#မH+ Set Object အ+$လuB$ကiu Console eပ2မH+ eဖ2Cပeစပ3
တယ#။

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

ပထမစ+eFက+င#$က HashSet Object ကiu Cပထ+$တ+Cဖစ#ပ3တယ#။ က\န#eတ+#တiu ထည#6သ&င#$ခ-တ+က ၁၀ ကeန


သuညအထi eCပ+င#$Cပန#အစ?အစT#န-9 ထည#6သ&င#$ခ-6တ+Cဖစ#ပ3တယ#။ ဒ3eပမ-6 ရလဒ#အရFကည#6ရင# 1 ကeန 10 အထi စ?
ထ+$သလiuQiပ3တယ#။ ဒ3က Value န-9 စ?ထ+$တ+ မဟuတ#ပ3ဘO$။ Kပ?$eတ+6 HashMap eတ&ဟ+ Ordering eတ&
အစ?အစT#eတ&ကiu အ+မခBမeပ$ထ+$Aiuင#တ-6 အတ&က# ဒ?လiuရလဒ#မGiu$ထ&က#eပမ-6 အသuB$မCပuသင#6ပ3ဘO$။

ဒuတiယ စ+eFက+င#$ကeတ+6 TreeMap ကiu အသuB$Cပuထ+$တ+ပ3။ ဒ?eနရ+မH+လ- Integer eတ&ရ-I Natural Ordering
အတiuင#$ ငယ#စT#Pက?$လiuက#Cပန#Kပ?$ စ?eပ$ထ+$Aiuင#တ+ကiu eတ&Jရပ3တယ#။ Sort လuပ#တယ#ဆiuတ+က Element တစ#ခuန-9
တစ#ခuအFက+$ ငယ#သလ+$Pက?$သလ+$ကiu Aiuင#$ယHT#Aiuင#မHသ+ Sort လuပ#လiuရမH+ Cဖစ#ပ3တယ#။ Compare လuပ#လiu မရ
တ-6 Object eတ&ကiu TreeSet ထ-မH+ ထည#6သuB$ရင# ဘယ#လiu Cဖစ#မယ#ဆiuတ+ကiu eန+က#မH eလ6လ+သ&+$Fကပ3မယ#။ ဒ36
eFက+င#6 သဘ+ဝအတiuင#$ ငယ#စT#Pက?$လiuက# Sort လuပ#Kပ?$သ+$ Data eတ&ကiu ရယOခGင#တယ#ဆiuရင#eတ+6 TreeSet
Object ကiu အသuB$Cပuသင#6ပ3တယ#။ ဒ3eပမ-6 Set ထ-မH+ပ3တ-6 Element တန#ဖiu$eတ&eCပ+င#$တiuင#$ Sort လuပ#eနရတ-6
အတ&က# Element တန#ဖiu$eတ&ကiu ခဏခဏeCပ+င#$ဖiuလiuတ-6 eနရ+eတ&မH+ TreeSet ကiu အသuB$Cပuရင# Performance
ပiuင#$ဆiuင#ရ+မH+ အ+$န-သ&+$တတ#ပ3တယ#။

တတiယ စ+eFက+င#$ကeတ+6 LinkedHashMap ကiu အသuB$Cပuထ+$တ+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 ရလဒ#ဟ+ Add လuပ#
ထ+$တ-6 အစ?အစT#အတiuင#$Cပန#CပAiuင#တ+ပ- Cဖစ#ပ3တယ#။

က\န#eတ+#တiu ဆက#လက#Kပ?$ Compare လuပ#လiu မရတ-6 Object eတ&ကiu TreeSet eတ&ထ-မH+ eရ$သ+$အသuB$Cပuရင#
ဘယ#လiuCဖစ#မယ#ဆiuတ+ကiu eလ6လ+သ&+$Fကရeအ+င#။ eအ+က#ပ3 User Class ဟ+ က\န#eတ+#တiu TreeSet ထ-မH+
eရ$သ+$အသuB$Cပuသ&+$မည#6 Type Cဖစ#ပ3တယ#။

public class User {

private String name;

public User(String name) {


this.name = name;
}

@Override
public String toString() {
return name;
}

// getter & setter


}

User Class ကiu ဒ?အတiuင#$eရ$ထ+$မယ#ဆiuရင# Object eတ&အFက+$မH+ ဘယ#သOPက?$Kပ?$ ဘယ#သOငယ#တယ#ဆiuတ+ကiu


Aiuင#$ယHT#လiu မရAiuင#ပ3ဘO$။ Compare လuပ#လiu မရဘO$ဆiuကထ-က Sort လuပ#လiuမရAiuင#ပ3ဘO$။ ဒ?လiu Compare လuပ#လiu
မရတ-6 Object eတ&ကiu TreeSet ထ-ကiu ထည#6ရင# ဘယ#လiuCဖစ#မယ#ဆiuတ+ကiu eလ6လ+Fကည#6Fကရeအ+င#။

Learning Java 269 မင#$လ&င#


Java Developer Class

public static void main(String[] args) {

Set<User> set = new TreeSet<>();


set.add(new User("Thidar"));
set.add(new User("Aung Aung"));

System.out.println(set);
}

အထက#ပ3အတiuင#$ Main Method ထ-မH+ User Type ကiu အသuB$CပuAiuင#တ-6 TreeSet Object တစ#ခuကiu တည#eဆ+က#
Kပ?$ User Object eတ&ကiu ထည#6သ&င#$Fကည#6ပ3တယ#။ အထက#ပ3 Code eတ&ဟ+ Compile Time မH+ လuB$ဝ Error မ
Cဖစ#ပ3ဘO$။ Compile လuပ#လiuရပ3တယ#။ ဒ3eပမ-6 Run Fကည#6တ-6 အခ3မH+eတ+6 eအ+က#ပ3အတiuင#$
RuntimeException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

Exception in thread "main" java.lang.ClassCastException:


com.jdc.test.FormatDemo$User cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at com.jdc.test.FormatDemo.main(FormatDemo.java:25)

TreeSet eတ&ဟ+ Element eတ&ကiu Sort လuပ#Aiuင#ဖiuအတ&က# eန+က#က&ယ#မH+ TreeMap တစ#ခuကiu အသuB$Cပueနပ3
တယ#။ အ-6ဒ3eFက+င#6 TreeSet ရ-I add() Method ထ-မH+ TreeMap ရ-I put() Method ကiu ဆက#Kပ?$eခ2ပ3တယ#။
TreeMap ရ-I put() method ကeန compare() Method ကiu ဆက#eခ2Kပ?$ အ-6ဒ? Method ထ-မH+ User Object ကiu
Comparable Type အCဖစ#eCပ+င#$လiuတ-6 အတ&က# Cast လuပ#တ-6eနရ+မH+ User Class ဟ+ Comparable
Interface ကiu Implement လuပ#မထ+$တ-6 အတ&က# ClassCastException ကiu Cဖစ#eပ2eစတ+ပ- Cဖစ#ပ3တယ#။

ဒ36eFက+င#6 က\န#eတ+#တiu TreeSet မH+ အသuB$Cပuလiuတ-6 Data Type eတ&ဟ+ Comparable Interface ကiu
Implement လuပ#ထ+$ဖiuလiuအပ#တယ#ဆiuတ+ကiu သieနဖiuလiuအပ#ပ3တယ#။ Java မH+ပ3တ-6 Basic Data Type eတ&Cဖစ#
Fကတ-6 Primitive Wrapper eတ&န-9 String, Date, Calendar အစQiတ-6 Type eတ&ဟ+ eရ$သ+$ထ+$စT#ကထ-က
Comparable Interface ကiu Implement လuပ#Kပ?$သ+$Cဖစ#တ-6 အတ&က# TreeSet ထ-မH+ ဒ?အတiuင#$ အသuB$CပuAiuင#eပမ-6
မiမiကiuယ#တiuင#eရ$သ+$ထ+$တ-6 Class eတ&ဆiuရင#eတ+6 Comparable Interface ကiu Implement လuပ#ထ+$မHသ+
TreeSet ထ-မH+ eရ$သ+$ အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

public class User implements Comparable<User>{


private String name;

@Override
public int compareTo(User o) {
return name.compareTo(o.name);
}

// constructor, getter, setter & toString() method


}

အထက#ပ3အတiuင#$ User Class ကiu Comparable Interface ကiu Implement လuပ#လiuက#ပ3မယ#။ အ-6ဒ3eFက+င#6
compareTo() Method ကiu Override လuပ#Kပ?$eရ$eပ$ဖiu လiuအပ#လ+ပ3တယ#။

Learning Java 270 မင#$လ&င#


Java Developer Class
ဒ36eFက+င#6 User Class ရ-I compareTo() Method မH+ User o ကiu Argument အeနန-9 ယOထ+$Kပ?$ ဒ3ကeတ+6
လက#Qi Object န-9 လ+Kပ?$ Compare လuပ#မည#6 အCခ+$ User Object Cဖစ#ပ3တယ#။ Compare Method eတ&ရ-I
Return Type ဟ+ Integer Cဖစ#Kပ?$ တOeနရင# 0 ကiu Return Cပန#Kပ?$ ကiuယ#က Pက?$ရင# အeပ3င#$တန#ဖiu$ Integer ကiu
Return Cပန#Kပ?$ ကiuယ#ကငယ#eနရင# အAuတ#တန#ဖiu$ Return Cပန#ရမH+Cဖစ#ပ3တယ#။ နမOန+ထ-မH+eတ+6 Current
Object ရ-I name န-9 o.name ကiu Compare လuပ#လiuရတ-6 တန#ဖiu$ကiu Return Cပန#eစပ3တယ#။

ဒ36eFက+င#6 User Object ခGင#$ Compare လuပ#လ+ရင# name န-9 Compare လuပ#လiuရတ-6 Result ကiu ရQiမH+ Cဖစ#ပ3
တယ#။ အထက#ပ3အတiuင#$ User Class ကiu Cပင#ဆင#eရ$သ+$Kပ?$တ-6 eန+က#မH+ e^မH+eရ$သ+$ခ-6တ-6 Main Method
ကiu Cပန#Kပ?$ Run Fကည#6တ-6 အခ3 eအ+က#ပ3အတiuင#$ အeCဖကiu ရQiမH+ Cဖစ#ပ3တယ#။

[Aung Aung, Thidar]

Comparable Interface ကiu Implement လuပ#လiuက#တ-6 အတ&က# ClassCastException မCဖစ#eတ+6ပ3ဘO$။ Kပ?$


eတ+6လ- Aung Aung ကiu Thidar ရ-I eန+က#မH+ Add လuပ#eပမ-6၊ TreeSet eတ&ဟ+ Sort လuပ#eပ$Aiuင#တ-6 အတ&က#
Aung Aung ဟ+ e^မH+ eရ+က#eနတ+ Cဖစ#ပ3တယ#။

List Interface
List eတ&ဟ+ Set eတ&လiuပ- Collection Interface ရ-I Sub Interface တစ#ခuCဖစ#ပ3တယ#။ ဒ36eFက+င#6 Collection ထ-
မH+ပ3တ-6 Method eတ&ကiuလ- List eတ&မH+ အသuB$CပuAiuင#ပ3တယ#။ တဖန# List eတ&ဟ+ Unlimitted Array eတ&ကiu
ကiuယ#စ+$Cပuတ-6 အတ&က# Element eတ&ကiu Index eတ&န-9 သiမ#$eပ$ထ+$Aiuင#Kပ?$ Index eတ&ကiu အသuB$CပuKပ?$ eရ$သ+$
Aiuင#တ-6 Method eတ&ပiuပ3လ+ပ3တယ#။ List eတ&မH+ ပiuပ3လ+တ-6 Method eတ&ကeတ+6eအ+က#ပ3အတiuင#$Cဖစ#ပ3တယ#။

Method Return Type Description

get (int index) E Index မH+Qiတ-6 Element ကiuCပန#လည#ရယOAiuင#

set (int index, E element) void Index ကiu သတ#မHတ#Kပ?$ Element ကiu Set လuပ#Aiuင#

add (int index, E element) void Index ကiu သတ#မHတ#Kပ?$ Element ကiu Add လuပ#Aiuင#

remove(int index) E Index ကiu သတ#မHတ#Kပ?$ Element ကiu Remove လuပ#Aiuင#

addAll(int index, Collection<? boolean Index ကiu သတ#မHတ#Kပ?$ Collection ထ-မH+Qiတ-6 Element eတ&
extends E> c) အ+$လuB$ကiu Cဖည#6စ&က#Aiuင#

indexOf(Object o) Int e^ဆuB$မH+Qiတ-6 Element ရ-I Index ကiu Cပန#လည#ရယOAiuင#

lastIndexOf(Object o) Int eန+က#ဆuB$မH+Qiတ-6 Element ရ-I Index ကiu Cပန#လည#ရယOAiuင#

listIterator() ListIterator<E> List ထ-မH+Qiတ-6 Element eတ&အ+$လuB$ကiu ListIterator Object


အeနန-9 Cပန#လည#ရယOAiuင#

listIterator(int index) ListIterator<E> Index Number ကeနစKပ?$ eန+က#ဆuB$eနရ+အထi List ထ-မH+


Qiတ-6 Element eတ&ကiu ListIterator Object အeနန-9 Cပန#လည#
ရယOAiuင#

subList(int from, int to) List<E> အစန-9 အဆuB$ Index eတ&ကiueပ$Kပ?$ အCခ+$ List Object တစ#ခu
ကiu Cပန#လည#ရယOAiuင#

Index Number eတ&ကiu အသuB$CပuKပ?$ List ထ-က Element eတ&ကiu Access လuပ#တ-6 အခ3မH+ မQiတ-6 Index eတ&ကiu
သ&+$သuB$မiရင# IndexOutOfBoundsException ကiu Cဖစ#eပ2eစမH+Cဖစ#တ+ကiu သတiCပueစလiuပ3တယ#။
Learning Java 271 မင#$လ&င#
Java Developer Class

Class Data Structure ထO$Cခ+$ခGက#မG+$

ArrayList Unlimited Array Index န-9Q+eဖ&တ+ အသစ#Cဖည#6စ&က#တ+eက+င#$မ&န#ပ3တယ#



Fက+$Cဖတ#Kပ?$ Cဖည#6စ&က#တ+၊ Fက+$Cဖတ#Kပ?$ ဖGက#ထuတ#တ+
တ+eတ+6 မeက+င#$ပ3ဘO$

LinkedList Link List Memory eပ2မH+ eနရ+ယOတ+မG+$ပ3တယ#



Fက+$Cဖတ#Kပ?$ Cဖည#6စ&က#တ+၊ Fက+$Cဖတ#Kပ?$ ဖGက#ထuတ#တ+
တ+eတ+6 eက+င#$မ&န#ပ3တယ#

List Interface Object ကiuတည#eဆ+က#ဖiuအတ&က# ArrayList န-9 LinkedList Class တiuကiu အသuB$CပuAiuင#ပ3တယ#။
ArrayList ကeတ+6 Unlimited Array Data Structure ကiu အသuB$Cပuထ+$ပ3တယ#။ Unlimited Array eတ&ဟ+
Array အမGiu$အစ+$Cဖစ#တ-6 အတ&က# Element eတ&ကiu ထည#6သ&င#$ထ+$တ-6 Index Number eတ&န-9သiမ#$eပ$ထ+$Aiuင#
ပ3တယ#။ Array eတ&ကeတ+6 အသuB$Cပuမယ#ဆiuရင# အသuB$Cပuမည#6 Element အeရအတ&က#ကiu Pကiuတင# သတ#မHတ#
ထ+$ဖiu လiuအပ#eပမ-6 Unlimited Array eတ&ကeတ+6 Pကiuက#သeလ+က# Element eတ&ကiu Cဖည#6စ&က#Aiuင#ပ3တယ#။

ArrayList eတ&ဟ+ Unlimited Array Cဖစ#တ-6 အတ&က# Index ကiu အသuB$CပuKပ?$ Element eတ&ကiu Q+eဖ&တ-6 eနရ+မH+
အလ&န#eက+င#$မ&န#ပ3တယ#။ အထက#ပ3ပuBထ-ကလiu list.add(“J”) လiu အသစ#Cဖည#6စ&က#မယ#ဆiuရင# eန+က#ဆuB$eနရ+မH+
အခန#$တစ#ခန#$တiu$Kပ?$ အ-6ဒ?eနရ+မH+ “J” ကiu Cဖည#6စ&က#UuBပ3ပ-။ ဒ?လiuပ- Element eတ&ကiu Index န-9 သiမ#$ထ+$တ+ Cဖစ#
တ-6 အတ&က# list.get(5) လiu Cပန#Q+မယ#ဆiuရင#လ- အလ&ယ#တကOQ+eဖ&Aiuင#မH+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6 list.remove(1) လiu Index 1 မH+Qiတ-6 Element ကiu Delete လuပ#မယ#ဆiuရင#eတ+6 Index 2 ကeန အဆuB$
အထi Index Number eတ&ကiu Cပန#eCပ+င#$Kပ?$လiuတ-6 eနရ+မGiu$eတ&မH+ Performance ကiu ကGဆင#$eစAiuင#ပ3တယ#။ ဒ36
eFက+င#6 ArrayList Object eတ&ကiu Fက+$Cဖတ#Kပ?$ ဖGက#ထuတ#တ+တiu၊ Fက+$Cဖတ#Kပ?$ Cဖည#6စ&က#ဖiuလiuအပ#တ-6 Operation
eတ&မH+ သiပ#Kပ?$ မသuB$သင#6ပ3ဘO$။

LinkedList Class eတ&ကeတ+6 Link List Data Structure ကiu အသuB$Cပuပ3တယ#။ Link List eတ&မH+ Element
eတ&ကiu Node eတ&န-9သiမ#$ဆည#$ထ+$Fကပ3တယ#။ Node တစ#ခuမH+ Element Value န-9 Next Node ဟ+ ဘယ#
Node လ-ဆiuတ+ကiu သတ#မHတ#eပ$Aiuင#တ-6 တန#ဖiu$တစ#ခuတiuန-9 ဖ&-Jစည#$ထ+$ပ3တယ#။ ဒ36eFက+င#6 LinkedList eတ&ဟ+

Learning Java 272 မင#$လ&င#


Java Developer Class
Array List eတ&န-9 Ai[င#$ယHT#မယ#ဆiuရင# Memory eပ2မH+ eနရ+ယOပiuယOeလ6Qiပ3တယ#။ ဒ3eပမ-6 Fက+$Cဖတ#Kပ?$ Cဖတ#
eတ+က#တ-6eနရ+eတ&၊ Fက+$Cဖတ#Kပ?$ Cဖည#6စ&က#တ-6 Operation eတ&မH+eတ+6 Performance eက+င#$မ&န#ပ3တယ#။ ဆiu
Fကပ3စiu Node 2 ကiuဖGက#ထuတ#ပစ#ခGင#တယ#ဆiuရင# Node 1 ရ-I Next Element eနရ+မH+ Node 3 ကiu eCပ+င#$ခGiတ#
eပ$လiuက#UuBပ3ပ-။ အCခ+$ Node eတ&ကiu ဘ+မHလuပ#စရ+မလiuအပ#ပ3ဘO$။ ဒ?လiuပ- Node 2 န-9 Node 3 အFက+$မH+ Node
တစ#ခuကiu Cဖည#6စ&က#ခGင#တယ#ဆiuရင#လ- Node 2 ရ-I Next eနရ+မH+ Node အသစ#ကiu သတ#မHတ#Kပ?$၊ Node အသစ#ရ-I
Next eနရ+မH+ Node 3 ကiu သတ#မHတ#လiuက#UuBပ3ပ-။ ဒ3eFက+င#6 List ရ-I Element eတ&ကiu ခဏခဏ Fက+$Cဖတ#Kပ?$ Cဖ
ည#6စ&က#တ+တiu ဖGက#ပစ#တ+တiu မG+$တ-6 Operation eတ&မH+ LinkedList ကiu အသuB$Cပuသင#6ပ3တယ#။

// create list object


List<Integer> list = new ArrayList<>();

// [10]
list.add(10);

// [10, 4]
list.add(4);

// [10, 5, 4]
list.add(1, 5);

// [10, 2, 4]
list.set(1, 2);

// [2, 4]
list.remove(0);

List Object တစ#ခuကiuတည#eဆ+က#eတ+6မယ#ဆiuရင# မiမiရ-I Application ရ-I လiuအပ#ခGက#အလiuက# ArrayList န-9


LinkedList တiuမHတဆင#6တည#eဆ+က#Aiuင#ပ3တယ#။

List Object eတ&မH+ add() method AHစ#မGiu$ပ3Qiပ3တယ#။ ပထမ add() method ကeတ+6 Element ကiuယOKပ?$ List
ထ-ကiu ထည#6eပ$Aiuင#တ-6 Method Cဖစ#ပ3တယ#။ အထက#eဖ2Cပပ3အတiuင#$ list.add(10) လiueရ$လiuက#Kပ?$တ-6 eန+က#မH+
List ထ-က eန+က#ဆuB$ Index eနရ+ကeန တစ#ခuတiu$Kပ?$ Element ကiu Cဖည#6စ&က#eပ$မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6
add(E) Method ကiu အသuB$Cပuရင# Cဖည#6စ&က#လiuက#တ-6 Element ဟ+ eန+က#ဆuB$eနရ+မH+ eရ+က#Qiသ&+$မH+ Cဖစ#ပ3
တယ#။ eန+က# Method တစ#ခuကeတ+6 add(int, E) ပ3။ Argument AHစ#ခuပ3QiKပ?$၊ ပထမ Argument ကeတ+6 Add
လuပ#မည#6 Index Number Cဖစ#Kပ?$ eန+က# Argument ကeတ+6 Cဖည#6စ&က#မည#6 Element Cဖစ#ပ3တယ#။ အသစ#Cဖည#6
စ&က#လiuက#တ-6 Element က Index eနရ+မH+ eရ+က#Qiသ&+$Kပ?$၊ အရင# Index မH+ Qieနတ-6 Element ကeတ+6 eန+က#
ကiu eရpIသ&+$မH+ Cဖစ#ပ3တယ#။ ဒ?လiuပ- eန+က#မH+Qiတ-6 Element eတ&လ- eန+က#ကiu Index တစ#ခuဆ?ဆuတ#သ&+$မH+ Cဖစ#
ပ3တယ#။ ဘယ#လiuပ- Cဖစ#Cဖစ# add() method ကiu အသuB$Cပuရင# Element တစ#ခueတ+6 တiu$သ&+$မH+ Cဖစ#ပ3တယ#။

set(int, E) Method ကeတ+6 Index Number မH+Qieနတ-6 Element န-9 Argument မH+ပ3လ+တ-6 Element န-9 လ-
eပ$Aiuင#တ-6 Method တစ#ခuCဖစ#ပ3တယ#။ ဒ3eFက+င#6 နဂiu List ထ-မH+ [10, 5, 4] Qieနတ-6 eနရ+မH+ list.set(1, 2) ကiu
Evaluate လuပ#Kပ?$တ-6 အခ3မH+ [10, 2, 4] လiu Index 1 eနရ+ကiu တန#ဖiu$ 2 က အစ+$ထiu$သ&+$တ+ကiu eတ&Jရပ3မယ#။
တဖန# Index Number ကiueပ$Kပ?$လ- remove လuပ#လiuရပ3eသ$တယ#။ list.remove(0) ကiu Evaluate လuပ#လiuက#ရင#
eတ+6 Index 1 မH+Qiတ-6 10 ကiu ဖGက#ထuတ#ပစ#Kပ?$ [2, 4] ပ- List ထ-မH+ ကGန#ပ3eတ+6မယ#။

တဖန# List ထ-ကiu အCခ+$eသ+ Collection eတ&Cဖည#6စ&က#Aiuင#eအ+င# Method eတ&ကiuလ- Cပင#ဆင#eပ$ထ+$ပ3တယ#။

Learning Java 273 မင#$လ&င#


Java Developer Class

List<String> list = new ArrayList<>();

list.add("Hello");

Set<String> set = new HashSet<>();


set.add("Java");

list.addAll(set);

// [Hello, Java]
System.out.println(list);

list.addAll(1, list);

// [Hello, Hello, Java, Java]


System.out.println(list);

Learning Java 274 မင#$လ&င#


Java Developer Class

Utility Classes for Collection


Learning Java 275 မင#$လ&င#


Java Developer Class

Java IO
Java IO ဆiuတ+ဟ+ Java Program ထ-ကeန Inputs Outputs eတ&ကiu လuပ#Aiuင#eအ+င# Pကiueရ$eပ$ထ+$တ-6 API
ပ- Cဖစ#တယ#။ ဒ3ဆiuရင# IO ကiu သieအ+င# ဘ+eတ&eလ6လ+ထ+$ဖiuလiuမH+လ-။ File System ကiuန+လည#ထ+ဖiueတ+6 လiu
ပ3လiမ#6မယ#။ Kပ?$မH API ကiu သuB$Kပ?$ Input Output ကiu ဘယ#လiuလuပ#မယ#ဆiuတ+ရယ# ဘယ#လiu အရ+မGiu$eတ&ကiu Input
လuပ#လiuရမယ#ဆiuတ+ရယ#၊ အသuB$CပuAiuင#တ-6 Interface Object eတ&ကiu သiQiထ+$ရပ3မယ#။

Java SE ရ-I java.io package ရ-I eအ+က#မH+ IO အတ&က# API Class eတ& Interfaces eတ&ကiu စuစည#$ထ+$ပ3
တယ#။ က\န#eတ+#တiu Java IO အခန#$န-9 eအ+က#ပ3 အeFက+င#$အရ+မG+$ကiu eလ6လ+သ&+$ပ3မယ#။

FILE OBJECT

File System ထ-မH+ Qiတ-6 File eတ& Directory eတ&ရ-I Path Name eတ&ကiu ကiuယ#စ+$Cပuရန#အတ&က# java.io.File
Class ကiu Cပင#ဆင#ထ+$ပ3တယ#။ File Object ကeန File Directory တiuရ-I Properties eတ&ကiu သiQiAiuင#သလiu၊ File
Directory eတ&ကiu တည#eဆ+က#Aiuင#ပ3တယ#။ တဖန# Directory ထ-မH+Qiတ-6 File eတ&ကiu Q+eဖ&တ+eတ&၊ File eတ&
ကiu န+မည#eCပ+င#$တ+eတ&၊ တeနရ+က တeနရ+ကiu eCပ+င#eရpIတ+eတ&၊ Kပ?$eတ+6 ဖGက#ပစ#တ+eတ& လuပ#Aiuင#ပ3တယ#။

I/O STREAMS

File ထ-မH+Qiတ-6 Data eတ&ကiu Read / Write လuပ#ဖiuအတ&က#Cပင#ဆင#ထ+$တ-6 Object eတ&Cဖစ#ပ3တယ#။ Read /
Write လuပ#မည#6 Data Type အလiuက# အသuB$Cပuရမည#6 I/O Stream အမGiu$အစ+$eတ&ဟ+ မတOည?ပ3ဘO$။ ဘယ#လiu
Data အမGiu$အစ+$ဆiuရင# ဘယ# Stream ကiu သuB$မလ- ဆiuတ+eတ&ကiu အeသအခG+ ခ&-Cခ+$သieနဖiuလiuအပ#ပ3တယ#။ နမO
န+eတ&န-9 I/O Stream eတ&ကiu သeဘ+eပ3က#eအ+င# eလ6လ+သ&+$Fကပ3မယ#။

SERIALIZATION AND DESERIALIZATION

JVM ရ-I Memory eပ2မH+Qiတ-6 Object eတ&ကiu တCခ+$တeနရ+ရ+မH+ သ&+$Kပ?$ သiမ#$တ+ကiu Serialize လuပ#တယ#လiu
eခ2ပ3တယ#။တဖန# Serialized လuပ#ထ+$တ-6 Object eတ&ကiu JVM ရ-I Memory eပ2ကiu Cပန#Kပ?$ eခ2ယO အသuB$Cပuတ+
ကiu Deserialize လuပ#တယ#လiueခ2Kပ?$ Deserialize လuပ#တ+ကiu ဘယ#လiu လuပ#တ+လ-။ Kပ?$eတ+6 သတiထ+$စရ+ ဘ+
eတ&Qiလ-ဆiuတ+ကiu eလ6လ+သ&+$ပ3မယ#။

Learning Java 276 မင#$လ&င#


Java Developer Class

java.io.File
Java IO API ဟ+ JDK version 1.0 ကထ-ကပ3ဝင#လ+ခ-6တ-6 Input Output ကiu လuပ#eဆ+င#ဖiuအတ&က# API တစ#ခu
Cဖစ#ပ3တယ#။ File System ထ-မH+ Qiတ-6 File eတ& Directory eတ&ရ-I Path ကiu ကiuယ#စ+$Cပuဖiuအတ&က# java.io.File
Class ကiu Cပင#ဆင#ထ+$ပ3တယ#။ File Class ဟ+ Serializable န-9 Comparable<File> ကiu Implement လuပ#ထ+$
တ-6 Class တစ#ခuCဖစ#ပ3တယ#။

How To Create File Object


အရင#ဦ$ဆuB$ File Object တစ#ခuကiu ဘယ#လiu တည#eဆ+က#မလ- ဆiuတ+ကeနစKပ?$ eလ6လ+Fကည#6Fကရeအ+င#။ File
Object ကiu တည#eဆ+က#ဖiu အတ&က# Constructors eတ&ကiu Cပင#ဆင#ထ+$ပ3တယ#။ File Object ကiu တည#eဆ+က#
တ-6 eနရ+မH+ လက#QiQiKပ?$သ+$ File Directory eတ&ကiuကiuယ#စ+$Cပuတ-6 Object eတ&ကiuလ- တည#eဆ+က#Aiuင#သလiu၊
လက#eတ&JမH+ မQieသ+#လည#$ Virtually တည#eဆ+က#ထ+$လiuရပ3တယ#။ File Object ကiu တည#eဆ+က#Kပ?$ လiuအပ#
လ+တ-6အခ3ကGမH Create လuပ#လiuလ- ရAiuင#ပ3တယ#။ ဒ3ဆiu File Class ထ-မH+ပ3တ-6 Constructors eတ&ကiu eလ6လ+Fက
ည#6Fကရeအ+င#။

Constructors Descriptions

File(File parent, String child) Parent Cဖစ#တ-6 File Object တစ#ခuန-9 Child Path Name တiuCဖင#6 File Object ကiu
တည#eဆ+က#Aiuင#တ-6 Constructor Cဖစ#ပ3တယ#

File(String pathname) File Directory ရ-I Path String ကeန File Object ကiu တည#eဆ+က#Aiuင#တ-6
Constructor Cဖစ#ပ3တယ#။ Path အeနန-9 Absolute Path eက+ Relative Path
ကiu ပ3 အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#

File(String parent, String child) File Directory တiuQieနတ-6 Directory Path န-9 File Name တiuကeန File
Object ကiu တည#eဆ+က#Aiuင#တ-6 Constructor Cဖစ#ပ3တယ#။

File(URI uri) File Directory တiuကiueဖ2CပAiuင#တ-6 URI Object ကeနတဆင#6 File Object ကiu
တည#eဆ+က#Aiuင#တ-6 Costructor Cဖစ#ပ3တယ#။

File Class ရ-I Constructor eတ&ကiu eလ6လ+Fကည#6ရင# File တစ#ခuကiu တည#eဆ+က#ဖiuအတ&က#က အ-6ဒ? File ရ-I
Path ကiu eဖ2Cပeပ$Aiuင#ဖiuလiuတ+ကiu eတ&Jရပ3မယ#။ အ-6ဒ? Path ကiu eဖ2Cပတ-6eနရ+မH+ Absoulte Path န-9လည#$ eဖ2Cပ
Aiuင#သလiu Relative Path န-9 လည#$eဖ2CပAiuင#မH+ Cဖစ#ပ3တယ#။


// from file path


File file1 = new File("folder1");

// from parent file object and file path


File file2 = new File(file1, "file2.txt");

// from parent file path and child file path


File file3 = new File("folder1", "file2.txt");

// from URI
URI uri = new URI("c:\\tmp\\names.txt");
File file = new File(uri);

Learning Java 277 မင#$လ&င#


Java Developer Class

Create & Delete Files


File Object ကeန File Directory eတ&ကiu တည#eဆ+က#Aiuင#ဖiu၊ Kပ?$eတ+6 QiKပ?$သ+$ File eတ&ကiu ဖGက#Aiuင#ဖiuအတ&က#
eအ+က#ပ3 Methods eတ&ကiu အသuB$CပuAiuင#ပ3တယ#။

Methods Return Type and Descriptions

createNewFile() boolean

File Object မH+ သတ#မHတ#ထ+$ခ-6တ-6 Abstract Path Name Cဖင#6 Empty New File တစ#ခu
ကiu တည#eဆ+က#eပ$ပ3လiမ#6မယ#။ တကယ#လiu Path အတiuင#$ File ဟ+Qieနမယ#ဆiuရင#
eဆ+က#eပ$Aiuင#မH+ မဟuတ#ပ3ဘO$။ File ကiu တည#eဆ+က#Aiuင#ခ-6ရင# true ကiu Return လuပ#မH+
Cဖစ#Kပ?$ မeဆ+က#Aiuင#ခ-6ပ3က false ကiu Return Cပန#မH+ Cဖစ#ပ3တယ#။

IOException ကiu Cဖစ#eပ2eစAiuင#တ-6အတ&က# Handle လuပ#eပ$ဖiuလiuအပ#ပ3တယ#။

mkdir() boolean

File Object မH+ သတ#မHတ#ထ+$တ-6 Abstract Path Name Cဖင#6 Directory ကiu
တည#eဆ+က#eပ$မH+ Cဖစ#ပ3တယ#။ တည#eဆ+က#Aiuင#ခ-6ရင# true ကiu Return Cပန#မH+ Cဖစ#Kပ?$ မ
တည#eဆ+က#Aiuင#ခ-6ပ3က false ကiu Return Cပန#မH+ Cဖစ#ပ3တယ#

mkdirs() boolean

File Object မH+ သတ#မHတ#ထ+$တ-6 Abstract Path Name Cဖင#6 Directory ကiu
တည#eဆ+က#eပ$မH+ Cဖစ#ပ3တယ#။ Child Directories eတ&ပ3လ+ရင#eတ+6 ဒ? Method ကiu
အသuB$CပuရမH+ Cဖစ#ပ3တယ#။ တည#eဆ+က#Aiuင#ခ-6ရင# true ကiu Return Cပန#မH+ Cဖစ#Kပ?$ မ
တည#eဆ+က#Aiuင#ခ-6ပ3က false ကiu Return Cပန#မH+ Cဖစ#ပ3တယ#

delete() boolean

File Object Cဖင#6 ကiuယ#စ+$Cပueသ+ File Directory ကiu delete လuပ#လiuတ-6အခ3မH+ အသuB$Cပu
Aiuင#ပ3တယ#။ eအ+င#Cမင#စ&+ Kပ?$ဆuB$ပ3က true ကiu Return Cပန#မH+ Cဖစ#Kပ?$ မဖGက#Aiuင#ခ-6ပ3က
false ကiu Return Cပန#မH+ Cဖစ#ပ3တယ#။

deleteOnExit() void

File Object ကiu JVM ကeန Application ကiu Run တ+Kပ?$တ-6 အခGiန#မH+ Delete လuပ#eပ$
မH+ Cဖစ#ပ3တယ#။ Return Type eတ+6မQiပ3ဘO$။

File file = new File("Text.txt");


boolean result1 = file.createNewFile();

System.out.println(result1 ? "Success" : "Fails");

File dir1 = new File("outer");


File dir2 = new File(dir1, “inner");

dir1.mkdirs();

boolean result2 = dir1.delete();


System.out.println(result2 ? "Success" : "Fails");

အထက#ပ3 နမOန+ထ-မH+ outer ဆiuတ-6 Directory ထ-မH+ inner ဆiuတ-6 Directory Qieနတ-6 အတ&က# mkdirs method
ကiu အသuB$Cပueနတ+Cဖစ#ပ3တယ#။

Learning Java 278 မင#$လ&င#


Java Developer Class

Methods Related to Path Info


Path လမ#$eFက+င#$န-9ပတ#သက#Kပ?$ eအ+က#ပ3 Method မG+$ကiu အသuB$CပuAiuင#ပ3တယ#။

Methods Return Type and Descriptions

getAbsoluteFile() File

Absolute Path ပuBစBန-9 တည#eဆ+က#ထ+$တ-6 File Object ကiu ရQiမH+ Cဖစ#ပ3တယ#။

getAbsolutePath() String

File Object ရ-I Absolute Path ကiu ရQiမH+ Cဖစ#ပ3တယ#

getCanonicalFile() File

Canonical ပuBစBCဖင#6တည#eဆ+က#ထ+$တ-6 File Object ကiu ရQiမH+ Cဖစ#ပ3တယ#

getCanonicalPath() String

Absolute and Unique Cဖစ#တ-6 Canonical File Path ကiu ရQiမH+ Cဖစ#ပ3တယ#

getName() String

File Name ကiu ရQiမH+ Cဖစ#ပ3တယ#။

getParent() String

Parent Directory ရ-I Name ကiu ရQiမH+ Cဖစ#ပ3တယ#။ တကယ#လiu သတ#မHတ#ထ+$Cခင#$ မQi
ပ3က null ကiu Cပန#ရမH+ Cဖစ#ပ3တယ#။

getParentFile() File

Parent Directory ရ-I File Object ကiu Cပန#ရမH+Cဖစ#ပ3တယ#။ သတ#မHတ#ထ+$Cခင#$မQiပ3က
null ကiu Cပန#ရမH+ Cဖစ#ပ3တယ#။

getPath() String

Absolute Path Name ကiu Return အeနန-9 Cပန#လည# ရQiမH+ Cဖစ#ပ3တယ#။

isAbsolute() boolean

File Object ကiu သတ#မHတ#ထ+$တ-6 File Name ဟ+ Absolute Path ဟuတ#မဟuတ#ကiu
စစ#eဆ$Aiuင#တ-6 Method Cဖစ#ပ3တယ#။

renameTo(File dest) boolean



လက#Qi File Object ကiu Parameter ထ-က File အCဖစ#eCပ+င#$လ-Aiuင#တ-6 Method တစ#ခu
Cဖစ#ပ3တယ#။ File အမည# eCပ+င#$တ-6 eနရ+မH+လ- အသuB$ဝင#သလiu File တစ#ခuကeန တစ#ခu
ကiu eCပ+င#$eရpIတ-6eနရ+မH+လ- အသuB$ဝင#ပ3တယ#။

Move File

File f1 = new File("file1.txt");


f1.createNewFile();

File f2 = new File("dir");


f2.mkdir();

File f3 = new File(f2, "file2.txt");


f1.renameTo(f3);

Learning Java 279 မင#$လ&င#


Java Developer Class

Methods related to Meta Data

Methods Return Type and Descriptions

isDirectory() boolean

Directory တစ#ခu ဟuတ#မဟuတ#ကiu သiQieစAiuင#eသ+ Method Cဖစ#ပ3တယ#

isFile() boolean

File တစ#ခu ဟuတ#မဟuတ#ကiu သiQieစAiuင#eသ+ Method Cဖစ#ပ3တယ#

isHidden() boolean

Hidden File တစ#ခu ဟuတ#မဟuတ#ကiu သiQieစAiuင#eသ+ Method Cဖစ#ပ3တယ#

lastModified() long

eန+က#ဆuB$ Modified လuပ#သ&+$eသ+ အခGiန#ကiu သiQieစAiuင#eသ+ Method Cဖစ#ပ3တယ#

getTotalSpace() long

File Name န-9သတ#မHတ#ထ+$တ-6 Partition ရ-I ပမ+ဏကiu သiQieစAiuင#eသ+ Method Cဖစ#ပ3
တယ#

getFreeSpace() long

File Name န-9သတ#မHတ#ထ+$တ-6 Partition ထ-မH+Qiတ-6 Free Space ကiu သiQieစAiuင#eသ+
Method Cဖစ#ပ3တယ#

getUsableSpace() long

File Name န-9သတ#မHတ#ထ+$တ-6 Partition ထ-မH+Qiတ-6 အသuB$CပuAiuင#eသ+ ပမ+ဏကiu သiQi
eစAiuင#eသ+ Method Cဖစ#ပ3တယ#

setLastModified(long boolean

time) eန+က#ဆuB$ Modified လuပ#တ-6အခGiန#ကiu သတ#မHတ#eပ$Aiuင#eသ+ Method Cဖစ#ပ3တယ#

setExcutable(boolean boolean

executable) Program တစ#ခuအeနန-9 Run လiuရမရကiu သတ#မHတ#eပ$Aiuင#eသ+ Method Cဖစ#ပ3တယ#

setExcutable(boolean boolean

executable, boolean Program တစ#ခuအeနန-9 Run လiuရမရကiu File Owner တစ#eယ+က#ထ- လuပ#လiuရတ+လ+$
ownerOnly) ဆiuတ-6 အခGက#ကiuပ3 သတ#မHတ#eပ$Aiuင#eသ+ Method Cဖစ#ပ3တယ#

setReadable(boolean boolean

readable) File ကiu Read လuပ#လiuရမရကiuသတ#မHတ#eပ$Aiuင#eသ+ MethodCဖစ#ပ3တယ#

setReadable(boolean boolean

readable, boolean File ကiu Read လuပ#လiuရမရကiu File Owner တစ#eယ+က#ထ- လuပ#လiuရတ+လ+$ ဆiuတ-6
ownerOnly) အခGက#ကiuပ3 သတ#မHတ#eပ$Aiuင#eသ+ Method Cဖစ#ပ3တယ#

setReadOnly() boolean

Read Only File အCဖစ#သတ#မHတ#eပ$Aiuင#eသ+ Method Cဖစ#ပ3တယ#။

setWritable(boolean boolean

writable) Write လuပ#လiuရမရကiu သတ#မHတ#eပ$Aiuင#eသ+ Method Cဖစ#ပ3တယ#။

setWritable(boolean boolean
writable, boolean Write လuပ#လiuရမရကiu File Owner တစ#eယ+က#ထ- လuပ#လiuရတ+လ+$ ဆiuတ-6 အခGက#ကiuပ3
ownerOnly) သတ#မHတ#eပ$Aiuင#eသ+ Method Cဖစ#ပ3တယ#

Learning Java 280 မင#$လ&င#


Java Developer Class

Methods for Directory


eအ+က#ပ3 Method eတ&ကeတ+6 File Object ဟ+ Directory တစ#ခuCဖစ#မHသ+ အသuB$CပuAiuင#မည#6 Method eတ&
Cဖစ#ပ3တယ#။

Methods Return Type and Descriptions

list() String[]

လက#Qi Directory eအ+က#မH+Qiတ-6 File eတ& Directory eတ&ရ-I အမည#ကiu String []
အeနန-9 Cပန#လည# ရQiမH+ Cဖစ#ပ3တယ#။

list(FileNameFilter filter) String[]



လက#Qi Directory eအ+က#မH+Qiတ-6 File eတ&ရ-I Directory eတ&ရ-I အမည#ကiu
FileNameFilter Interface Object ကiu သuB$Kပ?$ Filter လuပ#Kပ?$ Cပန#လည#ရQiAiuင#မH+ Cဖစ#ပ3
တယ#

listFiles() File[]

လက#Qi Directory eအ+က#မH+Qiတ-6 File eတ& Directory eတ&ကiu File[] အeနန-9 Cပန#လည#
ရQiမH+ Cဖစ#ပ3တယ#။

listFiles(FileNameFilter File[]

filter) လက#Qi Directory eအ+က#မH+Qiတ-6 File eတ& Directory eတ&ကiu FileNameFilter
Interface Object ကiu သuB$Kပ?$ Filter လuပ#Kပ?$ Cပန#လည#ရQiAiuင#မH+ Cဖစ#ပ3တယ#

listFiles(FileFilter filter) File[]



လက#Qi Directory eအ+က#မH+Qiတ-6 File eတ& Directory eတ&ကiu FileFilter Interface
Object ကiu သuB$Kပ?$ Filter လuပ#Kပ?$ Cပန#လည#ရQiAiuင#မH+ Cဖစ#ပ3တယ#

Example
ဒ?တစ#eခ3က#eတ+6 Directory ထ-မH+Qiတ-6 File eတ&ကiu န+မည#တစ#ခuန-9 Q+Kပ?$ ဖGက#တ-6 နမOန+တစ#ခu eရ$Fကည#6ပ3မယ#။
Maven ကiu သuB$Kပ?$ Library eတ&ကiu Download လuပ#တ-6အခ3မH+ Connection မeက+င#$ရင# LastUpdate ဆiuတ-6
န+မည#န-9 File eတ&ကiu ခGန#ထ+$Kပ?$ ရပ#သ&+$တတ#ပ3တယ#။ အ-6ဒ? File eတ&ကiu Q+Kပ?$ Delete လuပ#eပ$Aiuင#တ-6 နမOန+
တစ#ခuကiu eရ$Fကည#6ပ3မယ#။

Learning Java 281 မင#$လ&င#


Java Developer Class
အထက#ပ3 နမOန+ထ-မH+eတ+6 mavenRepo file ကiu deleteFiles method ကiu သuB$Kပ?$ ဖGက#ခiuင#$ပ3တယ#။ တကယ#လiu
file Object ဟ+ directory Cဖစ#ရင# အ-6ဒ? Directory ထ-က Directory eတ&န-9 lastUpdate န-9 ဆuB$ရင# ရယOလ+eအ+င#
FileFilter eနရ+ကiu Lambda Expression န-9 Filter လuပ#ထ+$ပ3တယ#။ရလ+တ-6 File eတ&ကiu Loop ပတ#Kပ?$
deleteFile ကiu Cပန#eခ2ခiuင#$ပ3တယ#။ တကယ#လiu Directory ဆiuရင# eအ+က#မH+ Qiတ-6 File eတ&ကiu Q+Kပ?$ deleteFile
ကiu Cပန#eခ2ပ3လiမ#6မယ#။ Directory မဟuတ#ပ- File eတ&Cဖစ#eနလiuကeတ+6 lastUpdate န-9 ဆuB$eနမH+ Cဖစ#တ-6အတ&က#
delete လuပ#သ&+$ပ3မယ#။

Switch to Other Types


Methods Return Type and Descriptions

toPath() Path

Java NiO2 ရ-I Path Object အCဖစ#eCပ+င#$eပ$Aiuင#တ-6 Method Cဖစ#ပ3တယ#

toStirng() String

File Object ရ-I Path Name ကiu ရQiAiuင#မH+ Cဖစ#ပ3တယ#။ getPath method AHင#6 ရလဒ#
Cခင#$ အတOတOCဖစ#ပ3တယ#

toURI() URI

File Path Name ကiu ကiuယ#စ+$Cပueသ+ URI Object ကiu Cပန#လည#ရQiမH+ Cဖစ#ပ3တယ#

Conclusion
File Object ဟ+ Java IO ကiu အသuB$Cပuရ+မH+ မQiမCဖစ#လiuအပ#eသ+ Object တစ#ခuCဖစ#ပ3တယ#။ လက#Qi File eတ&
Directory eတ&ရ-I Abstract Path Name ကiu ကiuယ#စ+$Cပuတ-6 Object တစ#ခuCဖစ#ပ3တယ#။ File Object တစ#ခuကiu
ဘယ#လiu Create လuပ#မယ#။ File eတ& Directory eတ&ကiu ဘယ#လiu တည#eဆ+က#မယ#၊ Kပ?$ရင# Delete လuပ#မယ#။
Directory ထ-မH+Qiတ-6 File eတ&ကiu ဘယ#လiu Q+eဖ&မယ#ဆiuတ+ကiu သiQiထ+$eအ+င# eလ6လ+ထ+$ဖiu လiuအပ#ပ3မယ#။


Learning Java 282 မင#$လ&င#


Java Developer Class

IO Streams
အရင#တစ#eခ3က# File အeFက+င#$eရ$သ+$ခ-6စT#က File eတ& Directory eတ&ကiu Create လuပ#Aiuင#တယ#။ Kပ?$eတ+6လ-
Delete လuပ#Aiuင#တယ#။ အမည#eCပ+င#$တ+တiuလ- လuပ#Aiuင#ခ-6ပ3တယ#။ ဒ3eပမ-6 အ-6ဒ? File eတ&ထ-က Data eတ&ကiu
Read လuပ#တ+တiu Write လuပ#တ+တiuကiu မလuပ#Aiuင#ခ-6ပ3ဘO$။

File ထ-က Data eတ&ကiu Input Output လuပ#Aiuင#ဖiuအတ&က# I/O Stream eတ&ကiu အသuB$CပuရမH+ Cဖစ#ပ3တယ#။ Java
Language မH+ I/O Stream eတ&ကiu အသuB$Cပuမည#6 Data Type အeပ2မOတည#Kပ?$ အမGiu$မGiu$Cပင#ဆင#ထ+$ပ3တယ#။
Kပ?$eတ+6 I/O Stream eတ&ကiu eရ$သ+$တ-6eနရ+မH+လ- Design Pattern eတ&ကiu အသuB$Cပueရ$သ+$ထ+$ပ3တယ#။
အရင#ဆuB$ I/O Stream eတ&ကiu eလ6လ+တ-6eနရ+မH+ အသuB$CပuAiuင#တ-6 I/O Stream eတ&န-9 အသuB$CပuပuBeတ&ကiu eလ6လ+
Kပ?$၊ eန+က#ပiuင#$မH I/O Stream eတ&မH+ အသuB$Cပuထ+$တ-6 Design Patterns eတ&ကiu eလ6လ+သ&+$ပ3မယ#။

What are streams?


Stream eတ&ဟ+ Java Program ထ-မH+အသuB$Cပuမည#6 Input Source eတ&န-9 Output Destination eတ&ကiu
ကiuယ#စ+$Cပuတ-6 Interface Object eတ&Cဖစ#Fကပ3တယ#။ Source eတ&eက+ Destination eတ&ပ3 ပuBစBအမGiu$မGiu$QiAiuင#
FကKပ?$ Input Output လuပ#Fကမည#6 Data eတ&လ-အမGiu$မGiu$Cဖစ#Aiuင#ပ3တယ#။

Input Source လiueCပ+တ-6eနရ+မH+ File တစ#ခuလ-Cဖစ#Aiuင#သလiu System Console ကလ+တ-6 Input လ- Cဖစ#eနAiuင#
ပ3တယ#။ ဒ3မHမဟuတ# အCခ+$eသ+ Program တစ#ခuခuလ- Cဖစ#Aiuင#ပ3တယ#။ ဒ?လiuပ- Output Destination လiueCပ+တ-6
eနရ+မH+လ- File တစ#ခuခu၊ System Console ဒ3မHမဟuတ# အCခ+$eသ+ Program တစ#ခuခuလ- Cဖစ#eနAiuင#ပ3တယ#။
ဒ3eပမ-6 အeCခခBအ+$Cဖင#6eတ+6 I/O Stream eတ&ကiu Input Stream eတ&န-9 Output Streams eတ&ဆiuKပ?$ သတ#မHတ#
ထ+$ပ3တယ#။

Input Streams

Java Program ထ-ကအသuB$Cပuရန# Data မG+$အ+$ Source တစ#eနရ+ရ+မH ဖတ#ယOAiuင#ဖiuအတ&က# Input Stream
မG+$ကiu အသuB$Cပuရပ3တယ#။ အသuB$Cပuလiuတ-6 Data Type အeပ2မOတည#Kပ?$ Streams အမGiu$မGiu$ကiuလ- Cပင#ဆင#ထ+$ပ3
တယ#။ အသuB$CပuAiuင#တ-6 Data Type eတ&ကeတ+6 bytes, primitive type data, localize character မG+$န-9 Object
eတ&ပ- Cဖစ#Fကပ3တယ#။

Learning Java 283 မင#$လ&င#


Java Developer Class

Output Streams

Java Program ထ-ကeန Destination တစ#ခuဆ?ကiu Data မG+$ကiu Output လuပ#ခGင#တ-6အခ3 Output Stream eတ&
ကiu အသuB$CပuAiuင#ပ3တယ#။ Destination အeနန-9 File တစ#ခuခuCဖစ#Aiuင#သလiu၊ System Console လ- Cဖစ#Aiuင#သလiu
အCခ+$eသ+ Program တစ#ခuခuလ- Cဖစ#Aiuင#ပ3တယ#။ Kပ?$eတ+6 byte အeနန-9eသ+#၎င#$၊ primitive data type အeနန-9
eသ+#၎င#$၊ localize character မG+$အeနန-9eသ+#၎င#$၊ Object မG+$အeနန-9eသ+#၎င#$ Outputလuပ#Aiuင#ပ3တယ#။

Input Stream တuန#$ကလiuပ- အသuB$Cပuလiuတ-6 Data Type eတ&အလiuက# Stream eတ&ကiu eရ&$ခGယ# အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။

Data Types and Streams


Java IO ရ-I Stream Class eတ&အ+$လuB$ဟ+ InputStream န-9 OutputStream Class eတ&ကeန ဆင#$သက#လ+
Fကတ-6 Class eတ&Cဖစ#ပ3တယ#။ Input Output အeနန-9 အသuB$Cပuလiuတ-6 Data Type အလiuက# Stream eတ&ကiu ခ&-Cခ+$
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Data Type Input Streams Output Stream

Byte FileInputStream FileOutputStream

Unicode Characters FileReader FileWriter

Line Oriented IO BufferedReader PrintWriter

Primitive Data DataInputStream DataOutputStream

Object ObjectInputStream ObjectOutputStream

Byte Streams

File တစ#ခuထ-က Data eတ&ကiu Binary Data eတ&Cဖစ#တ-6 8-bit bytes ပuBစBန-9 Read Write လuပ#လiuတ-6အခ3 Byte
Streams eတ&ကiu အသuB$CပuရမH+ Cဖစ#ပ3တယ#။ Byte Stream eတ&အ+$လuB$ဟ+ InputStream န-9 OutputStream
Class eတ&ရ-I Sub Class eတ&Cဖစ#FကKပ?$ အသuB$မG+$တ+ကeတ+6 FileInputStream န-9 FileOutputStream Class
တiuပ- Cဖစ#Fကပ3တယ#။

Learning Java 284 မင#$လ&င#


Java Developer Class

FileInputStream ကeတ+6 File တစ#ခuကeန Byte eတ&ကiu Read လuပ#ခGင#တ-6အခ3မH+ အသuB$CပuAiuင#တ-6 Stream
တစ#ခuCဖစ#Kပ?$၊ FileInputStream Object ကiu တည#eဆ+က#ရန# Constructor ၃ မGiu$Cပင#ဆင#ထ+$ပ3တယ#။

Constructor Description

FileInputStream(File file) Input လuပ#ရမည#6 File ကiu ကiuယ#စ+$Cပuတ-6 File Object ကiu Argument
အeနန-9 အသuB$Cပuရပ3မယ#

FileInputStream(FileDescription fdObj) Input လuပ#မည#6 File ကiu eဖ2Cပeပ$Aiuင#တ-6 FileDescriptor Object ကiu
Argument အeနန-9 အသuB$Cပuရပ3မယ#

FileInputStream(String name) Input လuပ#မည#6 File ရ-I အမည# String Object ကiu Argument အeနန-9
အသuB$Cပuရပ3မယ#

FileInputStream Object ကeန byte eတ&ကiu 1 byte ခGင#$ Read လuပ#လiuတ-6အခ3 read() ဆiuတ-6 Method ကiu
အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

FileOutputStream ကeတ+6 File တစ#ခuဆ?ကiu Byte eတ& အeနန-9 Output လuပ#eပ$Aiuင#တ-6 Stream Object တစ#ခu
Cဖစ#ပ3တယ#။ FileOutputStream Object ကiu တည#eဆ+က#ဖiuအတ&က# Cပင#ဆင#ထ+$တ-6 Constructor eတ&ကeတ+6
eအ+က#ပ3 အတiuင#$Cဖစ#Fကပ3တယ#။

Constructor Description

FileOutputStream(File file) Output လuပ#ရမည#6 File ကiu ကiuယ#စ+$Cပuတ-6 File Object ကiu
Argument အeနန-9 အသuB$Cပuရပ3မယ#

FileOutputStream(File file, boolean Output လuပ#ရမည#6 File ကiu ကiuယ#စ+$Cပuတ-6 File Object န-9
append) boolean တန#ဖiu$တစ#ခuကiu Argument အeနန-9 eပ$ရပ3မယ#။

boolean ရ-I တန#ဖiu$ဟ+ true Cဖစ#မယ#ဆiuရင# လက#QiQiKပ?$သ+$ File
မH+ Output လuပ#လ+တ-6 Data eတ&ကiu ဆက#Kပ?$ထည#6eပ$Aiuင#မH+ Cဖစ#
ပ3တယ#

FileOutputStream(FileDescription fdObj) Output လuပ#မည#6 File ကiu eဖ2Cပeပ$Aiuင#တ-6 FileDescriptor Object


ကiu Argument အeနန-9 အသuB$Cပuရပ3မယ#

FileOutputStream(String name) Output လuပ#မည#6 File ရ-I အမည# String Object ကiu Argument
အeနန-9 အသuB$Cပuရပ3မယ#

FileOutputStream(String name, boolean Output လuပ#မည#6 File ရ-I အမည#ကiu String Object န-9 boolean
append) တန#ဖiu$တစ#ခuကiu Argument အeနန-9 eပ$ရပ3မယ#။

boolean ရ-I တန#ဖiu$ဟ+ true Cဖစ#မယ#ဆiuရင# လက#QiQiKပ?$သ+$ File
မH+ Output လuပ#လ+တ-6 Data eတ&ကiu ဆက#Kပ?$ထည#6eပ$Aiuင#မH+ Cဖစ#
ပ3တယ#

Output လuပ#လiuတ-6 Byte Data eတ&ကiu eရ$သ+$Aiuင#ဖiuအတ&က# write(int b), write(byte [] b) န-9 write(byte [] b,
int off, int len) method တiuကiu Cပင#ဆင#ထ+$ပ3တယ#။ 1 byte ခGင#$ Write လuပ#ခGင#ရင#eတ+6 write(int b) ကiu
အသuB$CပuရမH+ Cဖစ#ပ3တယ#။

Stream Object eတ&ဟ+ Resource eတ&ကiu အသuB$Cပueနတ-6 Object အမGiu$အစ+$ Cဖစ#တ-6အတ&က# အသuB$CပuKပ?$တ-6
အခ3မH+ Cပန#Kပ?$ ပiတ#eပ$ဖiuလiuအပ#တ-6အတ&က# close() ဆiuတ-6 Method ကiuလ- Cပင#ဆင#eပ$ထ+$ပ3တယ#။ ဒ3eပမ-6 Java
SE 7 ရ-I eရ$သ+$ပuBအသစ#Cဖစ#တ-6 try-with-resource eရ$သ+$ပuBန-9 eရ$သ+$မယ#ဆiuရင#eတ+6 အလiuအeလG+က# ပiတ#
eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 285 မင#$လ&င#


Java Developer Class

အထက#ပ3နမOန+ကeတ+6 from.txt ဆiuတ-6 File ထ-မH+Qiတ-6 Data eတ&ကiu 1 byte ခGင#$ read လuပ#Kပ?$ to.txt ဆiuတ-6ဖiuင#
ထ-ကiu 1 byte ခGင#$ write လuပ#eနတ-6 နမOန+Cဖစ#ပ3တယ#။

FileInputStream န-9 FileOutputStream Object eတ&ကiu try with resource န-9 eရ$သ+$ထ+$တ-6အတ&က#
eန+က#ဆuB$မH+ အလiuအeလG+က#ပiတ#eပ$သ&+$မH+ Cဖစ#တယ#။ အ-6ဒ?အတ&က# တကO$တက close လuပ#eပ$စရ+မလiu
eတ+6 ပ3ဘO$။ တဖန# while clause ထ-မH+ i = in.read() ဆiuKပ?$ FileInputStream ကeန 1 byte ခGင#$ Read လuပ#
eနပ3တယ#။ eန+က#ဆuB$ Read လuပ#စရ+မQieတ+6တ-6အခ3 -1 ကiu Return Cပန#မH+ Cဖစ#Kပ?$ While loop ထ-ကeန
ထ&က#သ&+$မH+ Cဖစ#ပ3တယ#။

While Loop ထ-မH+eတ+6 Read လuပ#လ+တ-6 တန#ဖiu$ကiu 1 byte ခGင#$ FileOutputStream ကiu သuB$Kပ?$ write လuပ#
eပ$eနပ3တယ#။ ဤနည#$အ+$Cဖင#6 from.txt ဖiuင#ထ-က Data eတ&ကiu to.txt ဖiuင#ထ-ကiu 1 byte ခGင#$ Write လuပ#eပ$
သ&+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 286 မင#$လ&င#


Java Developer Class

Character Streams

Text File တစ#ခuအတ&င#$Qi Data မG+$ကiu Character ပuBစBန-9 Read / Write လuပ#ခGင#ရင# Character Streams မG+$
ကiu အသuB$CပuရမH+ Cဖစ#ပ3တယ#။ Character Streams eတ&ဟ+ InputStreamReader န-9 OutputStreamWriter
တiuရ-I Sub Class eတ& Cဖစ#FကKပ?$ FileReader န-9 FileWriter တiuဟ+ အသuB$မG+$ပ3တယ#။

FileReader န-9 FileWriter တiuဟ+ Default Encoding န-9 Character eတ&ကiu အလ&ယ#တကO Read / Write လuပ#
Aiuင#eအ+င#Cပင#ဆင#ထ+$တ-6 Class eတ&Cဖစ#FကKပ?$၊ Character Set တiuကiu ကiuယ#တiuင# သတ#မHတ#Kပ?$ Read / Write
လuပ#ခGင#ရင#eတ+6 InputStreamReader န-9 OutputStreamWriter တiuကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

FileReader ကiu Character မG+$ကiu Read လuပ#တ-6eနရ+မH+ အသuB$CပuKပ?$ eရ$သ+$Aiuင#တ-6 Constructor မG+$
ကeတ+6 eအ+က#ပ3 အတiuင#$Cဖစ#Fကပ3တယ#။

Constructor Description

FileReader(File file) Input လuပ#ရမည#6 File ကiu ကiuယ#စ+$Cပuတ-6 File Object ကiu
Argument အeနန-9 အသuB$Cပuရပ3မယ#

FileReader(FileDescription fdObj) Input လuပ#မည#6 File ကiu eဖ2Cပeပ$Aiuင#တ-6 FileDescriptor Object


ကiu Argument အeနန-9 အသuB$Cပuရပ3မယ#

FileReader(String name) Input လuပ#မည#6 File ရ-I အမည# String Object ကiu Argument အeန
န-9 အသuB$Cပuရပ3မယ#

FileWriter ကiu Character မG+$ကiu Write လuပ#တ-6eနရ+မH+ အသuB$CပuKပ?$ eရ$သ+$Aiuင#တ-6 Constructor မG+$ကeတ+6
eအ+က#ပ3 အတiuင#$Cဖစ#Fကပ3တယ#။

Constructor Description

FileWriter(File file) Output လuပ#ရမည#6 File ကiu ကiuယ#စ+$Cပuတ-6 File Object ကiu
Argument အeနန-9 အသuB$Cပuရပ3မယ#

FileWriter(File file, boolean append) Output လuပ#ရမည#6 File ကiu ကiuယ#စ+$Cပuတ-6 File Object န-9
boolean တန#ဖiu$တစ#ခuကiu Argument အeနန-9 eပ$ရပ3မယ#။

boolean ရ-I တန#ဖiu$ဟ+ true Cဖစ#မယ#ဆiuရင# လက#QiQiKပ?$သ+$ File
မH+ Output လuပ#လ+တ-6 Data eတ&ကiu ဆက#Kပ?$ထည#6eပ$Aiuင#မH+ Cဖစ#
ပ3တယ#

FileWriter(FileDescription fdObj) Output လuပ#မည#6 File ကiu eဖ2Cပeပ$Aiuင#တ-6 FileDescriptor Object


ကiu Argument အeနန-9 အသuB$Cပuရပ3မယ#

FileWriter(String name) Output လuပ#မည#6 File ရ-I အမည# String Object ကiu Argument
အeနန-9 အသuB$Cပuရပ3မယ#

FileWriter(String name, boolean append) Output လuပ#မည#6 File ရ-I အမည#ကiu String Object န-9 boolean
တန#ဖiu$တစ#ခuကiu Argument အeနန-9 eပ$ရပ3မယ#။

boolean ရ-I တန#ဖiu$ဟ+ true Cဖစ#မယ#ဆiuရင# လက#QiQiKပ?$သ+$ File
မH+ Output လuပ#လ+တ-6 Data eတ&ကiu ဆက#Kပ?$ထည#6eပ$Aiuင#မH+ Cဖစ#
ပ3တယ#

FileReader န-9 FileWriter တiuရ-I အသuB$CပuပuBဟ+ အeCခခBအ+$Cဖင#6 FileInputStream န-9 FileOutputStream တiuန-9
အတOတOပ- Cဖစ#ပ3တယ#။

Learning Java 287 မင#$လ&င#


Java Developer Class

FileReader ကiu အသuB$CပuKပ?$ Text File အတ&င#$မH Character မG+$ကiu Read လuပ#ရ+မH+ read() method ကiu
အသuB$CပuAiuင#မH+Cဖစ#ပ3တယ#။ Return Type မH+ int Cဖစ#Kပ?$ Character တစ#လuB$ကiu ကiuယ#စ+$CပuမH+ Cဖစ#ပ3တယ#။
eန+က#ဆuB$ Read လuပ#စရ+မQieတ+6တ-6အခ3 -1 ကiu Return Cပန#မH+Cဖစ#ပ3တယ#။

Character စ+လuB$မG+$ကiu Write လuပ#လiuတ-6အခ3 FileWriter Object ရ-I write(int char) method ကiu အသuB$CပuAiuင#
မH+ Cဖစ#ပ3တယ#။ Write Method ကiu အသuB$CပuKပ?$ Character တစ#လuB$ခGင#$စ?ကiu Output လuပ#eပ$Aiuင#မH+ Cဖစ#ပ3
တယ#။

အထက#ပ3နမOန+ထ-BမH+eတ+6 from.txt file ထ-မH Character မG+$ကiu while statement Cဖင#6 တစ#လuB$စ?ဖတ#Kပ?$
out.txt file ထ-ကiu Character တစ#လuB$စ? Output လuပ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။


Learning Java 288 မင#$လ&င#


Java Developer Class

Lined Oriented IO

Character I/O ကiu အသuB$Cပuတ-6အခ3မH+ Character တစ#လuB$Cခင#$ Read / Write လuပ#တ+ထက# ဒ?ထက#ပiuKပ?$
Pက?$မ+$တ-6 Unit န-9 Read / Write လuပ#eလ6Qiပ3တယ#။ အသuB$မG+$တ+က စ+eFက+င#$ တစ#eFက+င#$စ?ကiu Read /
Write လuပ#တ-6ပuBစBပ- Cဖစ#ပ3တယ#။ Line တစ#ခuခGင#$စ?ကiu Read / Write လuပ#ဖiuအတ&က# BufferedReader,
BufferedWriter န-9 PrintWriter တiuကiu အသuB$CပuAiuင#ပ3တယ#။

BufferedReader
BufferedReader eတ&ဟ+ Text File eတ&ကeန Character eတ&ကiu သတ#မHတ#ထ+$တ-6 Buffered Size အလiuက#
Character Array အCဖစ#eသ+#၎င#$၊ စ+eFက+င#$တစ#eFက+င#$စ?လiuက#eသ+#၎င#$ Read လuပ#Aiuင#eအ+င#Cပင#ဆင#ထ+$တ-6
Class eတ& Cဖစ#ပ3တယ#။

BufferedReader Class ကiu Object eဆ+က#Aiuင#တ-6 Constructor eတ&ကeတ+6 eအ+က#ပ3 အတiuင#$Cဖစ#ပ3တယ#။

Constructor Description

BufferedReader(Reader in) Reader Object တစ#ခuကiu Argument အeနန-9eပ$ရပ3မယ#။ Buffer


Size ကiueတ+6 Default Size အတiuင#$ အသuB$Cပuသ&+$မH+ Cဖစ#ပ3တယ#။

BufferedReader(Reader in, int size) Reader Object တစ#ခuန-9 Buffer Size ကiu Argument အeနန-9 eပ$
Kပ?$ BufferedReader Object တစ#ခuကiu တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3
တယ#။ Buffer Size ကiu သတ#မHတ#Kပ?$ အသuB$Cပuလiuပ3က ဤ
Constructor ကiu အသuB$CပuရမH+ Cဖစ#ပ3တယ#။

BufferedReader ကeန စ+eFက+င#$ တစ#eFက+င#$စ? Read လuပ#လiuပ3က readLine() method ကiu အသuB$CပuAiuင#မH+
Cဖစ#ပ3တယ#။ အထက#ပ3 နမOန+မH+eတ+6 in.readLine() ကiu အသuB$CပuKပ?$ line variable မH+ အစ+$ထiu$eနပ3တယ#။ Kပ?$
eတ+6 While Statement မH+ line ဟ+ null မCဖစ#မCခင#$ loop ပတ#eနမH+ Cဖစ#Kပ?$ စ+eFက+င#$eတ& ဖတ#စရ+ကuန#သ&+$
ရင# null ကiu Return လuပ#မH+ Cဖစ#တ-6အတ&က# looping ထ-ကeန ထ&က#သ&+$ပ3လiမ#6မယ#။

ဒ36eFက+င#6 line.txt ထ-က စ+eFက+င#$eတ&ကiu အစ စ+eFက+င#$ကeန တစ#eFက+င#$ခGင#$ ကuန#သ&+$သည# အထi Read


လuပ#သ&+$Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 289 မင#$လ&င#


Java Developer Class

PrintWriter
Java Program ထ-ကeန Character eတ&ကiu String အeနန-9 Write လuပ#လiuတ-6အခ3မH+ PrintWriter ကiu အသuB$Cပu
Aiuင#မH+ Cဖစ#ပ3တယ#။ PrintWriter ကiu အသuB$CပuKပ?$ String eတ&လiu ဒ?အတiuင#$ Write လuပ#Aiuင#သလiu၊ Format ခGKပ?$လ-
Write လuပ#Aiuင#ပ3တယ#။ ထiuအCပင# Locale အလiuက#သတ#မHတ#Kပ?$လ- Format လuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။ PrintWriter
Object ကiu တည#eဆ+က#Aiuင#တ-6 Constructor eတ&ကeတ+6 eအ+က#ပ3 အတiuင#$Cဖစ#Fကပ3တယ#။

Constructor Description

PrintWriter(File file) Output File ကiu သတ#မHတ#Kပ?$ PrintWriter Object ကiu


တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။ Auto Flush ကiueတ+6 လuပ#eပ$Aiuင#
မH+ မဟuတ#ပ3ဘO$

PrintWriter(File file, String csn) Output File န-9 Character Set ကiu သတ#မHတ#Kပ?$ PrintWriter
Object ကiu တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။ Auto Flush ကiueတ+6
လuပ#eပ$Aiuင#မH+ မဟuတ#ပ3ဘO$

PrintWriter(OutputStream out) OutputStream ကiu သတ#မHတ#Kပ?$ PrintWriter Object ကiu


တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။ Auto Flush ကiueတ+6 လuပ#eပ$Aiuင#
မH+ မဟuတ#ပ3ဘO$

PrintWriter(OutputStream out, boolean OutputStream န-9 Auto Flush Mode ကiu သတ#မHတ#Kပ?$
autoFlush) PrintWriter Object ကiu တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။

PrintWriter(String fileName) File Name ကiu သတ#မHတ#Kပ?$ PrintWriter Object ကiu


တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။ Auto Flush ကiueတ+6 လuပ#eပ$Aiuင#
မH+ မဟuတ#ပ3ဘO$

PrintWriter(String fileName, String csn) File Name န-9 Character Set ကiu သတ#မHတ#Kပ?$ PrintWriter
Object ကiu တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။ Auto Flush ကiueတ+6
လuပ#eပ$Aiuင#မH+ မဟuတ#ပ3ဘO$

PrintWriter(Writer out) Writer ကiu သတ#မHတ#Kပ?$ PrintWriter Object ကiu တည#eဆ+က#Aiuင#


မH+ Cဖစ#ပ3တယ#။ Auto Flush ကiueတ+6 လuပ#eပ$Aiuင#မH+ မဟuတ#ပ3ဘO$

PrintWriter(Writer out, boolean autoFlush) Writer န-9 Auto Flush Mode ကiu သတ#မHတ#Kပ?$ PrintWriter Object
ကiu တည#eဆ+က#Aiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 290 မင#$လ&င#


Java Developer Class
String eတ&ကiu Write လuပ#ဖiuအတ&က# print(String str) ဒ3မHမဟuတ# write(String str) ကiu အသuB$CပuAiuင#ပ3တယ#။ ဒ3
အCပင# Line eတ&ကiu Write လuပ#ဖiuအတ&က# println(String str) ကiu အသuB$CပuAiuင#ပ3တယ#။ Format လuပ#ခGင#ရင#eတ+6
printf(String format, String … param) ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Data Streams

Primitive Data န-9 String တန#ဖiu$ eတ&ကiu Read / Write လuပ#ခGင#တ-6အခ3 DataInputStream န-9
DataOutputStream တiuကiu အသuB$CပuAiuင#ပ3တယ#။

Constructor Description

DataOutputStream(OutputStream out) OutputStream Object တစ#ခuကiu အသuB$CပuKပ?$


DataOutputStream ကiu တည#eဆ+က#ရန# Cပင#ဆင#ထ+$တ-6
Constructor Cဖစ#ပ3တယ#။

DataInputStream(InputStream in) InputStream Object တစ#ခuကiu အသuB$CပuKပ?$ DataInputStream ကiu


တည#eဆ+က#ရန# Cပင#ဆင#ထ+$တ-6 Constructor Cဖစ#ပ3တယ#။

အသuB$Cပuလiuတ-6 Data Type အလiuက# Method eတ&ကiuလ- ခ&-Cခ+$Cပင#ဆင#ထ+$ပ3တယ#။

Data Type DataInputStream DataOutputStream

boolean readBoolean() writeBoolean(boolean v)

char readChar() writeChar(int v)

byte readByte() writeByte(int v)

short readShort() writeShort(int v)

int readInt() writeInt(int v)

long readLong() writeLong(long v)

float readFloat() writeFloat(float v)

double readDouble() writeDouble(doble v)

String readUTF() writeUTF(String str)

မiမiအသuB$Cပuလiuတ-6  Data Type အလiuက# သက#ဆiuင#ရ+ Method ကiu အသuB$CပuKပ?$ eရ$သ+$ရမH+ Cဖစ#ပ3တယ#။

Learning Java 291 မင#$လ&င#


Java Developer Class

Writing As Data

အထက#ပ3နမOန+မH+eတ+6 name variable ဟ+ String Cဖစ#တ-6အတ&က# writeUTF ကiu အသuB$CပuKပ?$၊ age ဟ+ int
Cဖစ#တ-6အတ&က# writeInt ကiu အသuB$Cပuပ3တယ#။ တဖန# isMan ဆiuတ-6 Variable ဟ+ boolean type Cဖစ#တ-6အတ&က#
writeBoolean ကiu အသuB$CပရမH+ Cဖစ#ပ3တယ#။

Reading Data

အထက#ပ3 နမOန+ကeတ+6 DataOutput Cဖင#6 Write လuပ#ထ+$တ-6 data.dat file ထ-က Data eတ&ကiu Cပန#Kပ?$ Read
လuပ#eနတ+Cဖစ#ပ3တယ#။ String Data eတ&ကiu readUTF ကiuအသuB$CပuKပ?$၊ int ကiueတ+6 readInt ကiu အသuB$Cပuပ3
တယ#။ တဖန# boolean ကiueတ+6 readBoolean method ကiu အသuB$Cပuပ3တယ#။

Learning Java 292 မင#$လ&င#


Java Developer Class

Serialization
အe^တ&င#eဖ2Cပခ-6သလiu Java ဘ+သ+ရပ#တ&င# Byte, Character, Primitive Data မG+$AHင#6 String မG+$ကiu Read /
Write လuပ#Aiuင#တ-6အCပင# Object eတ&ကiuလ- Object အတiuင#$ Read / Write လuပ#Aiuင#ပ3တယ#။

Java ဘ+သ+ရပ#မH+ JVM Memory အeပ2မH+Qiတ-6 Object eတ&ကiu အCခ+$ တစ#eနeနရ+ကiu ပiueပ$လiuက#Cခင#$ကiu
Serialize လuပ#တယ#လiueခ2ပ3တယ#။ တဖန# တစ#Cခ+$တစ#eနeနရ+ကeနလ+တ-6 Serialized လuပ#ထ+$တ-6 Data
eတ&ကeန JVM Memory အeပ2ကiu Cပန#Kပ?$ Object အCဖစ#Cပန#eCပ+င#$တ+ကiueတ+6 Deserialize လuပ#တယ#လiueခ2
ပ3တယ#။ Deseiralize လuပ#တယ#ဆiuတ+ကလ- Serialize လuပ#ထ+$တ-6 Data မG+$ကiuသ+ Cပuလuပ#Aiuင#မH+ Cဖစ#ပ3တယ#။

နမOန+အ+$Cဖင#6 Program ထ-မH+ သuB$eနတ-6 Java Object eတ&ကiu File တစ#ခuခuမH+ သ&+$သiမ#$တ+တiu၊ Internet ကiu
Cဖတ#Kပ?$ တစ#Cခ+$တစ#eနeနရ+ကiuပiueပ$တ+တiuဟ+ Serialize လuပ#တ+Cဖစ#Fကပ3တယ#။ Server အeပ2မH+Qiတ-6
Object eတ&ကiu Session eပ2မH+ သuB$eနတယ#ဆiuတ+ကလ- Serialize လuပ#eနတ+ပ- Cဖစ#ပ3တယ#။

ဒ3Cဖင#6 ဘယ#လiu Object eတ&ကiu Serialize လuပ#လiuရတ+လ-။ Primitive Data Type eတ&၊ Serializable Interface
ကiu Implement လuပ#ထ+$တ-6 Object eတ&န-9 Serializable Object eတ&ရ-I Collection eတ& ဆiuရင# Serialize လuပ#
လiuရမH+ Cဖစ#ပ3တယ#။

Object တစ#ခuကiu Serialize လuပ#တ-6အခ3မH+ Object ရ-I State eတ&Cဖစ#Fကတ-6 Instance Variable eတ&ကiuသ+
Serialize လuပ#သ&+$မH+ Cဖစ#ပ3တယ#။ ဒ36eFက+င#6 Serialize လuပ#မည#6 Object ရ-I Instance Variable eတ&ဟ+လ-
Serializable Cဖစ#ဖiuလiuအပ#ပ3တယ#။ တကယ#လiu Serialize မလuပ#ခGင#တ-6 Instance Variable eတ&ဆiuရင# transient
modifier ကiu eရ$သ+$Kပ?$ eဖ2CပAiuင#ပ3တယ#။ Instance Variable eတ&e^မH+ transient ကiu eရ$သ+$ထ+$ရင# အ-6ဒ?
Field ကiu Serialize လuပ#မH+ မဟuတ#eတ+6ပ3ဘO$။

Serial Version UID


Serializable Object တစ#ခuကiu Serialize လuပ#Kပ?$ Cပန#Kပ?$ Deserialize လuပ#တ-6အခ3 Serial Version UID ကiu
အသuB$CပuKပ?$ Class ရ-I Version မHန#မမHန#ကiu Cပန#Kပ?$ စစ#eဆ$eလ6Qiပ3တယ#။ Serial Version UID ကiu eရ$သ+$ရ+မH+
static final long serialVersionUID ဆiuတ-6ပuBစBန-9 eရ$သ+$eပ$ရပ3တယ#။ Access Modifier ကiueတ+6 AHစ#သက#ရ+
eရ$သ+$အသuB$CပuAiuင#ပ3တယ#။

Serialize လuပ#တ-6အခ3မH+ Serial Version UID ဟ+ Static Variable Cဖစ#eပမ-6 eခင#$ခGက#အeနန-9 Serialize
အလuပ#ခBရမH+ Cဖစ#ပ3တယ#။ Deserialize လuပ#တ-6အခ3မH+ လက#Qi Class န-9 Deserialize လuပ#မည#6 Object ရ-I Serial
Version UID ကiu တiuက#စစ#Kပ?$ မHန#ကန#မHသ+ Serialize လuပ#eပ$မH+ Cဖစ#ပ3တယ#။ တကယ#လiu Version AHစ#ခuမတOည?
ခ-6ပ3က InvalidClassException ကiu Cဖစ#eပ2eစမH+ Cဖစ#ပ3တယ#။

Learning Java 293 မင#$လ&င#


Java Developer Class

တကယ#လiu Serializable Class တစ#ခuမH+ Serial Version UID ကiu မeရ$ထ+$ဖO$ဆiuရင# Serialize လuပ#တ-6အခ3မH+
JVM ကeန AHစ#သက#ရ+ ID တစ#ခuကiu Generate လuပ#eပ$မH+ Cဖစ#ပ3တယ#။

ဒ3eပမ-6 Serial Version UID Calculation ဟ+ Compiler Implementation အeပ2မOတည#Kပ?$ eCပ+င#$လ-တတ#တ-6


အတ&က# Serial Version UID ကiu Class အတ&င#$မH+ မCဖစ#မeနeရ$သ+$သင#6တယ#လiu ညqွန#$ဆiuထ+$ပ3တယ#။

Serialization
Java Program ထ-ကeန Memory အeပ2မH+Qiတ-6 Serializable Object eတ&န-9 Serializable Object ရ-I
Collection eတ&ကiu Serialize လuပ#လiuတ-6အခ3မH+ ObjectOutputStream ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။
ObjectOutputStream ကiu အသuB$CပuKပ?$ Primitive Data eတ&န-9 Serializable Object Graphs eတ&ကiu Serialize
လuပ#eပ$Aiuင#မH+ Cဖစ#ပ3တယ#။

Object eတ&ကiu Serialize လuပ#တ-6eနရ+မH+လ- File eတ&မH+လ- Serialize လuပ#Aiuင#သလiu Network ကiu အသuB$Cပuတ-6
Socket Stream eတ&န-9လ- တ&-ဖက# အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။ ObjectOutputStream ရ-I Constructor eတ&
ကeတ+6 eအ+က#ပ3အတiuင#$ Cဖစ#Fကပ3တယ#။

Constructor Description

ObjectOutputStream() ObjectOutputStream ရ-I Sub Class eတ&အတ&က# Cပင#ဆင#ထ+$


eပ$တ-6 Constructor Cဖစ#ပ3တယ#။

ObjectOutputStream(OutputStream out) OutputStream Object တစ#ခuကiu အသuB$CပuKပ?$


ObjectOuputStream ကiu တည#eဆ+က#ရန# Cပင#ဆင#ထ+$တ-6
Constructor Cဖစ#ပ3တယ#။

အထက#ပ3နမOန+အတiuင#$ JVM Memory အeပ2မH+Qiတ-6 Object eတ&ကiu Serialize လuပ#လiuပ3က


writeObject(Object obj) method ကiu အသuB$CပuAiuင#မH+ Cဖစ#ပ3တယ#။

Learning Java 294 မင#$လ&င#


Java Developer Class

Deserialization
ObjectOutputStream ကiu အသuB$CပuKပ?$ Serialize လuပ#ထ+$တ-6 Primitive Data eတ&န-9 Object eတ&ကiu
Deserialize လuပ#လiuတ-6အခ3 ObjectInputStream ကiu အသuB$CပuရမH+ Cဖစ#ပ3တယ#။

Constructor Description

ObjectInputStream() ObjectInputStream ရ-I Sub Class eတ&အတ&က# Cပင#ဆင#ထ+$eပ$


တ-6 Constructor Cဖစ#ပ3တယ#။

ObjectInputStream(InputStream in) OutputStream Object တစ#ခuကiu အသuB$CပuKပ?$


ObjectOuputStream ကiu တည#eဆ+က#ရန# Cပင#ဆင#ထ+$တ-6
Constructor Cဖစ#ပ3တယ#။

File ထ-မH+Qiတ-6 Data eတ&ကiu Deserialize လuပ#တ-6အခ3မGiu$မH+ ObjectInputStream ဟ+ FileInputStream ကiu


အသuB$Cပuပ3တယ#။ ဒ3eFက+င#6 File ထ-က Data eတ&ကiu Read လuပ#လiuတ-6အခ3မGiu$မH+ InputStream Parameter
eနရ+မH+ FileInputStream Object ကiu အသuB$CပuရမH+ Cဖစ#ပ3တယ#။

တဖန# Remote System တစ#ခuကeန Data eတ&ကiu ရယOတ-6အခ3မGiu$မH+eတ+6 Socket Streams ကiu အသuB$CပuKပ?$
Data eတ&ကiu Deserialize လuပ#Aiuင#ပ3တယ#။

ယခင# နမOန+Cဖင#6 Serialize လuပ#ထ+$တ-6 Employee Object ကiu Deserialize လuပ#လiuတ-6အခ3 အထက#ပ3အတiuင#$
ObjectInputStream ကiu အသuB$CပuKပ?$ eရ$သ+$Aiuင#ပ3တယ#။ အထက#ပ3အတiuင#$ in.readObject() method ရ-I
Return Type ဟ+ Object Cဖစ#eနတ-6အတ&က# Employee အCဖစ#Cပန#Kပ?$ Cast လuပ#eပ$ဖiuလiuအပ#ပ3တယ#။

Learning Java 295 မင#$လ&င#


Java Developer Class

NiO2

Learning Java 296 မင#$လ&င#


Java Developer Class

Java 8 New Features

Learning Java 297 မင#$လ&င#


Java Developer Class

Lambda Expression

Lambda Expression ဆiuတ"ဘ"လ/

ဘ"0e>က"င%0 Lambda Expression ကiu လiuအပ%ခ/0ရတ"လ/

Lambda Expression ကiu ဘယ%လiu eရ9သ"9ရသလ/

Lambda Expression e>က"င%0 ဘ"eတ3 eက"င%9သ3"9လ/

ဘယ%လiueနရ"eတ3မ:" Lambda Expression ကiu အသu<9=ပuသင%0သလ/

Java ဟ" Functional လ"9 OOP လ"9

Learning Java 298 မင#$လ&င#


Java Developer Class

Method References

Learning Java 299 မင#$လ&င#


Java Developer Class

Changes in Interfaces

Learning Java 300 မင#$လ&င#


Java Developer Class

Streams API

Learning Java 301 မင#$လ&င#


Java Developer Class

Java 9 New Features


JShell
Modularity In Java
Changes in Streams API
HTTP 2 Client


Learning Java 302 မင#$လ&င#


Java Developer Class

Learning Java 303 မင#$လ&င#

You might also like