<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12173377</id><updated>2011-11-27T07:26:33.813+07:00</updated><title type='text'>I learn Java</title><subtitle type='html'>How a n00b learns Java, drinks Java and feels Java? That would be an interesting experience. 
&lt;br /&gt;
Please use &lt;a href="http://www.mozilla.org"&gt;&lt;strong&gt;Firefox&lt;/strong&gt;&lt;/a&gt; to view our blog if Microsoft Internet Exlorer doesn't display UTF-8 character correctly.&lt;br /&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12173377.post-111613745913243005</id><published>2005-05-15T13:09:00.000+07:00</published><updated>2005-05-15T13:10:59.136+07:00</updated><title type='text'>New NetBeans Resources</title><content type='html'>Tập hợp khá nhiều tài nguyên về NetBeans 4.1. &lt;a href="http://cld.blog-city.com/read/1280404.htm"&gt;Check here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111613745913243005?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111613745913243005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111613745913243005' title='55 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111613745913243005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111613745913243005'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/new-netbeans-resources.html' title='New NetBeans Resources'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>55</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111591093791022090</id><published>2005-05-12T22:05:00.000+07:00</published><updated>2005-05-12T23:10:36.616+07:00</updated><title type='text'>My First Java Swing Application</title><content type='html'>Ứng dụng là một cái từ thật là to mặc dù tôi cũng chẳng biết dùng từ gì để chỉ nó nữa. Tôi tạo ra một cái Swing Interface, bắt đầu từ cái JFrame có bố là Frame và ông nội là thằng Window. Nhớ là Frame là một window có thể định lại cỡ, có title bar và có nút tắt, thu nhỏ/phóng to. Tôi sẽ đặt thẳng vào Frame này một nhãn JLabel và một nút JButton theo Layout Manager là Bố cục dòng chảy Flow.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;import java.awt.*;&lt;br /&gt;&lt;br /&gt;public class MyFirstSwingApp {&lt;br /&gt; &lt;br /&gt;   /**&lt;br /&gt;    * Creates a new instance of MyFirstSwingApp&lt;br /&gt;    */&lt;br /&gt;   public MyFirstSwingApp() {&lt;br /&gt;       createFrame();&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   /**&lt;br /&gt;    * @param args the command line arguments&lt;br /&gt;    */&lt;br /&gt;   public static void main(String[] args) {       &lt;br /&gt;       MyFirstSwingApp Frame = new MyFirstSwingApp();&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public void createFrame() {&lt;br /&gt;       //Create and set up the window.&lt;br /&gt;       JFrame frame = new JFrame("HelloWorldSwing Frame");&lt;br /&gt;       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;       frame.getContentPane().setLayout(new FlowLayout());&lt;br /&gt;&lt;br /&gt;       JButton button = new JButton("It is a Button");&lt;br /&gt;       frame.getContentPane().add(button);&lt;br /&gt;     &lt;br /&gt;       JLabel label = new JLabel("This is a Label");&lt;br /&gt;       frame.getContentPane().add(label); &lt;br /&gt;     &lt;br /&gt;       frame.pack();&lt;br /&gt;       frame.setVisible(true);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Bây giờ nhiệm vụ của tôi là giở qua một loạt các trang, tìm đến trang nói về sự kiện để thử mở rộng ứng dụng. Tôi muốn khi nút được bấm thì Label sẽ thay đổi.&lt;br /&gt;&lt;br /&gt;Sun nói rằng để theo dõi một sự kiện trên một Component như Jbutton thì lớp chứa Component phải thực hiện giao diện ActionListener. Như vậy tôi sẽ phải thay khai báo tên lớp thành:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;public class MyFirstSwingApp implements ActionListener {&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Thêm nữa, do cái thằng giao diện ActionListener này nằm trong gói java.awt.event.ActionListener nên tớ cần phải nhập thêm một chú import cho phải đạo.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;import java.awt.event.*;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Trong giao diện ActionListener có phương thức &lt;pre&gt;addActionListener&lt;/pre&gt; mà ta sẽ buộc phải định nghĩa lại (override) trong lớp thực thi giao diện đó không thì trình biên dịch sẽ la lối om sòm là lớp của chú đâu phải là lớp abstract, mà không phải thế thì sao ko định nghĩa lại &lt;pre&gt;addActionListener&lt;/pre&gt; cho vui làng xóm. Thế là tớ phải thêm một phương thức nữa cho đẹp cả 2 họ.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;public void actionPerformed(ActionEvent e) {&lt;br /&gt;      &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Sun bảo là muốn theo dõi sự kiện trên đối tượng/mẫu của Component nào thì cần phải sử dụng phương thức &lt;pre&gt;addActionListener(this)(this)&lt;/pre&gt; trên đối tượng của Component đó. Nghĩa là tớ muốn khi người ta bấm nút thì sự kiện đó sẽ được gửi đi ra cho phương thức xử lý &lt;pre&gt;actionPerformed&lt;/pre&gt; thì tớ cần dùng &lt;pre&gt;addActionListener(this)&lt;/pre&gt; trên đối tượng cụ thể cần theo dõi đó. May quá tớ chỉ có tạo một nút nên tớ chỉ việc thêm  dòng:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;button.addActionListener(this);&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Vậy là khi xuất hiện sự kiện ấn nút thì &lt;pre&gt;actionPerformed&lt;/pre&gt; được thực thi liền.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111591093791022090?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111591093791022090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111591093791022090' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111591093791022090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111591093791022090'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/my-first-java-swing-application.html' title='My First Java Swing Application'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111588279362118241</id><published>2005-05-12T14:15:00.000+07:00</published><updated>2005-05-12T15:21:35.890+07:00</updated><title type='text'>Swing continued</title><content type='html'>Lần trước mới ngửi qua một chút Swing, lần này có thời gian để nghía lại một tí. Đặc biệt đáng chú ý là cây phân cấp lớp của Swing. Containment hierarchy/Class Hierarchy trong Swing là một khái niệm cần nhớ:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://www.particle.kth.se/%7Elindsey/JavaCourse/Book/Images/Part1/Java/Chapter06/AWT_JT_Fig-6-2-550x573.jpg" height="480" width="420" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Có lẽ không dễ dàng để nhớ. Nhưng bắt buộc phải nhớ để còn biết cái nào kế thừa từ cái nào và ta có thể dùng những phương thức hay trường nào từ siêu lớp nào.&lt;br /&gt;&lt;br /&gt;A Definition on Frame:&lt;br /&gt;&lt;blockquote&gt;A resizable, movable window with title bar and close button. Usually it contains &lt;span style="font-weight: bold;"&gt;Panel&lt;/span&gt;s.&lt;/blockquote&gt;Đó chính là lý do mà JFrame kế thừa từ lớp Window trong khi các component khác lại chỉ kế thừa từ siêu lớp của Window là Container.&lt;br /&gt;&lt;br /&gt;A definition on Window:&lt;br /&gt;&lt;blockquote&gt;A &lt;span style="font-weight: bold;"&gt;window &lt;/span&gt;&lt;span style="font-style: italic;"&gt;without a title bar or move controls&lt;/span&gt;. The program can move and resize it, but the user cannot. Free standing Window, not inside any other Window. &lt;span style="font-style: italic;"&gt;It must have a parent &lt;/span&gt;&lt;span style="font-style: italic;" class="jclass"&gt;Frame&lt;/span&gt;&lt;span style="font-style: italic;"&gt; mentioned in the constructor&lt;/span&gt;.&lt;br /&gt;&lt;/blockquote&gt;A definition on JPanel:&lt;br /&gt;&lt;blockquote&gt;A region internal to a &lt;span style="font-weight: bold;" class="jclass"&gt;JFrame&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;or another &lt;span style="font-weight: bold;" class="jclass"&gt;JPanel&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.   &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Used for grouping components together&lt;/span&gt;. Optionally bounded by a visible border.   &lt;span style="font-style: italic;"&gt;Lives inside some enclosing &lt;/span&gt;&lt;span style="font-style: italic;" class="jclass"&gt;Container&lt;/span&gt;.&lt;/blockquote&gt;A definition on Container:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;These are the basis on which all the other windows are built&lt;/span&gt;. They manage the child &lt;span class="jclass"&gt;Component&lt;/span&gt;s and &lt;span class="jclass"&gt;LayoutManager&lt;/span&gt;. They are missing an &lt;span class="jmethod"&gt;addNotify&lt;/span&gt; method to create the peer object, so can't appear on screen. You don't normally instantiate Containers directly, but some subclass of them.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111588279362118241?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111588279362118241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111588279362118241' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111588279362118241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111588279362118241'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/swing-continued.html' title='Swing continued'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111586570625438927</id><published>2005-05-12T09:19:00.000+07:00</published><updated>2005-05-12T09:41:46.283+07:00</updated><title type='text'>NetBeans 4.1 Final released</title><content type='html'>Hôm nay, &lt;a href="http://www.netbeans.org/community/news/index.html#631"&gt;NetBeans 4.1&lt;/a&gt; đã ra xuất xưởng. Với khả năng hỗ trợ Java 5.0 và J2EE mạnh mẽ, NetBeans sẽ là một trong những winner trên thị trường IDE hiện nay. Mặc dù Eclipse phổ biến hơn nhưng Linux sẽ là mảnh đất đầu tiên mà NetBeans đánh bại Eclipse. Tôi thích Eclipse cho PHP nhưng với Java thì tôi thú NetBeans 4.1 hơn. Hi vọng NetBeans 4.2 sẽ hỗ trợ nhiều ngôn ngữ hơn trong đó có PHP, Groovy. Ngoài ra tôi cũng mong NetBeans 4.2 sẽ hỗ trợ xây dựng UML như của JBuilder 2005.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111586570625438927?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111586570625438927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111586570625438927' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111586570625438927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111586570625438927'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/netbeans-41-final-released.html' title='NetBeans 4.1 Final released'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111583020173850239</id><published>2005-05-11T23:40:00.000+07:00</published><updated>2005-05-11T23:50:01.786+07:00</updated><title type='text'>How to use Javadoc in Netbeans 4.1RC2</title><content type='html'>Javadoc là một tài liệu tham khảo vô giá. Nhiều khi bạn sao chép mã từ đâu đó về để đọc và bất thình lình có một API quái quỷ nào đó xuất hiện mà bạn chẳng hiểu chúng làm cái gì. Nếu đó là các API của J2SDK thì bạn có thể tra cứu trong Java Documentation. NetBeans 4.1 cho bạn sét chúng ngay trong IDE và tìm kiếm API đó bằng việc bôi đen và ấn Shift+F1 (hay thủ công hơn là vào menu Tools -&gt; Javadoc Index Search). Để set:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Vào Tools -&gt; Java Platform Manager&lt;/li&gt;   &lt;li&gt;Nhìn bên phải, vào tab Javadoc và chọn đường dẫn đến nó&lt;/li&gt; &lt;/ul&gt; Thế còn nếu API đó là của thư viện nào nằm ngoài;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Vào Tools -&gt; Library Manager&lt;/li&gt;   &lt;li&gt;Chọn tab Javadoc như trên&lt;/li&gt; &lt;/ul&gt; Javadoc Index Search sẽ hiện ra như là một tab bên cạnh tab code mã của bạn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111583020173850239?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111583020173850239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111583020173850239' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111583020173850239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111583020173850239'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/how-to-use-javadoc-in-netbeans-41rc2.html' title='How to use Javadoc in Netbeans 4.1RC2'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111564005036961057</id><published>2005-05-09T18:51:00.000+07:00</published><updated>2005-05-09T19:00:50.396+07:00</updated><title type='text'>What dya know on casting</title><content type='html'>Casting hay chuyển kiểu là một kĩ thuật thường gặp nhưng cần có 2 điểm cần chú ý:&lt;br /&gt;&lt;blockquote&gt;+ Bạn có thể thực hiện chuyển kiểu giữa các primitives types&lt;br /&gt;+ Bạn có thể thực hiện chuyển kiểu giữa các đối tượng dựa trên quan hệ kế thừa&lt;br /&gt;&lt;/blockquote&gt;Nếu bây giờ tôi có một kiểu Int là i = 1. Tôi muốn chuyển nó sang kiểu String để thực hiện việc gán nó vào một chuỗi. Bạn không thể làm:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;int i=10;&lt;br /&gt;String st= new String();&lt;br /&gt;st=(String)i;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Bạn có thể dùng lớp bao Wrapper class để thực hiện việc chuyển đổi:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;String st = Integer.toString(i);&lt;br /&gt;string = String.valueOf(i);&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;hoặc một tiểu xảo tận dụng khả năng tự chuyển đổi khi kết hợp 1 chuỗi với một số là&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;st = ""+i;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111564005036961057?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111564005036961057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111564005036961057' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111564005036961057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111564005036961057'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/what-dya-know-on-casting.html' title='What dya know on casting'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111562005321458949</id><published>2005-05-09T13:23:00.000+07:00</published><updated>2005-05-09T18:50:28.936+07:00</updated><title type='text'>Multi MySQL servers on the same PC: It is a snap</title><content type='html'>MySQL thật dễ chịu. Hôm nay tôi thử cài MySQL 4.0 và MySQL 5.0.4 trên Windows Server 2003 mà không có khó khăn gì. Chỉ cần chọn khác cổng TCP/IP là ngon: 3306/3307. Trên SysTray, MySQL báo là có 2 instances đang chạy.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://img201.echo.cx/img201/9206/mysqlmultiserver9rm.png" border="0" width="239" alt="MySQL 4 and MySQL 5 in the same PC. Image Hosted by ImageShack.us" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111562005321458949?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111562005321458949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111562005321458949' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111562005321458949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111562005321458949'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/multi-mysql-servers-on-same-pc-it-is.html' title='Multi MySQL servers on the same PC: It is a snap'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111555979766010902</id><published>2005-05-08T20:29:00.000+07:00</published><updated>2005-05-08T20:43:17.770+07:00</updated><title type='text'>Swing at a glance</title><content type='html'>Mấy hôm nay lười, lướt qua mấy chương về Thread, Inheritance, Array để nhảy bổ vào Swing cho nó có tí không khí.&lt;br /&gt;&lt;br /&gt;Swing quả là không dễ dàng gì. Ngay cả cái mô hình phân cấp của nó cũng là một vấn đề.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; Each program that uses Swing components has at least &lt;span style="font-weight: bold;"&gt;one top-level container&lt;/span&gt;. This top-level container &lt;span style="font-weight: bold;"&gt;is the root of&lt;/span&gt; a containment hierarchy — the hierarchy that contains all of the Swing components that appear inside the top-level container. &lt;p&gt;  As a rule, a standalone application with a Swing-based GUI   &lt;span style="font-weight: bold;"&gt;has at least one containment hierarchy with a &lt;/span&gt;&lt;code style="font-weight: bold;"&gt;JFrame&lt;/code&gt;&lt;span style="font-weight: bold;"&gt; as its root&lt;/span&gt;. For example, if an application has one main window and two dialogs, then the application has three containment hierarchies, and thus three top-level containers. One containment hierarchy has a &lt;code&gt;JFrame&lt;/code&gt; as its root, and each of the other two has a &lt;code&gt;JDialog&lt;/code&gt; object as its root.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;  &lt;/p&gt; Nếu chỉ đơn giản thế thì còn đỡ, việc bổ sung các thành phần vào một JFrame lại cần chú ý là trên Frame đó còn có content pane và việc bổ sung các thành phần thực ra là đặt trên content pane đó.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src="http://java.sun.com/docs/books/tutorial/figures/uiswing/components/1layers.gif" align="bottom" height="127" width="370" /&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Root pane không phải là sở hữu của JFrame mà&lt;br /&gt;&lt;blockquote&gt; Each top-level container relies on a reclusive intermediate container called the &lt;em&gt;root pane&lt;/em&gt;. The root pane manages the content pane and the menu bar, along with a couple of other containers.&lt;/blockquote&gt;May quá, Sun nói:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;You generally don't need to know about root panes to use Swing components&lt;/span&gt;. However, if you ever need to intercept mouse clicks or paint over multiple components, you should get acquainted with root panes.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111555979766010902?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111555979766010902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111555979766010902' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111555979766010902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111555979766010902'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/swing-at-glance.html' title='Swing at a glance'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111511926799595386</id><published>2005-05-03T18:18:00.000+07:00</published><updated>2005-05-04T09:29:01.526+07:00</updated><title type='text'>Java.sun.com thay đổi giao diện (Java.sun.com redesigned)</title><content type='html'>6h15 phút tối theo giờ HN, trang chủ của &lt;a href="http://java.sun.com/"&gt;Java.sun.com&lt;/a&gt; thay đổi giao diện trong khá ấn tượng. Cảm xúc luôn tạo được sự hứng thú mới.&lt;br /&gt;&lt;br /&gt;Xem một số hình ảnh &lt;a href="http://blogs.sun.com/roller/page/MartinHardee/20050502#sun_com_and_now_for"&gt;ở đây&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111511926799595386?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111511926799595386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111511926799595386' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111511926799595386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111511926799595386'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/javasuncom-thay-i-giao-din-javasuncom.html' title='Java.sun.com thay đổi giao diện (Java.sun.com redesigned)'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111509716041428092</id><published>2005-05-03T10:45:00.000+07:00</published><updated>2005-05-03T12:20:32.166+07:00</updated><title type='text'>Kế thừa (inheritance) và hàm tạo dựng (constructor)</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Kế thừa&lt;/span&gt;: (A subclass inherits all the member variables and methods from  its superclass - The Java Tutorial)&lt;br /&gt;&lt;br /&gt;Một lớp kế thừa chính nó&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;class LevelThree extends LevelThree {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;thì bị báo lỗi biên dịch&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;cyclic inheritance involving ClassNameHere&lt;/blockquote&gt;Trường hợp tương tự cũng xảy ra khi cho lớp A -&gt; lớp B -&gt; lớp C -&gt; lớp A khi đó lớp A bị trình biên dịch báo lỗi nếu A là lớp xuất hiện đầu tiên trong file nguồn.&lt;br /&gt;&lt;br /&gt;Hàm tạo dựng: Constructor chỉ nhận các modifier/specifier là public, private, protected hoặc none (default access:package). Nó không trả lại giá trị được và đặc biệt vì nó không được xem là thành viên của lớp (class member) nên không kế thừa được. &lt;font&gt;Hiểu điều này ra sao??? Phải chăng nếu lớp con không khai báo constructor thì lớp con đó không dùng constructor của siêu lớp mà dùng constructor mặc định.&lt;br /&gt;&lt;br /&gt;Khi một lớp con không khai báo constructor của nó, compiler sẽ gọi phương thức tạo dựng không tham số mà điều này đến lượt nó sẽ gọi constructor không tham số của thằng siêu lớp trực tiếp. Nếu thằng siêu lớp trực tiếp không dùng constructor mặc định thì ... compiling error.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;public class &lt;span style="font-weight: bold;"&gt;DefaultConstructor &lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;  public DefaultConstructor(int i) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;           &lt;br /&gt;      DefaultConstructor nondef = new NonDefault();&lt;br /&gt;      System.out.println("i is ");&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class &lt;span style="font-weight: bold;"&gt;NonDefault &lt;/span&gt;extends DefaultConstructor {&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;có lỗi biên dịch là &lt;span style="font-style: italic;"&gt;cannot find symbol constructor&lt;/span&gt;&lt;span style="font-style: italic;"&gt; DefaultConstructor&lt;/span&gt;. Lý do là NonDefault không định nghĩa constructor cho nên trình biên dịch sẽ dùng constructor không tham số mặc định NonDefault(). Phương thức này đến lượt nó lại gọi phương thức constructor không tham số của siêu lớp. Híc nhưng ở đây, siêu lớp DefaultConstructor không có constructor mặc định nên lỗi xuất hiện.&lt;br /&gt;&lt;br /&gt;Sửa mã trên chút đỉnh để xem các constructor không tham số có kế thừa được không&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;public class DefaultConstructor {&lt;br /&gt; &lt;br /&gt; public int i;&lt;br /&gt; &lt;br /&gt; public DefaultConstructor() {&lt;br /&gt;  &lt;br /&gt;  this.i = 6;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;    &lt;br /&gt;  DefaultConstructor nondef = new NonDefault();&lt;br /&gt;  System.out.println("i is " + &lt;span style="font-weight: bold;"&gt;nondef&lt;/span&gt;.i);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class NonDefault extends DefaultConstructor {&lt;br /&gt; &lt;br /&gt; public NonDefault() { &lt;br /&gt;  &lt;br /&gt; }   &lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ở đây, phương thức tạo dựng không tham số mặc định NonDefault() gọi đến phương thức tạo dựng không tham số của siêu lớp là DefaultConstructor(), phương thức này thực hiện việc gán giá trị 6 vào i. Vì lớp con NonDefault kế thừa i của siêu lớp và kế thừa i = 6 cho nên kết quả biên dịch được và chạy sẽ trả lại i is 6.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111509716041428092?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111509716041428092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111509716041428092' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111509716041428092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111509716041428092'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/k-tha-inheritance-v-hm-to-dng.html' title='Kế thừa (inheritance) và hàm tạo dựng (constructor)'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111491883175189389</id><published>2005-05-01T10:35:00.000+07:00</published><updated>2005-05-01T11:03:53.323+07:00</updated><title type='text'>JDiff - An HTML Report of API Differences</title><content type='html'>Cái tên này đã nói lên rằng nó là phần mềm đi tìm sự khác biệt. Tôi vừa tìm thấy nó trong bài &lt;a href="http://weblogs.java.net/blog/vbrabant/archive/2005/04/i_am_now_a_sun.html"&gt;I am now a Sun Certified Programmer for the J2SE 5.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kinh nghiệm thi của anh ta thật tuyệt và đáng được những người đi sau lắng nghe. Anh ta có giới thiệu công cụ  &lt;a href="http://javadiff.sourceforge.net/"&gt;JDiff&lt;/a&gt;  này để tìm ra sự khác biệt về API giữa Java 1.4 và Java 1.5. Công cụ khá hữu ích. Các bạn thử dùng xem.&lt;br /&gt;&lt;br /&gt;Một công cụ khác cũng rất đáng xem là &lt;a href="http://homepage.mac.com/martin.auer/umlet/"&gt;UMLet&lt;/a&gt;, dùng để vẽ các biểu đồ UML. Nó viết bằng Java. Một công cụ Java tương tự khác là &lt;a href="http://argouml.tigris.org/"&gt;ArgoUML&lt;/a&gt; đang ở giai đoạn phát triển.&lt;br /&gt;&lt;br /&gt;Tiện thể, bạn cũng nên ghé qua &lt;a href="http://java.sys-con.com/"&gt;cổng thông tin Java&lt;/a&gt; mới của JDJ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111491883175189389?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111491883175189389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111491883175189389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111491883175189389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111491883175189389'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/jdiff-html-report-of-api-differences.html' title='JDiff - An HTML Report of API Differences'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111488343610706269</id><published>2005-05-01T00:42:00.000+07:00</published><updated>2005-05-01T00:50:36.113+07:00</updated><title type='text'>Escape character trong Java</title><content type='html'>Có một câu hỏi thi thử như thế này:&lt;br /&gt;&lt;blockquote&gt;   &lt;pre&gt;class EscapeCharacter {&lt;br /&gt;public static void main (String[] args) {&lt;br /&gt; char a = '\c';  // 1&lt;br /&gt; char b = '\r';  // 2&lt;br /&gt; char c = '\"';  // 3&lt;br /&gt; char d = '\b';  // 4&lt;br /&gt; char e = '\'';  // 5&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;/blockquote&gt; &lt;p id="question"&gt; A compile-time error is generated at which line? &lt;/p&gt;    &lt;table border="0"&gt; &lt;tbody&gt;&lt;tr valign="top"&gt; &lt;td&gt;a. &lt;/td&gt;&lt;td&gt;1&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;b. &lt;/td&gt;&lt;td&gt;2&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;c. &lt;/td&gt;&lt;td&gt;3&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;d. &lt;/td&gt;&lt;td&gt;4&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;e. &lt;/td&gt;&lt;td&gt;5&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;f. &lt;/td&gt;&lt;td&gt;None of the above&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;Dấu backslash dùng để chỉ kí tự thoát cho một số character đặc biệt mà thôi. Dùng cho kí tự khác nó sẽ báo lỗi ngay.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;illegal escape character&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Ặc ặc, ở đây họ chơi mẹo. Câu trả lời là a vì c không phải là kí tự để có thể dùng escape character được.&lt;br /&gt;&lt;br /&gt;&lt;span id="remark"&gt;&lt;blockquote&gt; The escape sequences are as follows: '\b' (backspace), '\f' (formfeed), '\n' (newline), '\r' (carriage return), '\t' (horizontal tab), '\\' (backslash), '\"' (double quote), '\'' (single quote). Yes, you must memorize the escape sequences! Just remember "&lt;span style="font-weight: bold;" id="bold"&gt;b&lt;/span&gt;ig &lt;span style="font-weight: bold;" id="bold"&gt;f&lt;/span&gt;arms &lt;span style="font-weight: bold;" id="bold"&gt;n&lt;/span&gt;eed &lt;span style="font-weight: bold;" id="bold"&gt;r&lt;/span&gt;ed&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;" id="bold"&gt;t&lt;/span&gt;ractors". &lt;/blockquote&gt;&lt;/span&gt;Hôm nay được một bài học.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111488343610706269?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111488343610706269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111488343610706269' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488343610706269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488343610706269'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/escape-character-trong-java.html' title='Escape character trong Java'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111488011609426905</id><published>2005-04-30T23:20:00.000+07:00</published><updated>2005-04-30T23:55:53.646+07:00</updated><title type='text'>Các câu hỏi mà bạn có thể gặp trong phỏng vấn tuyển dụng lập trình viên</title><content type='html'>Hôm qua, pcdinh có nảy ra ý định hài hước là thử lập ra các câu hỏi phỏng vấn mà người tuyển dụng có thể hỏi khi tuyển lập trình viên. Sau đây là một số câu trích nguyên văn trong đề xuất của thằng cha này.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 1: Bạn quen dùng ngôn ngữ gì?&lt;/span&gt;&lt;br /&gt;Trả lời: Tất cả các ngôn ngữ trừ Java&lt;br /&gt;Người phỏng vấn nghĩ: Trừ hết điểm và cho out luôn&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 2: Bạn đã làm được những gì với ngôn ngữ mà bạn quen dùng?&lt;/span&gt;&lt;br /&gt;Trả lời: Làm được tất cả mọi thứ trừ những thứ tầm thường.&lt;br /&gt;Người phỏng vấn nghĩ: Chán quá, công ty mình lại không tuyển giám đốc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 3: Ý nghĩ làm một phần mềm đến với bạn như thế nào và bạn thường làm gì để thực hiện?&lt;/span&gt;&lt;br /&gt;Trả lời: Chọn một hệ thống phần mềm thật lớn như ERP, CRM và bắt đầu mơ mộng về nó. Trong lúc mơ mộng, tôi thường suy nghĩ làm cách nào để mỗi một nút trên màn hình giao diện này sẽ được viết bằng một thứ ngôn ngữ khác nhau.&lt;br /&gt;Người phỏng vấn nghĩ: Tài thật, sao mình lại không nghĩ đến việc lập riêng cho hắn một phòng để hắn chuyên nghiên cứu và báo cáo về cách triển khai các hệ thống phần mềm lớn, đa ngôn ngữ lập trình và chạy trên MƠ MỘNG FRAMEWORK nhỉ?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 4: Nếu được chọn thì anh thích lập trình về loại ứng dụng gì: web, desktop, database....?&lt;/span&gt;&lt;br /&gt;Trả lời: Loại ứng dụng mà khách hàng chưa từng yêu cầu. Hi vọng là họ cũng không bao giờ yêu cầu luôn.&lt;br /&gt;Người phỏng vấn nghĩ: Tay này chắc thích hợp với phòng hỗ trợ khách hàng khắc phục sự cố.&lt;br /&gt;&lt;br /&gt;Các bạn còn câu hỏi nào nữa không, gửi lên đây ta làm một bộ sưu tập nào?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111488011609426905?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111488011609426905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111488011609426905' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488011609426905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488011609426905'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/cc-cu-hi-m-bn-c-th-gp-trong-phng-vn.html' title='Các câu hỏi mà bạn có thể gặp trong phỏng vấn tuyển dụng lập trình viên'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111480603066821886</id><published>2005-04-30T03:15:00.000+07:00</published><updated>2005-04-30T03:35:05.350+07:00</updated><title type='text'>JavaTM 2 Platform Standard Edition Development Kit 5.0 Update 3</title><content type='html'>Bản Tiger 1.5 cập nhật lần 3 đã được &lt;a href="http://java.sun.com/j2se/1.5.0/ReleaseNotes.html#150_03"&gt;công bố với trên 70 lỗi đã được sửa&lt;/a&gt;. Mời các bạn tải về để thử nghiệm.&lt;br /&gt;&lt;br /&gt;Trong bản này, ông Graham đã xác nhận:&lt;br /&gt;&lt;blockquote&gt;So there are no API changes and the release teams are very conservative in which bug fixes they accept&lt;/blockquote&gt;Để tránh việc người dùng có thể chờ đến bản 5.1, ông cũng &lt;a href="http://weblogs.java.net/blog/kgh/archive/2005/04/j2se_50_update.html"&gt;nói là sẽ không có bản 5.1&lt;/a&gt; mà thay vào đó:&lt;br /&gt;&lt;blockquote&gt; We will be going straight from Tiger to Mustang, with only small update releases in between&lt;/blockquote&gt;Cũng nhân chuyện này, tôi xin có nhắc chút đến việc &lt;a href="http://java.sun.com/docs/books/tutorial/index.html"&gt;The Java Tutorial&lt;/a&gt; của Sun vừa cập nhật thêm. Ngày cập nhật là ngày 15/4/2005. Tôi nghĩ là nhiều bạn sẽ muốn xem cuốn này vì nó là tài liệu căn bản nhất cho người mới học Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111480603066821886?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111480603066821886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111480603066821886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111480603066821886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111480603066821886'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/javatm-2-platform-standard-edition.html' title='JavaTM 2 Platform Standard Edition Development Kit 5.0 Update 3'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111451200360590188</id><published>2005-04-26T17:25:00.000+07:00</published><updated>2005-04-26T17:41:39.060+07:00</updated><title type='text'>Hiện tượng weblog ở Mỹ</title><content type='html'>Cập nhật nhanh, ngắn gọn, &lt;b&gt;viết&lt;/b&gt; bằng nhiệt huyết, những thông tin đăng tải trên các weblog đang thu hút mạnh những độc giả thích lang thang trên mạng để tìm những thông tin nóng nhất, kèm theo những lời bình luận sắc bén.&lt;br /&gt;&lt;br /&gt;Không phải ngẫu nhiên mà tuần báo Mỹ Time bỗng quan tâm đến tác giả các weblog (đọc we-&lt;b&gt;blog&lt;/b&gt;) ở Mỹ hoàn toàn vô danh đối với công chúng báo chí truyền thống (báo&lt;br /&gt;&lt;b&gt;viết&lt;/b&gt;, báo ảnh) nhưng lại nổi tiếng trên mạng Internet.&lt;br /&gt;&lt;br /&gt;Time định nghĩa weblog là “những website nghiệp dư đăng tải tin tức, thông tin và nhất là dư luận quần chúng, nhằm phục vụ những đối tượng quan tâm đến một hoặc hai vấn đề gì đó hoặc đơn giản bị chính tác giả weblog mê hoặc”. Nhân tiện, tờ Time nêu tên 3 tác giả weblog (thường gọi là blogger) nổi tiếng ở Mỹ. Đó là Mathew Gross, 32 tuổi, nguyên là nhà văn tự do; Rob Malda, 28 tuổi, cựu sinh viên và Denis Dutton, 60 tuổi, cựu giáo sư triết học.&lt;br /&gt;&lt;br /&gt;Hiện tượng weblog - một dạng thời luận trực tuyến - bùng nổ từ cuối thập niên 1990. Xuất hiện dưới dạng website, các blogger chủ yếu cung cấp thông tin đề cập tới những chủ đề chọn lọc, không giống như các báo truyền thống. Trên thực tế, các blogger là những nhà quan sát nhạy&lt;br /&gt;bén và chuyên gia trong một lĩnh vực nào đó. Được các phần mềm hỗ trợ dễ sử dụng, các weblog phổ biến rất nhanh. Ai cũng có thể dễ dàng tạo ra một weblog cho mình.&lt;br /&gt;&lt;br /&gt;Tuy vậy, làm cho một weblog sống thọ không dễ chút nào. Thậm chí đã có người thân bại, danh liệt vì nó. Đó là trường hợp của một thống đốc Mỹ có tên Trent Lott. Ông này dùng weblog của mình tung lên mạng những nhận xét mang tính chất hoài cổ luyến tiếc thời vàng son của chủ&lt;br /&gt;nghĩa kỳ thị chủng tộc. Đây là đề tài mà báo chí truyền thông Mỹ bỏ qua từ lâu. Kết quả, Trent Lott phải trả giá cho thái độ chính trị “không đúng đắn” của mình là mất ghế thống đốc. Theo Time, Trent Lott là nạn nhân đầu tiên ở Mỹ vì cái weblog của mình.&lt;p&gt;&lt;br /&gt;&lt;/p&gt;Vì bất cứ ai cũng có thể trở thành nhà báo nghiệp dư nhờ weblog, hiện tượng phát triển ồ ạt các weblog trên mạng đang gây sự chú ý lẫn nỗi lo âu của một số người ở Mỹ. Nó tạo ra một phong cách mới của cư dân Internet. Theo Blogcount, một cơ quan chuyên về weblog, tính đến tháng&lt;br /&gt;&lt;p&gt;6-2003, thế giới có từ 2,4 triệu đến 2,9 triệu weblog còn hoạt động, chiếm 1/3 số weblog được tạo ra trên khắp thế giới; 2/3 còn lại, vì lý do này nọ, không còn hoạt động nữa. Tiếng Anh là ngôn ngữ thường dùng của các blogger, chiếm trên 50% weblog thế giới.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ai đọc weblog? Theo Blogads, một website chuyên nghiên cứu hiện tượng weblog, phần lớn độc giả của weblog (61%) trên 30 tuổi và có thu nhập khá cao (75%). Tại Mỹ 40% độc giả của weblog có thu nhập trên 90.000 USD/năm. Hầu hết đều là dân Internet chính hiệu, thường mua sắm qua&lt;br /&gt;mạng (sách, vé máy bay v.v...). Đa số độc giả weblog là dân ghiền thời sự trên net, 54% lượng thông tin mà họ biết nhờ đọc weblog và các báo điện tử, chỉ có 16,5% nhờ đọc báo &lt;b&gt;viết&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Weblog trở thành kẻ cạnh tranh đáng gờm với báo chí truyền thống vì nó hoạt động như kính lúp. Mỗi weblog đào sâu một vấn đề, lôi kéo độc giả cùng tham gia phân tích, bình phẩm vấn đề đó đến nơi đến chốn. Sức chiến đấu mạnh mẽ của blogger cũng là một đặc trưng của weblog.&lt;br /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left"&gt;&lt;img id="StoryAvatar" src="http://images6.us.tintucvietnam.com/Uploaded/huongnt/matviec2304.jpg" alt="" border="0" height="283" width="200" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Một công nhân Mỹ đã bị sa thải vì công bố hình ảnh này trên báo chí&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;Ở Mỹ gần đây là trường hợp của Russ Kick.&lt;br /&gt;&lt;p&gt;Qua weblog của mình, ngày 21-4-2004,&lt;br /&gt;Kick đã tung lên mạng hình ảnh những quan tài xác lính Mỹ chết trận ở Iraq. Chỉ 2 ngày sau, 4 triệu trang weblog của Kick đã được độc giả tải xuống chỉ trong một ngày. Thông tin của Kick đã làm Chính phủ Mỹ lúng túng bởi những tấm ảnh này đã được kiểm duyệt rất kỹ, báo chí truyền thống không biết hoặc không dám đưa.&lt;br /&gt;&lt;br /&gt;Theo &lt;i&gt;Người lao động&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111451200360590188?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111451200360590188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111451200360590188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111451200360590188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111451200360590188'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/hin-tng-weblog-m.html' title='Hiện tượng weblog ở Mỹ'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111450502513672444</id><published>2005-04-26T15:17:00.000+07:00</published><updated>2005-04-26T15:43:45.136+07:00</updated><title type='text'>Người Việt viết blog</title><content type='html'>Người Việt Nam yêu chuộng thơ văn và cũng có khả năng viết lách tốt. Đó là điều kiện để xu hướng viết blog trong cộng đồng người Việt phát triển. Người Việt ở nước ngoài có điều kiện sống tốt hơn và dân trí cũng cao hơn cho nên họ đã đi trước người trong nước đến cả 3-4 năm. Những blog có thời gian lâu nhất mà tôi tìm thấy được viết bởi người Việt có từ năm 2001. Ở trong nước, gần như blog không phát triển. Anh bạn viết blog cùng tôi là pcdinh viết blog từ năm 2003 trên &lt;a href="http://www.jroller.com/page/pcdinh"&gt;JRoller&lt;/a&gt; và đến 6/2004 mới chính thức viết blog trên site của anh ta ở PHPVietnam.net. Bây giờ thì cái site đó tạm ngừng hoạt động.&lt;br /&gt;&lt;br /&gt;Trong nước, một số bạn cũng viết blog từ đầu năm 2004 nhưng chỉ một hay hai blog là biết cách viết. Hôm nay, pcdinh gửi cho tôi một loạt các blog mà anh ta tìm được và xem là blog thực sự. Tôi thấy khá hay và đã lập mục Vietnamese blogs riêng. Tôi cũng như pcdinh mong muốn lập ra một blog roll các site blog viết bằng tiếng Việt để có thể chia sẻ suy nghĩ, tri thức và giải pháp.&lt;br /&gt;&lt;br /&gt;Đây có phải là ý tưởng tốt không, hỡi những người đi tiên phong?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111450502513672444?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111450502513672444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111450502513672444' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450502513672444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450502513672444'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/ngi-vit-vit-blog.html' title='Người Việt viết blog'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111450326977779680</id><published>2005-04-26T15:08:00.000+07:00</published><updated>2005-04-26T15:30:52.453+07:00</updated><title type='text'>Người Hàn Quốc khám phá ra một thế giới hết sức mới mẻ, 'blog'</title><content type='html'>&lt;blockquote&gt;Bạn lao vào một ai đó tại sân ga điện ngầm trong khi chờ đợi chuyến tàu. Đôi khi, thật lạ lùng, bạn cảm thấy người đó trông rất quen như thể bạn đã từng gặp ở đâu đó bao giờ rôi. Chỉ sau vài giây, bạn mới phát hiện ra đó chỉ là cảm giác ngờ ngợ, một kết quả kỳ lạ của thói quen tìm kiếm các trang thông tin cá nhân, có thể gọi là 'blogging'&lt;br /&gt;Khi bạn tìm kiếm trên internet, bạn sẽ cảm thấy thật dễ dàng để đột nhập vào cuộc sống thường ngày của một ai đó, từ món ăn họ vừa ăn ngày hôm qua cho đến công việc mà họ đang đảm trách. Chỉ sử dụng một con chuột, bạn có thể biến thành người vô hình, lướt qua những thông tin cá nhân của họ chỉ.&lt;br /&gt;&lt;br /&gt;Theo yahoo.com. "blog" - hay "Web log" - là những trang internet không phục vụ mục đích thương mại và chỉ bao gồm nhật ky cá nhân, ảnh cá nhân và link đến địa chỉ các site khác. Những chủ trang web này coi đây là một phương tiện rất dễ dàng và thuận tiện để tạo ra một trang web cá nhân mà không cần những kỹ thuật thiết kế web.&lt;br /&gt;&lt;br /&gt;Cyworld.com, là một website cổng truy cập thuộc SK, đóng một vai trò hết sức quan trọng trong việc giới thiệu văn hóa "blog" tại Hàn Quốc. Công ty này cung cấp dịch vụ 'blog' miễn phí và không có giới hạn.&lt;br /&gt;Trưởng phòng marketing KIm Ki-duk cho biết "Chúng tôi không chí giới thiệu dịch vụ này mà còn thành công trong việc làm cho nó thích nghi với thế hệ trẻ của Hàn Quốc". "Theo con số thống kê gần đây, lứa tuổi từ 15 đến 32 là lứa tuổi chủ yếu sử dụng dịch vụ của chúng tôi, cùng với 90% phụ nữ là ở độ tuổi từ 19 đến 24".&lt;br /&gt;Vậy đâu là thế hệ trẻ tuổi nhất sử dụng dịch vụ này?&lt;br /&gt;&lt;br /&gt;Cô sinh viên Kim Sung Soo, 22 tuổi là chủ nhân của trang (www.cyworld.com/erickim) với ảnh của bản thân và các bài tiểu luận ngắn dưới dạng ký sự, cho biết "Tôi cho rằng qua việc post lên những bài viết của bản thân và những suy nghĩ hiện tại của tôi, tôi không chỉ có cơ hội tốt hơn để nhìn lại chính bản thân mình, mà còn thu hút được rất nhiều người, và càng ngày càng có nhiều người mới truy cập vào trang của tôi. Tôi đã vận hành trang này được 10 tháng rôi va tôi tin tưởng rằng tôi đã thu lợi từ trang web này. Qua trang web này tôi có cơ hội để liên lạc được với các bạn học cũ đã mất liên lạc từ lâu"&lt;br /&gt;&lt;br /&gt;Vậy, có thể nói, 'Blog' còn là cách để duy trì các mối quan hệ&lt;br /&gt;&lt;br /&gt;Sung Min-ji, 23 tuổi , cho biết "Đặc biệt là khi tôi đang học tập ở Mỹ xa cách quê hương thì các chức năng của trang web này giúp tôi liên lạc được với gia đình và bạn bè trong nước". "Qua trang web này họ biết được cuộc sống hàng ngày của tôi và thậm chí còn xem được tâm trạng của tôi đơn giản chỉ bằng cách vào những album ảnh và trang thông báo của tôi".&lt;br /&gt;Mặc dù 'blog' có rất nhiều tiện ích, song cũng không phải có nhiều vấn đề này sinh. Theo Click, một cơ quan đánh giá độc lập của Hàn Quốc, số truy câp trung bình vào trang Cyworld.com blog kéo dài đến 221 phút.&lt;br /&gt;&lt;br /&gt;Một nhân viên trong văn phòng cho biết "Một khi bạn vào những trang này, rất khó có thể dừng lại được, và chỉ một thời gian ngắn bạn sẽ nhận ra rằng bạn đã quá lãng phí thời gian trên mạng, khám phá các trang thông tin cá nhân của người khác, để lại những lời bình, trang trí lại trang web của chính bạn và còn vô vàn những việc khác nữa. Đôi khi tôi làm việc này ngay tại văn phòng trong khi tôi dự định làm việc. Chính vì vây, giờ đây tôi đang cố gắng rèn giũa kỷ luật cho bản thân bằng viện hạn chế thời gian vào những công việc này".&lt;br /&gt;Văn hoa 'Blog' đang làm ảnh hưởng đến những thông tin cá nhân, vì vậy Cyworld.com đang cho phép chủ các trang web hạn chế việc truy cập vào các thông tin cá nhân của họ.&lt;br /&gt;Noh Jin-na, thư ký, 27 tuổi cho biết, "Đôi khi tôi thấy không tự nhiên và sợ tiết lộ đời tư của mình đối với người mà mình không quen biết. "Tôi đã được chứng kiến rất nhiều cô gái lâm vào hoàn cảnh khó xử khi bạn trai cũ của cô tìm được những trang web này".&lt;br /&gt;Song một nhân viên của Cyworld.com cho biết có thể giúp cho mọi người tiết lộ một số thông tin mà họ muốn.&lt;br /&gt;"Xu thế thường thấy ở những người mở trang web thông tin cá nhân của chúng tôi là mong muốn nổi tiếng, thông qua việc giãi bày bản thân, người ta tìm được cách để bày tỏ ý tưởng riêng của họ tại một thế giới mới mẻ này".&lt;br /&gt;"Có thể nói rằng Cyworld có đóng góp lớn trong việc tạo ra hội chứng 'eoljjang' và 'momjjang', quá tập trung vào vẻ ngoại hình. Đó chính là hai từ "khuôn mặt đẹp nhất" và 'hình thể đẹp nhất".&lt;br /&gt;"Song xu hướng về kỹ thuật thì vẫn theo dòng chảy tự nhiên, từ analog cho đến kỹ thuật số, từ giao tiếp bằng văn bản tiến tới giao tiếp bằng thị giác". Kim cho biết "về cơ bản chúng ta chỉ cho khách hàng những gì mà chúng ta cung cấp được. Còn sự lựa chọn để tạo nên không gian riêng cho bản thân với những công cụ có sẵn thì hoàn toàn phụ thuộc vào họ".&lt;br /&gt;&lt;br /&gt;Ha Jee-hyun, một nhà tâm thần học của Bệnh viên thần kinh Yongin đã giải thích cho cái mốt nhất thời trong giới trẻ như sau:.&lt;br /&gt;"Chủ nghĩa phô trương và mong muốn về sự riêng tư là hai mặt của một đồng xu", cơ cấu hai mặt trong thần kinh của mỗi con người. Có lúc chúng ta muốn thoát khỏi sự chú ý cũng như không phải trở thành chủ đề cho những câu chuyện tầm phào của mọi người, đôi khi chúng ta lại muốn chia sẻ những cảm xúc riêng tư với cả thế giới này. Các bạn hãy nhớ lại những cuốn băng video chụp trong nhà mà người ta gửi đến một buổi chiếu phim mà xem. Các trang web cá nhân cũng không có gì khác biệt là mấy".&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;(Chép từ: &lt;a href="http://www.korea.net/News/news/LangView.asp?serial_no=4105&amp;lang_no=7&amp;amp;part=105&amp;amp;SearchDay="&gt;korea.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tiếc là nhà báo Hàn Quốc viết bài này đã không nhận thức được đầy đủ ý nghĩa của Blog cho nên gọi blog là cái mốt nhất thời. Trong thế giới Blog, tiếng Hàn vẫn có vẻ như là một ngôn ngữ xa lạ. Tuy nhiên, bài viết này cho chúng ta thêm một cách nhìn về thế giới blog ở một đất nước nằm ở Châu Á.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111450326977779680?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111450326977779680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111450326977779680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450326977779680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450326977779680'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/ngi-hn-quc-khm-ph-ra-mt-th-gii-ht-sc.html' title='Người Hàn Quốc khám phá ra một thế giới hết sức mới mẻ, &apos;blog&apos;'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111444861013472637</id><published>2005-04-25T23:28:00.000+07:00</published><updated>2005-04-26T00:03:30.140+07:00</updated><title type='text'>Khai báo constructor</title><content type='html'>Phương thức tạo dựng constructor có ký dạng (signature) như sau:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;modifiers ClassName(arguments) throwsClause {&lt;br /&gt;// Constructor body&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Vì a constructor cannot have a return type nên có thể dễ dàng phân biệt constructor trong số các phương thức có cùng tên với tên lớp.&lt;br /&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;public &lt;span style="font-weight: bold;"&gt;void &lt;/span&gt;MyClassName() {}    // not a constructor&lt;br /&gt;public MyClassName() {}         // constructor&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Nhưng phần thân constructor body có thể có một câu lệnh return với điều kiện là không trả lại giá trị nào.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Một constructor &lt;b&gt;có thể dùng&lt;/b&gt; các access modifiers &lt;b&gt;public, protected&lt;/b&gt; hay &lt;b&gt; private&lt;/b&gt; hoặc no access modifier (package access)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Một constructor &lt;b&gt;không thể dùng&lt;/b&gt; các modifiers &lt;b&gt;abstract, static, final, native, synchronized&lt;/b&gt; hay &lt;b&gt;strictfp&lt;/b&gt; &lt;span class="ref"&gt;(JLS §8.8.3)&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Các constructor không thể được xem như là &lt;i&gt;class members&lt;/i&gt;, chúng không thể được kế thừa&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Nếu một constructor của lớp không được khai báo thì một default constructor được compiler cung c&lt;br /&gt;&lt;pre class="code"&gt;        &lt;i&gt;modifiers&lt;/i&gt; ClassName() {&lt;br /&gt;           super();               &lt;br /&gt;       }&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Một default constructor có cùng access modifier như chính lớp đó, hoặc là: public, protected, private hay package (no modifier)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Để không cho một lớp bị tạo mẫu từ khai báo lớp bên ngoài bạn có thể tạo ra một &lt;b&gt;private&lt;/b&gt; constructor.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Cạm bẫy trong thi cử&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Một lớp con có constructor mặc định trong khi siêu lớp lại không có constructor mặc định (no-args constructor) hoặc no-arg constructor của nó có mệnh đề throws&lt;/li&gt;   &lt;li&gt;constructor được khai báo có kiểu trả lại.&lt;/li&gt; &lt;/ul&gt; &lt;strong&gt;Default Constructors hay phương thức tạo dựng không đối số&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Giả sử bạn có một siêu lớp và một lớp con như sau:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;class A {&lt;br /&gt;   A() {/* ... */}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class B extends A {/* ... */}&lt;/blockquote&gt;và bạn tạo một mẫu của B:&lt;br /&gt;&lt;br /&gt;B bref = new B();&lt;br /&gt;&lt;/pre&gt;B không định nghĩa constructors, nhưng B mở rộng từ A, và A có một constructor cần dùng để gọi cho mẫu của B.&lt;br /&gt;&lt;br /&gt;Điều xảy ra ở đây là một default constructor đuwocj sinh ra tự động, và constructor đó gọi constructor không đối số của siêu lớp. Do vậy "new B()" sẽ dẫn đến việc default constructor được sinh ra cho B được gọi, và đến lượt nó lại gọi phương thức tạo dựng không đối số của A.&lt;br /&gt;&lt;p&gt;Phương thức tạo dựng được sinh ra có từ khóa điều khiển truy cập (access modifier) là "public" nếu class đó là public, hoặc constructor đó có điều khiển default access khi không chỉ định modifier.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thực sự thì bạn có thể quan sát được cách default constructor tạo ra trong mã. Ví dụ với mã&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;class A {}&lt;/pre&gt;&lt;/blockquote&gt;kết quả của "javap -c"&lt;br /&gt;&lt;pre&gt;   Method A()&lt;br /&gt; 0 aload_0&lt;br /&gt; 1 invokespecial #3 &amp;lt;Method java.lang.Object()&amp;gt;&lt;br /&gt; 4 return&lt;br /&gt;&lt;/pre&gt;Nói cách khác, một constructor dùng cho A được sinh ra, và nó đơn thuần chỉ gọi phương thức ạo dựng của siêu lớp (ở đây là java.lang.Object).&lt;br /&gt;&lt;p&gt;Kinh nghiệm viết mã cho thấy nói chung là không nên dựa dẫm vào default constructor. Trong trường hợp đó, bạn nên có lời chú thích. Bạn có thể kiểm soát được việc tạo mẫu cho lớp (class instantiation) bằng cách dùng phương thức tạo dựng protected hay private. Ví dụ, một lớp được dùng như là phương tiện đóng gói cho các phương thức và biến của lớp có thể định nghĩa một private constructor, khiến cho nó không thể tạo mẫu được.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111444861013472637?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111444861013472637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111444861013472637' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111444861013472637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111444861013472637'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/khai-bo-constructor.html' title='Khai báo constructor'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111436199851443252</id><published>2005-04-24T23:13:00.000+07:00</published><updated>2005-04-24T23:59:58.516+07:00</updated><title type='text'>Overriding in Java 5.0</title><content type='html'>"Override" - hay cài đặt lại - thuật ngữ dùng để chỉ khả năng lớp con định nghĩa lại một phương thức đã được định nghĩa trong siêu lớp. Ở Java 1.4, điều này chỉ có thể thực hiện được nếu lớp con sử dụng lại method signature (ký dạng) của siêu lớp bao gồm tên và danh sách tham số. Nhưng ở Java 5.0, bạn sẽ thấy một ngạc nhiên nho nhỏ:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;p&gt;/*&lt;br /&gt;This program demostrates overriding in Java 5.0&lt;br /&gt;*/       &lt;/p&gt;&lt;p&gt;public class &lt;span style="font-weight: bold;"&gt;OverRiding &lt;/span&gt;{&lt;br /&gt;  public static void main (String s[]) {&lt;/p&gt;&lt;p&gt;        SuperClass superClass = null;&lt;br /&gt;      SubClass subClass = new SubClass();&lt;/p&gt;&lt;p&gt;        /* assigning subclass instance to superclass referance*/&lt;/p&gt;&lt;p&gt;        superClass = subClass;&lt;br /&gt;      superClass.testMethod();&lt;/p&gt;&lt;p&gt;    }       &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 51, 51);"&gt;/* Definition for super class */&lt;/span&gt;&lt;br /&gt;class &lt;span style="font-weight: bold;"&gt;SuperClass &lt;/span&gt;{&lt;/p&gt;&lt;p&gt;    public SuperClass() {&lt;br /&gt;  &lt;br /&gt;   }&lt;/p&gt;&lt;p&gt;    public SuperClass(String str) {&lt;br /&gt;      System.out.println(str);&lt;br /&gt;  }       &lt;/p&gt;&lt;p&gt;    public &lt;span style="color: rgb(51, 51, 255);"&gt;SuperClass&lt;/span&gt; &lt;span style="font-style: italic;"&gt;testMethod&lt;/span&gt;() {&lt;/p&gt;&lt;p&gt;       return new SuperClass(“SuperClass“);&lt;br /&gt;  }      &lt;/p&gt;&lt;p&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;/* Definition for sub class */&lt;/span&gt;&lt;br /&gt;class &lt;span style="font-weight: bold;"&gt;SubClass &lt;/span&gt;extends &lt;span style="font-weight: bold;"&gt;SuperClass &lt;/span&gt;{&lt;br /&gt;  public SubClass() {&lt;br /&gt;&lt;/p&gt;&lt;p&gt;   }&lt;/p&gt;&lt;p&gt;   public SubClass(String str) {&lt;br /&gt;      System.out.println(str);&lt;br /&gt;  }       &lt;/p&gt;&lt;p&gt;   /* overriding &lt;span style="color: rgb(0, 0, 0);"&gt;testMethod&lt;/span&gt;() with subclass‘s return type */&lt;br /&gt;  public &lt;span style="color: rgb(51, 51, 255);"&gt;SubClass&lt;/span&gt; &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;testMethod&lt;/span&gt;(){&lt;br /&gt;      return new SubClass(“SubClass”);&lt;br /&gt;  }       &lt;/p&gt;&lt;p&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;Như vậy là chúng ta có thể có &lt;span style="font-style: italic; font-weight: bold;"&gt;kiểu trả lại là kiểu khác&lt;/span&gt; miễn sao là kiểu này là lớp con của kiểu trả lại của phương thức siêu lớp.  Ở đây, testMethod của lớp con trả lại kiểu SubClass còn testMethod của siêu lớp trả lại kiểu SuperClass.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111436199851443252?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111436199851443252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111436199851443252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111436199851443252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111436199851443252'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/overriding-in-java-50.html' title='Overriding in Java 5.0'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111435853275822122</id><published>2005-04-24T22:46:00.000+07:00</published><updated>2005-04-25T00:02:04.190+07:00</updated><title type='text'>SCJP Tiger Study Guide</title><content type='html'>Tìm được cái link này khá hay: &lt;a href="http://java.boot.by/scjp-tiger/"&gt;SCJP Tiger Study Guide&lt;/a&gt;. Mặc dù chưa hoàn thiện nhưng nó cho cũng cho mình hướng học.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111435853275822122?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111435853275822122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111435853275822122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111435853275822122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111435853275822122'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/scjp-tiger-study-guide.html' title='SCJP Tiger Study Guide'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111428702131155860</id><published>2005-04-24T02:56:00.000+07:00</published><updated>2005-04-24T03:10:21.313+07:00</updated><title type='text'>Hà Nội đào tạo chứng chỉ Java của Sun</title><content type='html'>Alliant là Trung tâm đào tạo đầu tiên ở Hà Nội triển khai các khóa học về Java của Sun. Tin tức này sẽ có thể gây sự hào hứng mới đối với các đối tượng muốn đi sâu về công nghệ này.&lt;br /&gt;&lt;br /&gt;Giờ học về Java thì thực chất chỉ có khoảng 40 giờ (tương đương với 20 buổi, mỗi buổi 2 tiếng, nếu một tuần có 2 buổi thì bạn sẽ học trong 10 tuần, nghĩa là vào khoảng 2 tháng rưỡi), một khoảng thời gian khá ngắn ngủi để có thể nắm được ngôn ngữ này.&lt;br /&gt;&lt;br /&gt;Thông tin thêm xem ở &lt;a href="http://www.goldenkey.edu.vn/vi/index.php?option=com_content&amp;task=view&amp;amp;id=253&amp;amp;Itemid=39"&gt;đây&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111428702131155860?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111428702131155860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111428702131155860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111428702131155860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111428702131155860'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/h-ni-o-to-chng-ch-java-ca-sun.html' title='Hà Nội đào tạo chứng chỉ Java của Sun'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111427797165567622</id><published>2005-04-24T00:33:00.000+07:00</published><updated>2005-04-24T01:27:54.873+07:00</updated><title type='text'>Right tool for right purpose: Netbeans and Eclipse</title><content type='html'>Eclipse đã thắng thế trước NetBeans được một thời gian. Nhưng &lt;a href="http://netbeans.org/"&gt;NetBeans 4.1&lt;/a&gt; đang có những bước đột phá lớn khi khiến người lập trình muốn đặt lại câu hỏi thực sự: phải chăng là lúc &lt;a href="http://api.blogs.com/the_catch_blog/2005/04/eclipse_or_netb.html"&gt;nên quay lại với NetBeans&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111427797165567622?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111427797165567622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111427797165567622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111427797165567622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111427797165567622'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/right-tool-for-right-purpose-netbeans.html' title='Right tool for right purpose: Netbeans and Eclipse'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111418630476338443</id><published>2005-04-22T23:03:00.000+07:00</published><updated>2005-04-22T23:13:57.186+07:00</updated><title type='text'>Tin về Java, NetBeans và ArrgoUML ngày 21/4</title><content type='html'>ArrgoUML bản mới đã ra mắt cách đây ít ngày. Bản stable hiện tại là bản &lt;a href="http://argouml.tigris.org/download/release018.html"&gt;0.18.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Các thông tin về các bản phát triển hằng ngày: &lt;a href="http://www.lysator.liu.se/xenofarm/argouml/result.html"&gt;http://www.lysator.liu.se/xenofarm/argouml/result.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NetBeans 4.1 đã có bản &lt;a href="http://www.netbeans.org/community/news/index.html#621"&gt;Realease Candidate&lt;/a&gt;. Đây là bản tiếp theo của bản Beta ra mắt cách đây hơn 1 tháng. Có thể xem thêm &lt;a href="http://blogs.sun.com/roller/page/roumen/20050421#netbeans_quality_in_numbers"&gt;bài này&lt;/a&gt; để biết về tình hình fix lỗi của NetBeans.&lt;br /&gt;&lt;br /&gt;Cùng với NetBeans 4.1, bạn có thể tải về bộ Netbeans 4.0 &lt;a href="http://java.sun.com/j2se/1.4.2/download.html"&gt;phân phối kèm&lt;/a&gt; với J2SE 1.4.2_08 mới nhất&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111418630476338443?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111418630476338443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111418630476338443' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111418630476338443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111418630476338443'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/tin-v-java-netbeans-v-arrgouml-ngy-214.html' title='Tin về Java, NetBeans và ArrgoUML ngày 21/4'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111415737241391689</id><published>2005-04-22T15:02:00.000+07:00</published><updated>2005-04-22T15:09:32.413+07:00</updated><title type='text'>Những tin mới về MySQL, PostgreSQL trong tháng 4</title><content type='html'>&lt;a href="http://mysql.new21.com/Downloads/MySQL-5.0/mysql-5.0.4-beta-win32.zip"&gt;MySQL 5.0.4&lt;/a&gt; đã có để tải về.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/about/news.306"&gt;PL/Java 1.1.0&lt;/a&gt; đã được công bố trên site của PostgreSQL. Java trở thành một ngôn ngữ được hỗ trợ đầy đủ để thực hiện các hàm, các thủ tục thường trú trên PostgreSQL 8.0.&lt;br /&gt;&lt;br /&gt;Dự án &lt;a href="http://www.postgresql.org/about/news.308"&gt;Bizgre&lt;/a&gt; được công bố nhằm đưa PostgreSQL trở thành một phần mềm cơ sở dữ liệu mã nguồn mở đủ mạnh để triển khai cho các ứng dụng business intelligence. Việc phát triển sẽ dự định đưa vào các tính năng:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;full table partitioning&lt;/li&gt;&lt;br /&gt;&lt;li&gt;high-speed java-based bulk loader&lt;/li&gt;&lt;br /&gt;&lt;li&gt;interactive configuration script&lt;/li&gt;&lt;br /&gt;&lt;li&gt;performance knowledge base&lt;/li&gt;&lt;br /&gt;&lt;li&gt;solaris binaries&lt;/li&gt;&lt;br /&gt;&lt;li&gt;improvements to PostgreSQL I/O&lt;/li&gt;&lt;br /&gt;&lt;li&gt;configurations for popular DSS software&lt;/li&gt; &lt;/ul&gt;  Dự án Bizgres có trang chủ đặt tạo &lt;a href="http://www.bizgres.org/"&gt;www.bizgres.org&lt;/a&gt; và việc phát triển sẽ diễn ra trên pgFoundry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111415737241391689?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111415737241391689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111415737241391689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111415737241391689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111415737241391689'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/nhng-tin-mi-v-mysql-postgresql-trong.html' title='Những tin mới về MySQL, PostgreSQL trong tháng 4'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111414954039587362</id><published>2005-04-22T12:39:00.001+07:00</published><updated>2005-04-22T13:07:39.196+07:00</updated><title type='text'>Ternary operator: toán tử 3 ngôi</title><content type='html'>Cấu trúc của toán tử 3 ngôi:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;(biểu thức điều kiện) ? (giá trị trả lại nếu true) : (giá trị trả lại nếu false)&lt;/code&gt;&lt;/blockquote&gt;Áp dụng:&lt;br /&gt;&lt;br /&gt;Trong phép gán:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;// code to assign the minimum value&lt;br /&gt;minVal = a &lt; b ? a : b;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;hoặc:&lt;tt&gt;&lt;blockquote&gt;// xác định xem có bị phạt do đi xe quá tốc độ không&lt;br /&gt;&lt;br /&gt;giveTicket = speed &gt; speedLimit ? true : false;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tt&gt;hay khi so sánh nhiều điều kiện dài hơi:&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;&lt;tt&gt;// xác định nên có nên dừng xe lại không&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;stopCar = lightIsRed || trafficIsStopped ||&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;    outOfGas || wallInFront ? true : false;&lt;/tt&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;tt&gt;Dùng trong điểu khiển dòng chương trình (control flow):&lt;br /&gt;&lt;tt&gt;&lt;blockquote&gt;if (speed &gt; speedLimit ? true : false;)&lt;br /&gt;&lt;/blockquote&gt;&lt;/tt&gt;Nhưng mà dùng cái này làm giảm readability và maintainability.&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111414954039587362?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111414954039587362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111414954039587362' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111414954039587362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111414954039587362'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/ternary-operator-ton-t-3-ngi_22.html' title='Ternary operator: toán tử 3 ngôi'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111402018341492888</id><published>2005-04-21T00:17:00.000+07:00</published><updated>2005-04-21T01:03:03.420+07:00</updated><title type='text'>Giải mã modifiers</title><content type='html'>Modifier được hiểu là từ khóa sửa đổi. Chúng ta dùng nó để thực hiện việc sửa đổi cho classes, methods, và variables. Có 2 loại modifiers -- access modifiers - từ khóa sửa đổi truy cập và non-access modifiers - từ khóa sửa đổi không truy cập. Từ khóa sửa đổi truy cập cho phép chúng ta giới hạn truy cập hoặc mở rộng diện truy cập vào mã của chúng ta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Class modifiers - Từ khóa sửa đổi lớp&lt;/span&gt;&lt;br /&gt;Access modifiers có các dạng public, private, và protected. Tuy nhiên, mộ lớp ở mức top-level thì chỉ có mức truy cập là public và default. Nếu không chỉ rõ từ khóa sửa đổi thì lớp đó có mức truy cập là default. Chỉ có các lớp nằm trong cùng một package mới có thể cầu viện được một lớp có mức truy cập default. Khi một lớp được khai báo là public, thì tất cả các lớp từ các package khác cũng có thể truy cập vào nó được.&lt;br /&gt;&lt;br /&gt;Ngoài ra còn có các non-access modifier trên các lớp ví dụ final, không cho phép lớp đó được mở rộng, abstract không cho phép sinh mẫu (instantiated), nhưng có thể mở rộng thông qua các lớp con:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;    public final class Apple {..}&lt;br /&gt; class GreenApple extends Apple {} // Not allowed, compile time error&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Từ khóa sửa đổi cho Method và variable&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Các thành viên của lớp (biến, phương thức, lớp nội bộ) cũng dùng từ khóa sửa đổi. Các thành viên là private thì chỉ có thể được truy cập từ bên trong lớp chứa nó mà thôi. Các thành viên là protected thì chỉ có thể truy cập từ các lớp nằm trong cùng một package hoặc từ các lớp con của lớp đó. Các thành viên là public thì có thể được truy cập từ bất cứ một lớp nào khác.&lt;br /&gt;&lt;br /&gt;Nếu không chỉ đinh từ khóa sửa đổi truy cập thì mức truy cập default sẽ được dùng và chỉ có các lớp khác trong cùng một gói mới có thể truy cập được chúng.&lt;br /&gt;&lt;br /&gt;Chú ý là ngoài PPP này thì còn một số modifiers khác. Một số chỉ có thể áp dụng cho method trong khi một số khác lại chỉ áp dụng cho variable:&lt;br /&gt;Hình. Modifier cho method và variable&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Hình. Modifiers for methods and variables&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.whizlabs.com/imgs/chater.gif" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Phương thức dùng từ khóa sửa đổi synchronized thì tại một thời điểm chỉ được có một thread - luồng - truy cập. Trong khi đó Transient không cho tuần tự hóa (serialized). Còn abstract&lt;br /&gt;lại không chứa phần cài đặt (implementation); nó phải được cài đặt thông qua lớp con rời rạc đầu tiên kế thừa từ lớp mẹ chứa phương thức trừu tượng này. Lớp mà có chứa dù chỉ một phương thức&lt;br /&gt;abstract cũng phải được khai báo là abstract. Ngược lại thì một lớp abstract lại có thể không cần chứa bất cứ một phương thức abstract nào:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;public abstract class MyAbstractClass&lt;br /&gt;{&lt;br /&gt; public abstract void test(); &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;Từ khóa sửa đổi native thì xác định rằng phương thức đó không phải là được viết bằng ngôn ngữ Java, mà là bằng một ngôn ngữ mã nền. Từ khóa strictfp lại chỉ dùng cho các phương thức và lớp, buộc kiểu dấu chấm động phải tuân thủ chuẩn IEE754. Một biến volatile, dùng trong trường hợp một luồng (thread) kiểm tra so sánh (reconcile) bản sao (working copy) của trường đang dùng với bản sao gốc mỗi lần nó truy cập vào biến đó.&lt;br /&gt;&lt;br /&gt;Các biến Static thì lại dùng chung cho tất cả các mẫu của lớp. Phương thức và biến Static có thể dùng mà không cần tạo bất cứ một mẫu nào của lớp. Với từ khóa này, ta xác định nó là tài sản chung cho tất cả các mẫu của lớp đó, nó thuộc về lớp đó chứ không thuộc về bất cứ một mẫu cụ thể nào. Chính vì thế, không bao giờ tạo một mẫu tường minh với &lt;span style="font-weight: bold;"&gt;new &lt;/span&gt;hay dùng &lt;span style="font-weight: bold;"&gt;this &lt;/span&gt;để truy cập vào nó.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;  class StaticTest&lt;br /&gt;{&lt;br /&gt; static int i = 0;&lt;br /&gt; static void getVar() &lt;br /&gt;   {&lt;br /&gt;     i++;&lt;br /&gt;     System.out.println(i);&lt;br /&gt;   }  &lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;class Test&lt;br /&gt;{&lt;br /&gt; public static void main(String args[])&lt;br /&gt;   {&lt;br /&gt;     StaticTest.getVar();&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111402018341492888?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111402018341492888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111402018341492888' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111402018341492888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111402018341492888'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/gii-m-modifiers_21.html' title='Giải mã modifiers'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111397993633602147</id><published>2005-04-20T13:32:00.000+07:00</published><updated>2005-04-20T13:52:16.343+07:00</updated><title type='text'>SCJP 5.0 (1.5): What is the new?</title><content type='html'>Java 1.5 đã bắt đầu ổn định dù các công ty chưa dùng nó phổ biến cho lắm nhưng Sun đã công bố SCJP 5.0 (theo tên cũ thì là SCJP 1.5).&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:Verdana,Arial;font-size:85%;"  &gt;&lt;b&gt;What is the difference between the SCJP 1.4 and 1.5 exam&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sự khác biệt là về mục tiêu (objectives) chứ không phải in terms of cách thi hay cái gì khác. Khi mục tiêu có thay đổi và bổ sung thì ta cần cân nhắc đến các tính năng mới của Java 1.5 gồm generics, static import, autoboxing, enum, co-variant, enhanced for loop. Hiện giờ thì Java Specification 3rd Edition còn chưa in thành sách (mới có bản PDF) thì chắc là chắn là Sun đang soạn ra một mục tiêu mới cho SCJP 1.5.&lt;br /&gt;&lt;br /&gt; &lt;blockquote style="font-style: italic;"&gt;           The Sun Certified Programmer for Java 2 Platform 5.0 certification exam is for programmers experienced using the Java programming language.  Achieving this certification provides clear evidence that a programmer understands the basic syntax and structure of the Java programming language and can create Java technology applications that run on server and desktop systems using J2SE 5.0.&lt;/blockquote&gt;&lt;br /&gt;Theo Sun, SCJP 5.0 sẽ có các mục tiêu sau:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;                                                                Section 1: Declarations, Initialization and Scoping                                &lt;/b&gt;&lt;br /&gt;                                  &lt;hr /&gt;&lt;br /&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;ul&gt; &lt;li&gt;Develop code that declares classes (including abstract and all forms of nested classes), interfaces, and enums, and includes the appropriate use of package and import statements (including static imports).&lt;/li&gt;&lt;li&gt;Develop code that declares an interface. Develop code that implements or extends one or more interfaces. Develop code that declares an abstract class. Develop code that extends an abstract class.&lt;/li&gt;&lt;li&gt;Develop code that declares, initializes, and uses primitives, arrays, enums, and objects as static, instance, and local variables. Also, use legal identifiers for variable names.&lt;/li&gt;&lt;li&gt;Develop code that declares both static and non-static methods, and - if appropriate - use method names that adhere to the JavaBeans naming standards. Also develop code that declares and uses a variable-length argument list.&lt;/li&gt;&lt;li&gt;Given a code example, determine if a method is correctly overriding or overloading another method, and identify legal return values (including covariant returns), for the method.&lt;/li&gt;&lt;li&gt;Given a set of classes and superclasses, develop constructors for one or more of the classes. Given a class declaration, determine if a default constructor will be created, and if so, determine the behavior of that constructor. Given a nested or non-nested class listing, write code to instantiate the class.&lt;/li&gt; &lt;/ul&gt;       &lt;br /&gt;                                                                                                &lt;br /&gt;                                                             &lt;b&gt;                                                                Section 2: Flow Control                                &lt;/b&gt;&lt;br /&gt;                                  &lt;hr /&gt;&lt;br /&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;ul&gt; &lt;li&gt;Develop code that implements an if or switch statement; and identify legal argument types for these statements.&lt;/li&gt;&lt;li&gt;Develop code that implements all forms of loops and iterators, including the use of for, the enhanced for loop (for-each), do, while, labels, break, and continue; and explain the values taken by loop counter variables during and after loop execution.&lt;/li&gt;&lt;li&gt;Develop code that makes use of assertions, and distinguish appropriate from inappropriate uses of assertions.&lt;/li&gt;&lt;li&gt;Develop code that makes use of exceptions and exception handling clauses (try, catch, finally), and declares methods and overriding methods that throw exceptions.&lt;/li&gt;&lt;li&gt;Recognize the effect of an exception arising at a specified point in a code fragment. Note that the exception may be a runtime exception, a checked exception, or an error.&lt;/li&gt;&lt;li&gt;Recognize situations that will result in any of the following being thrown: ArrayIndexOutOfBoundsException,ClassCastException, IllegalArgumentException, IllegalStateException, NullPointerException, NumberFormatException, AssertionError, ExceptionInInitializerError, StackOverflowError or NoClassDefFoundError. Understand which of these are thrown by the virtual machine and recognize situations in which others should be thrown programatically.&lt;/li&gt; &lt;/ul&gt;       &lt;br /&gt;                                                                                                &lt;br /&gt;                                                             &lt;b&gt;                                                                Section 3: API Contents                                &lt;/b&gt;&lt;br /&gt;                                  &lt;hr /&gt;&lt;br /&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;ul&gt; &lt;li&gt;Develop code that uses the primitive wrapper classes (such as Boolean, Character, Double, Integer, etc.), and/or autoboxing &amp; unboxing. Discuss the differences between the String, StringBuilder, and StringBuffer classes.&lt;/li&gt;&lt;li&gt;Given a scenario involving navigating file systems, reading from files, or writing to files, develop the correct solution using the following classes (sometimes in combination), from java.io: BufferedReader,BufferedWriter, File, FileReader, FileWriter and PrintWriter.&lt;/li&gt;&lt;li&gt;Develop code that serializes and/or de-serializes objects using the following APIs from java.io: DataInputStream, DataOutputStream, FileInputStream, FileOutputStream, ObjectInputStream, ObjectOutputStream and Serializable.&lt;/li&gt;&lt;li&gt;Use standard J2SE APIs in the java.text package to correctly format or parse dates, numbers, and currency values for a specific locale; and, given a scenario, determine the appropriate methods to use if you want to use the default locale or a specific locale. Describe the purpose and use of the java.util.Locale class.&lt;/li&gt;&lt;li&gt;Write code that uses standard J2SE APIs in the java.util and java.util.regex packages to format or parse strings or streams. For strings, write code that uses the Pattern and Matcher classes and the String.split method. Recognize and use regular expression patterns for matching (limited to: . (dot), * (star), + (plus), ?, \d, \s, \w, [], ()). The use of *, +, and ? will be limited to greedy quantifiers, and the parenthesis operator will only be used as a grouping mechanism, not for capturing content during matching. For streams, write code using the Formatter and Scanner classes and the PrintWriter.format/printf methods. Recognize and use formatting parameters (limited to: %b, %c, %d, %f, %s) in format strings.&lt;/li&gt; &lt;/ul&gt;       &lt;br /&gt;                                                                                                &lt;br /&gt;                                                             &lt;b&gt;                                                                Section 4: Concurrency                                &lt;/b&gt;&lt;br /&gt;                                  &lt;hr /&gt;&lt;br /&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;ul&gt; &lt;li&gt;Write code to define, instantiate, and start new threads using both java.lang.Thread and java.lang.Runnable.&lt;/li&gt;&lt;li&gt;Recognize the states in which a thread can exist, and identify ways in which a thread can transition from one state to another.&lt;/li&gt;&lt;li&gt;Given a scenario, write code that makes appropriate use of object locking to protect static or instance variables from concurrent access problems.&lt;/li&gt;&lt;li&gt;Given a scenario, write code that makes appropriate use of wait, notify, or notifyAll.&lt;/li&gt; &lt;/ul&gt;       &lt;br /&gt;                                                                                                &lt;br /&gt;                                                             &lt;b&gt;                                                                Section 5: OO Concepts                                &lt;/b&gt;&lt;br /&gt;                                  &lt;hr /&gt;&lt;br /&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;ul&gt; &lt;li&gt;Develop code that implements tight encapsulation, loose coupling, and high cohesion in classes, and describe the benefits.&lt;/li&gt;&lt;li&gt;Given a scenario, develop code that demonstrates the use of polymorphism. Further, determine when casting will be necessary and recognize compiler vs. runtime errors related to object reference casting.&lt;/li&gt;&lt;li&gt;Explain the effect of modifiers on inheritance with respect to constructors, instance or static variables, and instance or static methods.&lt;/li&gt;&lt;li&gt;Given a scenario, develop code that declares and/or invokes overridden or overloaded methods and code that declares and/or invokes superclass, overridden, or overloaded constructors.&lt;/li&gt;&lt;li&gt;Develop code that implements "is-a" and/or "has-a" relationships.&lt;/li&gt; &lt;/ul&gt;       &lt;br /&gt;                                                                                                &lt;br /&gt;                                                             &lt;b&gt;                                                                Section 6: Collections / Generics                                &lt;/b&gt;&lt;br /&gt;                                  &lt;hr /&gt;&lt;br /&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;ul&gt; &lt;li&gt;Given a design scenario, determine which collection classes and/or interfaces should be used to properly implement that design, including the use of the Comparable interface.&lt;/li&gt;&lt;li&gt;Distinguish between correct and incorrect overrides of corresponding hashCode and equals methods, and explain the difference between == and the equals method.&lt;/li&gt;&lt;li&gt;Write code that uses the generic versions of the Collections API, in particular, the Set, List, and Map interfaces and implementation classes. Recognize the limitations of the non-generic Collections API and how to refactor code to use the generic versions.&lt;/li&gt;&lt;li&gt;Develop code that makes proper use of type parameters in class/interface declarations, instance variables, method arguments, and return types; and write generic methods or methods that make use of wildcard types and understand the similarities and differences between these two approaches.&lt;/li&gt;&lt;li&gt;Use capabilities in the java.util package to write code to manipulate a list by sorting, performing a binary search, or converting the list to an array. Use capabilities in the java.util package to write code to manipulate an array by sorting, performing a binary search, or converting the array to a list. Use the java.util.Comparator and java.lang.Comparable interfaces to affect the sorting of lists and arrays. Furthermore, recognize the effect of the "natural ordering" of primitive wrapper classes and java.lang.String on sorting.&lt;/li&gt; &lt;/ul&gt;       &lt;br /&gt;                                                                                                &lt;br /&gt;                                                             &lt;b&gt;                                                                Section 7: Fundamentals                                &lt;/b&gt;&lt;br /&gt;                                  &lt;hr /&gt;&lt;br /&gt;                                                                                                                                                                                                                                                                                                                                                                                                        &lt;ul&gt; &lt;li&gt;Given a code example and a scenario, write code that uses the appropriate access modifiers, package declarations, and import statements to interact with (through access or inheritance) the code in the example.&lt;/li&gt;&lt;li&gt;Given an example of a class and a command-line, determine the expected runtime behavior.&lt;/li&gt;&lt;li&gt;Determine the effect upon object references and primitive values when they are passed into methods that perform assignments or other modifying operations on the parameters.&lt;/li&gt;&lt;li&gt;Given a code example, recognize the point at which an object becomes eligible for garbage collection, and determine what is and is not guaranteed by the garbage collection system. Recognize the behaviors of System.gc and finalization.&lt;/li&gt;&lt;li&gt;Given the fully-qualified name of a class that is deployed inside and/or outside a JAR file, construct the appropriate directory structure for that class. Given a code example and a classpath, determine whether the classpath will allow the code to compile successfully.&lt;/li&gt;&lt;li&gt;Write code that correctly applies the appropriate operators including assignment operators (limited to: =, +=, -=), arithmetic operators (limited to: +, -, *, /, %, ++, --), relational operators (limited to: &lt;, &lt;=, &gt;, &gt;=, ==, !=), the instanceof operator, logical operators (limited to: &amp;, |, ^, !, &amp;amp;&amp;amp;, ||), and the conditional operator ( ? : ), to produce a desired result. Write code that determines the equality of two objects or two primitives.&lt;/li&gt; &lt;/ul&gt;  Giá mua voucher là 150 đô Mĩ.&lt;br /&gt; Số hiệu bài thi: 310-055&lt;br /&gt; Việc vượt qua kì thi sẽ giúp thí sinh có chứng nhận đầy đủ của Sun, và bạn sẽ nhận được một "certification kit".&lt;br /&gt; Giá trị của voucher có thời hạn là 1 năm kể từ ngày mua.&lt;br /&gt; Voucher không thể hoàn lại tiền (nonrefundable for any reason).&lt;br /&gt;&lt;br /&gt; Một số thông tin khác:&lt;br /&gt; &lt;ul&gt; &lt;li&gt;Tổ chức (delivered at): Tất cả các Trung tâm khảo thí Prometric được ủy quyền trên toàn cầu&lt;/li&gt;&lt;li&gt;Điều kiện dự thi: Không&lt;/li&gt;&lt;li&gt;Các bài thi/bài tập cần để tham gia thi chứng chỉ này: Không&lt;/li&gt;&lt;li&gt;Loại bài thi: Câu hỏi nhiều lựa chọn và kéo và thả&lt;/li&gt;&lt;li&gt;Số lượng câu hỏi: 72&lt;/li&gt;&lt;li&gt;Số điểm để qua (pass score): 59% (43 trên tổng số 72 câu hỏi)&lt;/li&gt;&lt;li&gt;Thời gian làm bài (Time limit): 175 phút&lt;/li&gt; &lt;/ul&gt;  Thông tin từ Sun: &lt;a href="http://www.sun.com/training/catalog/courses/CX-310-055.xml"&gt;http://www.sun.com/training/catalog/courses/CX-310-055.xml&lt;/a&gt;&lt;br /&gt; Thanks for &lt;a href="http://thedeveloper.blogspot.com/"&gt;Prasanna&lt;/a&gt; and pcdinh&lt;em&gt; &lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111397993633602147?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111397993633602147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111397993633602147' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111397993633602147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111397993633602147'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/scjp-50-15-what-is-new.html' title='SCJP 5.0 (1.5): What is the new?'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111396545915043226</id><published>2005-04-20T09:34:00.000+07:00</published><updated>2005-04-20T09:50:59.150+07:00</updated><title type='text'>Links for UI development in Java</title><content type='html'>LnF articles:&lt;br /&gt;http://developer.java.sun.com/developer/techDocs/hi/jlf.html&lt;br /&gt;&lt;br /&gt;http://www.javaworld.com/javaworld/jw-04-1998/jw-04-crossplatform.html&lt;br /&gt;&lt;br /&gt;LnF graphics repository:&lt;br /&gt;http://developer.java.sun.com/developer/techDocs/hi/repository/&lt;br /&gt;&lt;br /&gt;Free Swing Book :&lt;br /&gt;http://java.about.com/library/swing/bl-Swing-Book.htm&lt;br /&gt;&lt;br /&gt;A commonly posted Java User's website that contains nice examples of more advanced usages of Swing:&lt;br /&gt;http://www2.gol.com/users/tame/swing/examples/SwingExamples.html&lt;br /&gt;&lt;br /&gt;And it is great to search the forums for answers:&lt;br /&gt;http://forum.java.sun.com/&lt;br /&gt;&lt;br /&gt;(Chép của http://taragana.blogspot.com/)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111396545915043226?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111396545915043226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111396545915043226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111396545915043226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111396545915043226'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/links-for-ui-development-in-java.html' title='Links for UI development in Java'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111393137615878782</id><published>2005-04-19T23:34:00.000+07:00</published><updated>2005-04-20T00:24:37.756+07:00</updated><title type='text'></title><content type='html'>Fibonacci là một chuỗi số mà số đứng sau bằng tổng của 2 số đứng liền trước (successively adding the two prevoius numbers in the sequence): 1, 1, 2, 3, 5, 8, 13, 21, ...&lt;br /&gt;&lt;br /&gt;Thuật toán đệ quy:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;&lt;br /&gt;&lt;blockquote&gt;fib(n) = 1 if n &lt;= 2                             &lt;br /&gt;      = fib(n-1) + fib(n-2) if n &gt; 2&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Minh họa bằng Java:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;public class Fibonacci {&lt;br /&gt;&lt;br /&gt;static int fib(int k) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (k &lt;= 2) {            return 1;        }      &lt;br /&gt;else {           &lt;br /&gt;return fib(k-1) + fib(k-2);       &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}  &lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Trong trường hợp không dùng đề quy thì dùng lặp&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;&lt;br /&gt;public long iterativeFib(int n) {&lt;br /&gt;if (n &lt;= 1) return 1; &lt;br /&gt;long fold = 1; &lt;br /&gt;long fold2 = 1; &lt;br /&gt;long fnew = 1; &lt;br /&gt;for (int i = 2; i &lt;= n; i++) { &lt;br /&gt;fnew = fold + fold2;  &lt;br /&gt;fold2 = fold; &lt;br /&gt;fold = fnew; &lt;br /&gt;} &lt;br /&gt;return fnew;&lt;/blockquote&gt;&lt;br /&gt; }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111393137615878782?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111393137615878782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111393137615878782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111393137615878782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111393137615878782'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/fibonacci-l-mt-chui-s-m-s-ng-sau-bng.html' title=''/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111391197417059355</id><published>2005-04-19T18:52:00.000+07:00</published><updated>2005-04-20T18:21:49.800+07:00</updated><title type='text'>Identifiers là gì?</title><content type='html'>Vừa liếc qua một số bài thi mẫu SCJP thấy có các câu hỏi mẹo về Identifiers. Theo định nghĩa thì &lt;strong&gt;Identifiers are names of variables, functions, classes etc&lt;/strong&gt;. Trong Java, chúng chịu một số quy tắc chung. &lt;ul&gt; &lt;li&gt;Mỗi một kí tự hoặc là một chữ số (digit), chữ cái (letter), dấu gạch dưới (underscore(_)) hoặc là kí hiệu tiền tệ (currency symbol) như $,¢, £ hay ¥ &lt;/li&gt;&lt;li&gt;Kí tự đầu tiên không thể là một chữ số.   &lt;/li&gt;&lt;li&gt;Tên của identifier không thể là một từ được bảo lưu (reserved word).&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;Từ khóa được bảo lưu gồm có:&lt;br /&gt;&lt;table border="0" cellpadding="0" width="80%"&gt;&lt;caption&gt;&lt;strong&gt;Keywords in the Java Language&lt;/strong&gt;&lt;/caption&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;abstract&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;continue&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;for&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;new&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;switch&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;code&gt;assert&lt;/code&gt;&amp;nbsp;***&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;default&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;goto&lt;/code&gt;&amp;nbsp;*&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;package&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt; &lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;synchronized&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;do&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;if&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;private&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;this&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;break&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;double&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;implements&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;protected&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;throw&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;byte&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;else&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;import&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;public&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;throws&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;case&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;enum&lt;/code&gt;&amp;nbsp;****&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;instanceof&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;return&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;transient &lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;catch&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;extends&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;int&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;short&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;try&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;char&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;final&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;interface&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;static&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;void&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;class&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;finally&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;long&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;strictfp&lt;/code&gt;&amp;nbsp;**&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;const&lt;/code&gt;&amp;nbsp;*&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;float&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;native&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;super&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;td width="20%"&gt;&lt;div align="left"&gt;&lt;code&gt;while&lt;/code&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;table border="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="right"&gt;*&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;not used&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="right"&gt;**&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;added in 1.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="right"&gt;***&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;added in 1.4 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="right"&gt;****&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;added in 5.0 &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Đôi khi quên hoặc nhầm lẫn với những câu hỏi mánh khóe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111391197417059355?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111391197417059355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111391197417059355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111391197417059355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111391197417059355'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/identifiers-l-g.html' title='Identifiers là gì?'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111388929365271625</id><published>2005-04-19T12:39:00.000+07:00</published><updated>2005-04-19T12:41:33.653+07:00</updated><title type='text'>Java and "Open Source": Good News and Bad News</title><content type='html'>&lt;h2&gt;Java and "Open Source": Good News and Bad News&lt;/h2&gt;  &lt;p&gt; Regarding Java and Open Source, I have some good news and some bad news... &lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;b&gt;good&lt;/b&gt; news is that Java is "open" in the sense that you can look at its source code &lt;/li&gt;&lt;li&gt;The &lt;b&gt;bad&lt;/b&gt; news is that it's not truly "open source" according to the &lt;a href="http://www.opensource.org/docs/definition.php"&gt;official definition&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;The &lt;b&gt;good&lt;/b&gt; news is that you can see the source so you can work around problems. &lt;/li&gt;&lt;li&gt;The &lt;b&gt;bad&lt;/b&gt; news is that you &lt;b&gt;can't&lt;/b&gt; actually fix the problems in the JDK. &lt;/li&gt;&lt;li&gt;The &lt;b&gt;good&lt;/b&gt; news is that you &lt;b&gt;can&lt;/b&gt; fix the problems in your &lt;b&gt;own&lt;/b&gt; version of the JDK. &lt;/li&gt;&lt;li&gt;The &lt;b&gt;bad&lt;/b&gt; news is is that you can't distribute your own version to your customers. &lt;/li&gt;&lt;li&gt;The &lt;b&gt;good&lt;/b&gt; news is that you could always email your fix to Sun and hope that they incorporate it. &lt;/li&gt;&lt;li&gt;The &lt;b&gt;bad&lt;/b&gt; news is that that's never really worked at all. &lt;/li&gt;&lt;li&gt;The &lt;b&gt;good&lt;/b&gt; news is that Sun has now set up a real mechanism to submit bug fixes, &lt;/li&gt;&lt;li&gt;The &lt;b&gt;bad&lt;/b&gt; news? Well, we'll have to wait and see if there is any bad news.&lt;/li&gt; &lt;/ul&gt;(&lt;a href="http://www.javalobby.org/articles/fixing-the-jdk/"&gt;http://www.javalobby.org/articles/fixing-the-jdk/&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111388929365271625?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111388929365271625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111388929365271625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111388929365271625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111388929365271625'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/java-and-open-source-good-news-and-bad.html' title='Java and &quot;Open Source&quot;: Good News and Bad News'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111384502755346315</id><published>2005-04-19T00:14:00.000+07:00</published><updated>2005-04-19T00:23:47.553+07:00</updated><title type='text'>Phương thức main, cửa ngõ vào ứng dụng Java</title><content type='html'>Theo đặc tả Java, thì&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; The method &lt;code&gt;main&lt;/code&gt; must be declared &lt;code&gt;public&lt;/code&gt;, &lt;code&gt;static&lt;/code&gt;, and &lt;code&gt;void&lt;/code&gt;. It must accept a single argument that is an array of strings.&lt;/blockquote&gt;Phương thức main sẽ được gọi sau khi lớp chứa main được khởi động (after completion of the initialization for class). Điều gì sẽ xảy ra nếu ta không tuân thủ việc này. Ví dụ nếu:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;public class &lt;span style="font-weight: bold;"&gt;Hello2 &lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;private static void main(String[] args) {&lt;br /&gt;  System.out.println("Hello2");&lt;br /&gt;}&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;Biên dịch thì được nhưng khi chạy nó sẽ báo lỗi &lt;code&gt;Main method not public&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111384502755346315?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111384502755346315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111384502755346315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111384502755346315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111384502755346315'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/phng-thc-main-ca-ng-vo-ng-dng-java.html' title='Phương thức main, cửa ngõ vào ứng dụng Java'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111384282836975747</id><published>2005-04-18T23:44:00.000+07:00</published><updated>2005-04-18T23:47:08.370+07:00</updated><title type='text'>Apache 2.0.54 ra lò</title><content type='html'>Hôm nay, Apache 2.0.54 đã được xuất xưởng chủ yếu như là một bản sửa lỗi. Các chi tiết về bản sửa lỗi này có ở: &lt;a href="http://www.apache.org/dist/httpd/CHANGES_2.0.54"&gt;http://www.apache.org/dist/httpd/CHANGES_2.0.54&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tải về: &lt;a href="http://httpd.apache.org/download.cgi"&gt;http://httpd.apache.org/download.cgi&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111384282836975747?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111384282836975747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111384282836975747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111384282836975747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111384282836975747'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/apache-2054-ra-l.html' title='Apache 2.0.54 ra lò'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111384228643869646</id><published>2005-04-18T23:30:00.000+07:00</published><updated>2005-04-18T23:40:01.100+07:00</updated><title type='text'>Sách gối đầu cho dân học Java: Core Java I, II</title><content type='html'>Vào thời điểm này thì 2 cuốn Core Java I và II bản cập nhật lần thứ 7 của nhà xuất bản Prentice Hall đã có mặt trên thị trường. Trong nhiều năm liền, nó là cuốn sách nổi tiếng nhất trong phạm vi của nó. Dĩ nhiên, dân mới học Java nên xem nó là cuốn gối đầu giường.&lt;br /&gt;&lt;br /&gt;Tổng kết qua một số bản cập nhật của cuốn sách:&lt;br /&gt;&lt;br /&gt;&lt;dl&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;blockquote&gt;&lt;dt style="font-weight: bold;"&gt;First (JDK 1.0) edition:&lt;/dt&gt;&lt;dd&gt;Objects. Inheritance. Interfaces. Graphics. AWT. Applets. Data Structures. Streams. Multithreading. Network programming.&lt;/dd&gt;&lt;dt style="font-weight: bold;"&gt;Second (JDK 1.02) edition:&lt;/dt&gt;&lt;dd&gt;Additional topics: Object streams. JDBC. RMI. Native methods &lt;/dd&gt;&lt;dt style="font-weight: bold;"&gt;Third (JDK 1.1) Edition:&lt;/dt&gt;&lt;dd&gt;Split into a two volume set. Additional topics in volume 1: Inner classes. Events. Printing. JAR files. In volume 2: Security. Signed applets. Advanced AWT. JavaBeans&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-weight: bold;"&gt;Fourth (JDK 1.2) Edition:&lt;/span&gt; &lt;/dt&gt;&lt;dd&gt;Moved streams to volume 1. Additional topics in volume 1: Swing. Java Plug-In. All examples have been rewritten to use Swing. Additional topics in volume 2: 2D Graphics. Advanced Swing components. Container classes&lt;/dd&gt;&lt;dt&gt;&lt;span style="font-weight: bold;"&gt;Fifth (JDK 1.3/1.4) Edition:&lt;/span&gt; &lt;/dt&gt;&lt;dd&gt;Rewrite of first six chapters. Proxies. Additional debugging tips. Moved some Swing components from volume 2. Code with line numbers. Figures more UML compliant. More Unix/Linux coverage. Removed corejava package.&lt;br /&gt; &lt;/dd&gt;&lt;dt&gt;&lt;span style="font-weight: bold;"&gt;Sixth (JDK SDK 1.4) Edition Vol. 1:&lt;/span&gt; &lt;/dt&gt;&lt;dd&gt;Added coverage of 1.4 features: Logging, regular expressions, NIO file channels, preferences API, Java Web Start, formatted text fields, new focus architecture, more events (mouse wheel etc.), new frame functionality, spinners, spring layouts, assertions. Numerous bug fixes and updates throughout all chapters.&lt;/dd&gt;&lt;dt style="font-weight: bold;"&gt;Seventh (JDK 5.0) Edition&lt;/dt&gt;&lt;dd&gt;Added coverage of 1.5 features: Generic classes, autoboxing, varargs, enumerated types, annotations, java.util.concurrent. Numerous bug fixes and updates throughout all chapters.&lt;/dd&gt;&lt;/blockquote&gt;&lt;dd&gt;&lt;br /&gt;&lt;/dd&gt; &lt;/dl&gt; Chú ý là khi dùng cuốn in lần 7 này, bạn nên cài đặt &lt;a href="http://java.sun.com/j2se/1.5.0/download.jsp"&gt;JDK 5.0&lt;/a&gt;. Về bộ công cụ soạn mã, bạn có thể dùng &lt;a href="http://www.bluej.org/"&gt;BlueJ&lt;/a&gt;, &lt;a href="http://www.jcreator.com/"&gt;JCreator&lt;/a&gt;, và đặc biệt là &lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Để tải về bộ sách này, bạn có thể gửi yêu cầu ở diễn đàn của &lt;a href="http://www.goldenkey.edu.vn/vi/forum"&gt;Trung tâm ngôn ngữ Golden Key&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111384228643869646?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111384228643869646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111384228643869646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111384228643869646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111384228643869646'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/sch-gi-u-cho-dn-hc-java-core-java-i-ii.html' title='Sách gối đầu cho dân học Java: Core Java I, II'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111373539279106188</id><published>2005-04-17T17:28:00.000+07:00</published><updated>2005-04-17T18:05:30.400+07:00</updated><title type='text'>Package và public class</title><content type='html'>Tôi đang có 2 file nguồn có chứa 2 public class: HelloWorld và ISayHelloWorld. File chứa public class có phương thức main() là HelloWorld thì sẽ gọi đối tượng định nghĩa trong ISayHelloWorld. Mặc dù file nguồn đặt ở cùng mức thư mục nhưng ISayHelloWorld lại được định nghĩa ở package khác.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;package HelloWorld;&lt;br /&gt;public class IsayHelloWorld {&lt;br /&gt;   public IsayHelloWorld() {&lt;br /&gt;   System.out.println("We will use 'Hello, World!'");&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;Vậy nên khi biên dịch thì IsayHelloWorld.class sẽ được chuyển vào thư mục con HelloWorld.&lt;br /&gt;&lt;br /&gt;File chứa phương thức main() là HelloWorld.java cần phải chính sửa một chút với khai báo import&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;import HelloWorld.*;&lt;br /&gt;&lt;br /&gt;public class HelloWorld {&lt;br /&gt;    public HelloWorld() {    &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;      IsayHelloWorld sayHello = new IsayHelloWorld();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Híc, làm đúng nguyên tắc vậy mà nó báo lỗi:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;D:\Java\CoreJavaLearning\1\HelloWorld.java:13: cannot access IsayHelloWorld&lt;br /&gt;bad class file: D:\Java\CoreJavaLearning\1\IsayHelloWorld.java&lt;br /&gt;file does not contain class IsayHelloWorld&lt;br /&gt;Please remove or make sure it appears in the correct subdirectory of the classpath.&lt;br /&gt;    IsayHelloWorld sayHello = new IsayHelloWorld();&lt;br /&gt;    ^&lt;br /&gt;1 error&lt;/blockquote&gt;Lý do thật đơn giản, tôi đã đặt file IsayHelloWorld.java ở cùng mức thư mục với HelloWorld.java. Thật điên rồ là khi tôi thay tên IsayHelloWorld.java thì lại biên dịch được.&lt;br /&gt;&lt;br /&gt;Bây giờ nếu tôi không thay tên IsayHelloWorld.java mà sửa dòng import có trong HelloWorld.java thành:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;import HelloWorld.IsayHelloWorld;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Biên dịch HelloWorld bình thường. Thế mới lạ! Ai giải thích giúp tôi với?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111373539279106188?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111373539279106188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111373539279106188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111373539279106188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111373539279106188'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/package-v-public-class.html' title='Package và public class'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111373355894981253</id><published>2005-04-17T17:14:00.000+07:00</published><updated>2005-04-17T17:25:58.950+07:00</updated><title type='text'>Không thể khai 2 public class trong 1 file nguồn</title><content type='html'>Trong Java, một file nguồn chỉ có một class là public vì tên của public class phải trùng với tên file nguồn. Nếu một public class đã trùng tên file nguồn thì cái public kia khi compile sẽ báo lỗi&lt;br /&gt;&lt;blockquote&gt;class xxx is public, should be declared in a file named xxx.java&lt;/blockquote&gt;Để có 2 public class thì tớ đặt 2 public class đó vào 2 file khác nhau trên cùng một mức thư mục. Compile. Run ông có main(). Chạy.&lt;br /&gt;&lt;br /&gt;Nếu chúng nằm ở các thư mục khác nhau thì sao nhỉ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111373355894981253?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111373355894981253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111373355894981253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111373355894981253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111373355894981253'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/khng-th-khai-2-public-class-trong-1.html' title='Không thể khai 2 public class trong 1 file nguồn'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111361992761821720</id><published>2005-04-16T09:38:00.000+07:00</published><updated>2005-04-16T09:52:07.620+07:00</updated><title type='text'>Hai bài viết về Social Bookmarking Tools</title><content type='html'>&lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; là một Social Bookmarking Tool đã có những tác động to lớn trong đời sống web, nhất là đối với dân nghiền web. &lt;a href="http://www.dlib.org/"&gt;&lt;strong&gt;D-Lib Magazine&lt;/strong&gt;&lt;/a&gt; đã có hai bài viết khá dài hơi về ứng dụng này (&lt;a href="http://www.dlib.org/dlib/april05/hammond/04hammond.html"&gt;bài 1&lt;/a&gt;, &lt;a href="http://www.dlib.org/dlib/april05/lund/04lund.html"&gt;bài 2&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111361992761821720?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111361992761821720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111361992761821720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111361992761821720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111361992761821720'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/hai-bi-vit-v-social-bookmarking-tools.html' title='Hai bài viết về Social Bookmarking Tools'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111358545273711595</id><published>2005-04-16T00:17:00.000+07:00</published><updated>2005-04-17T18:09:09.903+07:00</updated><title type='text'>A quiet world of Vietnam blogs</title><content type='html'>&lt;a href="http://www.noodlepie.com/blog/2005/04/vietnam_blogs.html"&gt;A blogger&lt;/a&gt; has tried to reveal the quiet world of Vietnam blogs. &lt;a href="http://phpvietnam.net/"&gt;phpVietnam.net&lt;/a&gt; may be the first Vietnamese weblog by a developer go blogging. It should be nice to see other Vietname blogs here and there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111358545273711595?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111358545273711595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111358545273711595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111358545273711595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111358545273711595'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/quiet-world-of-vietnam-blogs.html' title='A quiet world of Vietnam blogs'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111358070212462364</id><published>2005-04-15T22:58:00.000+07:00</published><updated>2005-04-15T22:58:22.126+07:00</updated><title type='text'>Sun lỗ 61 triệu đô la trong quý tài chính thứ ba</title><content type='html'>Sun Microsystems lại làm cho dân phố Wall thấy vọng với &lt;a href="http://www.redherring.com/article.aspx?a=11804"&gt;1% giảm về doanh thu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sun đã không có lợi nhuận từ năm 2001, rồi chạm đáy vào năm 2003 với khoản lỗ cả năm tới 3,4 tỉ đô. Theo IDC thì công ty này đang có 9.4 % thị phần máy chủ so với 33% của IBM, 27% của HP. Tổng thị trường server ước tính khoảng 49 tỉ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111358070212462364?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111358070212462364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111358070212462364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111358070212462364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111358070212462364'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/sun-l-61-triu-la-trong-qu-ti-chnh-th.html' title='Sun lỗ 61 triệu đô la trong quý tài chính thứ ba'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111349893882392796</id><published>2005-04-15T00:15:00.000+07:00</published><updated>2005-04-15T22:23:30.313+07:00</updated><title type='text'>HelloWorld in Java revisited</title><content type='html'>HelloWorld là chương trình đầu tiên có trong hầu hết các khóa dạy về ngôn ngữ lập trình nhưng có vẻ ở Java thì nó không hợp lắm. Thứ nhất là vì Java là ngôn ngữ hướng đối tượng (object oriented) mà chương trình này lại chỉ có 1 lớp (class), 1 phương thức (method). Vậy thì chương trình đơn giản này chẳng nêu ra được chút gì đặc trưng của Java.&lt;br /&gt;&lt;br /&gt;Để giới thiệu về OOP trong Java, HelloWorld nên có ít nhất 2 lớp, ít nhất có một lần tạo đối tượng (object) với toán tử new (new operator) và nên có sự xuất hiện của phương thức tạo dựng (constructor).&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;public class HelloWorld &lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;   public HelloWorld() &lt;br /&gt;   {    &lt;br /&gt;       &lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   public static void main(String[] args)&lt;br /&gt;   {&lt;br /&gt;     IsayHelloWorld sayHello = new IsayHelloWorld(); &lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class IsayHelloWorld {&lt;br /&gt; public IsayHelloWorld(){&lt;br /&gt;  System.out.println("We will use 'Hello, World!'");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Thế có phải là đã có dáng dấp của lập trình hướng đối tượng không?  Bạn nào có cách viết khác nhỉ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111349893882392796?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111349893882392796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111349893882392796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111349893882392796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111349893882392796'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/helloworld-in-java-revisited.html' title='HelloWorld in Java revisited'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111349574737984764</id><published>2005-04-14T23:21:00.000+07:00</published><updated>2005-04-14T23:25:50.936+07:00</updated><title type='text'>Tôi học Java</title><content type='html'>Đây là weblogs mà tôi sẽ post nhiều về Java trong quá trình tôi học. Tôi đã thử dùng JRoller nhưng nó quá chuối. Hi vong Blogger sẽ có nhiều cải tiến hơn. Tiếc là nó không cho tôi tạo các Cat&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111349574737984764?l=javanoob.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111349574737984764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12173377&amp;postID=111349574737984764' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111349574737984764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111349574737984764'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/ti-hc-java.html' title='Tôi học Java'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
