1. Trang chủ
  2. » Công Nghệ Thông Tin

Báo cáo lập trình java về The Nashorn JavaScript Engine

17 460 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 378,82 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

NỘI DUNG: + Invoking Methods + Constructing Objects + Strings 1. Invoking Methods Nếu có đoạn mã Java sau: engine.put(stage, stage); thì đoạn mã JavaScript có thể gọi stage.setTitle(Hello); Trong thực tế, bạn cũng có thể sử dụng cú pháp stage.title = Hello; Nashorn hỗ trợ cú pháp thuận tiện cho các hàm getters và setters. Nếu stage.title xuất hiện bên trái toán tử ‘=‘ tương đương setTitle xuất hiện bên phải toán tử ‘=‘ tương đương getTitle

Trang 1

CHƯƠNG 7 THE NASHORN

JAVASCRIPT ENGINE

Sinh viên : Phạm Tiến Dũng MSSV :20130694

Lớp : CNTT2.03 – K58

Trường Đại học Bách Khoa Hà Nội Viện Công nghệ thông tin & Truyền thông

-IT4784 – LẬP TRÌNH JAVA

Trang 2

NỘI DUNG

NỘI DUNG

III.Bài tập

Trang 3

I MÔ TẢ YÊU CẦU

I MÔ TẢ YÊU CẦU

1 Làm báo cáo

2 Trình bày slide lý thuyết chương 7 (7.3-7.5)

3 Tự đặt ra 3 câu hỏi trắc nghiệm liên quan đến

phần mình làm

Trang 4

NỘI DUNG

NỘI DUNG

1 Invoking Methods

2 Constructing Objects

3 Strings

Trang 5

1 Invoking Methods

1 Invoking Methods

-Nếu có đoạn mã Java sau:

engine.put("stage", stage);

thì đoạn mã JavaScript có thể gọi

stage.setTitle('Hello');

-Trong thực tế, bạn cũng có thể sử dụng cú pháp

stage.title = 'Hello';

-Nashorn hỗ trợ cú pháp thuận tiện cho các hàm getters và setters -Nếu stage.title xuất hiện bên trái toán tử ‘=‘ tương đương setTitle

xuất hiện bên phải toán tử ‘=‘ tương đương

getTitle

Trang 6

1 Invoking Methods

1 Invoking Methods

Quan sát ví dụ sau:

Trang 7

1 Invoking Methods

1 Invoking Methods

-JavaScript không có khái niệm về nạp chồng phương thức -Nashorn cố gắng chọn phương thức Java phù hợp, dựa

theo số lượng và kiểu của các tham số.

Trang 8

2 Constructing Objects

2 Constructing Objects

-Khi bạn muốn khởi tạo các đối tượng trong JavaScript

Có hai cơ chế.

 Cách 1:Sử dụng biến toàn cục Packages

var URL = java.net.URL ; // 1 đối tượng lớp java

 Cách 2:Sử dụng phương thức Java.type

-Để khởi tạo một đối tượng ,ta sử dụng toán tử new

var url = new URL('http://horstmann.com');

Trang 9

2 Constructing Objects

2 Constructing Objects

-Cách 2 giúp xử lý lỗi tốt hơn nhưng cú pháp phức tạp

Ví dụ:

var url = new (Java.type ('java.net.URL'))

-Nếu bạn sử dụng Java.type với toán tử new, bạn cần thêm một bộ dấu ngoặc đơn

Trang 10

2 Constructing Objects

2 Constructing Objects

-Để imports inner class ta dùng

var entry = new java.util.AbstractMap.SimpleEntry('hello', 42);

-Nếu bạn sử dụng Java.type thì sử dụng ký tự $:

var entry = new (Java.type ('java.util.AbstractMap$SimpleEntry'))('hello', 42);

Trang 11

3 Strings

3 Strings

-Strings trong Nashorn là một đối tượng JavaScript

Ví dụ, hãy xem xét lệnh sau

-Ở đây, chúng ta gọi phương thức JavaScript slice Không có phương pháp như vậy trong Java

-Nhưng gọi

'Hello'.compareTo (' thế giới ')

cũng làm việc, mặc dù trong JavaScript không có phương thức

compareTo (Bạn chỉ cần sử dụng các toán tử <)

-Trong trường hợp này, các chuỗi JavaScript được chuyển thành các

Trang 12

3 Strings

3 Strings

-Việc chuyển đổi xảy ra tương tự với giá trị Numbers và

Boolean.

Ví dụ.

'Hello'.slice (' - 2 ') là hoàn toàn hợp lệ Chuỗi '-2' âm thầm chuyển đổi sang số -2

Trang 13

BÀI TẬP

BÀI TẬP

Câu 1:Cho câu lệnh JavaScript sau:

stage.setTitle('Hello');

Tìm câu lệnh tương đương(thực hiện cùng chức năng,có cùng kết quả đầu ra mà không báo lỗi):

A. stage[title] = 'Hello';

B. stage.title('Hello');

C. stage.title = 'Hello' ;

D. stage.('title') = 'Hello';

Đáp án đúng: C

Giải thích: A,B,D là sai cú pháp

C do stage.title nằm bên trái dấu = nên tương đương với phương thức setTitle

Trang 14

BÀI TẬP

BÀI TẬP

Câu 2: Cho đoạn lệnh Java sau:

Kết quả đầu ra là

A. 2Hello,hoang2

B. 2helloHello,hoang

2helloHello,hoang2

Trang 15

BÀI TẬP

BÀI TẬP

Giải thích

thức được đinh nghĩa cuối cùng, danh sách đối số trong JavaScipt sẽ được truyền vào 1 mảng và được gán lần lượt cho các tham số của phương thức được gọi vì vậy khi gọi : funcA(\"2\", \"hello\") sẽ gọi

phương thức function funcA(c) và không báo lỗi thừa đối số

 Vậy print(funcA(\"2\", \"hello\")) sẽ in ra 2

sẽ gọi phương thức getMessage(String a) , đối số là 2 nhưng không báo lỗi vì trong Nashorn sẽ tự chuyển đổi 2 thành 1 String

Trang 16

BÀI TẬP

BÀI TẬP

Câu 3: Tìm câu lệnh không tương đương( không thực hiện cùng chức năng,không cùng kết quả đầu ra hoặc báo lỗi)

var Entry = Java.type('java.util.AbstractMap$SimpleEntry');

var entry=new Entry(‘hello’,42);

A.var entry = new java.util.AbstractMap.SimpleEntry('hello', 42);

B.var entry = new java.util.AbstractMap$SimpleEntry('hello', 42);

C.var Entry = new Java.type('java.util.AbstractMap$SimpleEntry')(‘hello’,42);

D.var Entry = java.util.AbstractMap$SimpleEntry;

var entry=new Entry(‘hello’,42);

Đáp án đúng là C

Giải thích:

 A,B là sử dụng đối tượng Packages nên trước tên inner class có thể là dấu chấm hoặc $

 C sử dụng phương thức Java.type nên cần thêm cặp dấu ngoặc tròn () sửa lại như sau:

var Entry = new (Java.type('java.util.AbstractMap$SimpleEntry'))(‘hello’,42);

Trang 17

Cảm ơn thầy giáo và các bạn!

Ngày đăng: 05/10/2015, 23:59

TỪ KHÓA LIÊN QUAN

w