Học Java qua các ví dụ cụ thể

Bài 1 - Hello world

Bài 2 – In ra chuỗi nhập vào

Bài đầu tiên của bạn, bạn đã học cách để Java in cái gì đó ra màn hình, trong bài này, bạn sẽ học cách

nhập vào cái gì đó và Java in cái đó ra màn hình. Gõ cái này đi bạn (lưu ý, bạn phải gõ, không được

copy và paste)

pdf22 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 4020 | Lượt tải: 1download
Tóm tắt nội dung Học Java qua các ví dụ cụ thể, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Nhap diem so: "); 
 int diem = Integer.parseInt(in.readLine()); 
 if(diem<=2) System.out.println("Yeu"); 
 if((diem>2) && (diem<=3)) System.out.println("Trung 
binh"); 
 if((diem>3) && (diem<=4)) System.out.println("Kha"); 
 if((diem>4) && (diem<5)) System.out.println("Gioi"); 
 if(diem==5) System.out.println("Xuat sac"); 
 } 
} 
Thay vì lặp lại những câu if ấy, bạn nên dùng switch 
import java.io.*; 
public class Hello { 
 public static void main(String[] args) throws Exception { 
 BufferedReader in = new BufferedReader(new 
InputStreamReader(System.in)); 
 System.out.print("Nhap diem so: "); 
 int diem = Integer.parseInt(in.readLine()); 
 switch(diem) 
 { 
 case 0: 
 case 1: 
 case 2:System.out.println("Yeu");break; 
 case 3:System.out.println("Trung 
binh");break; 
 case 4: 
 case 5:System.out.println("Gioi");break; 
 default:System.out.println("Vao sai"); 
 } 
 } 
} 
*break với switch: break sẽ thoát ngay ra khỏi khối lệnh trong thân của switch 
Bài 9 – String 
Khác với C, String là một lớp của Java. String được khai báo như sau 
String a = "Hello"; 
Cộng 2 String bằng dấu + 
System.out.println("Gia tri la " + n); 
Java có khả năng tự chuyển kiểu bất cứ dữ liệu kiểu số nào khi cộng vào String. Dù n là int, float, double 
đều có thể chuyển thành String nhờ mẹo vặt ("" + n) 
Các method trong class String 
* substring 
String s1 = "Hello"; 
String s2 = s1.substring(0,4); //bắt đầu từ kí tự thứ 0 (tức là 'H') lấy đi 4 kí tự (tức là "Hell") 
* length 
int n = s1.length(); //tức là bằng 5 
* charAt 
char ch = s1.charAt(4); //tức là bằng 'o' 
Đây là method tìm kí tự thứ i trong String, các kí tự trong String được đánh số từ 0 
* equals 
Kiểu tra xem chuỗi nguồn s có giống chuỗi đích d hay không, ta dùng method equals trả về boolean 
boolean b = s.equals(t); 
String không giống dữ liệu kiểu số, tuyệt đối không dùng giống như if(s==t) 
* compareTo 
int a = s2.compareTo(s1); 
a>0 s2>s1 
a<0 s2<s1 
a=0 s2=s1 
So sánh giữa s2 và s1 là so sánh thứ tự giữa kí tự đầu của hai chuỗi so đi, ví dụ "kc" > "kazbe" 
* toCharArray (đổi chuỗi ra mảng kí tự) 
char[] chuoi = s1.toCharArray(); 
* indexOf 
String s1 = "Hello Everybody"; 
String s2 = "lo"; 
int n = s1.indexOf(s2); //n sẽ bằng 4 
Đây là method trả về vị trí của chuỗi s2 trong chuỗi s1, nếu không tìm thấy sẽ trả về -1 
* Chuyển kiểu từ String ra dữ liệu kiểu số 
Chuyển từ dữ liệu kiểu số ra String khá dễ dàng, dùng "" + n, nhưng ngược lại thì phải dùng các method 
tương ứng. 
Các method này nằm trong góijava.lang, trong các class Byte, Short, Integer, Long, Float, Double 
String input = "230"; 
int n = Integer.parseInt(input); //n sẽ bằng 230 
Tương tự với các method sau Byte.parseByte, Short.parseShort, Float.parseFloat, ... 
Bài 10 – vòng lặp for 
for(int i=0;i<n;i++) 
 s+=i; 
3 thành phần trong câu for ta có thể bỏ hết nhưng phải giữ lại các dấu ; khi đó nến muốn ta có thể đặt 
phép toán điều khiển vòng lặp trong thân lệnh như sau 
for(int i=0;i<n;) 
{ 
 s+=i; 
 i++; 
} 
*break với for: break sẽ thoát ngay ra khỏi vòng for 
for(int i=0;i<n;i++) 
{ 
 System.out.println(i);break; 
 System.out.println("Tiep tuc"); 
} 
Kết quả in ra không có câu "Tiep tuc" vì break nhảy ngay ra khỏi vòng for sau khi in 1 
*continue với for: continue sẽ khiến vòng for bắt đâu 1 chu trình mới và bỏ qua tất cả các lệnh bên dưới 
nó 
VD: in tất cả các số từ 0 đến 10, bỏ qua 3,4,5 
for(int i=0;i<10;i++) 
{ 
 if((i= =3)||(i= =4)||(i= =5)) continue; 
 System.out.println(i); 
} 
Bài 11 – while 
while(biểu thức) 
 lệnh; 
Nếu biểu thức đúng thì thực hiện lệnh 
*break với while: break sẽ thoát ngay ra khỏi vòng while 
int i=0; 
while(i<10) 
{ 
 System.out.println(i);break; 
 i++; 
} 
Sẽ chỉ in ra 0 
* continue với while: nó sẽ xác định giá trị biểu thức viết ngay sau while 
int i=0; 
while(i<10) 
{ 
 System.out.println(i);continue; 
 i++; 
} 
Ta sẽ được một loạt in 0 vô tận 
Bài 12 – vòng lặp do..while 
do 
 lệnh; 
while(biểu thức); 
Nếu biểu thức đúng thì tiếp tục thực hiện lệnh 
*break với do..while: break sẽ thoát ngay ra khỏi vòng while 
int i=0; 
do 
{ 
 System.out.println(i);break; 
 i++; 
} 
while(i<10); 
Sẽ chỉ in ra 0 
* continue với while: nó sẽ xác định giá trị biểu thức viết ngay sau 
while 
int i=0; 
do 
{ 
 System.out.println(i);continue; 
 i++; 
} 
while(i<10); 
Ta sẽ được một loạt in 0 vô tận 
Bài 13 – array 
Ta khai báo 1 mảng với câu lệnh sau, và không cung cấp số phần tử 
int[] a; 
Tuy vậy, với Java, để dùng được một array, ta cần phải khởi tạo array đó, và lúc này phải cung cấp số 
phần tử 
int[] a; 
a = new int[100]; 
Hai câu có thể viết lại thành một câu 
int[] a = new int[100]; 
Java sẽ khởi tạo một mảng 100 phần tử đều là int có đánh thứ tự từ 0 đến 99 
Mảng có giá trị đầu: Mảng loại này không cần new mà cũng chẳng cần số phần tử 
int[] a = {1,45,6,8,21}; 
Các method với mảng 
* length 
method này sẽ cung cấp số phần tử của mảng, ví dụ ta muốn gán giá trị số cho các phần tử của mảng a 
for(int i=0;i<a.length;i++) a|i|=i; lưu ý là length, không phải length() 
*System.arraycopy 
Giả sử, ban đầu ta có 2 mảng 
int[] s = {1,3,5,7,9,11,13,15}; 
int[] d = {2,4,6,8,10,12,14}; 
method arraycopy trong gói System 
System.methodcopy(s,3,d,2,4); 
sẽ cho ra một mảng d mới là {2,4,7,9,11,13,14} 
method này sẽ thay thế 4 phần tử, tính từ phần tử thứ 2 trong mảng d, bằng ngần ấy phần tử tính từ 
phần tử thứ 3 trong mảng s 
Các method nằm trong class java.util.Arrays 
* void sort 
Nó sẽ sắp xếp một mảng số tăng dần 
int[] s = {28,7,14,11}; 
Arrays.sort(s); 
* int binarySearch 
Nó sẽ tìm vị trí của một phần tử trong một mảng, trả về -1 nếu không tìm thấy 
int[] s = {28,7,14,11}; 
int n = Arrays.binarySearch(s,14); n sẽ bằng 2 
Mảng nhiều chiều 
int[][] = new int[100][50]; 
Hoặc khai báo 1 mảng có giá trị đầu. Đây là mảng 2 chiều gồm 4 phần tử là 4 mảng 1 chiều, mỗi mảng 1 
chiều chứa 3 phần tử 
int[][] a = 
{ 
{16, 3, 2}, 
{5, 10, 11}, 
{9, 6, 7}, 
{4, 15, 14} 
}; 
Bài 14 - ngoại lệ 
[code]int x,y; 
x=10;y=x-10; 
x=x/y; 
Khi chạy đoạn mã này bạn sẽ thấy xuất hiện thông báo 
java.lang.ArithmeticException: divide by zero 
Và chương trình sẽ thoát ra ngay lúc đó. Muốn chương trình chạy tiếp và không thoát ra, ta đón "bắt" 
ngoại lệ này, đưa ra biến e, cuối cùng in e (để xem là ngoại lệ gì) 
int x,y; 
try 
{ 
 x=10;y=x-10; 
 x=x/y; 
} 
catch(Exception e) 
{ 
 System.out.println(e.getMessage()); 
} 
Xử lí ngoại lệ (Exception) 
Để "ném" ngoại lệ do bất cứ dòng mã nào trong một phương thức sinh ra, bạn có thể khai báo để ném bỏ 
ngoại lệ đó 
public void divide() throws Exception 
{ 
 int a=5/0; 
} 
hoặc nếu muốn "bắt" ngoại lệ đó lại để xem đó là ngoại lệ gì để xử lí, bạn "bắt" nó rồi in ra 
try 
{ 
 int a=5/0; 
} 
catch(Exception e) 
{ 
 System.out.println(e.getMessage()); 
} 
Nếu muốn chương trình thành công thì sinh thông báo thành công, thất bại thì sinh thông báo ngoại lệ, 
bạn có thể dùng 
boolean done=false; 
try 
{ 
 int a=5/b; 
 done=true; 
} 
catch(Exception e) 
{ 
 System.out.println(e.getMessage()); 
} 
if(done==true) System.out.println("Successful"); 
Bài 15 - Vector (mảng không giới hạn số phần tử) 
Các method trong bài này nằm ở 2 class java.util.Vector và java.util.Enumeration 
Khai báo 
Vector vt = new Vector(); 
Nhập dữ liệu cho một Vector (class Console nằm trong gói corejava) 
Lưu ý là mỗi phần tử của Vector đều phải là một đối tượng, nên ta phải có new Integer(n) khi muốn đưa 
vào một biến kiểu int. Tương tự với Byte, Long, Float, ... 
do 
{ 
int n = Console.readInt(""); 
if(n!=0) vt.addElement(new Integer(n)); 
} 
while(n!=0); 
In ra các phần tử của một Vector 
for(int i=0;i<vt.size();i++) 
System.out.println(vt.elementAt(i)); 
Để đưa Vector về kiểu mảng cho dễ thao tác, ta đưa về kiểu Enumeration (một kiểu mảng) 
Enumeration e = vt.elements(); 
Như vậy ta có mảng e kiểu Enumeration sao chép y khuôn Vector vt để dễ xử lí, không đụng đến Vector 
vt 
In ra các phần tử của một Enumeration 
while(e.hasMoreElements()) 
System.out.println(e.nextElement()); 
Bài 16 - Lớp nội (lớp nằm trong lớp khác) 
public class TestProgram 
{ 
 static int currentCount; 
 static class Apple 
 { 
 int weight; 
 public Apple(int weight) 
 { 
 this.weight=weight; 
 currentCount++; 
 } 
 public int Weight() 
 { 
 return weight; 
 } 
 } 
 public static void main(String args[]) 
 { 
 Apple a=new Apple(12);//khoi tao 1 quả tao nang 12kg 
 System.out.print(a.Weight()); 
 } 
} 
Ở đây ta thấy lớp nội Apple trong lớp TestProgram, khi biên dịch Java sẽ làm xuất hiện 2 file là 
TestProgram.class và TestProgram$Apple.class. Ưu điểm khi sử dụng lớp nội là: 
- thể hiện tính đóng gói cao 
- các lớp nội có thể truy xuất trực tiếp các biến của lớp cha 
Lưu ý là lớp nội khác với các lớp mà nằm chung một file, ví dụ như tập tin MainClass.java dưới đây 
public class MainClass 
{ 
} 
class Subclass 
{ 
} 
Khi biên dịch nó sẽ tạo ra 2 file là MainClass.class và Subclass.class 
Bài 17 - Tạo tập tin jar tự chạy 
Giả sử chương trình của bạn có vài file .class trong đó file chương trình chính là MainPro.class chẳng 
hạn. 
Bạn hãy tạo một file lấy tên là mymf.mf có nội dung như sau 
Main-Class: MainPro 
Bắt buộc phải chính xác như thế (tức là phải có cả xuống dòng), không thì trình chạy jar không hiểu 
được. 
Sau đó bạn vào %JAVA_HOME%\bin\ chép tất cả các tập tin .class của ứng dụng và cả mymf.mf vào đó, 
rồi chạy jar.exe với tham số dòng lệnh như sau 
jar cmfv mymf.mf MyProgram.jar *.class 
Tương tự nếu bạn muốn đưa thêm 2 thư mục dir1 và dir2 vô file JAR thì bạn cũng gõ 
jar cmfv mymf.mf MyProgram.jar *.class dir1 dir2 
Trình jar sẽ tạo file MyProgram.jar (tên khác tùy bạn) có thể chạy được, không phải dùng lệnh java hay 
giả sử không có IDE quen thuộc của bạn 

File đính kèm:

  • pdfHọc Java qua các ví dụ cụ thể.pdf
Tài liệu liên quan