Tài liệu học tập Lập trình Java cơ bản
I. LỊC H SỬ HÌNH THÀNH VÀ PHÁT TRIỂN JAVA:
- Java là một ngôn ngữ lập trình c ấp cao theo hướng đối tượng do James Gosling và
một số đồng nghiệp ở Sun Microsy stems phát triển (với tên gọi ban đầu là Oak). Đây
cũng là một phần trong dự án Green (các phần mềm điều khiển thiết bị điện tử dân
dụng) của Sun.
- Năm 1995 Oak trở thành Java với phiên bản 1.0. Sau đó, Java không ngừng được
phát triển và lần lượt các phiên bản mới được Sun phát hành. Năm 2005, Sun phát
hành Java 1.5.0.
II. ĐẶC ĐIỂM NGÔN NGỮ JAVA:
Đơn giản:
- Java phát triển trên nền tảng C++, nhưng đơn giản hơn C++ rất nhiều như: không kế
thừa bội, không sử dụng biến con trỏ , cấu trúc “struct” và “union” cũng được loại bỏ
khỏi Java,.
Hướng đối tượng:
- Java được thiết kế xoay quanh mô hình hướng đối tượng. Vì vậy trong Java, tiêu
điểm là dữ liệu và các phương pháp thao tác lên dữ liệu đó. Dữ liệu và các phương
pháp mô tả trạng thái và cách ứng xử của một đối tượng trong Java.
Phân tán (Distributed):
- Java là ngôn ngữ thông dụng trong việc xây dựng các ứng dụng trên mạng nói chung
và ứng dụng web nói riêng.
Trung lập kiến trúc hệ thống:
- Đây là khả năng một chương trìn h được viết tại một máy nhưng có thể chạy được
bất kỳ đâu.
Bảo mật cao:
- Java cung cấp một số lớp để kiểm tra bảo mật và an toà n hệ thống.
Khả năng đa tuyến:
- Chương trình Java sử dụng kỹ thuật đa tiến trình (Multithread) để thực thi các công
việc đồng thời. Chúng cũng cung cấp giải pháp đồng bộ giữa các tiến trình.
type trên Windows hay cat trên Linux. import java.io.*; public class TestPrintWriter{ public static void main(String args[]){ PrintWriter pw=null; // write data to file try{ pw = new PrintWriter(new FileOutputStream( "mydata.dat"),true); for(int i=0;i<10;i++){ pw.print( " " + (int)(Math.random ()*100)); } } catch(IOException ex){ System.out.println(ex.getMessage ()); } finally{ try{ if(pw!=null) pw.close (); } catch(Exception ex){ } } } } Lập trình Java Xử lý luồng tập tin Trang 102 Kết xuất của TestPrintWriter.java 7) Luồng đệm: - Java tăng tốc nhập / xuất dựa vào các luồng đệm (buffered stream), giảm bớt số lần đọc và ghi. - Dùng luồng đệm giúp ta có thể đọc / ghi mỗi lần một khối byte hay ký tự thay vì đọc từng byte hoặc từng ký tự. Các lớp luồng đệm trong java: - BufferedInputStream - BufferedOutputStream - BufferedReader - BufferedWriter Các phương thức khởi tạo luồng đệm: public BufferedInputStream(InputStream in) public BufferedOutputStream(OutputSream out) public BufferedReader(Reader out) public BufferedWriter(Writer out) - Lớp luồng đệm thừa kế phương thức các lớp cha. Ngoài việc sử dụng phương thức từ lớp cha, BufferedReader còn có phương thức readLine () chịu trách nhiệm đọc nội dung. Ví dụ: - Chương trình mẫu minh họa xem tập tin trong vùng văn bản. Khi người dùng gõ tên tập tin vào trường văn bản và nhấp nút View, tập tin sẽ hiển thị trong vùng văn bản. import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class ViewFile extends JFrame implements ActionListener{ private JTextArea contentView; private JTextField txtInput; private JButton btnView; Lập trình Java Xử lý luồng tập tin Trang 103 public ViewFile(){ setTitle ("View File"); JPanel p = new JPanel(); p.setLayout (new FlowLayout (FlowLayout.LEFT)); p.add (new JLabel ("File name")); p.add (txtInput= new JTextField (20)); p.add(btnView = new JButton("View")); //register listener btnView.addActionListener(this); contentView = new JTextArea(20,30); JScrollPane pane = new JScrollPane(contentView); getContentPane().add(pane,BorderLayout.CENTER); getContentPane().add(p,BorderLayout.NORTH); } public void actionPerformed(ActionEvent e){ if(e.getSource()== btnView) showFile(); } public void showFile(){ BufferedReader inFile=null; String filename = txtInput.getText().trim(); String inLine; try{ inFile = new BufferedReader(new FileReader( filename)); boolean firstLine=true; while((inLine=inFile.readLine())!=null){ if(firstLine){ firstLine=false; contentView.append(inLine); } else contentView.append("\n" + inLine); } } Lập trình Java Xử lý luồng tập tin Trang 104 catch(Exception ex){ System.out.println(ex.toString()); } finally{ try{ if(inFile!=null) inFile.close(); } catch(Exception ex){ } } } public static void main(String args[]){ ViewFile frm = new ViewFile(); frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frm.pack (); frm.setVisible (true); } } Kết xuất của ViewFile. java 8) Lớp StreamTonkenizer: - Để phân tích cú pháp và từ dựng một cách mạnh mẽ và hiệu quả hơn ta cần sử dụng lớp StreamTokenizer. Lập trình Java Xử lý luồng tập tin Trang 105 - Lớp StreamTokenizer có khả năng nhận dạng ra các token trên luồng. Nếu hình dung tập hợp một chuỗi các ký tự làm nên một câu thì token chính là từng từ, từng dấu chấm câu hay con số. Phương thức khởi tạo sau: Một số phương thức thường dùng: pubic int nextToken () throws IOException - Lấy ra từng token, phương thức trả về một trong những giá trị sau: § StreamTokenizer.TT_WORD: token đọc được là một từ § StreamTokenizer.TT_NUMBER: token đọc được là một số § StreamTokenizer.TT_EOL: đọc đến cuối dòng § StreamTokenizer.TT_EOF: đọc đến cuối luồng. Lớp StreamTokenizer có 2 thuộc tính: public String sval - Lấy về giá trị của token nếu token đọc được là TT_WORD public double nval - Lấy về giá trị của token nếu token đọc được là TT_NUMBER public StreamTokenizer(InputStream in) Lập trình Java Lập trình CSDL với JDBC Trang 106 Chương 7 ĐA TUYẾN TRÌNH Sau bài học này, học viên có thể: - Hiểu được khái niệm về tuyến và cơ chế lập trình đa tuyến - Tạo được tuyến trong chương trình. - Xử lý cơ chế đồng bộ (synchronized) giữa các tuyến trình. I. Khái niệm: 1) Tuyến (Thread): Là đơn vị nhỏ nhất của đoạn mã có thể thi hành được để thực hiện một công việc riêng biệt nào đó. Những chương trình trước đây đều chạy ở một tuyến; nghĩa là vào thời điểm xác định chỉ có một câu lệnh được thực thi. 2) Đa tuyến (MultiThread): - Là khả năng làm việc với nhiều tuyến - Đa tuyến chuyên sử dụng cho việc thực thi nhiều công việc đồng thời - Đa tuyến giảm thời gian rỗi của hệ thống đến mức thấp nhất và tăng hiệu suất thi hành của chương trình. Tuyến có thể được tạo ra bằng 2 cách: - Dẫn xuất từ lớp Thread - Ứng dụng giao diện Runnable. Chu kỳ sống của tuyến: II. PHƯƠNG PHÁP XÂY DỰNG TUYẾN: 1) Tạo tuyến bằng cách dẫn xuất lớp Thread: - Lớp Thread chứa phương thức tạo dựng Thread() cũng như nhiều phương thức hữu ích có chức năng chạy, khởi động, tạm ngừng, tiếp tục, gián đoạn và ngừng tuyến. - Để tạo 1 tuyến ta có thể định nghĩa 1 lớp kế thừa từ lớp Thread và phải định nghĩa lại phương thức run() để thông báo cho hệ thống biết cách thực thi tuyến khi nó vận hành. ReadyNew Running Waiting Dead Sleep,wait,I/O Lập trình Java Lập trình CSDL với JDBC Trang 107 Cấu trúc tạo 1 tuyến: Thi hành tuyến: Một số phương thức thường dùng trong lớp tuyến: public void run() - Phương thức được hệ thống gọi để thực thi công việc của tuyến, ta phải giành quyền phương thức này và cung cấp mã cho tuyến thi hành. - Phương thức run() không được gọi trực tiếp từ đối tượng Thread. public void start() - Khởi động tuyến, qua đó làm cho phương thức run() cũng được kích hoạt. public static void sleep(long millis) throws InterruptedException - Đặt tuyến vào trạng thái “ngủ” trong khoảng thời gian xác định bằng mili giây. public void stop() - Có chức năng ngừng tuyến. public void join() throws InterrupteException - Chờ đợi tuyến này chết đi. public void setPriority(int p) - Ấn định quyền ưu tiên p(xếp từ 1 đến 10) cho tuyến này. Ví dụ: - Chương trình này tạo và chạy 2 tuyến sau: § Tuyến thứ nhất in các số nguyên từ 1 đến 10. § Tuyến thứ hai in chữ A 10 lần. package chapter07; class PrintNum extends Thread{ public void run(){ for(int i=1;i<=10;i++){ System.out.print(" " + i); try{ ThreadX tx = new ThreadX(); tx.start(); class ThreadX extends Thread{ public void run(){ // cài đặt công việc của tuyến } ... } Lập trình Java Lập trình CSDL với JDBC Trang 108 Thread.sleep(300); }catch(Exception ex){} } } } class PrintChar extends Thread{ public void run(){ for(int i=1;i<=10;i++){ System.out.print(" A "); try{ Thread.sleep(300); } catch(Exception ex){ } } } } public class TestThread{ public static void main(String args[]){ PrintNum t1= new PrintNum(); PrintChar t2= new PrintChar(); t1.start(); t2.start(); try{ t1.join(); t2.join(); } catch(Exception ex){ } System.out.println("\n Both thread is deaded"); } } Lập trình Java Lập trình CSDL với JDBC Trang 109 Kết quả của TestThread.java 2) Tạo tuyến bằng cách ứng dụng giao diện Runable: - Ở phần trước, ta đã tạo và chạy tuyến thi hành bằng cách khai báo một lớp tuyến mở rộng lớp Thread. Phương thức này sẽ có hiệu lực nếu lớp tuyến chỉ kế thừa từ lớp Thread, nhưng sẽ vô dụng khi lớp tuyến thừa kế nhiều lớp. Để thừa kế nhiều lớp, ta phải ứng dụng giao diện.Java cung cấp giao diện Runnable để thay thế lớp Thread. Cấu trúc định nghĩa 1 tuyến: Thi hành tuyến: Ví dụ: - Chương trình mẫu định nghĩa một tuyến hiển thị thời gian (hh:mm:ss) trong một panel. - Tập tin ClockPanel.java package chapter07; import javax.swing.*; import java.awt.*; import java.util.*; import javax.swing.border.*; public class ClockPanel extends JPanel implements Runnable{ private JTextField txtDisplay; private Thread t; RunnableY ry = new RunnableY(); Thread ty = new Thread(ry); tx.start(); class RunnableY implements Runnable { public void run(){ // process Threads } ... } Lập trình Java Lập trình CSDL với JDBC Trang 110 public ClockPanel(){ add(new JLabel("Time is")); add(txtDisplay= new JTextField(20)); setBorder(new TitledBorder(new EtchedBorder(),"Clock")); } public void run(){ String msg=""; while(true){ Date today = new Date(); msg = today.getHours() + ":" + today.getMinutes()+":" + today.getSeconds(); txtDisplay.setText(msg); try{ Thread.sleep(1000); }catch(Exception ex){ } } } } // TestClock.java package chapter07; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.border.*; public class TestClock extends JFrame implements ActionListener{ JButton btnStart,btnStop; ClockPanel p1 = new ClockPanel(); Thread t; public TestClock(){ setTitle("Test clock"); getContentPane().add(p1,BorderLayout.NORTH); JPanel p2 = new JPanel(); Lập trình Java Lập trình CSDL với JDBC Trang 111 p2.add(btnStart = new JButton("Start")); p2.add(btnStop = new JButton("Stop")); getContentPane().add(p2,BorderLayout.CENTER); btnStart.addActionListener(this); btnStop.addActionListener(this); btnStop.setEnabled(false); } public void actionPerformed(ActionEvent e){ if(e.getSource()==btnStart){ start(); btnStart.setEnabled(false); btnStop.setEnabled(true); } else if(e.getSource()==btnStop){ stop(); btnStart.setEnabled(true); btnStop.setEnabled(false); } } public void start(){ t = new Thread(p1); t.start(); } public void stop(){ if(t!=null){ t.stop(); } } public static void main(String args[]){ TestClock frm =new TestClock(); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.pack(); frm.setVisible(true); } Lập trình Java Lập trình CSDL với JDBC Trang 112 } Kết quả của TestClock.java
File đính kèm:
- Tài liệu học tập Lập trình Java cơ bản.pdf