24/05/2018, 16:38

Lập trình Java cho dos

Java : ngôn ngữ vạn năng applets, ứng dụng window ứng dụng DOS (console), beans, servlets, Applet Programming Applet = chương trình Java chạy trong một trang Web. Mở ...

Java : ngôn ngữ vạn năng

applets,

ứng dụng window

ứng dụng DOS (console),

beans, servlets,

Applet Programming

Applet = chương trình Java chạy trong một trang Web.

Mở một trang Web có chứa applet -> applet sẽ được tự động khởi tạo và thực hiện.

Applets tăng cường chức năng trang Web

sinh động,

tương tác,

+ ứng dụng CSDL,

Application Programming

Ưng dung window.

Bộ công cụ Abstract Window Toolkit (AWT)

Tạo ra các chương trình chạy trong Microsoft Windows (98, 95, NT, and CE), Macintosh, UNIX, OS/2, và mọi môi trường window khác

Ưng dụng DOS - console.

dữ liệu vào từ bàn phím

hiển thị kết quả trên (cửa sổ) màn hình.

Xây dựng các JavaBeans

Mô hình Component Object Model (COM).

JavaBeans = software components độc lập với nền HĐH,

Có thể sử dụng lại trong applets, ứng dụng đơn lẻ...

Servlet Programming

Chương trình server nhỏ : một nhiệm vụ, một yêu cầu cụ thể.

Ví dụ : chương trình Common Gateway Interface (CGI) do Web servers cho chạy để thực hiện tìm kiếm Web, xử lí form, cung cấp phản hồi tới NSD Web.

Nhỏ, nhanh, hiệu quả, để hỗ trợ cho ứng dụng Web.

Java Server Toolkit - Servlet API : để xây dựng các servlet.

Có thể sử dụng Java API để viết chương trình CGI,

Sự khác nhau giữa ứng dụng Console và ứng dụng Window

Không có GUI , Window.

Dữ liệu nhập vào từ bàn phím.

Lối vào là phương thức main() với đối là String[].

Khung như sau :

class programClass {

public static void main(String[] args) {

.

.

.

}

}

Đọc mảng args để nhận các tham số dòng lệnh.

xử lí các input từ bàn phím, ....

Nhập từ bàn phím và xuất ra màn hình

I/O cơ bản : đọc từ bàn phím

viết ra màn hình.

Lớp System trong java.lang package cung cấp mọi hỗ trợ cần thiết Biến

System.in -> standard input stream (= bàn phím)

System.out -> standard output stream, (= màn hình)

System.err -> standard error stream, (= màn hình)

Lớp InputStream cung cấp các phương thức cơ bản để đọc dữ liệu.

Lớp BufferedReader có các phương thức

read() ,

readLine() để đọc vào trọn một dòng.

Dưới đây minh hoạ cách dùng các lớp đó.

BufferedReader keyboardInput;

keyboardInput = new BufferedReader(new InputStreamReader(System.in));

String newLine;

while(((newLine = keyboardInput.readLine())!=null)) {

// Process each input line

}

Sửa lại ManApp.java để nhập tên và năm sinh từ bàn phím.

Hai biến String ten, nam sẽ nhận từ bàn phím, họ tên và năm sinh.

Câu lệnh

ns = Integer.parseInt(nam);

chuyển đổi xâu kí số nam -> số nguyên ns.

import java.lang.*;

import java.io.*;

import java.util.*;

class ManInput{

public static void main (String[] arguments) throws IOException {

BufferedReader keyboardInput ;

keyboardInput = new BufferedReader(new InputStreamReader(System.in));

String ten,nam;

int ns;

do { System.out.print("Ho va ten : ");

ten = keyboardInput.readLine();

System.out.print("Nam sinh : ");

nam = keyboardInput.readLine();

}

while ((ten == null) || (nam == null));

keyboardInput.close();

ns = Integer.parseInt(nam);

Man ng1 = new Man(ten,ns);

ng1.hienthi();

}

}

class Man ....

Nhập và xuất qua tệp.

Có thể định hướng lại để nhập vào từ tệp văn bản và xuất ra tệp văn bản như trong chương trình dưới đây.

import java.lang.*;

import java.io.*;

import java.util.*;

class ManFileIO{

public static void main (String[] arguments) throws IOException {

BufferedReader FileInput ;

PrintWriter out ;

FileInput = new BufferedReader(new FileReader("filein.txt"));

out = new PrintWriter(new BufferedWriter(new FileWriter("fileout.txt")));

String ten,nam;

int ns;

do { ten = FileInput.readLine();

nam = FileInput.readLine();

}

while ((ten == null) || (nam==null));

FileInput.close();

ns = Integer.parseInt(nam);

Man ng1 = new Man(ten,ns);

ng1.hienthi();

out.println(ten);

out.println(nam);

out.close();

}

}

class Man ....

Các hằng E và PI

Các hàm số học, lượng giác, hàm mũ, hàm logarit,

Số ngẫu nhiên,

convertions.

Chương trình MathApp.

import java.lang.System;

import java.lang.Math;

public class MathApp {

public static void main(String args[]) {

System.out.println(Math.E);

System.out.println(Math.PI);

System.out.println(Math.abs(-1234));

System.out.println(Math.cos(Math.PI/4));

System.out.println(Math.sin(Math.PI/2));

System.out.println(Math.tan(Math.PI/4));

System.out.println(Math.log(1));

System.out.println(Math.exp(Math.PI));

for(int i=0;i<3;++i)

System.out.print(Math.random()+" ");

System.out.println();

}

}

Két quả như sau :

2.718281828459045

3.141592653589793

1234

0.7071067811865476

1.0

0.9999999999999999

0.0

23.14069263277926

.....

Lớp String, StringBuffer

String = xâu hằng, không thay đổi.

StringBuffer = String thay đổi được nội dung.

Trình biên dịch tự động chuyển đổi String literal -> đối tượng String.

String str = "text";

String str = new String("text");

Nối String : +

String s = "";

s = s + "a" + "b";

length() ;

Các phương thức truy cập kí tự và xâu con

charAt(),

getBytes(),

getChars(),

indexOf(),

lastIndexOf(),

substring().

So sánh và Test

compareTo(),

endsWith(),

equals(),

equalsIgnoreCase(),

regionMatches(),

startsWith().

Các phương thức Copy, Concatenation, Replace

concat(),

copyValueOf(),

replace(),

trim().

Chuyển đổi và tạo đối tượng.

intern(),

toCharArray(),

toLowerCase(),

toString(),

toUpperCase(),

valueOf().

Chương trình StringApp.

import java.lang.System;

import java.lang.String;

public class StringApp {

public static void main(String args[]) {

String s = " Java Unleashed 1.2 ";

System.out.println(s);

System.out.println(s.toUpperCase());

System.out.println(s.toLowerCase());

System.out.println("["+s+"]");

s=s.trim();

System.out.println("["+s+"]");

s=s.replace('J','X');

s=s.replace('U','Y');

s=s.replace('2','Z');

System.out.println(s);

int i1 = s.indexOf('X');

int i2 = s.indexOf('Y');

int i3 = s.indexOf('Z');

char ch[] = s.toCharArray();

ch[i1]='J';

ch[i2]='U';

ch[i3]='2';

s = new String(ch);

System.out.println(s);

}

}

Kết quả in ra như sau:

Java Unleashed 1.2

JAVA UNLEASHED 1.2

java unleashed 1.2

[ Java Unleashed 1.2 ]

[Java Unleashed 1.2]

Xava Ynleashed 1.Z

Java Unleashed 1.2

Chwong trình StringBufferApp.

import java.lang.System;

import java.lang.String;

import java.lang.StringBuffer;

public class StringBufferApp {

public static void main(String args[]) {

StringBuffer sb = new StringBuffer(" is ");

sb.append("Hot");

sb.append('!');

sb.insert(0,"Java");

sb.append(' ');

sb.append("This is ");

sb.append(true);

sb.setCharAt(21,'T');

sb.append(' ');

sb.append("Java is #");

sb.append(1);

String s = sb.toString();

System.out.println(s);

}

}

két quả in ra như sau:

Java is Hot!

This is True

Java is #1.

java.util Package

  • Vector-- mảng (mở rộng được) các đối tương.
  • Stack.
  • BitSet--Vector bit (mở rộng được).
  • Dictionary--Danh sách các cặp key-value.
  • Hashtable--Một kiểu tự điển triển khai hash table.

Enumeration Interface

Duyệt qua tập có chỉ số các đối tượng hay giá trị :

hasMoreElements() : có còn phần tử nữa hay không.

nextElement() : phần tử tiếp theo.

Duyệt một lần.

Lớp Vector

Chương trình VectorApp.

import java.lang.System;

import java.util.Vector;

import java.util.Enumeration;

public class VectorApp {

public static void main(String args[]){

Vector v = new Vector();

v.addElement("one");

v.addElement("two");

v.addElement("three");

v.insertElementAt("zero",0);

v.insertElementAt("oops",3);

v.insertElementAt("four",5);

System.out.println("Size: "+v.size());

Enumeration enum = v.elements();

while (enum.hasMoreElements())

System.out.print(enum.nextElement()+" ");

System.out.println();

v.removeElement("oops");

System.out.println("Size: "+v.size());

for(int i=0;i<v.size();++i)

System.out.print(v.elementAt(i)+" ");

System.out.println();

}

}

Chương trình khởi tạo đối tượng Vector,

addElement() : thêm các strings "one", "two", "three".

insertElementAt() : chèn vào vị trí ...

size() = kích thước = số phần tử.

elements() : lấy ra mảng phần tử của Vector

hasMoreElements()

nextElement()

removeElement()

elementAt() :

Size: 6

zero one two oops three four

Size: 5

zero one two three four

Lớp Stack.

Constructor mặc định Stack() tạo ra stack rỗng.

push()pop().

search() : tìm kiếm một phần tử cụ thể trong stack

peek() cho nội dung của phần tử top nhưng không lấy ra.

empty() kiểm tra rỗng.

Chương trình StackApp.

import java.lang.System;

import java.util.Stack;

public class StackApp {

public static void main(String args[]){

Stack s = new Stack();

s.push("one");

s.push("two");

s.push("three");

System.out.println("Top of stack: "+s.peek());

while (!s.empty())

System.out.println(s.pop());

}

}

Top of stack: three

three

two

one

Ngày tháng và Lịch.

Date

Constructor mặc định Date() không tham đối -> đối tượng ngày tháng hiện tại của hệ thống

Đã thay thế bằng Calendar, DateFormat, TimeZone.

Calendar

Calendar hỗ trợ chuyển đổi thời gian ngày tháng

Lớp con GregorianCalendar hỗ trợ lịch Gregorian,

Constructor không tham số -> lịch (múi giờ mặc định)

Constructor cho phép ấn định múi giờ và địa điểm.

Thứ trong tuần, tháng, năm, giờ phút giây, mili giây...

getInstance() tạo ra một đối tượng là Lịch địa phương - GregorianCalendar theo mặc định.

GregorianCalendar

GregorianCalendar : lớp con của Calendar.

TimeZone

Lớp múi giờ - TimeZone.

Các phương thức cho phép thâm nhập một danh sách các múi giờ có thể, giờ địa phương, (từ giờ hệ thống) , độ lệch với giờ chuẩn, tạo ra đối tượng múi giờ ...

Simpl eTimeZone

Lớp SimpleTimeZone dẫn xuất từ TimeZone

Chương trình DateApp.

import java.lang.System;

import java.util.Date;

import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.TimeZone;

public class DateApp {

public static void main(String args[]){

Date today = new Date();

GregorianCalendar cal = new GregorianCalendar();

cal.setTime(today);

System.out.println("Today: ");

displayDateInfo(cal);

cal.clear();

cal.set(2000,0,1);

System.out.println(" New Years Day 2000: ");

displayDateInfo(cal);

}

static void displayDateInfo(GregorianCalendar cal){

String days[] = {"","Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

String months[] = {"January","February","March","April","May",

"June","July","August","September","October","November",

"December"};

String am_pm[] = {"AM","PM"};

System.out.println("Year: "+cal.get(Calendar.YEAR));

System.out.println("Month: "+months[cal.get(Calendar.MONTH)]);

System.out.println("Date: "+cal.get(Calendar.DATE));

System.out.println("Day: "+days[cal.get(Calendar.DAY_OF_WEEK)]);

System.out.println("Hour: "+(cal.get(Calendar.HOUR)+12)%13);

System.out.println("Minute: "+cal.get(Calendar.MINUTE));

System.out.println("Second: "+cal.get(Calendar.SECOND));

System.out.println(am_pm[cal.get(Calendar.AM_PM)]);

TimeZone tz=cal.getTimeZone();

System.out.println("Time Zone: "+tz.getID());

}

}

Ví dụ một kết quả :

Today:

Year: 1998

Month: July

Date: 28

Day: Tue

Hour: 10

Minute: 57

Second: 6

AM

Time Zone: America/Los Angeles

New Years Day 2000:

Year: 2000

Month: January

Date: 1

Day: Sat

Hour: 12

Minute: 0

Second: 0

AM

Time Zone: America/Los Angeles

Lớp Random.

Tạo ra số ngẫu nhiên.

Chwong trình RandomApp.

import java.lang.System;

import java.util.Random;

public class RandomApp {

public static void main(String args[]){

Random r = new Random();

for(int i=0;i<4;++i) System.out.print(r.nextInt()+" ");

System.out.println();

r = new Random(123456789);

for(int i=0;i<4;++i) System.out.print(r.nextDouble()+" ");

System.out.println();

r.setSeed(234567890);

for(int i=0;i<4;++i) System.out.print(r.nextGaussian()+" ");

System.out.println();

}

}

Các lớp bao gói.

Kiểu nguyên thuỷ không phải là đối tượng,

không thâm nhập bằng các phương thức.

Các lớp wrappers cung cấp những chức năng cơ sở : chuyển đổi, tính giá trị, mã băm, so sánh bằng nhau...

Lớp Boolean

getBoolean(), toString(), valueOf(), booleanValue().

Viết đè : toString(), equals(), hashCode() của Object.

Lớp Character

Các phương thức hỗ trợ in hoa, in thường, chuyển đổi.

Các lớp Byte, Short, Integer, Long

Các hằng MIN_VALUE, MAX_VALUE

parseInt(), parseLong() : chuyển đối tượng String -> đối tượng Byte, Short, Integer, Long.

Các lớp Double, Float

Các hằng MIN_VALUE, MAX_VALUE,

POSITIVE_INFINITY, NEGATIVE_INFINITY

NaN (not-a-number).

Ví dụ minh hoạ.

Chương trình WrappedClassApp.

import java.lang.System;

import java.lang.Boolean;

import java.lang.Character;

import java.lang.Integer;

import java.lang.Long;

import java.lang.Float;

import java.lang.Double;

public class WrappedClassApp {

public static void main(String args[]) {

Boolean b1 = new Boolean("TRUE");

Boolean b2 = new Boolean("FALSE");

System.out.println(b1.toString()+" or "+b2.toString());

for(int j=0;j<16;++j)

System.out.print(Character.forDigit(j,16));

System.out.println();

Integer i = new Integer(Integer.parseInt("ef",16));

Long l = new Long(Long.parseLong("abcd",16));

long m=l.longValue()*i.longValue();

System.out.println(Long.toString(m,8));

System.out.println(Float.MIN_VALUE);

System.out.println(Double.MAX_VALUE);

}

Kết quả in ra như sau:

true or false

0123456789abcdef

50062143

1.4E-45

1.7976931348623157E308

0