Thứ Tư, 31 tháng 7, 2013

Microsoft phát hành Office cho Android

Office Mobile cho Android cũng chưa có phiên bản dành cho máy tính bảng.

Hơn 1 tháng sau khi ra mắt Office Mobile cho iPhone, Microsoft mới đây đã chính thức ra mắt phiên bản Office Mobile dành cho HĐH Android. Cũng giống như phiên bản cho iPhone, Office Mobile cho Android là phiên bản Office nền đám mây, yêu cầu người dùng phải có kết nối internet để sử dụng. Ứng dụng này sẽ cho phép người dùng HĐH của Google có thể biên tập nhanh các tập tin văn phòng cơ bản gồm Excel, PowerPoint và Word. Phiên bản cho Android cũng hỗ trợ lưu trữ dữ liệu trên SkyDrive. 
Office cho Android
Hiện tại, Office Mobile cũng không hỗ trợ các thiết bị máy tính bảng Android. Và cũng giống như phiên bản cho iPhone, Microsoft phát hành ứng dụng của mình hoàn toàn miễn phí, tuy nhiên người dùng phải sử dụng dịch vụ văn phòng đám mây Office 365 của họ mới có thể sử dụng được phiên bản Office cho Android này. 
Người dùng Android hiện có thể tải về sử dụng Office Mobile cho Android tại đây.

Đã có điện thoại bàn chạy Android của Panasonic

Điện thoại sẽ chạy Android 4.0 Ice Cream Sandwich.

Vừa qua, Panasonic đã bất ngờ giới thiệu một chiếc điện thoại bàn chạy hệ điều hành Android 4.0 với mã model KX-PRX120 sử dụng chuẩn kết nối DECT (Digital Enhanced Cordless Telecommunications). Đây là là một tiêu chuẩn dành cho các thiết bị di động, như điện thoại không dây, để truy nhập vào mạng cố định thông qua môi trường vô tuyến. Điện thoại KX-PRX120 có cấu tạo chính gồm hai phần, một phần đế cố định nối với đường dây điện thoại và tay cầm có kiểu dáng khá giống smartphone chứ không theo các thiết kế điện thoại bàn truyền thống.
Điện thoại bàn chạy Android - Panasonic


Panasonic cũng tiết lộ rằng phần tay cầm được trang bị màn hình 3,5 inch độ phân giải 320x480 pixel và chạy Android 4.0 Ice Cream Sandwich. Bên cạnh đó, nó còn hỗ trợ kết nối Wi-Fi, Bluetooth, GPS, camera trước 0,3 megapixel, thậm chí có cả khe cắm thẻ microSD và sử dụng nguồn pin dung lượng 1.450 mAh. Người dùng có thể sạc pin cho tay cầm thông qua cổng microUSB.
Ngoài ra, Panasonic cũng cho biết phần đế điện thoại KX-PRX120 có thể hỗ trợ tối đa 6 thiết bị cầm tay cùng hoạt động. Do đó đây sẽ là một trang bị rất tiện lợi cho gia đình và cả văn phòng làm việc. Tuy nhiên, mức giá bán của sản phẩm vẫn chưa được công bố
Theo Phonearena.com

HTC One nâng cấp lên Android 4.2.2 trên toàn cầu

Tin vui dành cho người dùng HTC One trên toàn cầu khi chiếc smartphone này đã chính thức được nâng cấp hệ điều hành Android 4.2.2 mới.
HTC One Android 4.2.2 Jelly Bean
HTC One được nâng cấp lên Android 4.2.2 Jelly Bean
Bản cập nhật Android 4.2.2 Jelly Bean mới dành cho chiếc HTC One có dung lượng 400MB, với nhiều cải tiến đáng chú ý và được cung cấp miễn phí từ nhà sản xuất Đài Loan.
Cụ thể bản cập nhật mới sẽ thay đổi giao diện Sense-d, tinh chỉnh lại Cài đặt nhanh (Quick Setting); các Widget, chế độ Android Box và hỗ trợ hiển thị % pin trên thanh trạng thái.
Ngoài ra, phím Home còn cho phép nhấn giữ để hiện lên Tùy chọn Menu. Có thể truy cập nhanh vào Google Now bằng cách vuốt từ phím Home lên màn hình. BlinkFeed điều chỉnh lại để hỗ trợ Instagram, HTC Zoe tăng cường thêm tính năng cho máy ảnh, và màn hình khóa được làm mới, có thể tích hợp hiển thị cả Widget.

Nokia chạy Android: “Sự kết hợp hoàn hảo”?

Sẽ là hoàn hảo hơn nếu các thiết bị của Nokia chạy trên nền tảng hệ điều hành Android, thậm chí nhiều người còn mơ về ngôi vị số 1 trong làng di động mà Nokia từng ngự trị nếu trang bị hệ điều hành này.
Trong vài năm trở lại đây tình hình kinh doanh của nhà sản xuất Phần Lan liên tiếp rơi vào tình trạng bù lỗ, kể từ khi khai tử Symbian Nokia đã hoàn toàn “sống” dựa trên nền tảng Windows Phone của gã khổng lồ phần mềm Microsoft, và chọn đây là ngưỡng cửa duy nhất để tiến vào thế giới điện thoại thông minh trong vài năm qua. Trước tương lai không mấy sáng sủa của “ông vua” một thời, các chuyên gia phân tích cho rằng nếu Nokia còn muốn tiếp tục lèo lái con tàu, họ phải sản xuất smartphone Android.
nokia android
Đối với tín đồ Nokia, Android luôn là một trải nghiệm thú vị trên smartphone của hãng
Theo chuyên gia phân tích Pierre Ferragu tại hãng nghiên cứu Bernstein Research nhận định, Nokia nên dừng sản xuất các thiết bị chạy trên nền tảng Windows Phone của Microsoft, thay vào đó, công ty nên nắm bắt cơ hội sử dụng nền tảng di động phổ biến Android vào các sản phẩm mới của mình.
Tính đến thời hiện tại đã tròn 29 tháng kể từ khi Nokia “kết duyên” cùng Microsoft (ngày 11 tháng 2 năm 2011), tuy nhiên mối quan hệ đối tác giữa hai hãng này chưa đáp ứng được kỳ vọng mà hai ông lớn hướng tới. Năm 2012, Nokia mất khoảng 3 tỉ USD lợi nhuận, quý 4 chỉ đóng góp 1 phần lợi nhuận ít ỏi. Lợi nhuận quý 4 của Nokia là 585 triệu USD (tổng cả năm là 10,73 tỉ USD), phần lớn đến từ kết quả kinh doanh của hệ thống mạng Nokia-Siemens. Ban Sản phẩm và Dịch vụ cũng công bố mức lãi khá thấp nhờ Lumia 820 và 920. Nokia bán được 4,4 triệu smartphone Lumia, 700.000 chiếc ở Bắc Mĩ. Đó là một khởi đầu tốt.
Đến Quý 1 năm 2013, lượng Lumia được bán ra tăng lên 5,6 triệu chiếc, 400.000 ở Bắc Mĩ. Nhưng hãng lại chỉ bán được tổng cộng 55,8 triệu điện thoại, giảm 30% so với năm trước.
Thậm chí thời gian gần đây còn xuất hiện thông tin hãng viễn thông Huawei của Trung Quốc muốn thâu tóm Nokia, sau khi đích thân người đứng đầu của Huawei là Richard Yu trả lời trên tờ Financial Times rằng, hãng đang tính đến những thương vụ mua bán và sáp nhập, một số đang tới gần nhưng vẫn còn phụ thuộc vào sự sẵn sàng từ phía Nokia.
“Nokia nên chuyển sang dùng nền tảng Android trước khi quá muộn. Tiếp tục dựa vào nền tảng Windows Phone và nền tảng điện thoại tính năng Asha không phải là giải pháp khôn ngoan cho Nokia ở thời điểm hiện tại bởi dòng tiền mà Nokia thu về không thực sự nhiều như mong muốn”. Ferragu nhấn mạnh. Theo con số thống kê mới nhất, ngay tại thị trường smartphone truyền thống là châu Âu, doanh số các lô hàng của Nokia cũng đã sụt giảm đến 30% so với cùng kỳ năm trước.
Trước đó, CEO của Nokia, ông Stephen Elop từng khẳng định. "Trong cuộc chiến nền tảng di động này, chúng tôi đã đưa ra một quyết định rất rõ ràng là tập trung vào Windows Phone với dòng sản phẩm Lumia. Trong thời gian tới, chúng tôi sẽ điều chỉnh kế hoạch để phù hợp với xu hướng thị trường. Chúng tôi tin tưởng sẽ cạnh tranh được với các đối thủ cạnh tranh như Samsung và Android".
Dù chưa rõ Nokia sẽ phải tốn bao nhiêu cho cuộc “thay máu” khi chuyển sang hệ điều hành Android. Nhưng có thể thấy đối tác thân thiết của họ là Microsoft cũng đã nhận thấy tiềm năng của Nokia với nền tảng Windows Phone là chưa đủ, điều này được thể hiện rõ nét khi “gã khổng lồ phần mềm” đã phá vỡ thế độc quyền nền tảng cho Nokia, khi chính thức cấp phép cho Samsung, HTC và Huawei cùng sử dụng nền tảng Windows Phone.
Các chuyên gia cho rằng, đây là thời điểm thích hợp và cần thiết để Nokia chuyển sang dùng Android. Mặc dù sẽ phải cạnh tranh với ông lớn như Samsung, nhưng dù sao Nokia vẫn hội tủ đầy đủ yếu tố để làm cuộc cách mạng này, đây cũng là mong mỏi của không ít tín đồ Nokia trong suốt thời gian qua.
Theo khampha.vn

Mảng trong java

Array - mảng trong java
Mảng là một cấu trúc lưu giữ các thành phần có cùng kiểu. Chiều dài một mảng được thiết lập và cố định khi mảng được tạo lúc chạy chương trình. Mỗi thành phần của mảng được truy xuất bởi chỉ số của nó trong mảng
Nếu bạn muốn lưu giữ các thành phần khác kiểu nhau hay kích thước mảng có thể thay đổi động, dùng một Vector thay cho mảng

1. Tạo và sử dụng mảng
 Khai báo một biến tham chiếu đến mảng
ArrayType[] ArrayName
Khai báo một biến có kiểu ArrayType dùng để tham chiếu đến mảng, nhưng không có mảng nào thật sự tồn tại
ArrayType : là kiểu dữ liệu của các thành phần chứa trong mảng và dấu [] chỉ định đó là một mảng
Kiểu dữ liệu thành phần có thể là bất kỳ kiểu cơ sở, tham chiếu
int[] anArrayOfInts; // Khai báo một mảng số nguyên
float[] anArrayOfFloats;
boolean[] anArrayOfBooleans;
Object[] anArrayOfObjects;
String[] anArrayOfStrings;
 Tạo một mảng
Bạn dùng toán tử new để tạo một mảng, nghĩa là cấp phát bộ nhớ cho các thành phần và gán mảng đến biến đã khai báo
ArrayName = new ArrayType[ArraySize]
ArraySize : là số thành phần của mảng
Ví dụ : int[] M; // khai báo biến mảng kiểu số nguyên 
M = new int[10]; // tạo một mảng số nguyên
Bạn có thể kết hợp sự khai báo biến mảng và tạo mảng như sau :
ArrayType[] ArrayName = new ArrayType[ArraySize]
Có thể viết như sau :
ArrayType ArrayName[] = new ArrayType[ArraySize]
Ví dụ : int[] M = new int[10];
int M[] = new int[10];
 Truy xuất thành phần của mảng
ArrayVar[index]
index : chỉ vị trí của thành phần trong mảng cần truy xuất, có thể là giá trị, biến hay biểu thức, và có giá trị từ 0 đến ArraySize-1
Ví dụ : M[1] = 20;
 Lấy kích thước mảng
ArrayName.length
 Khởi tạo giá trị đầu của mảng
Mảng có thể khởi tạo khi khai báo. Mảng khởi tạo là danh sách các biểu thức cách nhau bởi dấu phẩy và bao quanh bởi dấu ngoặc móc. Mảng sẽ được khởi tạo tự động để lưu số phần tử mà bạn xác định lúc khởi tạo, không cần sử dụng new. Chiều dài của mảng là số giá trị giữa { và }
Ví dụ : boolean[] answers = { true, false, true, true, false };
int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
Ví dụ 1: Tạo và sử dụng mảng có thành phần kiểu cơ sở
public class ArrayDemo {
public static void main(String[] args) {
int[] anArray;
anArray = new int[10]; 
for (int i = 0; i < anArray.length; i++) {
anArray = i;
System.out.print(anArray + " ");
}
System.out.println();
}
}
Ví dụ 2 : Tạo và sử dụng mảng có thành phần kiểu tham lớp String
public class ArrayOfStringsDemo {
public static void main(String[] args) {
String[] anArray = { "String One", "String Two", "String Three" };
for (int i = 0; i < anArray.length; i++) {
System.out.println(anArray.toLowerCase());
}
}
}

2. Mảng đa chiều (Arrays of Arrays)
Mảng có thể chứa các thành phần là mảng. Để khai báo một biến mảng đa chiều cần xác định mỗi chiều của mảng bằng cách sử dụng các cặp dấu ngoặc vuông.
Ví dụ : int M[][] = new int[4][5];
int[][] M = new int[4][5];
M là một mảng 4x5 thành phần là các số nguyên.
Khi cấp phát bộ nhớ cho mảng đa chiều, bạn có thể chỉ định chiều dài của mảng chính, và không chỉ định chiều dài của mảng con cho đến khi tạo chúng
Ví dụ : int M[][] = new int[3][];
M[0] = new int[3];
M[1] = new int[4];
M[2] = new int[2];
Ví dụ 1 :
public class ArrayOfArraysDemo {
public static void main(String[] args) {
String[][] cartoons = {
{ "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" },
{ "Rubbles", "Barney", "Betty", "Bam Bam" },
{ "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" },
{ "Scooby Doo Gang", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" }
};
for (int i = 0; i < cartoons.length; i++) {
System.out.print(cartoons[0] + ": ");
for (int j = 1; j < cartoons.length; j++) {
System.out.print(cartoons[j] + " ");
}
System.out.println();
}
}
}
Chú ý là tất cả mảng con có chiều dài khác nhau. Tên của mảng con là cartoons[0], cartoons[1]...
Ví dụ 2 :
public class ArrayOfArraysDemo2 {
public static void main(String[] args) {
int[][] aMatrix = new int[4][];
for (int i = 0; i < aMatrix.length; i++) {
aMatrix = new int[5];
for (int j = 0; j < aMatrix.length; j++) {
aMatrix[j] = i + j;
}
}
for (int i = 0; i < aMatrix.length; i++) {
for (int j = 0; j < aMatrix.length; j++) {
System.out.print(aMatrix[j] + " ");
}
System.out.println();
}
}
}

3. Sao chép mảng (Copying Arrays)
Sử dụng phương thức arraycopy của System sao chép dữ liệu từ một mảng đến một mảng khác. Phương thức arraycopy yêu cầu 5 tham đối :
public static void arraycopy(ArrayType[] source,
int srcIndex,
ArrayType[] dest,
int destIndex,
int length)

Hai tham đối Object chỉ định mảng nguồn và mảng đích. Ba tham đối int chỉ vị trí bắt đầu trong mỗi mảng nguồn và đích, và số thành phần để sao chép. Biểu đồ này minh hoạ việc sao chép :



Ví dụ :
public class ArrayCopyDemo {
public static void main(String[] args) {
char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd' };
char[] copyTo = new char[7];
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
System.out.println(new String(copyTo));
}
}

Chú ý rằng mảng đích phải được cấp phát và phải đủ lớn để chứa dữ liệu được sao chép

Chuyển đổi kiểu trong java

Chuyển đổi kiểu trong java


1. Chuyển đổi giữa các kiểu phức hợp 
Java chỉ cho phép chuyển đổi đối tượng thuộc lớp con cháu thành đối tượng của lớp cha ông (Ancestors), và không cho chuyển ngược lại
Giả sử bạn có đối tượng thuộc lớp con Child và cần chuyển đổi thành đối tượng thuộc lớp cha ông Parent. Java cho phép dùng đối tượng Child một cách tự nhiên ở bất cứ chỗ nào dành cho đối tượng Parent, ta không cần làm động tác chuyển đổi nào cả. Đối tượng Child có đầy đủ thuộc tính và hành vi của đối tượng Parent nên có thể “vào vai” đối tượng Parent. Nếu muốn, bạn cũng có thể chuyển đổi đối tượng thuộc lớp con cháu thành đối tượng thuộc lớp cha ông một cách tường minh, nhưng không cần thiết :
Child c = new Child();
Parent p = (Parent) c;

2. Chuyển đổi kiểu sơ cấp thành kiểu phức hợp 
Trong gói java.lang có sẵn những lớp tương ứng với các kiểu sơ cấp, có thể dùng thay cho kiểu sơ cấp : lớp Integer thay cho kiểu int, lớp Boolean cho kiểu boolean, lớp Float cho kiểu float, lớp Double cho kiểu double… Lớp Number là lớp cha của mọi lớp bọc kiểu
Chẳng hạn, muốn cho kiểu int có thể xuất hiện như một đối tượng thuộc lớp Integer :
Integer intObj = new Integer(25);
Lớp Integer được trang bị những phương thức giúp bạn nhiều việc mà kiểu int không thể đảm đương. 
- Lấy giá trị nguyên mà đối tượng intObj nắm giữ :
int i = intObj.intValue();

Nói thêm về lớp trong java

Nói thêm về lớp trong java

 I. LỚP KẾ THỪA
1. Khai báo kế thừa
Ta có thể sử dụng tính kế thừa tạo lớp tổng quát có những đặc tính chung đại diện cho một tập hợp các đối tượng có cùng mối quan hệ. Sau đó, lớp này có thể được kế thừa bởi một hay nhiều lớp khác và những đặc tính này trở thành những thành những đặc tính của lớp kế thừa
- Lớp được kế thừa gọi là lớp cha (SuperClass : là lớp cha trực tiếp) - Lớp kế thừa gọi là lớp con (SubClass) Lớp con kế thừa tất cả các biến và hàm định nghĩa trong lớp cha
class ClassName extends SuperClass
{ //Member Variables Declarations, Methods
}
- Mặc dù vậy, lớp con không thể truy xuất các thành phần được khai báo private trong lớp cha - Một biến tham chiếu của lớp cha có thể gán để tham chiếu đến một lớp con bất kỳ dẫn xuất từ lớp cha. Khi một tham chiếu đến một lớp con được gán cho biến tham chiếu kiểu lớp cha, ta chỉ có quyền truy xuất những phần được định nghĩa bởi lớp cha. 
2. Viết chồng hàm hay che khuất hàm (Overriding Methods)
Trong phân cấp lớp, khi một hàm của lớp con có cùng tên, và giống nhau về số lượng và kiểu tham đối cũng như kiểu trả về với một hàm ở lớp cha, thì hàm ở lớp con được gọi là viết chồng hàm trong lớp cha. Khi đó hàm của lớp con sẽ che khuất hàm thừa kế từ lớp cha
Tuy nhiên lớp con không được viết chồng hàm hằng (có khai báo final) và hàm lớp trong lớp cha. 
Ví dụ : Tất cả các lớp là hậu duệ của lớp Object. Lớp Object chứa phương thức toString, mà trả về một đối tượng String chứa tên lớp của đối tượng. Hầu hết các lớp con viết chồng phương thức này và in ra một vài điều gì đó có nghĩa cho lớp đó

3. Từ khoá super
Đôi khi bạn không muốn thực hiện viết chồng một phương thức mà chỉ muốn thêm chức năng vào phương thức. Để làm được điều này, bạn gọi phương thức được viết chồng dùng từ khoá super. Từ khoá super dùng khi lớp con cần tham chiếu lớp cha trực tiếp của nó. Super có hai dạng cú pháp : - Dạng 1 : Hàm khởi tạo lớp cha phải được gọi trước hàm khởi tạo của lớp con. Nếu trong định nghĩa hàm khởi tạo ở lớp con không có câu lệnh gọi hàm khởi tạo lớp cha, trình biên dịch Java sẽ tự động đưa vào câu lệnh gọi hàm khởi tạo mặc định của lớp cha có dạng : classname()
Bạn có thể tự thêm lệnh gọi hàm khởi tạo ở lớp cha có dạng như sau :
super(Parameter-List) Parameter-List là danh sách các tham đối cần thiết cho hàm khởi tạo của lớp cha. super() phải luôn luôn là phát biểu đầu tiên được thực hiện trong hàm khởi tạo của lớp con Ví dụ : 
class MyPoint {
int x, y;
MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
void display() {
System.out.print(“x = “+x+”, y = “+y+”\n”);
}
}
class MyPoint2 extends MyPoint {
int z;
String name;
MyPoint2(int x, int y, int z, String name) {
super(x,y); // Khởi tạo 2 biến x, y bằng cách gọi 
this.z = z; // hàm dựng của lớp cha
this.name = name;
}
void display() { // Viết chồng hàm kế thừa từ lớp cha
System.out.print(“x = “+x+”, y = “+y+”, z = “+z+” “+”name :”+name+”\n”);
}
}
- Dạng 2 : dùng để hàm lớp con truy xuất hàm kế thừa từ lớp cha : 
super.Member
Member có thể là phương thức hay biến của đối tượng Ví dụ : Viết lại hàm display() trong class MyPoint2, có gọi hàm kế thừa từ lớp cha :
void display() {
super.display();
System.out.print(”, z = “+z+” “+”name :”+name+”\n”);
}

II. LỚP, PHƯƠNG THỨC TRỪU TƯỢNGTrong trường hợp chúng ta muốn định nghĩa một lớp cha theo một cấu trúc trừu tượng cho trước mà không cần hiện thực đầy đủ các phương thức. Tức là ta muốn tạo một lớp cha có dạng chung cho tất cả các lớp con và để các lớp con hiện thực chi tiết. Khi đó, bạn muốn chắc chắn lớp con có chồng lắp phương thức. Những phương thức phải được chồng lắp trong lớp con gọi là phương thức trừu tượng, được khai báo abstract và không có phần thân phương thức
abstract [Type] MethodName(Parameter-List) ;
Bất kỳ lớp nào chứa một hay nhiều phương thức trừu tượng cũng phải khai báo trừu tượng, sử dụng từ khoá abstract trước từ khoá class. Không thể khởi tạo đối tượng kiểu lớp trừu tượng, vì lớp trừu tượng không được định nghĩa đầy đủ. Do đó, bạn cũng không thể khai báo hàm khởi tạo. Bất kỳ lớp con nào cũng phải hoặc là viết chồng tất cả các phương thức trừu tượng hoặc chính nó lại được khai báo abstract
Ví dụ : Trong các ứng dụng, bạn có thể vẽ đường tròn, hình chữ nhật, đoạn thẳng, đường cong… Mỗi một đối tượng đồ hoạ này đều chứa các thuộc tính (vị trí, nét viền) và hành vi (di chuyển, thay kích thước, vẽ). Bạn có thể khai báo chúng kế thừa lớp Graphic. Tuy nhiên vẽ một đường tròn là hoàn toàn khác với vẽ một hình chữ nhật, nên lớp Graphic được khai báo là lớp trừu tường, chứa các phương thức đã được hiện thực như moveTo, và phương thức trừu tượng như draw
abstract class GraphicObject {
int x, y;
. . .
void moveTo(int newX, int newY) {
. . .
}
abstract void draw();
}
Mỗi một lớp con không trừu tượng của lớp Graphic như Circle, Rectangle sẽ phải cài đặt đầy đủ cho phương thức draw
class Circle extends GraphicObject {
void draw() {
. . .
}
}
class Rectangle extends GraphicObject {
void draw() {
. . .
}
}

III. LỚP HẰNG (KHÔNG KẾ THỪA), HÀM HẰNG (KHỒNG VIẾT CHỒNG)
1. Sử dụng từ khoá final cấm sự chồng lắp
Mặc dù chồng lắp phương thức là một trong những đặc điểm mạnh nhất của Java, tuy nhiên trong vài trường hợp bạn muốn cấm điều này. Để cấm một phương thức lớp con viết chồng phương thức ở lớp cha, bạn đưa từ khoá final vào đầu khai báo
Ví dụ : class Box {
double width; double height; double depth; …
final double volume() { return width * height * depth; } . . .
}

2. Sử dụng từ khoá final cấm sự kế thừa
Muốn khai báo một lớp mà không có lớp con kế thừa, bạn sử dụng từ khoá final. Với một lớp final, thì tất cả các phương thức của nó sẽ là final. 
Ta không thể khai báo một lớp vừa abstract và final vì một lớp trừu tượng là một lớp chưa hoàn chỉnh và phải có lớp con để hiện thực đầy đủ
Ví dụ : final class Box { . . .
}

IV. LỚP LỒNG NHAUCó thể định nghĩa một lớp bên trong một lớp khác. Lớp như vậy gọi là lớp lồng (Nested Class) và được cài đặt như sau : 
class EnclosingClass{ // Lớp bao bên ngoài
. . .
static class StaticNestedClass { // Lớp lồng tĩnh
. . .
}
class InnerClass { // Lớp lồng phi tĩnh hay lớp nội bộ
. . .
}
}
Lớp lồng chỉ được biết bên trong tầm vực của lớp bao bên ngoài. Bộ dịch Java sẽ báo lỗi nếu một đoạn mã bất kỳ bên ngoài lớp bao cố dùng trực tiếp lớp lồng.
Một lớp lồng có quyền truy cập đến các thành viên của lớp bao bên ngoài, thậm chí nếu chúng được khai báo private. Tuy nhiên, lớp bao không thể truy xuất các thành phần của lớp lồng. 
Có hai kiểu lớp lồng : tĩnh và phi tĩnh. 
Lớp lồng tĩnh (static nested class) được bổ sung từ khoá static. Nó không thể tham chiếu trực tiếp đến biến hay phương thức đối tượng được định nghĩa trong lớp bao, mà chỉ dùng chúng thông qua đối tượng. Vì giới hạn này nên lớp lồng tĩnh ít được dùng. Hầu hết các lớp lồng là lớp nội bộ
Lớp lồng phi tĩnh (nonstatic nested class) không bổ sung từ khoá static, còn được gọi là lớp nội bộ (inner class). Nó có thể truy cập trực tiếp đến các biến và phương thức đối tượng. 
class Outer {
int outer_x = 100;
void test() {
Inner inner = new Inner();
inner.display_x();
}
class Inner { // có thể truy xuất trực tiếp biến đối tượng của lớp Outer
int inner_y = 10;
void display_x() { 
System.out.println(“display : outer_x = “ + outer_x);
}
}
void display_y() { // không thể truy xuất biến đối tượng của lớp Inner
System.out.println(“display : inner_y = “ + inner_y); // Error
}
}
class InnerClassDemo {
public static void main(String args[]) {
Outer outer = new Outer();
outer.test();
}
}

Phương thức trong java



Method - phương thức trong java
I. GIỚI THIỆU VỀ PHƯƠNG THỨC 1. Khai báo phương thức (hàm)
Dạng tổng quát của một phương thức như sau :
[acess] : điều khiển truy xuất
[static] : hàm lớp
[abstract] : hàm trừu tượng
[final] : hàm hằng
Type] MethodName(Parameter-List) throws exceptions {
// Body of method
}

- Type : Kiểu dữ liệu do hàm trả về, có thể là kiểu bất kỳ, kể cả các kiểu lớp do bạn tạo ra. Nếu hàm không trả về giá trị nào, kiểu trả về của nó phải là void.
- Các hàm có kiểu trả về không phải là void sẽ trả về một giá trị cho chương trình gọi nó dùng dạng câu lệnh return như sau : return biểu thức;
Giá trị của biểu thức được tính và trả về cho hàm
- Tất cả thông tin bạn muốn truyền được gởi thông qua tham số nằm trong hai dấu ( ) ngay sau tên hàm. Nếu không có tham số vẫn phải có ( )
Parameter-List : Danh sách tham đối phân cách bởi các dấu phẩy, mỗi tham đối phải được khai báo kiểu, có thể là kiểu bất kỳ, có dạng : Type Parameter1, Type Parameter2 ...

2. Phạm vi truy xuất thành phần của lớp
Các điều khiển truy xuất của Java là public, private và protected. protected chỉ áp dụng khi có liên quan đến kế thừa sẽ xét đến sau
Khi bổ sung tiền tố cho một thành phần của lớp (biến và hàm) là : - Từ khoá public : chỉ ra rằng thành phần này có thể được truy xuất bởi bất kỳ dòng lệnh nào dù ở trong hay ngoài lớp mà nó khai báo
 
- private : chỉ có thể được truy xuất trong lớp của nó, mọi đoạn mã nằm ngoài lớp, kể cả những lớp con đều không có quyền truy xuất - Khi không có điều khiển truy xuất nào được dùng, mặc nhiên là public nhưng chỉ trong gói của nó, không thể truy xuất từ bên ngoài gói của nó
 
3. Phương thức main()
Khi chạy ứng dụng độc lập, bạn chỉ tên Class muốn chạy, Java tìm gọi hàm main() trước tiên trong Class đó, phương thức main sẽ điều khiển chạy các phương thức khác.
Dạng tổng quát của phương thức main()
public static void main(String args[]) {
// Body of Method
}
- Một chương trình chỉ cần một lớp có phương thức main() gọi là lớp ứng dụng độc lập Primary Class.
 
- Từ khoá static cho phép hàm main() được gọi khi không cần khởi tạo đối tượng. Vì main() được trình thông dịch của Java gọi trước khi bất kỳ lớp nào được khởi tạo
 
- Từ khoá void cho biết hàm main() không trả về giá trị
 
- Từ khoá public chỉ ra rằng hàm này được gọi bởi dòng lệnh bên ngoài lớp khi chương trình khởi động.
 
- Tham đối String args[ ] khai báo tham số tên args thuộc lớp String, chứa chuỗi ký tự. Tham đối này giữ các tham đối dòng lệnh dùng khi thi hành chương trình. Ví dụ 1 :
 
class ViDu {
public static void main (String args[]) {
for (int i=0; i < args.length; i++) {
System.out.println(“Tham doi thu “+i+”: “+args);
}
}
}
Khi chạy chương trình :
C:\>
¿java ViDu Thu tham doi dong lenh
Tham doi thu 0 : Thu
Tham doi thu 1 : tham ....
C
:>¿java ViDu Thu “tham doi” “dong lenh”
Tham doi thu 0 : Thu
Tham doi thu 1 : tham doi
Tham doi thu 2 : dong lenh
Ví dụ 2 :
class ViDu2;
public static void main(String args[]) {
int sum = 0;
float avg = 0;
for (int i=0; i<args.length;i++) {
sum += Integer.parseInt(args);
}
System.out.println(“Tong =”+sum);
System.out.println(“Trung binh =”+ (float) sum/args.length);
}
}
Khi chạy chương trình :
C:\>
¿java ViDu2 1 2 3
Tong = 6
Trung binh = 2

4. Hàm khởi tạo (Constructor)
Có những thao tác cần thực hiện mỗi khi đối tượng lần đầu tiên được tạo như khởi tạo giá trị cho các biến. Các công việc này có thể làm tự động bằng cách dùng hàm khởi tạo.
Hàm khởi tạo có cùng tên với lớp mà nó thuộc về, chỉ được tự động gọi bởi toán tử new khi đối tượng thuộc lớp được tạo. Hàm khởi tạo không có giá trị trả về, khi định nghĩa hàm có thể ghi void hay không ghi. Ví dụ : - kích thước hộp được khởi tạo tự động khi đối tượng được tạo.
 
class Box {
double width;
double height;
double depth;
double volume() {
return width * height * depth; } Box(double w, double h, double d) { width = w; height = h;
depth = d;
} } class BoxDemo { public static void main (String args[ ]) { Box myBox1 = new Box(10,20,15);
Box myBox2 = new Box(3,6,9); double vol; vol = myBox1.volume(); System.out.println(“Thể tích là : “+vol); vol = myBox2.volume(); System.out.println(“Thể tích là : “+vol); }
} - Khi bạn không định nghĩa tường minh hàm khởi tạo cho một lớp, Java sẽ tạo hàm khởi tạo mặc nhiên cho lớp đó. Vì vậy các chương trình trước đó vẫn làm việc bình thường. Hàm khởi tạo mặc nhiên không có danh sách tham đối, tự động khởi tạo tất cả các biến của đối tượng về trị rỗng theo các quy ước mặc định của Java, trị 0 cho kiểu số, ký tự ‘\0’ cho kiểu ký tự char, trị false cho kiểu boolean, trị null cho các đối tượng
 
- Hàm khởi tạo cũng có thể được nạp chồng như hàm bình thường ̣(sẽ nói rõ ở phần sau) nghĩa là ta được phép định nghĩa nhiều hàm khởi tạo khác nhau ở danh sách tham đối hay kiểu tham đối

5. Hàm hủy
Các đối tượng cấp phát động bằng toán tử new, khi không tồn tại tham chiếu nào đến đối tượng, đối tượng đó xem như không còn cần đến nữa và bộ nhớ cho nó có thể được tự động giải phóng bởi bộ thu gom rác (garbage collector). Trình thu gom rác hoạt động trong một tuyến đoạn (Thread) độc lập với chương trình của bạn. Bạn không phải bận tâm gì đối với công việc này. Sau này bạn sẽ hiểu rõ tuyến đoạn là thế nào
Tuy nhiên, Java cũng cho phép ta viết hàm hủy, có thể cũng cần thiết cho những trường hợp nào đó. Hàm hủy trong Java chỉ được gọi bởi trình thu gom rác, do vậy bạn khó đoán trước vào lúc nào hàm hủy sẽ được gọi
Dạng hàm hủy như sau :
protected void finalize() {
// Body of Method
}

6. Từ khoá this
Nếu biến được định nghĩa trong thân hàm, đó là biến cục bộ chỉ tồn tại khi hàm được gọi. Nếu biến cục bộ như vậy được đặt tên trùng với biến đối tượng hoặc biến lớp, nó sẽ che khuất biến đối tượng hay biến lớp trong thân hàm :
Ví dụ :
class ViDu {
int test = 10; // Biến đối tượng
void printTest() {
int test = 20; // Biến cục bộ
System.out.println(“test = “+test); // In biến cục bộ
}
public static void main(String args[]) {
ViDu a = new ViDu();
a.printTest();
}
}
Từ khoá this có thể dùng bên trong bất cứ phương thức nào để tham chiếu đến đối tượng hiện hành, khi biến đối tượng trùng tên với biến cục bộ.
 
Ví dụ : Thay dòng lệnh trên :
System.out.println(“test = “+this.test); // In biến cục bộ, this chỉ đối tượng a

7. Nạp chồng hàm (Overloaded Methods)
Trong cùng một lớp, Java cho phép bạn định nghĩa nhiều hàm trùng tên với điều kiện các hàm như vậy phải có danh sách tham đối khác nhau, nghĩa là khác nhau về số tham đối hoặc kiểu của các tham đối. Khả năng như vậy gọi là sự nạp chồng hàm. Java chỉ phân biệt hàm này với hàm khác dựa vào số tham đối và kiểu của các tham đối, bất chấp tên hàm và kiểu của kết quả trả về.
Ví dụ :
// MyRect.java
import java.awt.Point;
class MyRect {
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
MyRect buildRect(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
return this;
}
MyRect buildRect(Point topLeft, Point bottomRight) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = bottomRight.x;
y2 = bottomRight.y;
return this;
}
MyRect buildRect(Point topLeft, int w, int h) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = x1+w;
y2 = y1 + h;
return this;
}
void display() {
System.out.print(“Doi tuong MyRect : <” + x1 + “, “+y1);
System.out.println(“, “+x2+”, “+y2+”>”);
}
}
Thật ra, trong gói awt có sẵn lớp Rectangle chuyên dùng để biểu diễn hình chữ nhật. Lớp MyRect của ta chỉ dùng để minh hoạ cho khái niệm nạp chồng hàm. Trong lớp MyRect có những hàm giúp bạn tạo ra đối tượng MyRect với những yếu tố cho trước khác nhau :
- Cho trước toạ độ góc trên trái x1, y1 và toạ độ góc dưới phải x2, y2
- Cho trước góc trên trái và góc dưới phải của hình chữ nhật dưới dạng đối tượng Point
- Cho trước toạ độ góc trên trái của hình chữ nhật dạng đối tượng Point cùng chiều rộng, chiều cao
Nhờ khả năng nạp chồng hàm, bạn chỉ cần nhớ một tên hàm cho các hàm khác nhau cùng chức năng
Chương trình sử dụng lớp MyRect xây dựng ở trên :
import java.awt.Point;
class UngDung {
public static void main(String args[]) {
MyRect rect = new MyRect();
rect.buildRect(25,25,50,50);
rect.display();
rect.buildRect(new Point(10,10), new Point(20,20));
rect.display();
rect.buildRect(new Point(10,10), 50, 50);
rect.display();
}
}

8. Truyền tham đối
Java dùng cả hai cách truyền tham đối : truyền bằng giá trị và truyền bằng tham chiếu, tùy vào cái gì được truyền - Khi ta truyền một kiểu sơ cấp cho phương thức, nó sẽ truyền bằng giá trị. Vì vậy những gì xảy ra với tham đối trong phương thức, khi ra khỏi phương thức sẽ hết tác dụng - Khi ta truyền một đối tượng (kiểu phức hợp) cho phương thức, nó sẽ truyền bằng tham chiếu. Vì vậy, thay đổi ở đối tượng bên trong phương thức ảnh hưởng đến đối tượng dùng làm tham đối.
Ví dụ 1 :
class ViDu {
void tinhToan(int i, int j) {
i *= 2;
j /= 2;
}
}
class UngDung {
public static void main(String args) {
ViDu o = new ViDu();
int a = 15, b = 20;
System.out.println(“a và b trước khi gọi : “+a+ “ ”+b);
o.tinhToan(a, b);
System.out.println(“a và b sau khi gọi : “+a+” “+b);
}
}
Kết quả của chương trình :
a và b trước khi gọi : 15 20
a và b sau khi gọi : 15 20
Ví dụ 2 :
class ViDu {
int a, b;
ViDu (int i, int j) {
a = i;
b = j;
}
void tinhToan(ViDu o) {
o.a *= 2;
0.b /= 2;
}
}
class UngDung {
public static void main(String args[]) {
ViDu o = new ViDu(15, 20);
System.out.println(“o.a và o.b trước khi gọi : “+o.a+” “+o.b);
o.tinhToan(o);
System.out.println(“o.a và o.b sau khi gọi : “+o.a+” “+o.b);
}
}
Kết quả chương trình :
o.a và o.b trước khi gọi : 15 20
o.a và o.b sau khi gọi : 30 10

Lớp và đối tượng trong java

Lớp và đối tượng trong java

I. XÂY DỰNG LỚP
Khi định nghĩa một lớp, bạn chỉ ra thuộc tính mà nó chứa được thể hiện bằng biến (Member Variable) và hành vi được thể hiện bởi hàm (Method)
Các biến định nghĩa bên trong một lớp gọi là các biến thành viên (Member Variables). Mã lệnh chứa trong các phương thức (Method). Các phương thức và biến định nghĩa trong lớp gọi chung là thành phần của lớp. Trong hầu hết các lớp, các biến thể hiện được truy cập bởi các phương thức định nghĩa trong lớp đó. Vì vậy, chính các phương thức quyết định dữ liệu của lớp có thể dùng như thế nào. Lớp định nghĩa một kiểu dữ liệu mới, dùng để tạo các đối tượng thuộc kiểu đó.
 
Dạng đầy đủ của một định nghĩa lớp như sau :
 
[public] : Lớp được truy xuất chung cho các Package khác, mặc định chỉ có các đoạn mã trong cùng một gói mới có quyền truy xuất nó
[abstract] : Lớp trừu tượng, không thể khởi tạo
class ClassName : Tên lớp
[extends SuperClass] : Kế thừa lớp cha SuperClass
[implements Interfaces] : Giao diện được cài đặt bởi Class
{ //Member Variables Declarations :Khai báo các biến
// Methods Declarations : Khai báo các phương thức
}

Ví dụ : Tạo một lớp Box đơn giản với ba biến : width, height, depth
/* Định nghĩa lớp
*/
class Box {
double width;
double height;
double depth; }
------------------
II. TẠO ĐỐI TƯỢNG
 

1. Khai báo đối tượng
Để có được các đối tượng của một lớp phải qua hai giai đoạn :
 ClassName ObjectName; Ví dụ : Box myBox
w
Khai báo biến myBox có kiểu lớp Box. Khai báo này thực ra không cấp phát ký ức đủ chứa đối tượng thuộc lớp Box, mà chỉ tạo ra quy chiếu trỏ đến đối tượng Box. Sau câu lệnh này, quy chiếu myBox xuất hiện trên ký ức chứa giá trị null chỉ ra rằng nó chưa trỏ đến một đối tượng thực tế nào Khác với câu lệnh khai báo biến kiểu sơ cấp là dành chỗ trên ký ức đủ chứa một trị thuộc kiểu đó : Ví dụ : int i;
 
 Sau đó, để thực sự tạo ra một đối tượng và gán địa chỉ của đối tượng cho biến này, dùng toán tử new
wSau câu lệnh này, biến nguyên i hình thành.
ObjectName = new ClassName(); Ví dụ : myBox = new Box();
 Có thể kết hợp cả hai bước trên vào một câu lệnh :
w 
ClassName ObjectName = new ClassName(); Ví dụ : Box myBox = new Box();
Box myBox2 = myBox; myBox2 tham chiếu đến cùng đối tượng mà myBox tham chiếu
 
2. Cách truy xuất thành phần của lớp

 Biến khai báo trong định nghĩa lớp gồm có hai loại :
w
- Biến đối tượng (Instance Variable hay Object Variable) : chỉ thuộc tính đối tượng, khi truy xuất phải khởi tạo đối tượng
+ Cách khai báo biến đối tượng :
 
Type InstanceVar;
+ Cách truy cập biến đối tượng :
 
ObjectName.InstanceVar
- Biến lớp (Class Variable) : về bản chất là biến toàn cục, là biến tĩnh được tạo lập một lần cùng với lớp, dùng chung cho mọi đối tượng thuộc lớp, khi truy xuất không cần khởi tạo đối tượng, để trao đổi thông tin của các đối tượng cùng lớp
+ Cách khai báo biến lớp :
 
static Type ClassVar;
+ Cách truy cập biến lớp :
 
ClassName.ClassVar

 Hàm khai báo trong định nghĩa lớp gồm có hai loại :
w
- Hàm đối tượng (Object Method) : cách truy xuất hàm đối tượng như biến đối tượng
ObjectName.ObjectMethod(Parameter-List) - Hàm lớp (Class Method) : thông thường một thành phần của lớp chỉ truy xuất trong sự liên kết với một đối tượng thuộc lớp của nó. Tuy nhiên, có thể tạo ra một thành phần mà có thể dùng một độc lập một mình, không cần tham chiếu đến một đối tượng cụ thể, có thể được truy xuất trước khi bất kỳ đối tượng nào của lớp đó được tạo ra, bằng cách đặt trước khai báo của nó từ khoá static. Cách truy xuất hàm lớp :
ClassName.ClassMethod(Parameter-List)
Các hàm toán học của lớp Math trong Package Java.Lang là hàm lớp nên khi gọi không cần phải khởi tạo đối tượng
Ví dụ : double a = Math.sqrt(453.28);
Ví dụ 1: class BaiTho {
static int i; // Biến lớp
String s; // Biến đối tượng
BaiTho(String ss) { // Hàm khởi tạo
s = ss;
i++;
}
void content( ) {
System.out.println(s);
}
}
class UngDung {
public static void main(String args[]){
BaiTho p1 = new BaiTho(“Chi co thuyen moi hieu”);
BaiTho p2 = new BaiTho(“Bien menh mong nhuong nao”);
p1.content();
p2.content();
System.out.println(“So cau tho la : “+BaiTho.i);
}
}
Khi tạo đối tượng p1, p2 bởi toán tử new, hàm dựng BaiTho() được gọi, và i tăng lên 1
Ví dụ 2:
class BaiTho2 {
static int i;
String s;
BaiTho2(String ss) { // Hàm khởi tạo
s = ss; i++;
}
static int number() { // Hàm lớp
return i;
}
String content() { // Hàm đối tượng
return s;
}
}
class UngDung2 {
public static void main (String args[]) {
System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”);
BaiTho2.p1 = new BaiTho2(“Chi co thuyen moi hieu”);
BaiTho2.p2 = new BaiTho2(“Bien menh mong nhuong nao”);
System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”);
System.out.println(“Cau tho\n“+p1.content().toUpperCase()+”\nco” +
 
p1.content().length() +” ky tu”);
System.out.println(“Tu \”tinh yeu\“ bat dau sau ky tu thu“+
 
p2.content().indexOf(“tinh yeu”)+” trong cau\n”+
p2.content().toUpperCase());
}
}
Gọi hàm lớp BaiTho2.number() lúc chưa gọi hàm dựng BaiTho2 để khởi tạo đối tượng sẽ cho trị 0
 
p1.content() trả về một đối tượng String

Thứ Ba, 30 tháng 7, 2013

Làm quen với Netbeans

Trong bài viết dưới đây, chúng tôi sẽ giới thiệu với các bạn những đặc điểm cơ bản nhất của NetBeans IDE qua 1 bài thử nghiệm nho nhỏ, đó là tạo ứng dụng Java “Hello World”. Và khi hoàn tất, các bạn sẽ nắm rõ được kiến thức và quy trình chung khi lập trình ứng dụng trong IDE.

1. Khởi tạo Project:

Trước tiên, các bạn hãy khởi động NetBeans IDE. Từ bên trong IDE, chọn File > New Project(phím tắt Ctrl + Shift + N) như hình dưới:
Khởi tạo project - Netbeans

Cửa sổ New Project hiển thị, các bạn chọn mục Java > Java Application. Sau đó nhấn Next:
lam quen voi netbeans ide java 2 Làm quen với NetBeans IDE Java
Trong phần Name and Location, các bạn nhập thông tin như dưới đây:
  • Project Name: HelloWorldApp
  • Không chọn ô Use Dedicated Folder for Storing Libraries
  • Create Main Class: helloworldapp.HelloWorldApp
  • Đánh dấu check vào ô Set as Main Project
lam quen voi netbeans ide java 3 Làm quen với NetBeans IDE Java
Nhấn Finish và Project sẽ được mở trong IDE, chúng ta sẽ nhìn thấy những thành phần sau:
Cửa sổ Projects: với chế độ tree view các component của project, ví dụ như: source files, libraries…
  • Cửa sổ Source Editor với file HelloWorldApp đang được mở.
  • Cửa sổ Navigator: được dùng để di chuyển giữa các element bên trong class đang mở.
  • Cửa sổ Tasks: liệt kê tất cả các lỗi xảy ra trong quá trình compile và những thành phần có liên quan, được đánh dấu bằng XXX và TODO.
lam quen voi netbeans ide java 4 Làm quen với NetBeans IDE Java

2. Ghép Code vào Generated Source File:

Ở phía trên, chúng ta đã chọn ô checkbox Create Main Class khi tạo Project, cho nên IDE sẽ tạo ra class chính. Các bạn có thể gán “Hello World!” tới phần code chính bằng cách thay thế dòng:
            // TODO code application logic here
bằng đoạn mã:
            System.out.println(“Hello World!”);
Chọn File > Save để lưu sự thay đổi. File kết quả của chúng ta tại bước này sẽ trông giống như sau:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package helloworldapp;
/**
 *
 * @author 
 */
public class HelloWorldApp {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
            System.out.println(“Hello World!”);
    }
}

3. Biên dịch và chạy chương trình:

Bởi vì tính năng Compile của IDE nằm trong phần Save, cho nên chúng ta sẽ không phải biên dịch project trước để có thể chạy được bên trong IDE. Khi lưu 1 file Java source thì IDE sẽ tự động biên dịch nó. Lưu ý rằng chức năng Compile của Save có thể được tắt bỏ trong phần Project Properties bằng cách nhấn chuột phải vào project và chọn Properties. Trong cửa sổ Propertiesnày, chọn thẻ Compiling, với ô checkbox Compile on Save ở phía trên bên phải. Đồng thời phầnProject Properties này cũng có thể điều chỉnh được những thiết lập cho: project libraries, packaging, building, running…
Để chạy chương trình, các bạn hãy chọn Run > Run Main Project hoặc nhần F6:
lam quen voi netbeans ide java 5 Làm quen với NetBeans IDE Java
Khi hệ thống hiển thị thông báo như trên nghĩa là quá trình biên dịch đã thành công
Nếu xảy ra lỗi thì chúng sẽ được đánh dấu bằng ký hiệu mũi tên màu đỏ ở phía bên trái và căn lề bên phải tại phần Source Editor. Ký hiệu đánh dấu ở phía bên trái sẽ tương ứng với những dòng của đoạn mã có chứa lỗi, còn ký hiệu lỗi bên phải sẽ chỉ ra toàn bộ các file có lỗi, kể cả những lỗi không nhìn thấy. Nhấn vào biểu tượng lỗi để chuyển đến dòng chứa code đó.

4. Xây dựng và triển khai ứng dụng:

Sau khi viết mã nguồn, kiểm tra thì chúng ta có thể sử dụng tính năng Clean and Build để xây dựng chương trình. Khi dùng lệnh Clean and Build này, IDE sẽ cho chạy những đoạn mã cần thiết để thực hiện những tác vụ sau:
  • Xóa hết những file đã được compile và build trước đó.
  • Biên dịch lại ứng dụng và tạo ra file *.JAR có chứa những file đã được biên dịch.
Để xây dựng chương trình, các bạn chọn Run > Clean and Build Main Project hoặc nhấn phím tắt Shift + F11. Chúng ta có thể kiểm tra các file đã được xây dựng bằng cách mở cửa sổ Files và mở rộng phần HelloWorldApp (tên của project). File bytecode HelloWorldApp.class sau khi biên dịch nằm bên trong phần build/classes/helloworldapp. Gói file *.JAR có chứa fileHelloWorldApp.class ở bên trong dist.
lam quen voi netbeans ide java 6 Làm quen với NetBeans IDE Java
Rất đơn giản và dễ dàng, chúc các bạn thành công!

Bài đăng phổ biến