Enum trong Java

enum

1, Kiểu dữ liệu Enum?

Kiểu dữ liệu Enum gần giống với kiểu dữ liệu Array, nhưng các phần tử có thể bổ sung thêm các phương thức!
Enum là 1 kiểu dữ liệu liệt kê. Giúp bạn tổ chức dữ liệu khoa học hơn, code được trong sáng dễ hiểu hơn.

Ví dụ: Lấy từ blog StudyAndShare:


PHP:
package javaandroidvn;

public class JavaAndroidVn {

enum COLOR {

RED, BLUE, YELLOW
};

public static void main(String[] args) {
System.out.println(COLOR.BLUE);
System.out.println(COLOR.RED);
System.out.println(COLOR.YELLOW);

System.out.println("Cách 2: ");
COLOR c = COLOR.RED;
System.out.println(c);
System.out.println(c.YELLOW);

if (c == COLOR.RED) {
System.out.println("True");
} else {
System.out.println("False");
}
}
}

2, Switch case với Enum:

Code demo:

PHP:
package javaandroidvn;

public class JavaAndroidVn {

enum COLOR {

RED, BLUE, YELLOW
};

public static void main(String[] args) {
COLOR c = COLOR.RED;
switch (c) {
case RED: {
System.out.println("Red");
break;
}
case BLUE: {
System.out.println("Blue");
break;
}
case YELLOW: {
System.out.println("Yellow");
break;
}
}
}
}

3, Thuộc tính và phương thức trong Enum:

Ví dụ: Lấy dựa vào Video blog StudyAndShare:


PHP:
package javaandroidvn;

public class JavaAndroidVn {

enum COLOR {

RED(5), BLUE(6), YELLOW(7), GREEN(8);
private int value;

COLOR(int value) {
this.value = value;
}

public int getValue() {
return this.value;
}
};

public static void main(String[] args) {
COLOR c = COLOR.BLUE;
System.out.println(c + ": " + c.getValue());

System.out.println("ordinal BLUE: " + c.ordinal());

c = COLOR.GREEN;
System.out.println("ordinal GREEN: " + c.ordinal());
}
}

[​IMG]

Try, catch, finally trong Java

20111020_Java-Xulyngoaile-p2_2

Trước khi vào chi tiết, mình sẽ nêu 1 tình huống như này, đó là lỗi chia cho 0.
Bình thường theo các bài trước, các bạn sẽ dùng if, else để loại bỏ, in ra lỗi. (tất nhiên nếu bạn đã biết try catch rồi thì không nói :D). Đọc xong bài này, các bạn sẽ có thêm 1 cách khác, và tất nhiên nó còn sử dụng để bắt và xử lý nhiều loại lỗi hơn!

Ví dụ: Các bạn xem đoạn code này trước khi đọc lý thuyết, chạy thử nó, có thể nó cũng khá dễ hiểu!

PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {
int a = 5;
int b = 0;

//Cách các bài trước thường làm, dùng if, else:
if (b == 0) {
System.out.println(“Lỗi chia cho 0”);
} else {
System.out.println(“a/b = ” + a / b);
}

System.out.println(“\nCách dùng try – catch – finally \n”);

//Sử dụng try, catch để bắt lỗi:
try {
System.out.println(“a/b = ” + a / b);
} catch (Exception e1) {
System.out.println(“Có lỗi gì đó xảy ra  “);
System.out.println(“Tên lỗi là: ” + e1);
} finally {
System.out.println(“Có lỗi hay không thì cái dòng cuối cùng này vẫn được in ra!”);
}

}
}

1, Try – catch:

– Trong ví dụ trên, trong khối try{} là những dòng lệnh chúng ta cần thực hiện!
Khối catch (Exception e1) {} là nơi chứa các dòng lệnh thực hiện khi phát hiện lỗi!
– Ở đây, ta cần hiểu rõ khái niệm Exception:
Exception
(Ngoại lệ) là sự kiện xảy ra khi một chương trình đang chạy mà phát sinh ra lỗi. Nó sẽ làm gián đoạn chương trình!
(Exception e1) trong đó “e1” là tên của được gán nếu đối tượng bị lỗi, các bạn có thể đặt tên này bằng các từ khác.
– Bạn có thể in “e1” ra ngoài, sẽ thấy được lỗi cụ thể!
Exception là lớp cha, nó nói chung, và in ra các lỗi, ngoài ra còn có lớp con cụ thể và các ngoại lệ khác như sau:

Exception | Lớp nền của run-time
NullPointerException | Một đối tượng không tồn tại
ClassNotFoundException | Không tìm thấy Class
FileNotFoundException | Không tìm thấy file
SecurityException | Exception liên quan đến bảo mật
ArrayIndexOutOfBoundsException | Vượt quá chỉ mục của mảng
IllegalAccessException | Truy cập không hợp lệ
IllegalArgumentException | Đối số hàm
ArithmeticException | Lỗi thực thi một phép toán
NumberFormatException | Định dạng số không đúng
IOException | Lỗi nhập xuất
EOFException | Kết thúc một tập tin
NoSuchMethodException | Sai tên phương thức
InterruptedException | Ngắt luồng đang được thực thi

Ví dụ: In ra lỗi cụ thể vượt quá chỉ mục của mảng.

PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {
int arrInt[] = {1, 2, 4, 7, 10};
try {
System.out.println(“arrInt[6] = ” + arrInt[6]);

} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println(“Lỗi! Vượt quá chỉ mục của mảng! ” + e2);
}

}
}

Ngoài ra, để in nhiều Exception thì ra làm như sau:

PHP:
try {
//Nội dung muốn bẫy lỗi
} catch (ExceptionType1 e) {
//Khối lệnh cho lỗi
}catch (ExceptionType2 e1) {
//Khối lệnh cho lỗi
} catch (Exception ex) {
//Exception cho những cái còn lại
}

Trong đó ExceptionType là những loại Exception cụ thể đã nêu ở phía trên!

2, Finally?

Nó nằm ở cuối cùng của khối lệnh try – catch – finally, nó luôn luôn được thực hiện ngay cả khi chương trình có bắt được lỗi
hay không!
Trong khối lệnh đầy đủ như ví dụ ở đầu bài, dòng System.out.println(“Có lỗi hay không thì cái dòng cuối cùng này vẫn được in ra!”);
Luôn luôn được thực hiện và in ra khi bạn gán bất giá trị nào cho b!

Xem thêm video nói khá đầy đủ về try – catch – finally của Blog StudyAndShare

Bổ sung thêm video về throw and throws

[​IMG]
Nguồn: Android.Vn

Quản Lý Bộ Nhớ Trong Java

Các instruction của một chương trình đang chạy và dữ liệu liên quan được lưu trữ tạm thời trong bộ nhớ máy tính. Nếu bạn là một người lập trình Java, thì bạn không cần phải lo lắng về việc quản lý bộ nhớ bởi vì các JVM và GC(garbage Collector) sẽ làm công việc này. Tuy nhiên, bạn cần biết cách thức tổ chức quản lý bộ nhớ của Java. Điều này sẽ giúp bạn hiểu cách thức mà một đối tượng được tạo ra. Như trong hình dưới đây, một dữ liệu của chương trình được đặt tại hai khu vực khác nhau trong bộ nhớ: stack và heap. Stack và heap tham chiếu đến những cách(hoặc nơi) khác nhau để lưu trữ trong bộ bộ nhớ các phần tử của một chương trình đang chạy.

Lưu trữ ở Stack

Các phần tử sau đây sẽ được lưu trữ trong Stack:

  • Biến cục bộ(local): Các biến kiểu tham trị(hay kiểu nguyên thủy)  được định nghĩa bên trong một phương thức hay làm tham số của các phương thức.
  • Biến tham chiếu cục bộ: Các biến tham chiếu đến một đối tượng và được định nghĩa bên trong một phương thức hay làm tham số cho các phương thức. Hãy lưu ý rằng một đối tượng mà một biến cục bộ tham chiếu đến được lưu trữ trên heap mà không phải trên stack.
  • Triệu gọi phương thức: Khi bạn gọi một phương thức, thì phương thức được đẩy vào Stack(cụ thể là ở đỉnh của Stack).

Biến cục bộ được khai báo bên trong một phương thức, và phạm vi của một biến cục bộ kể từ lúc khai báo đến cuối phần thực thi của phương thức này. Khi phần thực thi phương thức được hoàn tất, các biến cục bộ trong phương thức sẽ được giải phóng. Nhưng các đối tượng mà một số biến cục bộ tham chiếu đến có thể vẫn còn sống và vẫn được lưu trữ trên Heap.

Lưu trữ ở Heap

Các phần tử sau đây sẽ được lưu trữ trong Heap:

  • Biến thể hiện(instance): Đó là các biến kiểu tham trị(hay biến nguyên thủy) được định nghĩa bên trong một lớp nhưng được khai báo bên ngoài của tất cả các phương thức trong lớp đó.
  • Biến tham chiếu thể hiện(instance): Đó là các biến tham chiếu đến một đối tượng và được định nghĩa bên trong một lớp nhưng được khai báo bên ngoài tất cả các phương thức của lớp đó.
  • Đối tượng: Đại diện cho các thực thể trong các vấn đề thế giới thực mà các chương trình Java cố gắng để giải quyết. Tất cả các đối tượng luôn luôn được lưu trữ trên bộ nhớ Heap. Các đối tượng khi không còn được sử dụng(hay tham chiếu) tới sẽ được GC triệu gọi để giải phóng bộ nhớ.

Bạn thấy bài viết này thế nào? (Hãy để lại comment để khích lệ người viết)

10 Java Regular Expression Examples You Should Know

Regular expression is an art of the programing, it’s hard to debug , learn and understand, but the powerful features are still attract many developers to code regular expression. Let’s explore the following 10 practical regular expression ~ enjoy 🙂

1. Username Regular Expression Pattern

 ^[a-z0-9_-]{3,15}$
^                    # Start of the line
  [a-z0-9_-]	     # Match characters and symbols in the list, a-z, 0-9 , underscore , hyphen
             {3,15}  # Length at least 3 characters and maximum length of 15 
$                    # End of the line

==> See the explanation and example here

2. Password Regular Expression Pattern

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
(			# Start of group
  (?=.*\d)		#   must contains one digit from 0-9
  (?=.*[a-z])		#   must contains one lowercase characters
  (?=.*[A-Z])		#   must contains one uppercase characters
  (?=.*[@#$%])		#   must contains one special symbols in the list "@#$%"
              .		#     match anything with previous condition checking
                {6,20}	#        length at least 6 characters and maximum of 20	
)			# End of group

==> See the explanation and example here

3. Hexadecimal Color Code Regular Expression Pattern

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
^		 #start of the line
 #		 #  must constains a "#" symbols
 (		 #  start of group #1
  [A-Fa-f0-9]{6} #    any strings in the list, with length of 6
  |		 #    ..or
  [A-Fa-f0-9]{3} #    any strings in the list, with length of 3
 )		 #  end of group #1 
$		 #end of the line

==> See the explanation and example here

4. Email Regular Expression Pattern

^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+
(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$
^			#start of the line
  [_A-Za-z0-9-]+	#  must start with string in the bracket [ ], must contains one or more (+)
  (			#  start of group #1
    \\.[_A-Za-z0-9-]+	#     follow by a dot "." and string in the bracket [ ], must contains one or more (+)
  )*			#  end of group #1, this group is optional (*)
    @			#     must contains a "@" symbol
     [A-Za-z0-9]+       #        follow by string in the bracket [ ], must contains one or more (+)
      (			#	   start of group #2 - first level TLD checking
       \\.[A-Za-z0-9]+  #	     follow by a dot "." and string in the bracket [ ], must contains one or more (+)
      )*		#	   end of group #2, this group is optional (*)
      (			#	   start of group #3 - second level TLD checking
       \\.[A-Za-z]{2,}  #	     follow by a dot "." and string in the bracket [ ], with minimum length of 2
      )			#	   end of group #3
$			#end of the line

==> See the explanation and example here

5. Image File Extension Regular Expression Pattern

([^\s]+(\.(?i)(jpg|png|gif|bmp))$)
(			#Start of the group #1
 [^\s]+			#  must contains one or more anything (except white space)
       (		#    start of the group #2
         \.		#	follow by a dot "."
         (?i)		#	ignore the case sensitive checking
             (		#	  start of the group #3
              jpg	#	    contains characters "jpg"
              |		#	    ..or
              png	#	    contains characters "png"
              |		#	    ..or
              gif	#	    contains characters "gif"
              |		#	    ..or
              bmp	#	    contains characters "bmp"
             )		#	  end of the group #3
       )		#     end of the group #2	
  $			#  end of the string
)			#end of the group #1

==> See the explanation and example here

6. IP Address Regular Expression Pattern

^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.
([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$
^		#start of the line
 (		#  start of group #1
   [01]?\\d\\d? #    Can be one or two digits. If three digits appear, it must start either 0 or 1
		#    e.g ([0-9], [0-9][0-9],[0-1][0-9][0-9])
    |		#    ...or
   2[0-4]\\d	#    start with 2, follow by 0-4 and end with any digit (2[0-4][0-9]) 
    |           #    ...or
   25[0-5]      #    start with 2, follow by 5 and end with 0-5 (25[0-5]) 
 )		#  end of group #2
  \.            #  follow by a dot "."
....            # repeat with 3 time (3x)
$		#end of the line

==> See the explanation and example here

7. Time Format Regular Expression Pattern

Time in 12-Hour Format Regular Expression Pattern

(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)
(				#start of group #1
 1[012]				#  start with 10, 11, 12
 |				#  or
 [1-9]				#  start with 1,2,...9
)				#end of group #1
 :				#    follow by a semi colon (:)
  [0-5][0-9]			#   follow by 0..5 and 0..9, which means 00 to 59
            (\\s)?		#        follow by a white space (optional)
                  (?i)		#          next checking is case insensitive
                      (am|pm)	#            follow by am or pm

==> See the explanation and example here

Time in 24-Hour Format Regular Expression Pattern

([01]?[0-9]|2[0-3]):[0-5][0-9]
(				#start of group #1
 [01]?[0-9]			#  start with 0-9,1-9,00-09,10-19
 |				#  or
 2[0-3]				#  start with 20-23
)				#end of group #1
 :				#  follow by a semi colon (:)
  [0-5][0-9]			#    follow by 0..5 and 0..9, which means 00 to 59

==> See the explanation and example here

8. Date Format (dd/mm/yyyy) Regular Expression Pattern

(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)
(			#start of group #1
 0?[1-9]		#  01-09 or 1-9
 |                  	#  ..or
 [12][0-9]		#  10-19 or 20-29
 |			#  ..or
 3[01]			#  30, 31
) 			#end of group #1
  /			#  follow by a "/"
   (			#    start of group #2
    0?[1-9]		#	01-09 or 1-9
    |			#	..or
    1[012]		#	10,11,12
    )			#    end of group #2
     /			#	follow by a "/"
      (			#	  start of group #3
       (19|20)\\d\\d	#	    19[0-9][0-9] or 20[0-9][0-9]
       )		#	  end of group #3

==> See the explanation and example here

9. HTML tag Regular Expression Pattern

<("[^"]*"|'[^']*'|[^'">])*>
<	  	#start with opening tag "<"
 (		#   start of group #1
   "[^"]*"	#	only two double quotes are allow - "string"
   |		#	..or
   '[^']*'	#	only two single quotes are allow - 'string'
   |		#	..or
   [^'">]	#	cant contains one single quotes, double quotes and ">"
 )		#   end of group #1
 *		# 0 or more
>		#end with closing tag ">"

==> See the explanation and example here

10. HTML links Regular Expression Pattern

HTML A tag Regular Expression Pattern

(?i)<a([^>]+)>(.+?)</a>
(		#start of group #1
 ?i		#  all checking are case insensive
)		#end of group #1
<a              #start with "<a"
  (		#  start of group #2
    [^>]+	#     anything except (">"), at least one character
   )		#  end of group #2
  >		#     follow by ">"
    (.+?)	#	match anything 
         </a>	#	  end with "</a>

Extract HTML link Regular Expression Pattern

\s*(?i)href\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));
\s*			   #can start with whitespace
  (?i)			   # all checking are case insensive
     href		   #  follow by "href" word
        \s*=\s*		   #   allows spaces on either side of the equal sign,
              (		   #    start of group #1
               "([^"]*")   #      only two double quotes are allow - "string"
               |	   #	  ..or
               '[^']*'	   #      only two single quotes are allow - 'string'
               |           #	  ..or
               ([^'">]+)   #     cant contains one single / double quotes and ">"
	      )		   #    end of group #1

==> See the explanation and example here