Thứ Sáu, 30 tháng 6, 2017

[Thực tập] Buổi 4: Kết nối JDBC and Hibernate

1. Tổng quan về JDBC?
JDBC (Java Database connectivity) là một chuẩn API kết nối giữa ngôn ngữ lập trình JAVA với các hệ quản trị cơ sở dữ liệu khác nhau.Sử dụng JDBC, có thể thực hiện các tác vụ cơ bản với cơ sở dữ liệu như: tao, thêm sửa xóa cơ sở dữ liệu, thêm sửa xóa bản ghi..
2. Các bước kết nối với JDBC?
Có 5 bước để kết nối với cơ sở dữ liệu: Đây là ví dụ về kết nối dữ liệu tới cơ sở dữ liệu là Oracle.
-  Bước 1: Import các package thuộc về JDBC. 
Ví dụ: 
import java.sql.*;

- Bước 2: Load các driver của JDBC
Dùng phương thức Class.forName(String ten_lop)
Ví dụ:
  Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

 - Bước 3: Tạo kết nối tới cơ sở dữ liệu: 
Ví dụ:
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","password"); 

- Bước 4: Thực hiện một truy vấn  sử dụng
 public ResultSet executeQuery(String= sql)throws SQLException 
Ví dụ:
ResultSet rs=stmt.executeQuery("select * from emp"); 
while(rs.next()){   
         System.out.println(rs.getInt(1)+" "+rs.getString(2)); 
}  


3. Một số câu lệnh statement interface trong JDBC

  • public ResultSet executeQuery(String sql)
    • Input: 1 câu lệnh sql
    • Output: 1 đối tượng ResultSet đơn
  • public int executeUpdate(String sql)
    • Input: Có thể là 1 lệnh IINSERT, UPDATE, DELETE,...
    • Output: Không trả về gì cả.
  • public boolean execute(String sql)
    • Input: 1 lệnh sql
    • Output: Nhiều kết quả
  • public int[] executeBatch(String sql)
    • Input: Có thể là 1 câu lệnh Sql
    • Output: 
      • Một số >=0, chỉ ra số dòng đã bị tác động
      • SUCCESS_NO_INFO chỉ ra lệnh đã thành công nhưng số hầng bị tác động thì chưa biết
      • EXECUTE_FAILED chỉ ra câu lệnh bị lỗi
  • void close() 
    • Đóng đối tượng statement
4. PreparedStatement() 
Đây là một interface con của statement, giúp thực thi các câu lệnh được tham số hóa lặp đi lặp lại một cách nhanh chóng. Ví dụ:
String sql="INSERT INTO ten_bang values(?,?,?)"; 
Khi thực thi câu lệnh thì câu lệnh được biên dịch một lần, các tham số được thay thế vào dấu ? trong những lần gọi setXXX() tiếp theo. Như vậy việc thực thi sẽ nhanh hơn vì câu lệnh chỉ được biên dịch một lần cho tất cả các giá trị tham số còn lại.

Ví dụ:
PreparedStatement pstm = null;
String SQL = "insert into lytuantest(username,password) values (?,?)";
pstm = con.prepareStatement(SQL);
pstm.setString(1,"abc");
pstm.setString(2, "abc");\
pstm.executeUpdate();
con.close();

5. ResultSet Interface()

  ResultSet là kết quả trả về từ các câu lệnh cơ sở dữ liệu, Theo mặc định thì ResultSet chỉ có thể di chuyển thuận về trước, không thể chỉnh sửa. Để làm cho đối tượng có thể di chuyển về trước hoặc về sau có thể truyền một số tham số vào trong createStatement(int , int). Sau đây là một số cấu hình cần biết:
ResultSet.TYPE_FORWARD_ONLY: chỉ cho phép di chuyển về trước.
ResultSet.TYPE_SCROLL_INSENSITIVE:
ResultSet.TYPE_CROLL_SENSITIVE:


Thứ Năm, 29 tháng 6, 2017

[Thực tập] Buổi 3: Ôn tập kiến thức nền tảng Java

1. Generic
Khi muốn viết một phương thức dùng chung cho tất cả các kiểu String, Integer, Char... thì Generic là một kỹ thuật giúp thực hiện điều đó. Một ví dụ:
public class GenericMethodTest
{
   // phuong thuc generic co ten la printArray                         
   public static < E > void printArray( E[] inputArray )
   {
      // Hien thi cac phan tu mang              
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }

    public static void main( String args[] )
    {
        // Tao cac mang Integer, Double va Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

        System.out.println( "Mang intArray bao gom:" );
        printArray( intArray  ); 

        System.out.println( "\nMang doubleArray bao gom:" );
        printArray( doubleArray ); 

        System.out.println( "\nMang charArray bao gom:" );
        printArray( charArray ); 
    } 
}
Kết quả:
1 2 3 4 5
1.1 2.2 3.3 4.4
H E L L O
2. Serialization
 Serialization là kỹ thuật ghi các trạng thái dữ liệu của một đối tượng vào một luồng byte. Khi đó dữ liệu của đối tượng sẽ được ghi lại một cách có thứ tự sắp xếp và đọc ra một cách dễ dàng.
 Cú pháp là lớp đối tượng phải implement Serilalization

Ví dụ:
Có 3 lớp Employee, SerializationDemo, DeserializeDemo:

Lớp Employee:
public class Employee implements java.io.Serializable{
       public String name;
       public String address;
       public transient int SSN;
       public int number;
       public void mailCheck(){
           System.out.println("Gui mail toi "+name+" tai dia chi "+address);
       }

    public Employee(String name, String address,int SSN, int number) {
        this.name = name;
        this.address = address;
        this.SSN = SSN;
        this.number = number;
    }
   
      
}
 

 Lớp  SerializationDemo
 class SerializationDemo {
    public static void main(String args[]) throws IOException{
 
            FileOutputStream fileOut = null;
            Employee e = new Employee("Tuan", "Ha noi", 123, 123);
            Employee e1 = new Employee("Ngoan", "Ha noi", 120, 123);
            Employee e2 = new Employee("Chung", "Thai Binh", 100, 100);
            fileOut = new FileOutputStream("employee.ser");
            ObjectOutputStream out= new ObjectOutputStream(fileOut);
            out.writeObject(e);
            out.writeObject(e1);
            out.writeObject(e2);
            fileOut.close();
            System.out.println("Du lieu da Serialize duoc luu tru trong employee.ser");
         
    }

}

 Lớp DeSerialization
public class DeserializeDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException{
        Employee e = null;
        Employee e1 = null;
        Employee e2 = null;
        FileInputStream fileIn = new FileInputStream("employee.ser");
        ObjectInputStream in = new ObjectInputStream(fileIn);
        e = (Employee) in.readObject();
        e1 = (Employee) in.readObject();
       
        e2 = (Employee) in.readObject();
      
        fileIn.close();
        System.out.println(e.name+" "+e.address+" "+e.SSN+" "+e.number);
        System.out.println(e1.name+" "+e1.address+" "+e1.SSN+" "+e1.number);
        System.out.println(e2.name+" "+e2.address+" "+e2.SSN+" "+e2.number);
    }
}

3.Thread
Là kỹ thuật cho phép thực hiện nhiều tác vụ đồng thời trong Java. Một chương trình Java có thể chia làm nhiều phần và cùng chạy đồng thời, mỗi phần xử lý một tác vụ khác nhau, Mục đích để tận dụng tài nguyên, nhất là khi máy tính có nhiều CPU.

Có hai cách để cài đặt một lớp là Thread:
- implements Runnable
 - extends Thead


Ví dụ 1: Cài đặt thread bằng cách implements Runnable:
class RunnableDemo implements Runnable {
   private Thread t;
   private String threadName;
   
   RunnableDemo( String name){
       threadName = name;
       System.out.println("Creating " +  threadName );
   }
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // De thread ngung trong choc lat.
            Thread.sleep(50);
         }
     } catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
     }
     System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start ()
   {
      System.out.println("Starting " +  threadName );
      if (t == null)
      {
         t = new Thread (this, threadName);
         t.start ();
      }
   }

}

public class TestThread {
   public static void main(String args[]) {
   
      RunnableDemo R1 = new RunnableDemo( "Thread-1");
      R1.start();
      
      RunnableDemo R2 = new RunnableDemo( "Thread-2");
      R2.start();
   }   
}
 
Ví dụ 2: Cài đặt thread bằng extends class Thread


class ThreadDemo extends Thread {
   private Thread t;
   private String threadName;
   
   ThreadDemo( String name){
       threadName = name;
       System.out.println("Creating " +  threadName );
   }
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // Let the thread sleep for a while.
            Thread.sleep(50);
         }
     } catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
     }
     System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start ()
   {
      System.out.println("Starting " +  threadName );
      if (t == null)
      {
         t = new Thread (this, threadName);
         t.start ();
      }
   }

}

public class TestThread {
   public static void main(String args[]) {
   
      ThreadDemo T1 = new ThreadDemo( "Thread-1");
      T1.start();
      
      ThreadDemo T2 = new ThreadDemo( "Thread-2");
      T2.start();
   }   
}

DaemonThread
  • Daemon Thread  dùng để cung cấp các dịch vụ cho các luồng người dùng. Nó sẽ bị JVM hủy khi không có Thread nào của user.
  • Daemon Thread có độ ưu tiên thấp 
  • Chú ý khi một thread start() rồi thì không được phép setDaemon() cho thread này nữa.
Ví dụ: 
Để hiểu rõ hơn về DaemonThread thì cùng xem ví dụ sau, mặc dù hàm run chạy vòng lặp vô hạn tuy nhiên khi vào chương trình thì kết trả in ra các dòng hello và bye chỉ nằm trong hữu hạn. Vì do các thread là daemon tự động bị JVM. 
 

Thứ Ba, 27 tháng 6, 2017

[Thực tập] Buổi 2: Ôn lại kiến thức Java nền tảng

1. Từ khóa final
- Từ khóa final khi dùng trước một biến thì biến đó là hằng số không thể thay đổi giá trị
- Từ khóa final khi dùng trước một phương thức thì phương thức đó không thể ghi đè
- Khi đặt một biến là final và không khởi tạo thì làm sao để thay đổi giá trị của nó:
    Có thể thay đổi giá trị của biến chỉ trong constructor.
- Một lớp là final thì không thể kế thừa.
- Một tham số có thể là final nhưng giá trị của nó không thể thay đổi được.

2. Đa hình
  - Đa hình là kỹ thuật dùng để thực hiện một hành động theo nhiều cách khác nhau.
  Ví dụ:

class Animal{  
void eat(){System.out.println("an");}  
}  
  
class Dog extends Animal{  
void eat(){System.out.println("an hoa qua");}  
}  
  
class BabyDog extends Dog{  
void eat(){System.out.println("uong sua");}  
  
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();  
}  
} 
 
Kết quả: 
an
an hoa qua
uong sua
 
Ví dụ 2:
class Animal{  
void eat(){System.out.println("animal dang an...");}  
}  
  
class Dog extends Animal{  
void eat(){System.out.println("dog dang an...");}  
}  
  
class BabyDog1 extends Dog{  
public static void main(String args[]){  
Animal a=new BabyDog1();  
a.eat();  
}} 
 
Kết quả:
animal dang an
dog dang an
dog dang an
 
Kết quả như vậy vì lớp BabyDog1 không overide phương thức ăn của lớp Dog. 
Do đó lướp BabyDog1 sẽ dùng phương thức của lớp Dog.
 
 
 
3. Upcasting và Downcasting
Ví dụ:
class Animal{}
class Dog extends Animal{}
class Test{
public static void main(String args[]){ 
Animal a = new Dog(); // upcasting
Dog c = (Dog) a; //downcasting

//Truong hop error
// Animal a1  = new Animal();
//Dog d   = (Dog)  a1;
}
Downcasting là kiểu của lớp con tham chiếu đến đối tượng của lớp cha.

4. Abstract
- Lớp abstract class sẽ không tạo được một đối tượng vì nó là lớp không được khởi tạo. Để sử dụng abstract class cần phải có một lớp con kế thừa nó.
- Một số lưu ý khi sử dụng abstract class:
  •  Khi lớp có một phương thức là abstract thì class đó phải được định nghĩa là abstract.
  •  Khi một lớp kế thừa một abstract class thì lớp đó phải cài đặt toàn bộ phương thức abstract trong lớp nó kế thừa hoặc là định nghĩa lớp là abstract.
  • Cách khai báo một phương thức là abstract: Phương thức đó sẽ có từ abstract ở trước kiểu của phương thức và không có cài đặt phương thức, không có dấu ngoặc nhọn. Ví dụ:
    public abstract class Employee
    {
       private String name;
       private String address;
       private int number;
       
       public abstract double computePay();
       
       //Phan con lai cua dinh nghia class
    }
    
    

5. Interface   
 - Interface chỉ bao gồm một tập các phương thức abstract. 
- Mặc định các phương thức trong interface là public abstract. Còn các thuộc tính mặc định là public,static, final.
- Một số điều khác biệt giữa interface và class:
  • Không thể khởi tạo interface
  • Không chứa bất cứ hàm construct nào
  • Không kế thừa từ một lớp, nó chỉ được cài đặt bởi lớp implements nó
  • Không có các trường ngoại trừ các trường là public vừa là static và final
  • Một interface có thể kế thừa từ nhiều interface khác.
  • Interface có thể cho phép đa kế thừa. Có nghĩa là một class có thể implements nhiều interface khác nhau.
6. Package
Package để làm gì, tại sao phải dùng package. Pagkage dùng để: 
  • Kiểm soát truy nhập .
  • Xóa bỏ các xung đột về đặt tên.  
7. Unboxing và AutoBoxing
 AutoBoxing là trường hợp tự động chuyển từ kiểu dữ liệu nguyên thuỷ sang kiểu dữ liệu lớp Wrapper
Ví dụ:
public class WrapperExample1{  
public static void main(String args[]){  
//Chuyen doi int thanh Integer  
int a=20;  
Integer i=Integer.valueOf(a);//Chuyen doi int thanh Integer  
Integer j=a;//Day la autoboxing, bay gio compiler se viet la Integer.valueOf(a)  
  
System.out.println(a+" "+i+" "+j);  
}} 
 
Ngược lại thì chuyển từ kiểu dữ liệu lớp Wrapper về kiểu dữ liệu nguyên thủy là Unboxing.

 
 

[Toeic] Bài 4

1_ Listening

2_Reading

Câu điều kiện

Điều kiện loại 0


If + S + V (hiện tại đơn), S + V (hiện tại đơn)

Cách dùng: Sự việc luôn đúng

Điều kiện loại 1

If S + V (ht đơn), S + will/may/must + DO/BE

Lược bỏ if trong đk loại 0 và 1 thì thay bằng Should và chuyển động từ để dạng nguyên thể

Ví dụ:

If she is late, she will be not allowed to enter.

Should she be late, ……

Nếu 1 vế của câu đk là mệnh lệnh (DO/Don’t Do/Please ….) thì mệnh đề if như loại 1 và 0

If you have any question, please ask me.

Câu điều kiện loại 2 (giả định ở hiện tại)

If S + V (qk đơn/were), S + would/could DO/BE

Chú ý:  Lược bỏ IF và đảo were lên trc chủ ngữ

If she were late, she would be fined.

Were she late, …..

If it were not for + N, …..

= without + N

= nếu không có cái gì ….

If it were not for his help, I couldn’t pass the exam.

Câu điều kiện loại 3 (giả định trong qk)

If S + had Pii, S + would/could have Pii

= had S Pii, ……

If it hadn’t rained, we would have gone out.

= had it not rained, ……

Câu điều kiện hỗn hợp

If S + had Pii, S + would/could Do/Be (now).

If he had left early, he would be here now.

Unless = if … not

If you don’t study hard, you will fail the exam.

Unless you study hard, …….

If (loại 0, 1) = as long as, provided that, providing that

I will lend you some money as long as you pay me back tomorrow.

5 nhóm Đại từ

Each other = one another

Sau động từ hoặc giới từ

Other + danh từ số nhiều = others (đại từ)

Những …. Khác

Another + danh từ số ít = another (đại từ)

Một … khác

The other + danh từ số nhiều = the others

Những …. Còn lại

The other + danh từ số ít = the other (đại từ)

Một …. Còn lại

Từ chỉ định

This/that + N số ít

These/those + N số nhiều

This/that/these/those còn là đại từ (chủ ngữ, tân ngữ)

Từ bổ nghĩa đứng trc danh từ

Những từ sau đây đi với danh từ số ít

A, an, one, each, every

Những từ sau đây đi với danh từ số nhiều

Many, several, few, a few, a number of, the number of

Những từ sau đây đi với danh từ không đếm đc

Much, little, a little, an amount of, the amount of

Những từ sau đi với danh từ số nhiều và dt không đếm đc

All, most, any, a lot of, some

Một số TH khác

Either of Ns

Neither of Ns

Each of Ns

One of Ns

Anything/someone/ nobody luôn là đại từ số ít




3_Vocabulary

Từ vựng liên uan đến công việc ở công trường xây dựng, nhà máy, nhà ga
1. construction site
2. under construction
3. operate the machine/ equiptment
4. pave the road
5. work with a took
6. use a took
7. wear protective glassess
8. push a wheelbarrow
9. paint a wall
10. climb up the ladder
11. lay bricks
12. building materials
13. heavy machinery

14. load boxes
15. unload boxes
16. load A into / onto B
17. carry a box
18. pile/ stack up the boxes
19. a pile / stack of boxes
20. warehouse

21. repair/ fix a car
22. check the engine
23. bend over a car
24. clean up the garage
25. cut the grass
26. mow the lawn
27. sweep/ clean the path



[Toeic] Bài 3

I_ Listening

II_ Grammar 
1. N (person) who/that + Verb
The man who/that gave me the ticket is my boss.
Tom, who gave me the ticket, is my boss. 

2. N(person) who/whom/that + S + Verb
The man who/whom/that you met at the party is my boss.
Tom, whom you met at the party, is my boss.

3. N (thing) which/that + Verb 
The car which/that is parked outside the building is mine.

4. N (thing) which/that + S + Verb 
The book which/that he gave me is very interesting. 

5. N1 whose N2 (N2 la cua N1) + Verb/S + Verb 
The man whose car is parked outside is my friend. 
The table whose legs are broken is being repaired. 

6. S + Verb, which + Verb(luon so it) 
She passed the exam, which surprised us. 

7. N (person) + gioi tu + whom + S + V 
The man to whom you talked at the party 
N (thing) + gioi tu + which + S + V 
The song to which I am listening 

8. The day/week/year when S + V 
The day when I first met her was very nice. 
The day on which I first met her was very nice.

9.  The place/house/… where S + V 
We visited the house where he was born. 
We visited the house in which he was born. 

10.  The reason why + S + V 
The reason why he quit the job is unknown. 
11.  The way S + V = how + S + V



Lược bỏ đại từ quan hệ 

  •      N (which/whom/that) + S + V
    •      The woman (whom) I met yesterday
  •       N who/that/which + V = N (who/that/which) + Ving(chủ động)/Pii (bị động)
    •      The car which is parked over there = The car parked over there
    •      The man who talked to you at the party = the man talking to you at the party 
    •      The cars which are made in Japan are expensive  = the car made in Japan …. 
  •       What không phải đại từ quan hệ. Những từ như what/who/when/where/why/how còn là từ để hỏi. Chúng đứng đầu mệnh đề danh ngữ theo cấu trúc sau:
    •      Đứng đầu câu làm từ để hỏi.
    •      Đứng sau động từ để làm tân ngữ.
    •       Ví dụ: 
      •       What he said was not true. 
      •       I don’t know where she lives.
Exercise
1. All the technical staff ... we employ, are fully trained professionals.
A. where
B. who
C. whose
D. which

Phân tích:  technical staff  là nhân viên kỹ thuật chỉ người và là tân ngữ của câu sau nên dùng who.

2. The processing factory,... we visited only last month, has temporarily shut down due to a mechanical fault.
A. where
B. what
C. which
D. whose

Phân tích: The processing factory chỉ tiến trình công nghiệp và làm tân ngữ cho câu thứ 2 nên chọn which, where loại vì  chỉ thay thế cho địa điểm, what loại vì chỉ đứng sau động từ hoặc đứng đầu câu, whose loại vì chỉ đứng giữa 2 danh từ,

3. The shift supervisor ... spoke to you is called Mr. Hughes.
A. that
B. which
C. whose
D. what

Phân tích: shift supervisor mang nghĩa người giám sát thay đổi nên giữa dấu ... phải là đại từ quan hệ chỉ người, chỉ có A là đúng nhất . which chỉ thay cho đồ vật, whose chỉ đứng giữa 2 danh từ.

4. The customer ... soup was cold was offered a discount of 10 percent.
A. which
B. who
C. that
D. whose

Phân tích; Đứng giữa 2 danh từ nên chọn whose, N1 + whose + N2 mang nghĩa N2 là của N1 . Trong câu này mang nghĩa món súp của khách hàng đã bị nguội đã được trừ 10 percent.

5. Nobody could remember the name of the restaurant ... we had dined the previous evening.
A. when
B. what
C. which
D. where

Phân tích: where dùng để thay cho địa điểm là nhà hàng ( the restaurant).

6. The trainee with ... you will be working is inexperienced, but very enthusiastic.
A. that
B. who
C. whom
D. whose

Phân tích: Sau giới từ chỉ có thể là whom/which. Ma ở đây trainee chỉ người được hướng dẫn nên chọn whom.

7. We were rather suprised to find the report ... we received from the supplier was full of criticism.
A.  that
B. where
C. whose
D. what

Phân tích: that/which thay cho report (báo cáo). Ở đây không có which nên chọn that.

8. The accountant .... figures you queried has replied by email, giving a full explanation.
A. who
B. whom
C. whose
D. what

Phân tích: Đại từ quan hệ đứng giữa 2 danh từ.

9.. The investigators were surprised by ... they found during the inspection.
A. what
B. that
C. which
D. where

Phân tích:

10. The complex merger finally went through, ... was a great relief to both.
A. what
B. which
C. that
D. where

Phân tích: which thay cho mệnh đề phía trước. 
III_Vocabulary

Từ vựng liên quan đến công việc ở công ty
1. work on the documents
2. do some paperworks
3. sign a document
4. organize the documents
5. handle some documents
6. look through a report
7. take/ make notes
8. write on a piêc of paper
9. work at a desk
10. operate a computer
11. look at a screen/ monitor
12. stare at a monitor
13. work on a laptop
14. make a copy
15. use a copier / copy machine
 16. talk on the telephone

17. make/ give a presentation
18. address the audience
19. speak/talk into a microphone
20. point at the screen
21. attend a conference
22. watch a presentation
23. listen to the speaker
24. occupied
25. unoccupied

26. face/look at each other
27. wear a suit
28. shake hands
29 exchange business cards

Thứ Hai, 26 tháng 6, 2017

[Thực tập] Buổi 1: Ôn lại kiến thức nền tảng Java

1. Toán tử instance of
Toán tử instance of được dùng để kiểm tra đối tượng bên trái có phải thuộc kiểu của đối tượng bên phải hay không.
Ví dụ:
 String name = "Tuan";
boolean result = name instanceof String;
System.out.println(result);
//true 

2. Pattern Singeton:
Pattern Singeton được sử dụng trong các trường hợp chỉ duy nhất 1 đối tượng được tạo ra và dùng để sử lý tác vụ. Ví dụ như kết nối tới database, tại 1 thời điểm chỉ có duy nhất một kết nối tới database. Như vậy trường hợp này nên dùng Singeton.

Cách cài đặt Singeton:
public class ClassicSingleton {

   private static ClassicSingleton instance = null;
   private ClassicSingleton() {
      // Exists only to defeat instantiation.
   }

   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance; 

 }
}



3. Phương pháp  truyền nhiều tham số cùng kiểu vào trong một phương thức:

Tương tự truyền một mảng vào trong một phương thức thì đây là một cách mà có thể truyền được nhiều tham số vào trong một phương thức:



public class VarargsDemo {

   public static void main(String args[]) {
      // Goi phuong thuc voi bien args  
   printMax(34, 3, 3, 2, 56.5);
      printMax(new double[]{1, 2, 3});
   }

   public static void printMax( double... numbers) {
   if (numbers.length == 0) {
      System.out.println("Khong co tham so nao duoc truyen");
      return;
   }

   double result = numbers[0];

   for (int i = 1; i <  numbers.length; i++)
      if (numbers[i] >  result)
      result = numbers[i];
      System.out.println("Gia tri max la " + result);
   }
}
 

4. Phương thức finalize():
Là phương thức được gọi trước khi Garbage collector tiến hành hủy đối tượng. Phương thức này được sử dụng để chắc chắn rằng một đối tượng sẽ được hủy hoàn toàn.


5. Nạp chồng phương thức:
Nạp chồng phương thức giúp dễ hiểu hơn, ví dụ cùng là hàm sum nhưng là sum của 2 tham số và sum của 3 tham số nếu phải viết thì viết sum1(a, b) sum2(a,b,c) thì sẽ gây khó khăn trong quá trình sử dụng. Vì vậy để dễ hiểu thì người ta có thể dùng nạp chồng phương thức.
Có những dạng nạp chồng phương thức sau:
- Khác nhau về số lượng tham số
- Khác nhau về kiểu tham số chuyền vào
Chú ý:
- Không thể nạp chồng phương thức đối với kiểu trả về vì sẽ gây ra lỗi lưỡng nghĩa. ví dụ float sum(int a, int b), và int sum(int a, int b) khi đó giả sử int result = sum(a,b) thì phương thức nào sẽ được gọi. Tuy nhiên nếu là float sum(a,b) và int sum(a,b,c) thì lại được. 
- Phương thức main có thể nạp chồng như những phương thức khác vào gọi trong hàm main chính như bình thường.


6. Biến Static ? Tại sao phải sử dụng biến static?
Biến static được khai báo với  từ khóa static trước tên biến. Mục đích sử dụng biến static là để chương trình sử dụng bộ nhớ hiệu quả hơn khi mà biến static chỉ được khai báo một lần trong heap và được sử dụng lại cho các đối tượng khác nhau. Ví dụ: Đối tượng student đều là sinh viên trường Đại học Công nghệ thì biến trạng thái college đều là công nghệ. Vì thế để không phải tạo đi tạo lại biến college cùng chung một giá trị thì người ta dùng từ khóa static. 
Ví dụ: static String college ="Cong nghe"

Đối với phương thức static cũng được khai báo từ static trước tên phương thức, khi đó phương thức sẽ là của chung của lớp, khi gọi đến phương thức không cần tạo đối tượng chỉ cần dùng chính tên lớp gọi cũng được.


Một ví dụ để minh họa:


class Counter{  
int count=0; //se lay bo nho (memory) khi bien instance duoc tao  
 //Ket qua thuc hien chuong trinh hien ra 3 so 1 o 3 dong 
Counter(){  
count++;  
System.out.println(count);  
} 
 
static int count1 =0;
 
Counter1(){
   count1++;
  System.out.println(count1); 
} 
 
 
 
 public static void main(String args[]){  
  
Counter c1=new Counter();  
Counter c2=new Counter();  
Counter c3=new Counter(); 
 // Ket qua là 1 1 1
Counter c4 = new Counter1();
Counter c5 = new Counter1();
Counter c6 = new Counter1();
//Kết quả là 1 2 3
 }   
}

 

Phân biệt 2 trường hợp trên thì ta thấy là  riêng biến static chđược tạo một lần và giá trị của nó sđược lưu lại trong các lần tạo đối tượng khác nhau.

7. This  


- Dùng this vào trong các công việc sau:
+ Dùng để phân biệt tham số các  thuộc tính của lớp và các tham sđầu vào. 
+ Dùng đgọi constructor mặc định, vị tri đặt this() luôn phải là đầu của hàm gọi.
+ Dùng làm tham số trong các phương thức.
+ Dùng làm giá trị trả về.
+ Từ khóa this còn được ngầm định trong các lệnh gọi phương thức ở trong lớp hiện tại.


8. Kế thừa, mối quan hIS-A. Tại sao Java không dùng đa kế thừa?
    
 Kế thừa là một kỹ thuật mà đối tượng thu được tất cả các thuộc tính hành vi của lớp cha và bổ sung thêm các thuộc tính và các hành vi mới.
Các từ khóa được sử dụng: extends và implements.
Sử dụng từ khóa extends có thể kế thừa toàn b những phương thức thuộc tính không phải là private của lớp cha.

Ví d
class Employee{  
 float salary=40000;  
}  
class Programmer extends Employee{  
 int bonus=10000;  
 public static void main(String args[]){  
   Programmer p=new Programmer();  
   System.out.println("Luong Lap trinh vien la:"+p.salary);  
   System.out.println("Bonus cua Lap trinh vien la:"+p.bonus);  
}  
} 
 
 













Trong Java không dùng đa kế thừa để tránh trường hợp lưỡng nghĩa, lớp A kế thừa cả B và C. Trong khi đó cả B và C cùng cài đặt 1 phương thức, khi đó nếu A gọi đến phương thức đó thì Java không biết lựa chọn cái nào hết.

9. Super

Các chức năng cơ bản của super trong java là:
- Dùng super để truy nhập đến các thuộc tính của lớp cha gần nhất. 
- Dùng super để truy nhập, triệu hồi đến lớp constructer() của lớp cha gần nhất. Mặc định nếu không có từ supper() thì trong hàm tự gọi đến các constructer() của lớp cha gần nhất
- Dùng super để gọi, triệu hồi đến các phương thức của lớp cha gần nhất.