មេរៀនទី៣: Program-internal
ក្នុងទំព័រពីមុន យើងបានរៀនអំពី កម្មវិធីដំបូង ពីរបៀប compile រត់កម្មវិធី java program ដំបូង។
ទីនេះយើង នឹងរៀនអំពីការ compiling នឹងរត់ដំណើរការ java program។ មានហេតុការណ៍ អ្វីកើត ឡើង
ពេលរត់ compile time?ពេល compile time, java file ត្រូវបាន compile ដោយ Java Compiler ហើយ
ប្តូរកូដ java code ក្នុង bytecode។
មានហេតុការណ៍អ្វីពេល runtime?
Classloader: គឺជា subsystem របស់ JVM ដែលប្រើសម្រាប់ load class file។
ពេល runtime, មានជំហានខាងក្រោម:
Bytecode Verifier: ឆែកកូដ code fragment អាចចូលទៅ object។
Interpreter: អាន bytecode stream ហើយប្រត្តិបត្តិការ execute។
Q) តើលោកអ្នកអាចរក្សា save java source file ឈ្មោះផ្សេងជាងឈ្មោះ class name?
លោកអ្នកអាចមើលបង្ហាញខាងក្រោម:
To compile: javac Hard.java
To execute: java Simple
Q) តើលោកអ្នកអាចមាន class ច្រើនក្នុង java source file?
មើលការបង្ហាញខាងក្រោម:
មេរៀនទី៤: របៀបបង្កើត path
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
អនុញ្ញាតមើលការដំឡើងដូចខាងក្រោម:
2) របៀបបង្កើត 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
ចុចលើ advanced tab
ចុចលើ environment variables
ចុចលើ new tab of user variables
សរសេរឈ្មោះ path in variable name
Copy the path of bin folder
7)paste path of bin folder in variable value
8)click on ok button
9)click on ok button
មេរៀនទី៥: JDK, JRE និង JVM
ភាពខុសគ្នារវាង JDK, JRE និង 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។
JDK
JDK គឺជាពាក្ស Java Development Kit វាមានផ្ទុក JRE + development tools។
មេរៀនទី៦: JVM
តើ 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 ។ល។
1) 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
អថេរ
អថេរគឺជាឈ្មោះ ស្ថិតនៅក្នុង memory។
1. int data=50;//Here data is variable
ប្រភេទអថេរ
មានបីប្រភេទអថេរក្នុង java
• អថេរតំបន់ local variable
• អថេរ instance variable
• អថេរ static variable
អថេរ 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
ប្រព័ន្ធយូនីកូដ Unicode System
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 គឺជាស្តង់ដាអក្សអន្តរជាតិ 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
ប្រយោជន៍ក្នុងកម្មវិធី Programs:
postfix
expr++ expr–
unary
++expr –expr +expr -expr ~ !
multiplicative
* / %
additive
+ -
shift
<< >> >>>
relational
< > <= >= instanceof
equality
== !=
bitwise AND
&
bitwise exclusive OR
^
bitwise inclusive OR
|
logical AND
&&
logical OR
||
ternary
? :
assignment
= += -= *= /= %= &= ^= |= <<= >>= >>>=
ដូចជាចំនួន ហ្វាក់តូរីយ៉ែល 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
OOPs (Object Oriented Programming System)
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។ វាផ្តល់កូដ។
អត្ថប្រយោជន៍នៃ OOPs លើភាសា Procedure-oriented programming language
1) OOPs បង្កើតការអភិវឌ្ឈន៍ និងថែរក្សា maintenance ក្នុងភាសា
Procedure-oriented programming language វាមិនងាយគ្រប់គ្រង ប្រសិនបើកូដ
កើនឡើង។
2)OOPs ផ្តល់ទិន្នន័យ ក្នុងភាសា Procedure-oriented programming language អាចចូលពីគ្រប់កន្លែង។
សារ:ប្រយោជន៍នៃឈ្មោះអនុសញ្ញា ក្នុង 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
Object ក្នុង Java
Class ក្នុង 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
method 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
ឧទាហរណ៍នៃ 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.
1. ឈ្មោះ Constructor name ត្រូវដូចឈ្មោះ class name
2. Constructor មិនមាន return type
បណ្តាប្រភេទនៃ constructors
មានពីរប្រភេទ constructors:
1. default constructor (no-arg constructor)
2. ប៉ារ៉ាម៉ែត្រ constructor
1) 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។
ឧទាហរណ៍នៃ 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 ?
ចម្លងតម្លៃនៃ object ទៅ constructor in C++
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.
មានវិធីច្រើនដើម្បី 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
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
កម្មវិធីនៃ 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 Employee{
int id;
String name;
Address address;//Address is a class
…
}
នៅក្នុងករណីនេះ, Employee មាន entity មួយដូច្នេះ ទំនាក់ទំងគឺជា Employee។
ហេតុអ្វីប្រើ Aggregation?
ឧទាហរណ៍នៃ Aggregation
នៅក្នុងឧទាហរណ៍ យើងបានបង្កើត 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
អត្ថប្រយោជន៍នៃការប្រើ 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
class 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។
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 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។
ដូចយើងដឹងថា
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
1. អថេរ variable
2. method
3. class
ពាក្ស final keyword អាចអនុវត្តជាមួយអថេរជាច្រើន ហើយអថេរ final
ដែលមិនមានតម្លៃ វាត្រូវបានហោះអថេរ blank final variable
ឬមិនអាចចាប់ផ្តើមអថេរ final variable។
1) អថេរ 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
Upcasting
កាលណាអថេរ Parent class យោងតាម object នៃ Child class
class 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% តម្លៃការប្រាក់។
class 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។
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…
0 comments:
Post a Comment