Nội dung. Thêm về Java 2. Nguyễn Việt Hà

Similar documents
Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

Nội dung chính của chương. Các công nghệ đĩa cứng Cấu tạo vật lý của đĩa cứng Cấu tạo logic của đĩa cứng Cài đặt đĩa cứng như thế nào?

Bộ môn MMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

Chương 6. Transport Layer. Tài liệu : Forouzan, Data Communication and Networking

Khoa KH & KTMT Bộ môn Kỹ Thuật Máy Tính

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

Cài đặt và cấu hình StarWind iscsi trên Windows. iscsi SAN là gì?

BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOWS C#

SIEMENS INDUSTRIAL NETWORKS

Bài 13: C++11. EE3490: Kỹ thuật lập trình HK1 2017/2018 TS. Đào Trung Kiên ĐH Bách khoa Hà Nội

CẤU TRÚC DỮ LIỆU NÂNG CAO

STACK và QUEUE. Lấy STACK

Tài liệu hướng dẫn: Stored Procedure

HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM DIỆT VIRUS AVIRA

Internet Protocol. Bởi: Phạm Nguyễn Bảo Nguyên

TÀI LIỆU THỰC HÀNH MÔN CƠ SỞ DỮ LIỆU NÂNG CAO

HƯỚNG DẪN SỬ DỤNG HỆ THỐNG CẬP NHẬT CHỨNG THƯ SỐ HOTLINE:

Tình huống 1: PPPoE với Username và Password

Nhấn nút New để tạo 1 biến mới Trang 17

HƯỚNG DẪN SỬ DỤNG PLESK PANEL

Entity Framework (EF)

BÀI 1: VBA LÀ GÌ? TẠO MACRO, ỨNG DỤNG CÁC HÀM TỰ TẠO (UDF), CÀI ĐẶT ADD-INS VBA là gì?

Giáo trình này được biên dịch theo sách hướng dẫn của Sun Light. Vì là hướng dẫn kỹ thuật, trong này những thuật ngữ kỹ thuật bằng tiếng Anh tôi chỉ

Chương 5. Network Layer 19/09/2016 1

Hướng dẫn cài đặt FPT

GV: Phạm Đình Sắc or

ĐỌC, GHI XML VỚI C# TRONG ADO.NET --- SỬ DỤNG VISUAL STUDIO

Chương 5. Network Layer. Phần 1 - Địa chỉ IPv4. Tài liệu : Forouzan, Data Communication and Networking

HƯỚNG DẪN SỬ DỤNG ĐẦU GHI H.264 DVR VISION VS (4CH - 8CH - 16CH)

HƯỚNG DẪN CÁCH SỬ DỤNG WINDOWS MOVIE MAKER

Tạo Project với MPLAB

CHƯƠNG 2: CÁC ĐẶC ĐIỂM VỀ MÔI TRƯỜNG PHÁT TRIỂN (IDE)

Bài 10: Cấu trúc dữ liệu

Exceptions. Outline 7/31/2012. Exceptions. Exception handling is an important aspect of objectoriented. Chapter 10 focuses on:

TỔNG QUAN VỀ.NET VÀ C#

KIẾN TRÚC MÁY TÍNH. Giảng viên: ThS. Phan Thanh Toàn. v

LẬP TRÌNH WINDOWS FORM VỚI CÁC CONTROL NÂNG CAO (Các control trình bày dữ liệu dưới dạng danh sách)

BÀI 6 LÀM VIỆC VỚI THÀNH PHẦN MỞ RỘNG CỦA CSS3

Cụ thể những công việc mà AndroidManifest.xml thực hiện: - Đặt tên cho Java package của ứng dụng.

LÂ P TRI NH WEB ASP.NET

Ôn tập Thiết bị mạng và truyền thông DH07TT - Lưu hành nội bộ (không sao chép dưới mọi hình thức)

Lecture 12. Trees (1/2) Nội dung bài học:

NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU. Bài 10: Thư viện Pandas (2)

Tạo repository mới. The working tree. The staging index. Lệnh git init tạo một repository loại git. tại thư mục hiện tại: $ git init

B5: Time to coding. Tới thư mục src/example.java và thay đổi nội dung file như sau: Mã: package at.exam;

SIMULATE AND CONTROL ROBOT

BÀI GIẢNG CHƯƠNG 3 GIAO TIẾP KẾT NỐI SỐ LIỆU

Dọn "rác" Windows 7 vào dịp cuối năm

Chương 7. Application Layer. Tài liệu : Forouzan, Data Communication and Networking

I. Hướng Dẫn Đăng Nhập:

Kích hoạt phương thức xa (RMI- Remote Method Invocation )

Phần 2. SỬ DỤNG POWERPOINT ĐỂ CHUẨN BỊ NỘI DUNG TRÌNH BÀY

Mô hình dữ liệu quan hệ (Relational data model)

Online Appointment System will work better with below conditions/ Hệ thống đặt hẹn online sẽ hoạt động tốt hơn với điều kiện sau đây:

Lập trình chuyên nâng cao. Lập trình phân tán (Distributed computing

BẢO MẬT TRONG SQL SERVER

GIẢI THUẬT ĐỊNH TUYẾN (ROUTING ALGORITHM)

Bài tập lớn số 1. Giả lập bộ định thời

Bài Thực hành Asp.Net - Buổi 1 - Trang: 1

PHÁT TRIỂN ỨNG DỤNG WEB

Mạng máy tính - Computer Network: Hệ. Giao thức - Protocol:

Tìm hiểu Group Policy Object và các ví dụ

NHÚNG. Vi ñiều khiển BM Kỹ Thuật ðiện Tử - ðh Bách Khoa TP.HCM 2

BELGIUM ONLINE APPOINTMENT

Bài tập căn bản Visual Basic.Net Vòng lặp. txtn. txtketqua. btntinh. txtn. txtketqua. btntinh. Trang 1

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG HOSTING PLESK PANEL

Lab01: M V C Lưu ý: Để thực hành, các bạn phải cài Visual Studio 2013 trở lên mới hỗ trợ MVC5.

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

1 Bước 1: Test thử kit LaunchPad.

Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ. Những hỗ trợ tiên tiến khác của SQL. Đỗ Thanh Nghị

Môn Học: Cơ Sở Dữ Liệu 2. Chương 3 LẤY DỮ LIỆU TỪ NHIỀU NGUỒN

BÀI 6a LẬP TRÌNH ĐA TUYẾN (MULTI THREAD)

MỤC LỤC. Giáo trình Thiết kế web Trang 1

Google Search Engine. 12/24/2014 Google Search Engine 1

LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC

BÀI THỰC HÀNH SỐ 1. Quản trị tập tin: 1/ Tạo các thư mục sau: Bài tập thực hành linux Linuxlab. bt1 bt11 bt111. bt121. bt12. bh1 bh11 bh111.

CHAPTER 6: DANH SÁCH LIÊN KẾT (LINKED LISTS)

Bài 10. Cấu trúc liên nối. khác nhau được gọi là cấu trúc liên nối. nhu cầu trao đổi giữa các module.

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

Các kiểu định địa chỉ họ MSC-51

HƢỚNG DẪN TRIỂN KHAI KASPERSKY - MOBILE DEVICE MANAGEMENT

ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN

HỢP ĐỒNG MUA BÁN HÀNG HÓA QUỐC TẾ GV: NGUYỄN THỊ BÍCH PHƯỢNG

CHƯƠNG 5: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG VB.NET

Phần 1: Hướng dẫn sử dụng PictureBox tạo Slide Show

Quản trị Linux nâng cao. Tháng 9/2013

dụng một chính sách, điều này giúp dễ dàng quản lý và cung cấp tính năng Load Balancing (cân bằng tải) phục vụ tốt hơn các yêu cầu của tổ chức.

PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG NÂNG CAO

Cập nhật ResultSet trong JDBC

Hướng Dẫn Thực Hành Tập tin & Thư mục

Parallels Cloud Server 6.0

Kỹ thuật thu nhỏ đối tượng trong Design (Layout)

BÀI LAB ĐỔI TÊN DOMAIN

Hệ điều hành Bài tập tuần 7_ Chúng ta làm quen một số lệnh thao tác với hệ thống file trong Linux :

ĐỀ CƯƠNG BÀI GIẢNG HỌC PHẦN: AN NINH MẠNG

Qu n ả tr h ố g t p ậ tin

LỖI LÚC THỰC THI và QUÁ TRÌNH GOM RÁC

HƯỚNG DẪN QUẢN TRỊ HỆ THỐNG

LINQ TO SQL & ASP.NET

Transcription:

Hiểu thêm về Java

Nội dung Dữ liệu kiểu nguyên thủy và đối tượng Tham chiếu Giải phóng bộ nhớ Gói và kiểm soát truy cập Kiểu hợp thành (composition) Vào ra với luồng dữ liệu chuẩn Thêm về Java 2

Tài liệu tham khảo Giáo trình Lập trình HĐT, chương 2, 3, 4 Thinking in Java, chapter 2, 4, 5 Java how to program, chapter 4,5,6,7,8 Thêm về Java 3

Kiểu dữ liệu nguyên thủy Java cung cấp các kiểu nguyên thủy số: byte, short, int, long, float, double không có khái niệm unsigned kích thước cố định trên mọi platform logic: boolean ký tự: char Dữ liệu kiểu nguyên thủy không phải là đối tượng int a = 5; if (a==b) Tồn tại lớp đối tượng tương ứng: Interger, Float,.. Integer count = new Integer(0); Thêm về Java 4

Kiểu dữ liệu Độ rộng (bits) Giá trị cực tiểu Giá trị cực đại char 16 0x0 0xffff byte 8-128 (-2 7 ) +127 (2 7-1) short 16-32768 (-2 15 ) 32767 (2 15-1) int 32-2 31, 0x80000000 + 2 31-1, 0x7fffffff long 64-2 63 + 2 63-1 float 32 1.40129846432481707e-45 3.40282346638528860e+38 double 64 4.94065645841246544e-324 1.79769313486231570e+308 boolean Thêm về Java 5

Dữ liệu được lưu trữ ởđâu Dữ liệu kiểu nguyên thủy Thao tác thông qua tên biến Dữ liệu được đóng gói (là thuộc tính) trong đối tượng Đối tượng được thao tác thông qua tham chiếu Vậy biến kiểu nguyên thủy, tham chiếu và đối tượng được lưu trữ ở đâu? Thêm về Java 6

3 vùng bộ nhớ cho ứng dụng code static data constants static memory temporary data stack memory dynamic data heap memory Thêm về Java 7

class Countdown { Countdown(int n) { System.out.println(n); if (n>0) countdown(n); int countdown(int n) { Countdown c; c = new Countdown(n-1); return n; new Countdown(10); Thêm về Java 8

Tham chiếu Đối tượng được thao tác thông qua tham chiếu là con trỏ tới đối tượng thao tác trực tiếp tới thuộc tính và phương thức không có các toán tử con trỏ phép gán (=) không phải là phép toán copy nội dung đối tượng tham chiếu được lưu trữ trong vùng nhớ static/stack như các con trỏ trong C/C++ Thêm về Java 9

Toán tử New Phải tạo mọi đối tượng một cách tường minh bằng toán tử new cấp phát vùng nhớ động được tạo trong bộ nhớ Heap Ví dụ: MyDate d; MyDate birthday; d = new MyDate(); Thêm về Java 10

Phép gán = Phép gán không phải là copy thông thường copy nội dung của tham chiếu 2 tham chiếu sẽ tham chiếu đến cùng đối tượng Integer m = new Integer(10); Integer n = new Integer(20); m = n; n.setvalue(50); System.out.print(m); Thêm về Java 11

New và = MyDate d; MyDate birthday; d = new MyDate(26,9,2005); birthday = d; new operation assign operation Static/Stack memory d birthday Heap memory 26-9-2005 Thêm về Java 12

Toán tử quan hệ == So sánh nội dung của các dữ liệu kiểu nguyên thủy (int, long, float, ) So sánh nội dung của tham chiếu chứ không so sánh nội dung của đối tượng do tham chiếu trỏ đến Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1 == n2); System.out.println(n1!= n2); -- false true Thêm về Java 13

So sánh nội dung đối tượng class MyDate {... boolean equalto(mydate d) {...... MyDate d1 = new MyDate(10,10,1954); MyDate d2 = new MyDate(d1); System.out.println(d1.equalTo(d2)); Thêm về Java 14

Giải phóng bộ nhớ động (Garbage collection) Lập trình viên không cần phải giải phóng đối tượng JVM cài đặt cơ chế Garbage collection để giải phóng tự động các đối tượng không còn cần thiết Tuy nhiên, GC không nhất thiết hoạt động với mọi đối tượng (không nhất thiết phải giải phóng bộ nhớ) Không đảm bảo việc phương thức hủy luôn hoạt động GC tăng tốc độ phát triển và tăng tính ổn định của ứng dụng Không phải viết mã giải phóng đối tượng Do đó, không bao giờ quên giải phóng đối tượng Thêm về Java 15

GC hoạt động như thế nào Sử dụng cơ chế đếm? mỗi đối tượng có một số đếm các tham chiếu trỏ tới giải phóng đối tượng khi số đếm = 0 Giải phóng các đối tượng chết kiểm tra tất cả các tham chiếu đánh dấu các đối tượng còn được tham chiếu giải phóng các đối tượng không được tham chiếu Thêm về Java 16

Garbage Collection MyDate opendate = new MyDate(1,10,2005); MyDate startdate = new MyDate(10,10,2005); opendate = startdate; X opendate 1-10-2005 released automatically startdate 10-10-2005 Thêm về Java 17

Truyền tham số và nhận giátrị trả lại Truyền giá trị đối với dữ liệu kiểu nguyên thủy giá trị của tham số (RValue) được copy lên stack có thể truyền hằng số (vd: 10, 0.5, ) Truyền tham chiếu đối với đối tượng nội dung của tham chiếu (LValue) được copy lên stack Thêm về Java 18

Truyền tham số trị class MyDate {... public boolean setyear(int y) {... public int getyear() { return year;...... MyDate d = new MyDate(); d.setyear(1975); int y = d.getyear(); Thêm về Java 19

Truyền tham chiếu class MyDate { int year, month, day; public MyDate(int y, int m, int d) { year = y; month = m; day = d; public void copy(mydate d) { d.year = year; d.month = month; d.day = day; public MyDate copy() { return new MyDate(day, month, year);... Thêm về Java 20

Truyền tham chiếu MyDate d1 = new MyDate(2005, 9, 26); MyDate d2 = new MyDate(2000, 1, 1); d1.copy(d2); MyDate d3 = new MyDate(); d3 = d1.copy(); Thêm về Java 21

Tham chiếu this Java cung cấp tham chiếu this để trỏ tới chính đối tượng đang hoạt động this được sử dụng vào các mục đích như tham chiếu tường minh đến thuộc tínhvàphương thức của đối tượng truyền tham số và trả lại giá trị dùng để gọi constructor Thêm về Java 22

this làm giá trị trả lại class Counter { private int c = 0; public Counter increase() { c++; return this; public int getvalue() { return c;... Counter count = new Counter(); System.out.println(count.increase().increase().getValue()) ; Thêm về Java 23

this làm tham số class Document { Viewer vi;... Document(Viewer v) { vi = v;... void display() { vi.display(this);... Thêm về Java 24

Gọi constructor bằng this class MyDate { private int year, month, day;... public MyDate(int y, int m, int d) {... // copy constructor MyDate(MyDate d) { this(d.year, d.month, d.day); System.out.println( copy constructor called ); Constructor chỉ được gọi bên trong một constuctor khác và chỉ được gọi một lần ở thời điểm (vị trí) đầu tiên. Thêm về Java 25

Phương thức vàthuộc tính static Có thể khai báo phương thức vàthuộc tính là tĩnh (static) độc lập với đối tượng có thể sử dụng mà không cần cóđối tượng Phương thức tĩnh không sử dụng được thuộc tính thông thường (nonstatic) không gọi được các phương thức thông thường Thêm về Java 26

Ví dụ: Hello.java public class Hello{ static Hello h = new Hello(); sayhello() {System.out.println( Hello, world ); static Hello getref() { return h; public static void main (String[] args) { h.sayhello(); Hello h2 = new Hello(); h2.sayhello(); // sayhello(); getref().sayhello(); Thêm về Java 27

Gói các lớp đối tượng (package) Các lớp đối tượng được chia thành các gói nếu không khai báo thì các lớp thuộc gói default các lớp trong cùng một tệp mã nguồn luôn thuộc cùng một gói Tồn tại mức truy cập package mức package là mặc định (nếu không khai báo tường minh là public hay private) các đối tượng của cáclớp thuộc cùng gói có thể truy cập đến non-private members của nhau chỉ có thể tạo (new) đối tượng của lớp được khai báo là public của gói khác Thêm về Java 28

Hello.java: class HelloMsg { void sayhello() { System.out.println( Hello, world! ); public class Hello { public static void main(string[] args) { HelloMsg msg = new HelloMsg(); msg.sayhello(); Thêm về Java 29

Khai báo và sử dụng package Khai báo gói bằng lệnh package các gói được lưu trữ theo cấu trúccây thư mục sử dụng tham số -d để tạo thư mục khi biên dịch Dùng lệnh import để khai báo việc sử dụng một gói đã có Thêm về Java 30

HelloMsg.java: package hanv; public class HelloMsg { public void sayhello() { System.out.println("Hello, world!"); Thêm về Java 31

Hello.java: import hanv.hellomsg; public class Hello { public static void main(string[] args) { HelloMsg msg = new HelloMsg(); msg.sayhello(); Thêm về Java 32

Biên dịch & thực hiện Biên dịch javac HelloMsg.java -d. javac Hello.java Thực hiện java Hello Thêm về Java 33

Package & Façade pattern Che giấu cấu trúc nội tại của gói Truy cập thông qua đối tượng thuộc lớp giao diện Thêm về Java 34

Đối tượng hợp thành (Composition) Đối tượng có thể chứa các đối tượng khác (các thuộc tính không thuộc kiểu nguyên thủy) Thuộc tính là tham chiếu phải được tạo ra bằng new hoặc được gán cho một đối tượng đã tồn tại class Person { private String name; private MyDate birthday = new MyDate(1,1,2000);... Thêm về Java 35

Get/Set thuộc tính không thuộc kiểu nguyên thủy class Person { public MyDate getbirthday() { return birthday; Person p = new Person(...); MyDate d = p.getbirthday(); d.setyear(1900); Thêm về Java 36

Get/Set bằng copy constructor class Person { private String name; private MyDate birthday; public Person(String s, MyDate d) { name = s; birthday = new MyDate(d); public MyDate getbirthday() { return new MyDate(birthday); public void setbirthday(mydate d) { birthday = new MyDate(d);... Thêm về Java 37

Vào ra từ luồng dữ liệu chuẩn Luồng ra chuẩn: System.out xuất ra luồng ra chuẩn (standard output) có thể tái định hướng Luồng thông báo lỗi: System.err xuất ra Console (thiết bị output chuẩn) không thể tái định hướng Luồng dữ liệu vào chuẩn: System.in chưa sẵn sàng cho sử dụng Thêm về Java 38

Nhập dữ liệu từ luồng vào chuẩn InputStream: lớp đối tượng ứng với luồng vào chuẩn System.in: đối tượng tương ứng chưa có phương thức nhập dữ liệu Scanner: nhập dữ liệu kiểu nguyên thủy và xâu ký tự next: nhập xâu ký tự nexttype : nhập một dữ liệu kiểu Type hasnext, hasnexttype : kiểm tra xem còn dữ liệu không. Thêm về Java 39

Ví dụ Scanner sc = new Scanner(System.in); System.out.println(sc.next()); int i = sc.nextint(); while (sc.hasnextlong()) { long along = sc.nextlong(); Thêm về Java 40

Định hướng lại luồng vào/ra và mẫu kiến trúc Pipe & Filter Các luồng vào ra có thể định hướng từ các nguồn/đích dữ liệu khác nhau Tệp, chương trình, thiết bị (máy in, ) Có thể xây dựng các phần mềm phức tạp từ việc ghép nối các phần mềm nhỏ hơn Tái sử dụng lại cao Ghép nối động Thêm về Java 41

Pipe and Filter 42

Pipe and Filter 43

Tham số dòng lệnh CmdLineParas.java: public class CmdLineParas { public static void main(string[] args) { for (int i=0; i<args.length; i++) System.out.println(args[i]); Ví dụ: #java CmdLineParas hello world hello world Thêm về Java 44

Bài tập: Xây dựng lớp Singleton Không thể sinh ra nhiều hơn một thực thể của lớp trong một lần chạy chương trình Có thể có nhiều tham chiếu, nhưng chỉ có một đối tượng (một vùng bộ nhớ được cấp phát) Thường ứng dụng trong quản lý tài nguyên hệ thống Để tránh xung đột về tài nguyên của các tiến trình tương tranh (song song) Thêm về Java 45

Bài tập: Cấu trúc dữ liệu Xây dựng Danh sách liên kết đơn Thêm phần tử vào đầu/cuối danh sách Bớt phần tử khỏi danh sách Tìm phần tử theo khóa Xây dựng Cây tìm kiếm nhị phân Tìm phần tử theo khóa Thêm, bớt phần tử Cân bằng cây Thêm về Java 46