មេរៀនទី១: ការណែនាំ Java

2តើ Java គឺជាអ្វី? Java គឺជាភាសាកម្មវិធី programming language និង platform
JavaPlatform ដែល hardware ឬ software environment ក្នុងកម្មវិធី រត់ ដំណើរការ ដូចជា platform មួយ។ កម្មវិធី Java មាន Runtime Environment ផ្ទាល់ (JRE) និងអនុគមន៍ API ត្រូវបានហៅថា platform។

ឧទាហរណ៍ Java
class Simple{
public static void main(String args[]){
System.out.println(“Hello Java”);
}
}

វាប្រើនៅកន្លែងណា? យោងតាមក្រុមហ៊ុន Sun ឧបករណ៍ 3 ពាន់លាន ឧបករណ៍ រត់ដំណើរការលើ java។ មានឧបករណ៍ជាច្រើន កំពុងប្រើជាមួយ java ដែលខាងក្រោមនេះបង្ហាញពីកម្មវិធី:

  1. កម្មវិធី Desktop Applications ដូចជា acrobat reader, media player, កម្មវិធី antivirus ។ល។
  2. កម្មវិធី វ៉ិបសាយ Web Applications ដូចជា irctc.co.in, javatpoint.com ។ល។
  3. កម្មវិធី Enterprise Applications ដូចជាកម្មវិធីធានាគារ banking applications។
  4. Mobile
  5. ប្រព័ន្ធ Embedded System
  6. Smart Card
  7. Robotics
  8. Games ។ល។

ប្រភេទកម្មវិធី Java Applications មានបួនប្រភេទ កម្មវិធី ដែលអាចបង្កើតដោយ java:

1) កម្មវិធី Standalone Application វាគឺដូចជាកម្មវិធី  desktop application ឬសន្លឹក window-based application។ កម្មវិធី application យើងត្រូវការដំឡើងលើគ្រប់ម៉ាស៊ីន ដូចចា media player, antivirus ។ល។  AWT និង Swing ត្រូវបានប្រើ java សម្រាប់ standalone applications.

2) កម្មវិធី Web Application ម្មវិធី  application ដែលរត់លើ server និងបង្កើត dynamic page ត្រូវបានហៅថាជាកម្មវិធី  web application។ ឥឡូនេះ servlet, jsp, struts, jsf ។ល។ បច្ចេកវិទ្យាត្រូវបានប្រើ សម្រាប់កម្មវិធី  web applications ក្នុង java។

3) កម្មវិធី Enterprise Application កម្មវិធី  application ដែលត្រូវ បានបែងចែកជា banking applications ។ល។ វាមានសារ:សំខាន់ សុវត្តិភាព កំរិត ខ្ពស់ load balancing និង clustering។

4) កម្មវិធី Mobile Application ម្មវិធី  application ត្រូវបានបង្កើត កម្មវិធី mobile device។ ដែលសព្វថ្ងៃប្រើ Android និង Java ME ប្រើ សម្រាប់បង្កើតកម្មវិធី mobile application។

ប្រវត្តិនៃ Java ava ចាប់ពីក្រុម Green Team សមាជិក Java ធ្វើការងារ ច្រើនដើម្បីអភិវឌ្ឈន៍ភាសាសម្រាបឧបករណ៍ digital device ដូចជាបង្កើត set-top boxes, television។

1) James Gosling, Mike Sheridan, និង Patrick Naughton បានផ្តួចផ្តើមភាសា Java language project ក្នុងឆ្នាំ 1991។

2) បានរចនាសម្រាប់ប្រព័ន្ធ embedded systems ក្នុង electronic ដូចជាបង្កើត top boxes។

3) ដំបូវវាហៅ “Greentalk” ដោយ James Gosling មាន file extension ជា.gt។

4) ក្រោយមកគេហៅថា Oak ហើយបានអភិវឌ្ឃន៍ផ្នែកនៃ Green project។
Java

ហេតុអ្វីមានឈ្មោះថា Oak សម្រាប់ភាសា java language?

5) Oak គឺជានិតិសញ្ញា symbol ជ្រើសរើសដើមឈើធម្មជាតិ មានច្រើនប្រភេទដូចជា U.S.A., France, Germany, Romania ។ល។

6) ក្នុងឆ្នាំ 1995, Oak ត្រូវបានកែជាឈ្មោះ “Java” វិធីព្រោះវាមានចុះពាណិជ្ជកម្ម trademark ដោយ Oak Technologies។

មានប្រភេទ java version ជាច្រើនដែលបានប្រើ

  1. JDK Alpha and Beta (1995)
  2. JDK 1.0 (23rd Jan, 1996)
  3. JDK 1.1 (19th Feb, 1997)
  4. J2SE 1.2 (8th Dec, 1998)
  5. J2SE 1.3 (8th May, 2000)
  6. J2SE 1.4 (6th Feb, 2002)
  7. J2SE 5.0 (30th Sep, 2004)
  8. Java SE 6 (11th Dec, 2006)
  9. Java SE 7 (28th July, 2011)

លក្ខណ:របស់ Java

Java មានលក្ខណ:បានផ្តល់ ងាយស្រួលយល់

  1. Simple
  2. Object-Oriented
  3. Platform independent
  4. Secured
  5. Robust
  6. Architecture neutral
  7. Portable
  8. Dynamic
  9. Interpreted

10. High Performance

11. Multithreaded

12. Distributed


Simple

យោងតាម Sun, ភាសា Java language គឺងាយស្រួលព្រោះ:
      syntax គឺមានមូលដ្ឋានលើ C++ (ដូច្នេះងាយស្រួលសម្រាប់អ្នក programmer រៀនវាក្រោយពី C++)។

Object-oriented

Object-oriented មានន័យយើងរៀបចំកម្មវិធី software របស់យើងដូចជាការបញ្ចូលនៃប្រភេទ objects ទាំង data និង behaviour។
Object-oriented programming(OOPs) គឺជាវិធីសាស្រ្ត ដែលងាយបង្កើត software និង maintenance។
មូលដ្ឋាននស OOP គឺជា:
  1. Object
  2. Class
  3. Inheritance
  4. Polymorphism
  5. Abstraction
  6. Encapsulation

Platform ឯករាជ្យ

platform គឺជា hardware ឬ software environment ក្នុងកម្មវិធី program run។ វាមានពីរ ប្រភេទ នៃ platforms software-based និង hardware-based។ កម្មវិធី Java ផ្តល់ software-based platform។ កម្មវិធី  Java platform ពី platform ផ្សេងទៀត ហើយ software-based platform ដែលរត់ខាងលើ hardware-based platforms ផ្សេងទៀត។ វាមានពីសមាសធាតុ:

  1. Runtime Environment
  2. API(Application Programming Interface)

Java

 កូដ Java code រត់លើ multiple platforms ឧទាហរណ៍ Windows,Linux,Sun Solaris,Mac/OS ។ល។ កូដ Java code ត្រូវបាន compiled ក្នុង bytecode។ ដែល bytecode នេះជា platform ឯករាជ្យកូដ code វារត់លើ platforms ច្រើនដូចជា Write Once និង Run Anywhere(WORA)។

Secured

Java គឺមានសុវត្តិភាព:
  • No explicit pointer
  • កម្មវិធីរត់នៅក្នុង virtual machine sandbox.

Java

  • Classloader- បន្ថែមសុវត្ថិភាព security ដោយបំបែកជា package សម្រាប់បណ្តា classes នៃ local file system ពីទាំងនោះ បានបញ្ចូលពីប្រភពណែតវឺក។
  • Bytecode Verifier- ឆែកកូដ code fragment អាចចូលទៅ object។
  • Security Manager- កំណត់អ្វីពីប្រភព class មួយអាចអនុញ្ញាតដូចជាការអាន reading និងការសរសេរ ទៅ local disk។

Robust

គឺជា Java ប្រើគ្រប់គ្រង memory management។ គឺប្រមូលផ្តុំក្នុង java។

Architecture-neutral

មិនមានការ អនុវត្តន៍ លក្ខណ: ដូចជាទំហំ size។

Portable

អាចនាំ java bytecode ទៅ platform។

High-performance

Java គឺលឿនជាង ចាប់តាំងពី byte code ទៅជា native code នៅតែយឺត compiled language (ដូចជា C++)។

Distributed

យើងអាច បង្កើតបែងចែកកម្មវិធី application ក្នុង java។ RMI និង EJB ត្រូវបានបង្កើតសម្រាប់ ការបង្កើត distributed applications។ យើងអាចចូល file ដោយហៅវិធី ពីម៉ាស៊ីនផ្សេងទៀតលើ internet

 

មេរៀនទី២: Hello Java program

កម្មវិធីងាយនៃ Java

ក្នុងទំព័រនេះ យើងនឹងរៀន ពីរបៀបសរសេរកម្មវិធីងាយ នៃ java។ យើងអាចសរសេរងាយ hello java បន្ទាប់ពីដំឡើង JDK។ ដើម្បីបង្កើត កម្មវិធីងាយ java program លោកអ្នកបង្កើត class មួយដែលផ្ទុកវិធី ចម្បង។ អនុញ្ញាតអោយយប់ពីតម្រូវការជាដំបូង។

តម្រូវការសម្រាប់ Hello Java Example

ដើម្បីប្រត្តិបត្តិការ java program លោកអ្នកត្រូវការ

  • ដំឡើង JDK ប្រសិនលោកអ្នក មិនបានដំឡើងវា ចូលដោនឡូត download the JDK ហើយដំឡើងវា។
  • បង្កើត path ជា jdk/bin directory. http://www.javatpoint.com/how-to-set-path-in-java
  • បង្កើតកម្មវិធី java program
  • compile និងរត់ java program

ការបង្កើត hello java example

អនុញ្ញាតបង្កើត hello java program:

class Simple{

public static void main(String args[]){

System.out.println(“Hello Java”);

}

}

save file ជា Simple.java

To compile: javac Simple.java
To execute: java Simple

Output:Hello Java

ស្វ័យយល់កម្មវិធី java program

អនុញ្ញាតអោយ មើលន័យ class, public, static, void, main, String[], System.out.println()។

  • class keyword ត្រូវបានប្រើសម្រាប់ប្រកាស declare class មួយក្នុង java។
  • public keyword គឺអនុញ្ញាតអោយអ្នកកែប្រែ ដែលតំណាង អ្នកទស្សនា វាមានន័យថាគឺមើលឃើញ ទាំងអស់។
  • static គឺជាពាក្ស ប្រសិនបើយើងប្រកាស declare វិធីផ្សេងដូចជា static វាគឺដឹងដូចជា static method។ សារ:សំខាន់នៃវិធី static method គឺមិនត្រូវការបង្កើត object ទៅ static method។
  • void គឺត្រឡប់ចូល ប្រភេទនៃវិធី method មានន័យថាវាមិនត្រឡប់ចូលទៅតម្លៃផ្សេង។
  • main តំណាំង startup នៃ program។
  • String[] args ត្រូវបានប្រើសម្រាប់ command line argument។​ យើងនឹងរៀន ពេលក្រោយ។
  • System.out.println() ប្រើ print statement យើងនឹងរៀនអំពីការងារនៅក្នុង System.out.println statement ពេលក្រោយ។

ដើម្បីសរសេរកម្មវិធីងាយ program បើកលើ notepad ដោយចាប់ផ្តើម start menu -> All Programs -> Accessories -> notepad ហើយសរសេរកម្មវិធីងាយ បង្ហាញដូចខាងក្រោម:
Windows 8.1

ដូចបានបង្ហាញក្នុង diagram ខាងលើ សរសេរកម្មវិធីងាយរបស់ java ក្នុង notepad ហើយបានរក្សា saved វាជា Simple.java។ ដើម្បី compile ហើយរត់ program នេះយើងត្រូវការបើក command prompt ដោយ start menu -> All Programs -> Accessories -> command prompt

Javaដើម្បី compile ហើយរត់ program ខាងលើ ចូលទៅ directory ដំបូងជា c:\new សរសេរជា:
To compile:    javac Simple.java
To execute:    java Simple
តើមានវិធីប៉ុន្មានយ៉ាង សរសេរ java program
មានច្រើនវិធី ដើម្បីសរសេរ java program។
1) ដោយការផ្លាស់ប្តូរ sequence នៃអ្នកកែប្រែ modifiers, method prototype មិនត្រូវផ្លាស់ប្តូរ។
អនុញ្ញាតអោយមើលកូដ simple code នៃ main method។
static public void main(String args[])
2) subscript notation ក្នុង java array អាចប្រើបន្ទាប់ពីវាយ មុនពេលអថេរ ឬក្រោយ អថេរ។
អនុញ្ញាតអោយប្រើកូដ code ខុសគ្នាដើម្បីសរសេរ main method។
–    public static void main(String[] args)
–    public static void main(String []args)
–  public static void main(String args[])
3)  var-args ផ្តល់អោយ main method ដោយចុច 3 ellipses (dots)
អនុញ្ញាតកូដ simple code ដោយប្រ var-args ក្នុង main method យើងនឹងរៀនអំពី var-args ក្នុង Java New Features។
1.    public static void main(String… args)
4) មានសញ្ញា ក្បៀស semicolon នៅបញ្ចប់ របស់ class ក្នុង java គឺបានជ្រើសរើស។
អនុញ្ញាតមើលកូដ simple code។
class A{
static public void main(String… args){
System.out.println(“hello java4”);
}
};
Valid java main method signature
1.    public static void main(String[] args)
2.    public static void main(String []args)
3.    public static void main(String args[])
4.    public static void main(String… args)
5.    static public void main(String[] args)
6.    public static final void main(String[] args)
7.    final public static void main(String[] args)
8.    final strictfp public static void main(String[] args)
Invalid java main method signature
1.    public void main(String[] args)
2.    static void main(String[] args)
3.    public void static main(String[] args)
4.    abstract public static void main(String[] args)
ដោះស្រាយ error “javac មិនបានរៀបចំ internal ឬ external command” ?
ប្រសិនជាមានបញ្ហា ដូចជាបានបង្ហាញ ក្នុងរូបខាងក្រោម លោកអ្នកនឹងត្រូវការបង្កើត path។ ចាប់តាំងពី DOS មិនស្គាល់ javac ឬ java យើងត្រូវការបង្កើត path។ ដែល Path មិនមែនជាតម្រូវការក្នុងដូចជា ក្នុងករណីរក្សា save កម្មវិធីរបស់អ្នកខាងក្នុង jdk/bin folder។
Java

មេរៀនទី៣: Program internal

ពិស្តារពី Hello Java Program
ក្នុងទំព័រពីមុន យើងបានរៀនអំពី កម្មវិធីដំបូង ពីរបៀប compile រត់កម្មវិធី java program ដំបូង។
ទីនេះយើង នឹងរៀនអំពីការ compiling នឹងរត់ដំណើរការ java program។ មានហេតុការណ៍ អ្វីកើត ឡើង
ពេលរត់ compile time?ពេល compile time, java file ត្រូវបាន compile ដោយ Java Compiler ហើយ
ប្តូរកូដ java code ក្នុង bytecode។
Javaមានហេតុការណ៍អ្វីពេល runtime?

ពេល runtime, មានជំហានខាងក្រោម:

JavaClassloader: គឺជា subsystem របស់ JVM ដែលប្រើសម្រាប់ load class file។
Bytecode Verifier: ឆែកកូដ code fragment អាចចូលទៅ object។
Interpreter: អាន bytecode stream ហើយប្រត្តិបត្តិការ execute។
Q) តើលោកអ្នកអាចរក្សា save java source file ឈ្មោះផ្សេងជាងឈ្មោះ class name?
លោកអ្នកអាចមើលបង្ហាញខាងក្រោម:
JavaTo compile:    javac Hard.java
To execute:    java Simple
Q) តើលោកអ្នកអាចមាន class ច្រើនក្នុង java source file?
មើលការបង្ហាញខាងក្រោម:
Java

មេរៀនទី៤: របៀបបង្កើត path

របៀបបង្កើត path ក្នុង Java
path តម្រូវបង្កើតដោយប្រ tool ដូចជា javac, java ។ល។ ប្រសិនបើ លោកអ្នករក្សា save នៅក្នុង java source file នៅក្នុង jdk/bin directory ដែល path គឺតម្រូវអោយបង្កើត ព្រោះ tool នឹងកែប្រែ ក្នុង directory។ ប្រសិនបើមាន java file នៅខាងក្រៅ jdk/bin folder វាត្រូវការបង្កើត path របស់ JDK។
មានពីរមធ្យោបាយដើម្បីបង្កើត java path:
1.    temporary
2.    permanent
1) របៀបបង្កើត Temporary Path របស់ JDK ក្នុង Windows
ដើម្បីបង្កើត temporary path របស់ JDK លោកអ្នកត្រូវការធ្វើជំហានដូចខាងក្រោម:
•    បើក command prompt
•    copy path នៃ jdk/bin directory
•    សរសេរ command prompt: បង្កើត path=copied_path
ឧទាហរណ៍:
set path=C:\Program Files\Java\jdk1.6.0_23\bin
អនុញ្ញាតមើលការដំឡើងដូចខាងក្រោម:
Java2) របៀបបង្កើត Permanent Path របស់ JDK ក្នុង Windows
ដើម្បីបង្កើត permanent path របស់ JDK លោកអ្នកត្រូវការធ្វើតាមជំហានដូចខាងក្រោម:
•    ចូល MyComputer properties -> advanced tab -> environment variables -> new tab of user variable -> សរសេរឈ្មោះ path -> សរសេរ path of bin folder in variable value -> ok -> ok -> ok
ឧទារហណ៍:
ចូលក្នុង MyComputer properties
Javaចុចលើ advanced tab
Javaចុចលើ environment variables
Javaចុចលើ new tab of user variables
Javaសរសេរឈ្មោះ path in variable name
JavaCopy the path of bin folder
Java7)paste path of bin folder in variable value
Java8)click on ok button
Java9)click on ok button
Java

មេរៀនទី៥: JDK, JRE និង JVM

ភាពខុសគ្នារវាង JDK, JRE និង JVM
ស្វ័យយល់ពី ភាពខុសគ្នារវាង JDK, JRE និង JVM គឺមានសារ:សំខាន់ក្នុង Java។ យើងបានសង្ខេបពី JVM
ប្រសិនបើលោកអ្នក ចង់ដើម្បីទទួលពិស្តារ ចំណេះដឹងនៃ Java Virtural Machine មើលមេរៀនមូលដ្ឋាន នៃភាពខុសគ្នារវាង JDK, JRE និង JVM។
VM
JVM (Java Virtual Machine) វាមានលក្ខណ:ពិសេសដែលផ្តល់ runtime environment ក្នុង java bytecode អាចប្រត្តិបត្តិ។
JVM សម្រាប់ hardware និង software platforms. JVM, JRE និង JDK ជា platform ឯរាជ្យ។
JVM performs មានកិច្ចការចម្បងខាងក្រោម:
•    Loads code
•    Verifies code
•    Executes code
•    Provides runtime environment

JRE
JRE គឺជាពាក្សដើមនៃ Java Runtime Environment វាប្រើដើម្បីផ្តល់ runtime environment វាគឺអនុវត្តន៍ JVM។
JavaJDK
JDK គឺជាពាក្ស Java Development Kit វាមានផ្ទុក JRE + development tools។
Java

មេរៀនទី៦: JVM

JVM (Java Virtual Machine) មានលក្ខណ:ពិសេសសម្រាប់ runtime environment ក្នុង java bytecode នឹងប្រត្តិបត្តិ។
តើ JVM ជាអ្វី?
វាជា:
1.    A specification កន្លែងធ្វើការ Java Virtual Machine ប៉ុន្តែការផ្តល់គឺឯករាជ្យ ដើម្បីជ្រើសរើស algorithm។ វាអនុវត្តន៍ដោយផ្តល់ក្រុមហ៊ុន Sun និងក្រុមហ៊ុនផ្សេងទៀត។
2.    An implementation វាអនុវត្តន៍ដឹងដូច JRE (Java Runtime Environment)។
3.    Runtime Instance លោកអ្នកសរសេរ java command កាលណាក៍បាន  លើ command prompt ដើម្បីរត់ java class និងជំនួន JVM ត្រូវបានបង្កើត។
តើវាធ្វើការអ្វី?
JVM perform ប្រត្តិបត្តិការណ៍ដូចខាងក្រោម:
•    Loads code
•    Verifies code
•    Executes code
•    Provides runtime environment
JVM ផ្តល់និយមន័យ:
•    តំបន់ Memory area
•    Class file format
•    បង្កើត Register set
•    Garbage-collected heap
•    Fatal error reporting ។ល។

Internal Architecture របស់ JVM
ស្វែងយល់ពី internal architecture របស់ JVM វាផ្ទុក classloader, memory area, execution engine ។ល។
Java1) Classloader:
Classloader គឺជា subsystem របស់ JVM ត្រូវបានប្រើសម្រាប់ load class files។
2) Class(Method) Area:
តំបន់ Class(Method) Area ផ្ទុកក្នុង class structures ដូចជា runtime constant pool, field  និងmethod data។
3) Heap:
វាជា runtime data ក្នុង object។
4) Stack:
Java Stack ផ្ទុក frame វាដាក់លើ local variable។
5) Program Counter Register:
PC (program counter) register វាផ្ទុក address របស់ Java virtual machine instruction
6) Native Method Stack:
វាផ្ទុកបណ្តា method ទាំងអស់ត្រូវបានប្រើ ក្នុង application។
7) Execution Engine:
វាផ្ទុក:
1) A virtual processor
2) Interpreter: អាន bytecode ហើយ execute។
3) Just-In-Time(JIT) compiler: វាត្រូវបានប្រើ ដើម្បីផ្តល់ performance វាជាផ្នែកមួយ compile នៃ byte code។

មេរៀនទី៧: អថេរ និង Datatype

យើងនឹងរៀនអំពី អថេរ និង java data type។ អថេរគឺជាឈ្មោះរបស់ទីតាំង memory។ វាមានបី ប្រភេទ នៃបណ្តាអថេរ: local, instance និង static។ មានពីរប្រភេទនៃ datatypes ក្នុង java, primitive និង non-primitive។
អថេរ
អថេរគឺជាឈ្មោះ ស្ថិតនៅក្នុង memory។
Java1.    int data=50;//Here data is variable
ប្រភេទអថេរ
មានបីប្រភេទអថេរក្នុង java
•    អថេរតំបន់ local variable
•    អថេរ instance variable
•    អថេរ static variable
Javaអថេរ Local Variable
អថេរមួយ ត្រូវបានប្រកាស ក្នុង method ត្រូវបានហៅថាអថេរតំបន់ local variable។
អថេរ nstance Variable
គឺជាអថេរដែល ប្រកាស់ក្នុង class ប៉ុន្តែខាងក្រៅ method ត្រូវបានហៅថា អថេរ instance variable . វាមិនបានប្រកាសដូច static។
អថេរ Static variable
អថេរ ត្រូវបានប្រកាសដូចជា static វាមិនដូចជា local.
ឧទាហរណ៍ការស្វែងយល់ពីប្រភេទអថេរ
class A{
int data=50;//instance variable
static int m=100;//static variable
void method(){
int n=90;//local variable
}
}//end of class
ប្រភេទ Data Types ក្នុង Java
ក្នុង java, មានពីរប្រភេទនៃ data types
•    primitive data types
•    non-primitive data type
Java

ប្រភេទ Data Type

Default Value

Default size

boolean false 1 bit
char ‘\u0000’ 2 byte
byte 0 1 byte
short 0 2 byte
int 0 4 byte
long 0L 8 byte
float 0.0f 4 byte
double 0.0d 8 byte

ប្រព័ន្ធយូនីកូដ Unicode System
Unicode គឺជាស្តង់ដាអក្សអន្តរជាតិ universal international standard character ដែលមានសមត្ថភាព តំណាង សរសេរភាសាលើពភពលោគ្នា។

ហេតុអ្វីបានជា java ប្រើ Unicode System?
ពីមុន Unicode មានស្តងដារភាសាច្រើន:
•    ASCII (American Standard Code for Information Interchange) សម្រាប់សហរដ្ឋអាមេរិក United States។
•    ISO 8859-1 សម្រាប់ Western European Language។
•    KOI-8 សម្រាប់រ៉ូស៊ី Russian
•    GB18030 and BIG-5 សម្រាប់ចិន Chinese និងផ្សេងទៀត។
មូលហេតុបណ្តាលអោយមានពីរបញ្ហា:
1.    លក្ខណ:ពិសេសតម្លៃកូដ code value ទាក់ទងនឹង letters ក្នុងស្តងដាភាសា language standard។
2.    កូដសម្រា់ភាសារ ជាមួយអក្សរធំ បង្កើតអថេរ variable length។ Some common
ដើម្បីដោះស្រាយ បញ្ហាទាំងនេះ មានស្តង់ដាភាសាថ្មី ត្រូវបានអភិវឌ្ឈ Unicode System។
អក្សរមាន 2 byte។
lowest value:\u0000
highest value:\uFFFF

មេរៀនទី៨: ប្រមាណវិធីក្នុង java

ប្រមាណវិធី ក្នុង java គឺជានិម្មសញ្ញា ដែលត្រូវបានប្រើ ដើម្បីកំណត់ ប្រត្តិបត្តិការ។ មានប្រភេទប្រមាណវិធីក្នុង java ដូចជា ប្រមាណវិធី arithmetic, ប្រមាណវិធី relational, ប្រមាណវិធី shift, ប្រមាណវិធី bitwise, ប្រមាណវិធី ternary និងប្រមាណវិធី assignment។

ប្រមាណវិធី

អាទិភាព

postfix expr++ expr
unary ++exprexpr +exprexpr ~ !
multiplicative * / %
additive + –
shift << >> >>>
relational < > <= >= instanceof
equality == !=
bitwise AND &
bitwise exclusive OR ^
bitwise inclusive OR |
logical AND &&
logical OR ||
ternary ? :
assignment = += -= *= /= %= &= ^= |= <<= >>= >>>=

ប្រយោជន៍ក្នុងកម្មវិធី Programs:
ដូចជាចំនួន ហ្វាក់តូរីយ៉ែល factorial number, prime number, សេរី fibonacci series ។ល។
1) Program នៃចំនួន factorial number
class Operation{
static int fact(int number){
int f=1;
for(int i=1;i<=number;i++){
f=f*i;
}
return f;
}
public static void main(String args[]){
int result=fact(5);
System.out.println(“Factorial of 5=”+result);
}
}

2) Program នៃសេរី fibonacci series.
class Fabnoci{
public static void main(String[] args)
{
int n=10,i,f0=1,f1=1,f2=0;
for(i=1;i<=n;i++)
{
f2=f0+f1;
f0=f1;
f1=f2;
f2=f0;
System.out.println(f2);
}
}
}
3) Program នៃចំនួន armstrong number។
class ArmStrong{
public static void main(String…args)
{
int n=153,c=0,a,d;
d=n;
while(n>0)
{
a=n%10;
n=n/10;
c=c+(a*a*a);
}
if(d==c)
System.out.println(“armstrong number”);
1.        else
2.        System.out.println(“it is not an armstrong number”);
3.
4.       }
5.    }

4) Program ឆែកនៃចំនួន palindrome number។
class Palindrome
{
public static void main( String…args)
{
int a=242;
int  n=a,b=a,rev=0;
while(n>0)
{
a=n%10;
rev=rev*10+a;
n=n/10;
}
if(rev==b)
System.out.println(“it is Palindrome”);
else
System.out.println(“it is not palinedrome”);

}
}

5) Program of swapping two numbers without using third variable.
class SwapTwoNumbers{
public static void main(String args[]){
int a=40,b=5;
a=a*b;
b=a/b;
a=a/b;

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

}
}

6) Program of factorial number by recursion
class FactRecursion{

static int fact(int n){
if(n==1)
return 1;

return n*=fact(n-1);
}

public static void main(String args[]){

int f=fact(5);
System.out.println(f);
}
}

មេរៀនទី៩: Java OOP

មេរៀននេះ រៀនពីមូលដ្ឋាននៃ OOP ជា Object Oriented Programming គឺជាគំរូ ដែលផ្តល់មូលដ្ឋានច្រើនដូចជា inheritance, data binding, polymorphism ។ល។
OOPs (Object Oriented Programming System)
Java
Object មានន័យទំនាក់ទំនងពិត ដូចជា pen, chair, table ។ល។  Object-Oriented Programming គឺជាវិធីសាស្ត្រ ឬគំរូដើម្បីរចនា ប្រើ class និង object។  វាធ្វើអោយងាយស្រួល អភិវឌ្ឈន៍កម្មវិធី software និងថែរក្សា maintenance ដោយផ្តល់មូលដ្ឋានមួយចំនួន:
•    Object
•    Class
•    Inheritance
•    Polymorphism
•    Abstraction
•    Encapsulation
Object
ទំនាក់ទំនង ដែលមាន state និង behavior ដឹងពី object មួយឧទាហរណ៍: chair, pen, table, keyboard, bike ។ល។ វាអាចជា physical និង logical។
Class
ការប្រមូលផ្តុំនៃបណ្តា objects ត្រូវបានហៅថា class វាជា logical entity។
Inheritance
កាលណា object ត្រូវការ properties និង behaviours នៃ object មេ។ ដឹងដូចជា inheritance។ វាផ្តល់កូដ។
Javaអត្ថប្រយោជន៍នៃ OOPs លើភាសា Procedure-oriented programming language
1) OOPs បង្កើតការអភិវឌ្ឈន៍ និងថែរក្សា maintenance ក្នុងភាសា Procedure-oriented programming language វាមិនងាយគ្រប់គ្រង ប្រសិនបើកូដ កើនឡើង។
2)OOPs ផ្តល់ទិន្នន័យ ក្នុងភាសា Procedure-oriented programming language អាចចូលពីគ្រប់កន្លែង។
Java
សារ:ប្រយោជន៍នៃឈ្មោះអនុសញ្ញា ក្នុង java ដោយប្រើស្តង់ដា standard Java ឈ្មោះអនុសញ្ញា លោកអ្នកបង្កើតកូដ ដោយងាយ ដើម្បីអាន ដោយលោកអ្នកផ្ទាល់ និងសម្រាប់អ្នក programmer ផ្សេងទៀត។ អាចអានកម្មវិធី នៃ Java វាមានសារ:សំខាន់

ឈ្មោះ

អនុសញ្ញា

class name នឹងចាប់ផ្តើមអក្សរធំ uppercase letter មាន String, Color, Button, System, Thread ។ល។
interface name និងចាប់ផ្តើមអក្សរធំ uppercase letter ជានាម ដូចជា Runnable, Remote, ActionListener
method name និងចាប់ផ្តើមអក្សរតូច lowercase letter ជា verb ដូចជា actionPerformed(), main(), print(), println() etc.
variable name និងចាប់ផ្តើមអក្សរតូច lowercase letter ដូចជា firstName, orderNumber ។ល។
package name និងចាប់ផ្តើមអក្សរតូច lowercase letter ដូចជា java, lang, sql, util ។ល។
constants name និងចាប់ផ្តើមអក្សរតូច  RED, YELLOW, MAX_PRIORITY ។ល។

 

មេរៀនទី១០: Object និង Class

មេរៀននេះរៀនអំពី java objects និង classes។ ក្នុងបច្ចេកទេស object-oriented programming យើងរចនា កម្មវិធីដោយប្រើ objects និង classes។ Object គឺជា physical ដូចជាទំនាក់ទំនង logical entity ចំណែកឯ class គឺជា logical entity មួយគត់។

Object ក្នុង Java

JavaClass ក្នុង Java
class គឺជាក្រុមមួយនៃ objects ដែលមាន properties រួមវាមាន template មួយឬ blueprint ពី objects ត្រូវបានបង្កើត។
class មួយក្នុង java អាចផ្ទុក:
•    data member
•    method
•    constructor
•    block
•    class and interface
Syntax ដើម្បីប្រកាស class មួយ:
class <class_name>{
data member;
method;
}
ឧទាហរណ៍ Object និង Class
ក្នុងឧទាហរណ៍នេះ យើងបានបង្កើត Student class ដែលមានទិន្នន័យពីរ data members id និង name។ យើងកំពង់បង្កើត object របស់ Student class ដោយ keyword ថ្មី។
class Student1{
int id;//data member (also instance variable)
String name;//data member(also instance variable)
public static void main(String args[]){
Student1 s1=new Student1();//creating an object of Student
System.out.println(s1.id);
System.out.println(s1.name);
}
}
Output:0 null

អថេរ Instance ក្នុង Java
អថេរមួយត្រូវបានបង្កើតខាងក្នុង class ប៉ុន្តែនៃក្រៅ method ដូចដឹងថាអថេរ instance មិនទទួល memory ពេល compile។ វាទទួល ពេល runtime កាលណា object ប្រើ (instance) ត្រូវបានបង្កើត។
Method ក្នុង Java
ក្នុង java,  method គឺដូចអនុគមន៍
សារ:ប្រយោជន៍នៃ Method
•    Code Reusability
•    Code Optimization
Keyword ថ្មី
keyword ថ្មីត្រូវបានប្រើ ចូលទៅ memory ពេល runtime។

ឧទាហរណ៍នៃ Object និង class ដែលថែរក្សា records របស់ students
ក្នុងឧទាហរណ៍នេះ យើងកំពុងបង្កើត objects  ពីររបស់ Student class ហើយបញ្ចូល objects ក្នុង Record method លើវា។
class Student2{
int rollno;
String name;

void insertRecord(int r, String n){  //method
rollno=r;
name=n;
}
void displayInformation(){System.out.println(rollno+” “+name);}//method

public static void main(String args[]){
Student2 s1=new Student2();
Student2 s2=new Student2();

s1.insertRecord(111,”Karan”);
s2.insertRecord(222,”Aryan”);

s1.displayInformation();
s2.displayInformation();

}
}

Output:111 Karan

222 Aryan

Download ឧទាហរណ៍នេះ object និង class

មេរៀនទី១១: Method Overloading

ប្រសិនប class មួយមានច្រើន methods ដោយឈ្មោះដូចគ្នា ប៉ុន្តែខុសគ្នាប៉ារ៉ាម៉ែត្រ ដូចជា Method Overloading
Javamethod overloading អត្ថប្រយោជន៍លើអ្វី?
Method overloading បង្កើនកម្មវិធីអាន
មធ្យោបាយផ្សេងទៀតលើ overload method
មានមធ្យោបាយពីរដើម្បី overload method ក្នុង java
1.    ដោយការផ្លាស់ប្តូរ ចំនួននៃ arguments
2.    ដោយការផ្លាស់ប្តូរ ប្រភេទទិន្នន័យ data type
Methood Overloading មិនអាចប្តូរ return type របស់ method.
1)ឧទាហរណ៍នៃ Method Overloading ដោយមិនផ្លាស់ប្តូរនៃ argument
ក្នុងឧទាហរណ៍នេះបង្កើត overloaded methods ពីរដំបូង method សរុបនៃ ចំនួនពីរ និង method ទីពីរ បន្ថែម បីចំនួន។
class Calculation{
void sum(int a,int b){System.out.println(a+b);}
void sum(int a,int b,int c){System.out.println(a+b+c);}

public static void main(String args[]){
Calculation obj=new Calculation();
obj.sum(10,10,10);
obj.sum(20,20);

}
1.    }
Output:30
40

2)ឧទាហរណ៍នៃ Method Overloading ដោយការផ្លាស់ប្តូរប្រភេទ data នៃ argument
យើងបានបង្កើត overloaded methods ពីក្នុង data type។ ដែល method ទី១ទទួល បានចំនួន integer argument ពីរនឹង method ទីពីរមាន arguments ពីរ
class Calculation2{
void sum(int a,int b){System.out.println(a+b);}
void sum(double a,double b){System.out.println(a+b);}

public static void main(String args[]){
Calculation2 obj=new Calculation2();
obj.sum(10.5,10.5);
obj.sum(20,20);

}
}
Output:21.0
40
យើងអាច overload main() method?
ដោយប្រើ method overloading លោកអ្នកអាចមានចំនួនច្រើននៃ method ចម្បងក្នុង class មួយដោយ method overloading មើលក្នុងឧទាហរណ៍ខាងក្រោម:
class Overloading1{
public static void main(int a){
System.out.println(a);
}

public static void main(String args[]){
System.out.println(“main() method invoked”);
main(10);
}
}
Output:main() method invoked
10
Method Overloading និង TypePromotion
Javaឧទាហរណ៍នៃ Method Overloading ជាមួយ TypePromotion
1.    class OverloadingCalculation1{
void sum(int a,long b){System.out.println(a+b);}
void sum(int a,int b,int c){System.out.println(a+b+c);}

public static void main(String args[]){
OverloadingCalculation1 obj=new OverloadingCalculation1();
obj.sum(20,20);//now second int literal will be promoted to long
obj.sum(20,20,20);

}
}
Output:40
60
ឧទាហរណ៍នៃ Method Overloading ជាមួយ TypePromotion
ប្រសិនបើបញ្ចូល arguments ក្នុង method
class OverloadingCalculation2{
void sum(int a,int b){System.out.println(“int arg method invoked”);}
void sum(long a,long b){System.out.println(“long arg method invoked”);}

public static void main(String args[]){
OverloadingCalculation2 obj=new OverloadingCalculation2();
obj.sum(20,20);//now int arg sum() method gets invoked
}
}
Output:int arg method invoked

ឧទាហរណ៍នៃ Method Overloading ជាមួយ TypePromotion
ប្រសិនបើមិនមាន arguments ក្នុង method
class OverloadingCalculation3{
void sum(int a,long b){System.out.println(“a method invoked”);}
void sum(long a,int b){System.out.println(“b method invoked”);}

public static void main(String args[]){
OverloadingCalculation3 obj=new OverloadingCalculation3();
obj.sum(20,20);//now ambiguity
}
}
Output:Compile Time Error

មេរៀនទី១២: Constructor ក្នុង Java

Constructor ជាប្រភេទពិសេសនៃ method ដែលត្រូវបានប្រើសម្រាប់ចាប់ផ្តើម object។
តួនាទីសម្រាប់បង្កើត constructor
មានមូលដ្ឋានពីរក្នុងការបង្កើត constructor.
1.    ឈ្មោះ Constructor name ត្រូវដូចឈ្មោះ class name
2.    Constructor មិនមាន return type
បណ្តាប្រភេទនៃ constructors
មានពីរប្រភេទ constructors:
1.    default constructor (no-arg constructor)
2.    ប៉ារ៉ាម៉ែត្រ constructor
Java1) Default Constructor
A constructor that have no parameter is known as default constructor.
Syntax of default constructor:
1.    <class_name>(){}
ឧទាហរណ៍ default constructor
យើងបង្កើត no-arg constructor ក្នុង Bike class
class Bike1{

Bike(){System.out.println(“Bike is created”);}

public static void main(String args[]){
Bike1 b=new Bike1();
}
}
Output: Bike is created
ប្រសិនបើមិនមាន constructor ក្នុង class, compiler ដោយស្វ័យប្រវត្តជា default constructor។
Javaឧទាហរណ៍នៃ default constructor ដែលបង្ហាញតម្លៃ default
class Student3{
int id;
String name;
void display(){System.out.println(id+” “+name);}
public static void main(String args[]){
Student3 s1=new Student3();
Student3 s2=new Student3();
s1.display();
s2.display();
}
}
Output:0 null
0 null
ឧទាហរណ៍នៃ parameterized constructor
យើងបានបង្កើត constructor នៃ Student class ដែលមានពីរប៉ារ៉ាម៉ែត្រ
class Student4{
int id;
String name;

Student4(int i,String n){
id = i;
name = n;
}
void display(){System.out.println(id+” “+name);}

public static void main(String args[]){
Student4 s1 = new Student4(111,”Karan”);
Student4 s2 = new Student4(222,”Aryan”);
s1.display();
s2.display();
}
}
Output:111 Karan
222 Aryan

Constructor Overloading
Constructor overloading គឺជាបច្ចេកទេសមួយក្នុង Java ក្នុង class មួយអាចមានចំនួនច្រើន នៃ constructors ក្នុង parameter lists។
ឧទាហរណ៍នៃ Constructor Overloading
class Student5{
int id;
String name;
int age;
Student5(int i,String n){
id = i;
name = n;
}
Student5(int i,String n,int a){
id = i;
name = n;
age=a;
}
void display(){System.out.println(id+” “+name+” “+age);}

public static void main(String args[]){
Student5 s1 = new Student5(111,”Karan”);
Student5 s2 = new Student5(222,”Aryan”,25);
s1.display();
s2.display();
}
}
Output:111 Karan 0
222 Aryan 25
ភាពខុសគ្នារវាង constructor និង method ?

Constructor

Method

Constructor គឺត្រូវបានប្រើពេលចាប់ផ្តើមនៃ object. Method ត្រូវបានប្រើដើម្បីថ្លែងការរបស់ object។
Constructor មិនមាន return type. Method ត្រូវមាន return type.
Constructor ត្រូវបានបញ្ចេញក្រៅ Method ចូលពីក្រៅ
java compiler ផ្តល់ចា default constructor ប្រសិនបើ មិនមាន constructor ផ្សេងទៀត។ Method មិនបានផ្តល់ដោយ compiler
ឈ្មោះ Constructor name ត្រូវដូច class name. ឈ្មោះ Method name មិនអាចដូច class name.

ចម្លងតម្លៃនៃ object ទៅ constructor in C++
មានវិធីច្រើនដើម្បី copy តម្លៃនៃ object ក្នុងផ្សេងទៀត
•    ដោយ constructor
•    ដោយផ្តល់តម្លៃនៃ object ក្នុងផ្សេងទៀត
•    ដោយ clone() method នៃ Object class
ឧទាហរណ៍.

class Student6{
int id;
String name;
Student6(int i,String n){
id = i;
name = n;
}

Student6(Student s){
id = s.id;
name =s.name;
}
void display(){System.out.println(id+” “+name);}

public static void main(String args[]){
Student6 s1 = new Student6(111,”Karan”);
Student6 s2 = new Student6(s1);
s1.display();
s2.display();
}
}
Output:111 Karan
111 Karan

ចម្លងតម្លសនៃ object ទៅផ្សេងទៀតដោយមិនប្រើ constructor

class Student7{
int id;
String name;
Student7(int i,String n){
id = i;
name = n;
}
Student7(){}
void display(){System.out.println(id+” “+name);}

public static void main(String args[]){
Student7 s1 = new Student7(111,”Karan”);
Student7 s2 = new Student7();
s2.id=s1.id;
s2.name=s1.name;
s1.display();
s2.display();
}
}
Output:111 Karan

មេរៀនទី១៣: static keyword

ពាក្ស static keyword ត្រូវបានប្រើក្នុង java សម្រាប់គ្រប់គ្រង memory។ យើងអាចអនុវត្តន៍ static keyword ជាមួយអថេរ, methods, blocks និង class។ ដែល static អាចជា:
1) អថេរ static variable
ប្រសិនបើលោកអ្នក ប្រកាស អថេរដូចជា static វាដឹងថាអថេរ static ។
•    អថេរ static អាចប្រើដើម្បី ប្រើ property រួមនៃ objects ទាំងអស់ ឧទាហរណ៍ ឈ្មោះក្រុមហ៊ុន របស់ employees ឈ្មោះមហាវិទ្យាល័យនៃនិស្សិត ។
•    អថេរ static ទទួល memory នៅក្នុង class ពេលដែល class loading។
សារ:សំខាន់នៃអថេរ static
ស្វែងយល់ពីបញ្ហា ដោយមិនប្រើអថេរ static variable
class Student{
int rollno;
String name;
String college=”ITS”;
}
ឧបមាថាមាន  500 និស្សិតក្នុងមហាវិទ្យាល័យ , instance data នឹងទទួល memory កាលណា object ត្រូវបានបង្កើត។
static property ត្រូវបានចែកចាយ objects ទាំងអស់
ឧទាហរណ៍នៃអថេរ static variable
//Program of static variable

class Student8{
int rollno;
String name;
static String college =”ITS”;

Student8(int r,String n){
rollno = r;
name = n;
}
void display (){System.out.println(rollno+” “+name+” “+college);}

public static void main(String args[]){
Student8 s1 = new Student8(111,”Karan”);
Student8 s2 = new Student8(222,”Aryan”);

s1.display();
s2.display();
}
}
Output:111 Karan ITS
222 Aryan ITS
Javaកម្មវិធីនៃ counter ដោយមិនប្រើអថេរ static variable
ដូច្នេះ object និមួយៗនឹងមានតម្លៃ 1 ក្នុងអថេរ count។
class Counter{
int count=0;//will get memory when instance is created

Counter(){
count++;
System.out.println(count);
}

public static void main(String args[]){

Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();

}
}
Output:1
1
1

កម្មវិធី counter ដោយប្រើអថេរ static
ដូចដែលបាន ពន្យល់ខាងលើ static អថេរនឹងទទួល memory មួយគត់ ប្រសិនបើ object ផ្សេងទៀតផ្លាស់ប្តូរតម្លៃនៃអថេរ static variable។
class Counter2{
static int count=0;//will get memory only once and retain its value

Counter2(){
count++;
System.out.println(count);
}

public static void main(String args[]){

Counter2 c1=new Counter2();
Counter2 c2=new Counter2();
Counter2 c3=new Counter2();

}
}
Output:1
2
3
2) static method
ប្រសិនបើលោកអ្នកអនុវត្ត static keyword ជាមួយ method ផ្សេងទៀត វាដឹងថាដូចជា static method
•    static method កម្មសិទ្ធ class ដូចជា object របស់ class មួយ
•    static method អាចមិនប្រើ ត្រូវការបង្កើត class
•    static method អាចអនុញ្ញាត static data member និងអាចផ្លាស់ប្តូរតម្លៃរបស់វា។
ឧទាហរណ៍នៃ static method
//Program of changing the common property of all objects(static field).

class Student9{
int rollno;
String name;
static String college = “ITS”;

static void change(){
college = “BBDIT”;
}

Student9(int r, String n){
rollno = r;
name = n;
}

void display (){System.out.println(rollno+” “+name+” “+college);}
public static void main(String args[]){
Student9.change();

Student9 s1 = new Student9 (111,”Karan”);
Student9 s2 = new Student9 (222,”Aryan”);
Student9 s3 = new Student9 (333,”Sonoo”);

s1.display();
s2.display();
s3.display();
}
}
Output:111 Karan BBDIT
222 Aryan BBDIT
333 Sonoo BBDIT
ឧទាហរណ៍ផ្សេងទៀតនៃ static method //Program to get cube of a given number by static method

class Calculate{
static int cube(int x){
return x*x*x;
}

public static void main(String args[]){
int result=Calculate.cube(5);
System.out.println(result);
}
}
Output:125
ការកំណត់លក្ខខ័ណ្ឌសម្រាប់ static method
មានពីវិធីសម្រាប់កំណត់ static method:
static method មិនអាចប្រើ static data member ឬហៅ non-static method ដោយផ្ទាល់។
class A{
int a=40;//non static

public static void main(String args[]){
System.out.println(a);
}
}
Output:Compile Time Error

3)static block
•    ប្រើសម្រាប់ចាប់ផ្តើម static data member.
•    វាបានប្រត្តិបត្តិការ មុនពេល method ពេល class loading។
ឧទាហរណ៍នៃ static block
class A2{

static{System.out.println(“static block is invoked”);}

public static void main(String args[]){
System.out.println(“Hello main”);
}
}
Output:static block is invoked
Hello main
ប្រត្តិបត្តិកម្មវិធីដោយមិនប្រើ main() method?
static block អាចប្រើជាមួយ JDK មិនប្រើក្នុង JDK 1.7.
class A3{
static{
System.out.println(“static block is invoked”);
System.exit(0);
}
}
Output:static block is invoked (if not JDK7)
In JDK7 and above, output will be:
Output:Error: Main method not found in class A3, please define the main method as:
public static void main(String[] args)

មេរៀនទី១៤: ការប្រមូលផ្តុំ Aggregation

ប្រសិន class មានទំនាក់ទំនង entity ដូចជាការប្រមូលផ្តុំទំនាក់ទំនង។ Employee object ផ្ទុកពត៌មានជាច្រើនដូចជា id, name, emailId ។ល។ វាផ្ទុកឈ្មោះ object មួយឬច្រើន។ ដែលវាផ្ទុកព័ត៌មានផ្ទុកដូចជា city, state, country, zipcode បង្ហាញដូចខាងក្រោម
class Employee{
int id;
String name;
Address address;//Address is a class

}
នៅក្នុងករណីនេះ, Employee មាន entity មួយដូច្នេះ ទំនាក់ទំងគឺជា Employee។
ហេតុអ្វីប្រើ Aggregation?
ឧទាហរណ៍នៃ Aggregation
Javaនៅក្នុងឧទាហរណ៍ យើងបានបង្កើត Operation class ក្នុង Circle class.
class Operation{
int square(int n){
return n*n;
}
}

class Circle{
Operation op;//aggregation
double pi=3.14;

1.     double area(int radius){  
op=new Operation();
int rsquare=op.square(radius);//code reusability (i.e. delegates the method call).
return pi*rsquare;
}
public static void main(String args[]){
Circle c=new Circle();
double result=c.area(5);
System.out.println(result);
}
}  Output:78.5

ស្វែងយល់ពីន័យនៃការប្រើ Aggregation
Address.java
public class Address {
String city,state,country;
public Address(String city, String state, String country) {
this.city = city;
this.state = state;
this.country = country;
}
}
Emp.java
public class Emp {
int id;
String name;
Address address;

public Emp(int id, String name,Address address) {
this.id = id;
this.name = name;
this.address=address;
}

void display(){
System.out.println(id+” “+name);
System.out.println(address.city+” “+address.state+” “+address.country);
}

public static void main(String[] args) {
Address address1=new Address(“gzb”,”UP”,”Cambodia”);
Address address2=new Address(“gno”,”UP”,” Cambodia “);

Emp e=new Emp(111,”varun”,address1);
Emp e2=new Emp(112,”arun”,address2);
e.display();
e2.display();
}
}
Output:111 varun
gzb UP Cambodia
112 arun
gno UP Cambodia
Download ឧទាហរណ៍នេះ

មេរៀនទី១៥: Method Overriding

ប្រសិនបើ subclass (class កូន) ដែលមាន method ដូចគ្នាបានប្រកាសនៅក្នុង class មេ វាគឺជា method overriding។ ប្រសិនបើ subclass បែងចែកលក្ខណ:ពិសេស នៃការអនុវត្តន៍ របស់ method  ដែលបានផ្តល់អោយទៅ class មេ។
អត្ថប្រយោជន៍នៃការប្រើ Method Overriding
•    Method Overriding ត្រូវបានប្រើដើម្បីផ្តល់ការអនុវត្តពិសេសនៃ method ដែលបានផ្តល់ដោយ super class។
•    Method Overriding ត្រូវបានប្រើសម្រាប Runtime

តួនាទីសម្រាប់ Method Overriding
1.    method ត្រូវតែមានឈ្មោះដូច ក្នុង parent class
2.    method ត្រូវតែមានឈ្មោះដូច parameter ដូចក្នុង parent class.
3.    ត្រូវតែជា IS-A relationship (inheritance)។
ស្វែងយល់ពីបញ្ហាដោយមិនប្រើ method overriding
class Vehicle{
void run(){System.out.println(“Vehicle is running”);}
}
class Bike extends Vehicle{

public static void main(String args[]){
Bike obj = new Bike();
obj.run();
}
}
Output:Vehicle is running
ឧទាហរណ៍នៃ method overriding
ក្នុងឧទាហរណ៍ នេះបានកំណត់ រត់ method ក្នុង subclass កំណត់ក្នុង parent class ប៉ុន្តែវាអនុវត្តចំនួនខ្លះ។ ឈ្មោះ name និង parameter នៃ method គឺដូចនឹង IS-A relationship រវាងបណ្តា classes។
class Vehicle{
void run(){System.out.println(“Vehicle is running”);}
}
class Bike2 extends Vehicle{
void run(){System.out.println(“Bike is running safely”);}

public static void main(String args[]){
Bike2 obj = new Bike2();
obj.run();
}
Output:Bike is running safely

ឧទាហរណ៍ពិតនៃ Java Method Overriding
Javaclass Bank{
int getRateOfInterest(){return 0;}
}

class SBI extends Bank{
int getRateOfInterest(){return 8;}
}

class ICICI extends Bank{
int getRateOfInterest(){return 7;}
}
class AXIS extends Bank{
int getRateOfInterest(){return 9;}
}

class Test2{
public static void main(String args[]){
SBI s=new SBI();
ICICI i=new ICICI();
AXIS a=new AXIS();
System.out.println(“SBI Rate of Interest: “+s.getRateOfInterest());
System.out.println(“ICICI Rate of Interest: “+i.getRateOfInterest());
System.out.println(“AXIS Rate of Interest: “+a.getRateOfInterest());
}
}
Output:
SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9

មេរៀនទី១៦: Covariant Return

ប្រភេទ covariant return ដែលជា return type ប្រហាក់ប្រហែលគ្នាក្នុង subclass។

ឧទាហរណ៍នៃ Covariant Return Type

class A{

A get(){return this;}

}

class B1 extends A{

B1 get(){return this;}

void message(){System.out.println(“welcome to covariant return type”);}

public static void main(String args[]){

new B1().get().message();

}

}

Output:welcome to covariant return type

.

 

 

មេរៀនទី១៧: super keyword

super គឺយោងតាមអថេរ ដែលត្រូវបានប្រើ សម្រាប់ parent class object។
ប្រើ super Keyword
1.    super ត្រូវបានប្រើសម្រាប់អថេរ parent class។
2.    super() ត្រូវបានប្រើសម្រាប់ដំឡើង parent class constructor។
1) បញ្ហាមិនប្រើ super keyword
class Vehicle{
int speed=50;
}

class Bike3 extends Vehicle{
int speed=100;

void display(){
System.out.println(speed);//will print speed of Bike
}
public static void main(String args[]){
Bike3 b=new Bike3();
b.display();

}
}
Output:100

ដំណោះស្រាយពេលប្រើ super keyword
//example of super keyword  

class Vehicle{
int speed=50;
}

class Bike4 extends Vehicle{
int speed=100;

void display(){
System.out.println(super.speed);//will print speed of Vehicle now
}
public static void main(String args[]){
Bike4 b=new Bike4();
b.display();

}
}
Output:50
2) super ប្រើដើម្បី parent class constructor
លោកអ្នកអាចប្រ super keyword ដើម្បីដំលើង parent class constructor ដូចខាងក្រោមនេះ:
class Vehicle{
Vehicle(){System.out.println(“Vehicle is created”);}
}

class Bike5 extends Vehicle{
Bike5(){
super();//will invoke parent class constructor
System.out.println(“Bike is created”);
}
public static void main(String args[]){
Bike5 b=new Bike5();

}
}
Output:Vehicle is created
Bike is created
super() ត្រូវបានបន្ថែមទៅក្នុង class constructor និមួយៗដោយស្វ័យប្រវត្តិដោយ compiler។
Javaដូចយើងដឹងថា default constructor ត្រូវបានផ្តល់ compiler ដោយស្វ័យប្រវត្តិ វាបន្ថែម super() សម្រាប់ statement ដំបូង។ ប្រសិនបើលោកអ្នក កំពុងបង្កើត constructor របស់អ្នកដោយផ្ទាល់ លោកអ្នកមិនប្រើ () ឬ super() ដូចជា statement ដំបូង ដែល compiler នឹងផ្តល់ super() ។
ឧទាហរណ៍នៃ super keyword កាលណា super() ត្រូវបានផ្តល់ដោយ compiler ។
class Vehicle{
Vehicle(){System.out.println(“Vehicle is created”);}
}

class Bike6 extends Vehicle{
int speed;
Bike6(int speed){
this.speed=speed;
System.out.println(speed);
}
public static void main(String args[]){
Bike6 b=new Bike6(10);
}
}
Output:Vehicle is created
10
3) super អាចប្រើជាមួយ parent class method។
super keyword អាចប្រើ parent class method វានឹងប្រើក្នុងករណីផ្ទុក subclass ដូចជា method ដូច parent class បង្ហាញឧទាហរណ៍ខាងក្រោម:
class Person{
void message(){System.out.println(“welcome”);}
}

class Student16 extends Person{
void message(){System.out.println(“welcome to java”);}

void display(){
message();//will invoke current class message() method
super.message();//will invoke parent class message() method
}

public static void main(String args[]){
Student16 s=new Student16();
s.display();
}
}
Output:welcome to java
welcome

ក្នុងករណីនេះ មិនមាន method ក្នុង subclass ដូចជា parent, វាមិនត្រូវការប្រើ super។ ក្នុងឧទាហរណ៍នេះ បានអោយ message() method ពី Student class ប៉ុន្តែ Student class មិនមាន message() method ដូច្នេះលោកអ្នក អាចហៅផ្ទាល់ message() method។
កម្មវិធីករណីមិនប្រើ super
class Person{
void message(){System.out.println(“welcome”);}
}

class Student17 extends Person{

void display(){
message();//will invoke parent class message() method
}

public static void main(String args[]){
Student17 s=new Student17();
s.display();
}
}
Output:welcome

មេរៀនទី១៨: Final Keyword

final keyword ក្នុងកម្មវិធី java ត្រូវបានប្រើដើម្បីកំណត់ user ដែល final keyword អាចប្រើក្នុង context ច្រើន:
1.    អថេរ variable
2.    method
3.    class
ពាក្ស final keyword អាចអនុវត្តជាមួយអថេរជាច្រើន ហើយអថេរ final ដែលមិនមានតម្លៃ វាត្រូវបានហោះអថេរ blank final variable ឬមិនអាចចាប់ផ្តើមអថេរ final variable។
Java1) អថេរ final variable
ប្រសិនបើ លោកអ្នកបង្កើតអថេរដូចជា final, លោកអ្នកអាចប្តូរ final variable។
ឧទាហរណ៍នៃ final variable
class Bike9{
final int speedlimit=90;//final variable
void run(){
speedlimit=400;
}
public static void main(String args[]){
Bike9 obj=new  Bike9();
obj.run();
}
}//end of class
Output:Compile Time Error

2) final method
ប្រសិនបើ លោកអ្នកបង្កើត method មួយចំនួនដូចជា final លោកអ្នកមិនអាច override លើវា
ឧទាហរណ៍នៃ final method
class Bike{
final void run(){System.out.println(“running”);}
}

class Honda extends Bike{
void run(){System.out.println(“running safely with 100kmph”);}

public static void main(String args[]){
Honda honda= new Honda();
honda.run();
}
}
Output:Compile Time Error

3) final class
ប្រសិនបើលោកអ្នកបង្កើត class មួយចំនួនដូចជា final, លោកអ្នកមិនអាច extend វា។
ឧទាហរណ៍នៃ final class
1.    final class Bike{}
2.
3.    class Honda1 extends Bike{
4.      void run(){System.out.println(“running safely with 100kmph”);}
5.
6.      public static void main(String args[]){
7.      Honda1 honda= new Honda();
8.      honda.run();
9.      }
10.    }
Output:Compile Time Error

Q) Is final method inherited?
Ans) Yes, final method is inherited but you cannot override it. For Example:
1.    class Bike{
2.      final void run(){System.out.println(“running…”);}
3.    }
4.    class Honda2 extends Bike{
5.       public static void main(String args[]){
6.        new Honda2().run();
7.       }
8.    }
Output:running…

ឧទាហរណ៍នៃ blank final variable
1.    class Student{
2.    int id;
3.    String name;
4.    final String PAN_CARD_NUMBER;
5.    …
6.    }
យើងអាចចាប់ផ្តើមអថេរ blank final variable?
class Bike10{
final int speedlimit;//blank final variable

Bike10(){
speedlimit=70;
System.out.println(speedlimit);
}

public static void main(String args[]){
new Bike10();
}
}
Output:70

អថេរ static blank final
អថេរ static final មិនអាចចាប់ផ្តើមការប្រកាស ដូចចាអថេរ static blank final variable. It can be initialized only in static block.
ឧទាហរណ៍នៃ static blank final variable
class A{
static final int data;//static blank final variable
static{ data=50;}
public static void main(String args[]){
System.out.println(A.data);
}
}

ប៉ារ៉ាម៉ែត្រ final ជាអ្វី?
ប្រសិនបើប្រកាសប៉ារ៉ាម៉ែត្រ final លោកអ្នកអាចផ្លាស់ប្តូរតម្លៃវា
class Bike11{
int cube(final int n){
n=n+2;//can’t be changed as n is final
n*n*n;
}
public static void main(String args[]){
Bike11 b=new Bike11();
b.cube(5);
}
}
Output:Compile Time Error

មេរៀនទី១៩: Runtime Polymorphism

Runtime polymorphismDynamic Method Dispatch គឺដំណើរការហៅ call ទៅលើ method ត្រូវបានដោះស្រាយពេល runtime ខណ:ពេល compile។

Upcasting

កាលណាអថេរ Parent class យោងតាម object នៃ Child class
Javaclass A{}
class B extends A{}
A a=new B();//upcasting

Example of Runtime Polymorphism
ក្នុងឧទាហរណ៍នេះ យើងបង្កើតពីរ classes Bike និង Splendar ដែល Splendar class ពង្រីក Bike class ហើយ overrides លើវា run() method។  យើងហៅ run method ដោយអថេរ reference នៃ Parent class។
class Bike{
void run(){System.out.println(“running”);}
}
class Splender extends Bike{
void run(){System.out.println(“running safely with 60km”);}

public static void main(String args[]){
Bike b = new Splender();//upcasting
b.run();
}
}
Output:running safely with 60km.
ឧទាហរណ៍ SBI, ICICI និង AXIS banks នឹងផ្តល់ 8%, 7% និង 9% តម្លៃការប្រាក់។
Javaclass Bank{
int getRateOfInterest(){return 0;}
}

class SBI extends Bank{
int getRateOfInterest(){return 8;}
}

class ICICI extends Bank{
int getRateOfInterest(){return 7;}
}
class AXIS extends Bank{
int getRateOfInterest(){return 9;}
}

class Test3{
public static void main(String args[]){
Bank b1=new SBI();
Bank b2=new ICICI();
Bank b3=new AXIS();
System.out.println(“SBI Rate of Interest: “+b1.getRateOfInterest());
System.out.println(“ICICI Rate of Interest: “+b2.getRateOfInterest());
System.out.println(“AXIS Rate of Interest: “+b3.getRateOfInterest());
}
}
Output:
SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9

Runtime Polymorphism ជាមួយចំនួនទិន្នន័យ data member
Method មិនត្រូវបាន override លើ data members, ដូច្នេះ runtime polymorphism មិនអាចសម្រេច ដោយ data members។

តួនាទី: Runtime polymorphism មិនអាចសំរេច ដោយ data members។
class Bike{
int speedlimit=90;
}
class Honda3 extends Bike{
int speedlimit=150;

public static void main(String args[]){
Bike obj=new Honda3();
System.out.println(obj.speedlimit);//90
}
Output:90
Runtime Polymorphism ជាមួយ Multilevel Inheritance
class Animal{
void eat(){System.out.println(“eating”);}
}

class Dog extends Animal{
void eat(){System.out.println(“eating fruits”);}
}

class BabyDog extends Dog{
void eat(){System.out.println(“drinking milk”);}

public static void main(String args[]){
Animal a1,a2,a3;
a1=new Animal();
a2=new Dog();
a3=new BabyDog();

a1.eat();
a2.eat();
a3.eat();
}
}
Output: eating
eating fruits
drinking Milk

ព្យាយាមជាមួយលទ្ធផល Output
class Animal{
void eat(){System.out.println(“animal is eating…”);}
}

class Dog extends Animal{
void eat(){System.out.println(“dog is eating…”);}
}

class BabyDog1 extends Dog{
public static void main(String args[]){
Animal a=new BabyDog1();
a.eat();
}}
Output: Dog is eating

មេរៀនទី២០: Static Dynamic Binding

ការភ្ជាប់ method call ទៅ method body ដូចជា binding។
មានពីរប្រភេទនៃ binding
1.    static binding
2.    dynamic binding
1) បណ្តាអថេរ មាន type មួយ
1.    int data=30;
Here data variable is a type of int.
2) References មាន type មួយ
class Dog{
public static void main(String args[]){
Dog d1;//Here d1 is a type of Dog
}
}
3) Objects មាន type មួយ
An object is an instance of particular java class,but it is also an instance of its superclass.
class Animal{}

class Dog extends Animal{
public static void main(String args[]){
Dog d1=new Dog();
}
}

static binding
ឧទាហរណ៍ static binding
class Dog{
private void eat(){System.out.println(“dog is eating…”);}

public static void main(String args[]){
Dog d1=new Dog();
d1.eat();
}
}

Dynamic binding
កាលណា object ត្រូវបានកំណត់ពេលរត់ run-time, វាគឺជា dynamic binding។
ឧទាហរណ៍  dynamic binding
class Animal{
void eat(){System.out.println(“animal is eating…”);}
}

class Dog extends Animal{
void eat(){System.out.println(“dog is eating…”);}

public static void main(String args[]){
Animal a=new Dog();
a.eat();
}
}
Output:dog is eating…