Skip to content · ⁨Bỏ qua nội dung⁩

Using Objects and Methods · ⁨Sử dụng Đối tượng và Phương pháp⁩

AP Computer Science A · ⁨AP Khoa học máy tính A⁩ · Topic 1 · ⁨Chủ đề 1⁩

Video lesson for this topic · ⁨Bài học video cho chủ đề này⁩ Open the video page · ⁨Mở trang video⁩
15:05

Sử dụng Đối tượng và Phương pháp

Đây là hai chương trình Java. Chương trình đầu thiếu dấu chấm phẩy. Chương trình thứ hai chia bảy cho hai và lưu kết quả vào một số nguyên. Trình biên dịch dừng việc…

English narration · English + 中文 subtitles burned in · ⁨Giọng đọc tiếng Anh · phụ đề tiếng Anh + 中文 được ghi trực tiếp⁩

1.1

Introduction to Algorithms, Programming, and Compilers · ⁨Giới thiệu về Thuật toán, Lập trình và Trình biên dịch⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.1.A: Represent patterns and algorithms found in everyday life using written language or diagrams.

  • 1.1.A.1 Algorithms define step-by-step processes to follow when completing a task or solving a problem. These algorithms can be represented using written language or diagrams.
  • 1.1.A.2 Sequencing defines an order for when steps in a process are completed. Steps in a process are completed one at a time.

Learning Objective 1.1.B: Explain the code compilation and execution process.

  • 1.1.B.1 Code can be written in any text editor; however, an integrated development environment (IDE) is often used to write programs because it provides tools for a programmer to write, compile, and run code.
  • 1.1.B.2 A compiler checks code for some errors. Errors detectable by the compiler need to be fixed before the program can be run.

Learning Objective 1.1.C: Identify types of programming errors.

  • 1.1.C.1 A syntax error is a mistake in the program where the rules of the programming language are not followed. These errors are detected by the compiler.
  • 1.1.C.2 A logic error is a mistake in the algorithm or program that causes it to behave incorrectly or unexpectedly. These errors are detected by testing the program with specific data to see if it produces the expected outcome.
  • 1.1.C.3 A run-time error is a mistake in the program that occurs during the execution of a program. Run-time errors typically cause the program to terminate abnormally.
  • 1.1.C.4 An exception is a type of run-time error that occurs as a result of an unexpected error that was not detected by the compiler. It interrupts the normal flow of the program's execution.
Tiếng Việt

Mục tiêu học tập 1.1.A: Biểu diễn các mẫu và thuật toán tìm thấy trong đời sống hàng ngày bằng ngôn ngữ viết hoặc sơ đồ.

  • 1.1.A.1 Thuật toán định nghĩa các bước thực hiện tuần tự cần tuân theo khi hoàn thành một nhiệm vụ hoặc giải quyết một vấn đề. Các thuật toán này có thể được biểu diễn bằng ngôn ngữ viết hoặc sơ đồ.
  • 1.1.A.2 Sắp xếp thứ tự định nghĩa trật tự mà các bước trong một quy trình được hoàn thành. Các bước trong một quy trình được hoàn thành từng bước một.

Mục tiêu học tập 1.1.B: Giải thích quy trình biên dịch và thực thi mã.

  • 1.1.B.1 Mã có thể được viết trong bất kỳ trình soạn thảo văn bản nào; tuy nhiên, một môi trường phát triển tích hợp (IDE) thường được sử dụng để viết chương trình vì nó cung cấp các công cụ giúp lập trình viên viết, biên dịch và chạy mã.
  • 1.1.B.2 Một trình biên dịch kiểm tra mã để tìm các lỗi. Các lỗi do trình biên dịch phát hiện cần được sửa chữa trước khi chương trình có thể được chạy.

Mục tiêu học tập 1.1.C: Xác định các loại lỗi lập trình.

  • 1.1.C.1 Lỗi cú pháp là một sai sót trong chương trình nơi các quy tắc của ngôn ngữ lập trình không được tuân thủ. Những lỗi này được phát hiện bởi trình biên dịch.
  • 1.1.C.2 Lỗi logic là một sai sót trong thuật toán hoặc chương trình khiến nó hoạt động không đúng hoặc không mong đợi. Những lỗi này được phát hiện bằng cách thử nghiệm chương trình với dữ liệu cụ thể để xem liệu nó có tạo ra kết quả mong đợi hay không.
  • 1.1.C.3 Lỗi thời gian chạy là một sai sót trong chương trình xảy ra trong quá trình thực thi chương trình. Lỗi thời gian chạy thường khiến chương trình kết thúc bất thường.
  • 1.1.C.4 Ngoại lệ là một loại lỗi thời gian chạy xảy ra do một lỗi không mong đợi chưa được trình biên dịch phát hiện. Nó làm gián đoạn luồng thực thi bình thường của chương trình.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

An algorithm 算法 is a finite, step-by-step procedure that solves a problem. A program 程序 expresses an algorithm in a language a computer can run. Java is compiled 编译: the compiler 编译器 translates your source code into bytecode, which the Java Virtual Machine (JVM) runs. A syntax error 语法错误 (breaking the grammar) is caught by the compiler; a logic error 逻辑错误 (wrong result) is not – the program runs but misbehaves.

Tiếng Việt
Mã nguồn trên máy trạm — chương trình được viết, biên dịch và thực thi dưới dạng các lệnh chính xác
Mã nguồn trên máy trạm — chương trình được viết, biên dịch và chạy dưới dạng các lệnh chính xác

Một thuật toán là một quy trình từng bước hữu hạn để giải quyết vấn đề. Một chương trình biểu diễn thuật toán bằng ngôn ngữ mà máy tính có thể thực thi. Java là biên dịch: trình biên dịch chuyển mã nguồn của bạn thành bytecode, mà Java Virtual Machine (JVM) sẽ chạy. Một lỗi cú pháp (vi phạm ngữ pháp) sẽ bị trình biên dịch bắt; một lỗi logic (kết quả sai) thì không – chương trình vẫn chạy nhưng xử lý sai lệch.

Trình biên dịch dịch toàn bộ chương trình cùng lúc; trình thông dịch thực thi từng dòng một
Trình biên dịch dịch toàn bộ chương trình cùng lúc; trình giải thích chạy nó từng dòng một
Nhiều chip vi xử lý máy tính nhìn từ bên dưới
Chương trình Java của bạn được biên dịch thành các lệnh mà CPU như một trong những chiếc này thực sự chạy
Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
algorithm/ˈælɡərɪθəm/ thuật toán
program/ˈprəʊɡræm/ chương trình
compiled/kəmˈpaɪld/ tổng hợp lại
compiler/kəmˈpaɪlə/ compiler
syntax error/ˈsɪntæks ˈerə/ lỗi cú pháp
logic error/ˈlɒdʒɪk ˈerə/ lỗi logic
variable/ˈveərɪəbl/ biến
1.2

Variables and Data Types · ⁨Biến và Kiểu Dữ Liệu⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.2.A: Identify the most appropriate data type category for a particular specification.

  • 1.2.A.1 A data type is a set of values and a corresponding set of operations on those values. Data types can be categorized as either primitive or reference.
  • 1.2.A.2 The primitive data types used in this course define the set of values and corresponding operations on those values for numbers and Boolean values.
  • 1.2.A.3 A reference type is used to define objects that are not primitive types.

Learning Objective 1.2.B: Develop code to declare variables to store numbers and Boolean values.

  • 1.2.B.1 The three primitive data types used in this course are int, double, and boolean. An int value is an integer. A double value is a real number. A boolean value is either true or false.
    • Exclusion statement: The other five primitive data types (long, short, byte, float, and char) are outside the scope of the AP Computer Science A course and exam.
  • 1.2.B.2 A variable is a storage location that holds a value, which can change while the program is running. Every variable has a name and an associated data type. A variable of a primitive type holds a primitive value from that type.
Tiếng Việt

Mục tiêu học tập 1.2.A: Xác định danh mục kiểu dữ liệu phù hợp nhất cho một yêu cầu cụ thể.

  • 1.2.A.1 Một kiểu dữ liệu là một tập hợp các giá trị và một tập hợp các phép toán tương ứng trên các giá trị đó. Kiểu dữ liệu có thể được phân loại là nguyên thủy (primitive) hoặc tham chiếu (reference).
  • 1.2.A.2 Các kiểu dữ liệu nguyên thủy được sử dụng trong khóa học này xác định tập hợp các giá trị và các phép toán tương ứng trên các giá trị đó dành cho số và giá trị Boolean.
  • 1.2.A.3 Một kiểu tham chiếu được sử dụng để định nghĩa các đối tượng không phải là kiểu nguyên thủy.

Mục tiêu học tập 1.2.B: Phát triển mã để khai báo các biến nhằm lưu trữ số và giá trị Boolean.

  • 1.2.B.1 Ba kiểu dữ liệu nguyên thủy được sử dụng trong khóa học này là int, double, và boolean. Một giá trị int là một số nguyên. Một giá trị double là một số thực. Một giá trị boolean là true hoặc false.
    • Câu loại trừ: Năm kiểu dữ liệu nguyên thủy còn lại (long, short, byte, float, và char) nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.
  • 1.2.B.2 Một biến là một vị trí lưu trữ chứa một giá trị, giá trị đó có thể thay đổi trong khi chương trình đang chạy. Mỗi biến có một tên và một kiểu dữ liệu liên kết. Một biến của kiểu nguyên thủy chứa một giá trị nguyên thủy từ kiểu đó.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

A variable 变量 is a named box that stores a value of a fixed type 类型. Java's main primitive types 基本类型 are int (whole numbers), double (decimals), and boolean (true/false). Declare with the type first:

Tiếng Việt

Một biến là một hộp có tên lưu trữ một giá trị có kiểu cố định. Các kiểu dữ liệu nguyên thủy chính của Java là int (số nguyên), double (số thập phân), và boolean (true/false). Khai báo với kiểu dữ liệu trước:

Các kiểu dữ liệu cơ bản của Java, mỗi kiểu lưu trữ một loại giá trị khác nhau
Các kiểu dữ liệu cơ bản của Java, mỗi kiểu lưu trữ một loại giá trị khác nhau
int score = 90;
double price = 4.99;
boolean passed = true;
Explore · ⁨Khám phá⁩

Explore how a variable holds one value at a time · ⁨Khám phá cách biến lưu một giá trị tại một thời điểm⁩

A variable is a named box that stores one value of a fixed type. Step through the lines and watch each box take its value; notice that reassigning score overwrites the old number rather than making a new box. · ⁨Biến là một hộp có tên lưu trữ một giá trị của kiểu cố định. Bước từng dòng và theo dõi mỗi hộp nhận giá trị của nó; hãy chú ý rằng gán lại score ghi đè số cũ thay vì tạo ra một hộp mới.⁩

Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
type/taɪp/ chữ
primitive types/ˈprɪmɪtɪv taɪps/ kiểu dữ liệu nguyên thủy
expression/ekˈspreʃn/ biểu hiện
modulus/ˈmɒdjʊləs/ mô-đun
escape sequence/eˈskeɪp ˈsiːkwəns/ trình tự thoát
assignment/əˈsaɪnmənt/ gán (assignment)
Casting/ˈkæstɪŋ/ Epé (chuyển đổi kiểu)
library/ˈlaɪbrəri/ thư viện (library)
abstraction/əbˈstrækʃn/ trừu tượng hóa
Comments/ˈkɒments/ Bình luận
method signature/ˈmeθəd ˈsɪɡnɪtʃə/ ký hiệu phương thức
arguments/ˈɑːɡjuːmənts/ tham số
class (static) method/klæs ˈmeθəd/ phương thức lớp (tĩnh)
1.3

Expressions and Output · ⁨Biểu thức và Đầu ra⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.3.A: Develop code to generate output and determine the result that would be displayed.

  • 1.3.A.1 System.out.print and System.out.println display information on the computer display. System.out.println moves the cursor to a new line after the information has been displayed, while System.out.print does not.

Learning Objective 1.3.B: Develop code to utilize string literals and determine the result of using string literals.

  • 1.3.B.1 A literal is the code representation of a fixed value.
  • 1.3.B.2 A string literal is a sequence of characters enclosed in double quotes.
  • 1.3.B.3 Escape sequences are special sequences of characters that can be included in a string. They start with a \ and have a special meaning in Java. Escape sequences used in this course include double quote \", backslash \\, and newline \n.

Learning Objective 1.3.C: Develop code for arithmetic expressions and determine the result of these expressions.

  • 1.3.C.1 Arithmetic expressions, which consist of numeric values, variables, and operators, include expressions of type int and double.
  • 1.3.C.2 The arithmetic operators consist of addition +, subtraction -, multiplication *, division /, and remainder %. An arithmetic operation that uses two int values will evaluate to an int value. An arithmetic operation that uses at least one double value will evaluate to a double value.
    • Exclusion statement: Expressions that result in special double values (e.g., infinities and NaN) are outside the scope of the AP Computer Science A course and exam.
  • 1.3.C.3 When dividing numeric values that are both int values, the result is only the integer portion of the quotient. When dividing numeric values that use at least one double value, the result is the quotient.
  • 1.3.C.4 The remainder operator % is used to compute the remainder when one number a is divided by another number b.
    • Exclusion statement: The use of values less than 0 for a and the use of values less than or equal to 0 for b is outside the scope of the AP Computer Science A course and exam.
  • 1.3.C.5 Operators can be used to construct compound expressions. At compile time, numeric values are associated with operators according to operator precedence to determine how they are grouped. Parentheses can be used to modify operator precedence. Multiplication, division, and remainder have precedence over addition and subtraction. Operators with the same precedence are evaluated from left to right.
  • 1.3.C.6 An attempt to divide an integer by the integer zero will result in an ArithmeticException.
    • Exclusion statement: The use of dividing by zero when one numeric value is a double is outside the scope of the AP Computer Science A course and exam.
Tiếng Việt

Mục tiêu học tập 1.3.A: Phát triển mã để tạo đầu ra và xác định kết quả sẽ được hiển thị.

  • 1.3.A.1 System.out.print và System.out.println hiển thị thông tin trên màn hình máy tính. System.out.println di chuyển con trỏ sang dòng mới sau khi thông tin đã được hiển thị, trong khi System.out.print thì không.

Mục tiêu học tập 1.3.B: Phát triển mã để sử dụng các hằng chuỗi (string literals) và xác định kết quả của việc sử dụng các hằng chuỗi.

  • 1.3.B.1 Một hằng (literal) là biểu diễn mã của một giá trị cố định.
  • 1.3.B.2 Một hằng chuỗi (string literal) là một dãy ký tự được bao quanh bởi dấu ngoặc kép đôi.
  • 1.3.B.3 Chuỗi thoát (escape sequences) là các dãy ký tự đặc biệt có thể được bao gồm trong một chuỗi. Chúng bắt đầu bằng một \ và có ý nghĩa đặc biệt trong Java. Các chuỗi thoát được sử dụng trong khóa học này bao gồm dấu ngoặc kép đôi \", dấu gạch chéo ngược \\, và xuống dòng \n.

Mục tiêu học tập 1.3.C: Phát triển mã cho các biểu thức số học và xác định kết quả của các biểu thức này.

  • 1.3.C.1 Biểu thức số học, bao gồm các giá trị số, biến và toán tử, bao gồm các biểu thức có kiểu int và double.
  • 1.3.C.2 Các toán tử số học bao gồm cộng +, trừ -, nhân *, chia /, và dư %. Một phép toán số học sử dụng hai giá trị int sẽ đánh giá thành một giá trị int. Một phép toán số học sử dụng ít nhất một giá trị double sẽ đánh giá thành một giá trị double.
    • Câu loại trừ: Các biểu thức kết quả là các giá trị double đặc biệt (ví dụ: vô cực và NaN) nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.
  • 1.3.C.3 Khi chia các giá trị số mà cả hai đều là int, kết quả chỉ là phần nguyên của thương. Khi chia các giá trị số mà có ít nhất một double, kết quả là thương.
  • 1.3.C.4 Toán tử dư % được sử dụng để tính phần dư khi một số a chia cho một số khác b.
    • Câu loại trừ: Việc sử dụng các giá trị nhỏ hơn 0 cho a và việc sử dụng các giá trị nhỏ hơn hoặc bằng 0 cho b nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.
  • 1.3.C.5 Các toán tử có thể được dùng để xây dựng biểu thức phức hợp. Tại thời điểm biên dịch, các giá trị số được gắn với các toán tử theo độ ưu tiên của toán tử để xác định cách nhóm chúng. Dấu ngoặc có thể được dùng để thay đổi độ ưu tiên của toán tử. Phép nhân, phép chia và phép dư có độ ưu tiên cao hơn phép cộng và phép trừ. Các toán tử có cùng độ ưu tiên được đánh giá từ trái sang phải.
  • 1.3.C.6 Một nỗ lực chia số nguyên cho số nguyên không sẽ dẫn đến một ArithmeticException.
    • Câu loại trừ: Việc sử dụng phép chia cho không khi một giá trị số là double nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

An expression 表达式 combines values and operators to compute a result: + - * / and % (modulus 取模, the remainder). Integer division truncates: 7 / 2 is 3, while 7 % 2 is 1. Operator precedence follows math (*,/,% before +,-). Print with:

Dividing an integer by the integer 0 (like 7 / 0) is not allowed and crashes at run time with an ArithmeticException. Inside a string, a backslash marks an escape sequence 转义序列: \" prints a double quote, \\ a single backslash, and \n starts a new line – so System.out.println("She said \"hi\""); prints She said "hi".

Tiếng Việt

Một biểu thức kết hợp các giá trị và toán tử để tính toán kết quả: + - * / và % (phép chia lấy dư, phần dư). Phép chia số nguyên cắt bỏ phần thập phân: 7 / 2 là 3, trong khi 7 % 2 là 1. Độ ưu tiên toán tử tuân theo toán học (*,/,% trước +,-). In ra màn hình bằng cách:

System.out.print("no newline");
System.out.println("with newline");

Chia một số nguyên cho số nguyên 0 (như 7 / 0) là không được phép và gây lỗi thời gian chạy với ngoại lệ ArithmeticException. Bên trong chuỗi ký tự, dấu gạch chéo ngược đánh dấu một dãy thoát: \" in dấu ngoặc kép đôi, \\ in dấu gạch chéo ngược đơn, và \n bắt đầu dòng mới – do đó System.out.println("She said \"hi\""); sẽ in ra She said "hi".

Explore · ⁨Khám phá⁩

Explore the order of operations step by step · ⁨Khám phá thứ tự các phép toán từng bước⁩

Java applies *, /, % before + and -, working left to right. Watch each step and see why 2 + 3 * 4 is $14$, not $20$ — the multiplication happens first. · ⁨Java áp dụng *, /, % trước khi + và -, làm việc từ trái sang phải. Theo dõi từng bước và xem tại sao 2 + 3 * 4 là $14$, không phải $20$ — phép nhân diễn ra trước.⁩

1.4

Assignment Statements and Input · ⁨Câu gán và Nhập liệu⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.4.A: Develop code for assignment statements with expressions and determine the value that is stored in the variable as a result of these statements.

  • 1.4.A.1 Every variable must be assigned a value before it can be used in an expression. That value must be from a compatible data type. A variable is initialized the first time it is assigned a value. Reference types can be assigned a new object or null if there is no object. The literal null is a special value used to indicate that a reference is not associated with any object.
  • 1.4.A.2 The assignment operator = allows a program to initialize or change the value stored in a variable. The value of the expression on the right is stored in the variable on the left.
    • Exclusion statement: The use of assignment operators inside expressions (e.g., a = b = 4; or a[i += 5]) is outside the scope of the AP Computer Science A course and exam.
  • 1.4.A.3 During execution, an expression is evaluated to produce a single value. The value of an expression has a type based on the evaluation of the expression.

Learning Objective 1.4.B: Develop code to read input.

  • 1.4.B.1 Input can come in a variety of forms, such as tactile, audio, visual, or text. The Scanner class is one way to obtain text input from the keyboard.
    • Exclusion statement: Any specific form of input from the user is outside the scope of the AP Computer Science A course and exam.
Tiếng Việt

Mục tiêu học tập 1.4.A: Viết mã cho câu lệnh gán với biểu thức và xác định giá trị được lưu trong biến như một kết quả của các câu lệnh này.

  • 1.4.A.1 Mọi biến phải được gán một giá trị trước khi có thể được sử dụng trong biểu thức. Giá trị đó phải thuộc về một kiểu dữ liệu tương thích. Biến được khởi tạo lần đầu tiên khi nó được gán một giá trị. Các kiểu tham chiếu có thể được gán một đối tượng mới hoặc null nếu không có đối tượng nào. Literal null là một giá trị đặc biệt được dùng để chỉ ra rằng một tham chiếu không liên kết với bất kỳ đối tượng nào.
  • 1.4.A.2 Toán tử gán = cho phép chương trình khởi tạo hoặc thay đổi giá trị được lưu trong một biến. Giá trị của biểu thức ở vế phải được lưu vào biến ở vế trái.
    • Câu loại trừ: Việc sử dụng các toán tử gán bên trong biểu thức (ví dụ: a = b = 4; hoặc a[i += 5]) nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.
  • 1.4.A.3 Trong quá trình thực thi, một biểu thức được đánh giá để tạo ra một giá trị duy nhất. Giá trị của một biểu thức có kiểu dựa trên việc đánh giá biểu thức đó.

Mục tiêu học tập 1.4.B: Viết mã để đọc dữ liệu đầu vào.

  • 1.4.B.1 Dữ liệu đầu vào có thể đến dưới nhiều dạng khác nhau, chẳng hạn như xúc giác, âm thanh, hình ảnh hoặc văn bản. Class Scanner là một cách để nhận dữ liệu văn bản từ bàn phím.
    • Câu loại trừ: Bất kỳ dạng cụ thể nào của dữ liệu đầu vào từ người dùng đều nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

An assignment 赋值 x = expr; evaluates the right side and stores it in the left variable. Read input with a Scanner:

Tiếng Việt

Một câu gán x = expr; tính giá trị bên phải và lưu vào biến bên trái. Đọc dữ liệu đầu vào bằng cách sử dụng một Scanner:

Scanner in = new Scanner(System.in);
int age = in.nextInt();
String name = in.next();
1.5

Casting and Range of Variables · ⁨Ép kiểu và Phạm vi của Biến⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.5.A: Develop code to cast primitive values to different primitive types in arithmetic expressions and determine the value that is produced as a result.

  • 1.5.A.1 The casting operators (int) and (double) can be used to convert from a double value to an int value (or vice versa).
  • 1.5.A.2 Casting a double value to an int value causes the digits to the right of the decimal point to be truncated.
  • 1.5.A.3 Some code causes int values to be automatically cast (widened) to double values.
  • 1.5.A.4 Values of type double can be rounded to the nearest integer by (int)(x + 0.5) for non-negative numbers or (int)(x - 0.5) for negative numbers.

Learning Objective 1.5.B: Describe conditions when an integer expression evaluates to a value out of range.

  • 1.5.B.1 The constant Integer.MAX_VALUE holds the value of the largest possible int value. The constant Integer.MIN_VALUE holds the value of the smallest possible int value.
  • 1.5.B.2 Integer values in Java are represented by values of type int, which are stored using a finite amount (4 bytes) of memory. Therefore, an int value must be in the range from Integer.MIN_VALUE to Integer.MAX_VALUE inclusive.
  • 1.5.B.3 If an expression would evaluate to an int value outside of the allowed range, an integer overflow occurs. The result is an int value in the allowed range but not necessarily the value expected.

Learning Objective 1.5.C: Describe conditions that limit accuracy of expressions.

  • 1.5.C.1 Computers allot a specified amount of memory to store data based on the data type. If an expression would evaluate to a double that is more precise than can be stored in the allotted amount of memory, a round-off error occurs. The result will be rounded to the representable value. To avoid rounding errors that naturally occur, use int values.
    • Exclusion statement: Other special decimal data types that can be used to avoid rounding errors are outside the scope of the AP Computer Science A course and exam.
Tiếng Việt

Mục tiêu học tập 1.5.A: Viết mã để ép các giá trị nguyên thủy sang các kiểu nguyên thủy khác trong các biểu thức số học và xác định giá trị được tạo ra như một kết quả.

  • 1.5.A.1 Các toán tử ép kiểu (int) và (double) có thể được dùng để chuyển đổi từ một giá trị double sang một giá trị int (hoặc ngược lại).
  • 1.5.A.2 Ép một giá trị double sang một giá trị int sẽ làm cắt bỏ các chữ số bên phải dấu thập phân.
  • 1.5.A.3 Một số đoạn mã gây ra việc các giá trị int được tự động ép (mở rộng) sang các giá trị double.
  • 1.5.A.4 Các giá trị có kiểu double có thể được làm tròn đến số nguyên gần nhất bởi (int)(x + 0.5) đối với các số không âm hoặc (int)(x - 0.5) đối với các số âm.

Mục tiêu học tập 1.5.B: Mô tả các điều kiện khi một biểu thức số nguyên đánh giá ra một giá trị nằm ngoài phạm vi.

  • 1.5.B.1 Hằng số Integer.MAX_VALUE giữ giá trị lớn nhất có thể của một giá trị int. Hằng số Integer.MIN_VALUE giữ giá trị nhỏ nhất có thể của một giá trị int.
  • 1.5.B.2 Các giá trị số nguyên trong Java được biểu diễn bằng các giá trị có kiểu int, được lưu trữ bằng một lượng bộ nhớ hữu hạn (4 byte). Do đó, một giá trị int phải nằm trong phạm vi từ Integer.MIN_VALUE đến Integer.MAX_VALUE bao gồm cả hai đầu mút.
  • 1.5.B.3 Nếu một biểu thức sẽ đánh giá ra một giá trị int nằm ngoài phạm vi cho phép, sẽ xảy ra tràn số nguyên. Kết quả là một giá trị int nằm trong phạm vi cho phép nhưng không nhất thiết là giá trị mong đợi.

Mục tiêu học tập 1.5.C: Mô tả các điều kiện giới hạn độ chính xác của biểu thức.

  • 1.5.C.1 Máy tính cấp phát một lượng bộ nhớ quy định để lưu trữ dữ liệu dựa trên kiểu dữ liệu. Nếu một biểu thức sẽ đánh giá ra một double có độ chính xác cao hơn mức có thể lưu trữ trong lượng bộ nhớ đã cấp, sẽ xảy ra lỗi làm tròn. Kết quả sẽ được làm tròn đến giá trị có thể biểu diễn. Để tránh các lỗi làm tròn tự nhiên xảy ra, hãy sử dụng các giá trị int.
    • Câu loại trừ: Các kiểu dữ liệu thập phân đặc biệt khác có thể được sử dụng để tránh lỗi làm tròn nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English
int range, overflow and truncation

Each type has a fixed range; an int overflows past about 2.1 billion. Casting 类型转换 converts between types. Widening (int to double) is automatic; narrowing needs an explicit cast, which truncates (does not round):

Exam skill: watch for integer division producing a truncated result when a decimal was expected – cast one operand to double first.

Worked example. Trace each expression:

  • 7 / 2 → 3 (both int, so division truncates);
  • 7.0 / 2 → 3.5 (one double forces real division);
  • 7 % 2 → 1 (the remainder);
  • (double) 7 / 2 → 3.5 (the cast binds tighter than /, so it is 7.0 / 2);
  • (double) (7 / 2) → 3.0 (the parentheses compute 7 / 2 = 3 in int first, then widen).

The last two look alike but differ – the position of the cast decides whether the truncation happens.

Tiếng Việt
Phạm vi int, tràn số và cắt bỏ

Mỗi kiểu có một phạm vi cố định; một số int sẽ bị tràn khi vượt quá khoảng 2.1 tỷ. Ép kiểu chuyển đổi giữa các kiểu. Mở rộng (từ int sang double) diễn ra tự động; thu hẹp cần ép kiểu rõ ràng, điều này sẽ cắt cụt (không làm tròn):

double avg = (double) total / count;   // force real division
int whole = (int) 3.9;                 // 3, truncated

Kỹ năng làm bài thi: hãy chú ý đến phép chia số nguyên tạo ra kết quả bị cắt bỏ khi mong đợi số thập phân – hãy ép một toán hạng sang double trước.

Ví dụ minh họa. Theo dõi từng biểu thức:

  • 7 / 2 → 3 (cả hai đều là int, nên phép chia bị cắt bỏ);
  • 7.0 / 2 → 3.5 (một operand là double buộc phép chia thực);
  • 7 % 2 → 1 (giá trị phần dư);
  • (double) 7 / 2 → 3.5 (phép ép kiểu có độ ưu tiên cao hơn phép toán /, nên kết quả là 7.0 / 2);
  • (double) (7 / 2) → 3.0 (dấu ngoặc tính 7 / 2 = 3 trước trong kiểu int, sau đó mới mở rộng).

Hai câu cuối trông giống nhau nhưng khác biệt – vị trí của phép ép kiểu quyết định việc cắt bỏ phần thập phân xảy ra ở đâu.

Explore · ⁨Khám phá⁩

Why int and double store numbers differently · ⁨Tại sao int và double lưu trữ số khác nhau⁩

An int holds only whole numbers in a fixed range; a double stores a mantissa and an exponent, trading exactness for a huge range. Casting double→int throws away the fraction, and a value past an int's range overflows. · ⁨Một int chỉ chứa số nguyên trong khoảng xác định; một double lưu trữ phần thập phân và số mũ, đổi lấy độ chính xác bằng một khoảng giá trị lớn. Ép kiểu double→int sẽ loại bỏ phần thập phân, và một giá trị vượt quá giới hạn của một int sẽ gây tràn.⁩

1.6

Compound Assignment Operators · ⁨Các Toán tử gán kết hợp⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.6.A: Develop code for assignment statements with compound assignment operators and determine the value that is stored in the variable as a result.

  • 1.6.A.1 Compound assignment operators +=, -=, *=, /=, and %= can be used in place of the assignment operator in numeric expressions. A compound assignment operator performs the indicated arithmetic operation between the value on the left and the value on the right and then assigns the result to the variable on the left.
  • 1.6.A.2 The post-increment operator ++ and post-decrement operator -- are used to add 1 or subtract 1 from the stored value of a numeric variable. The new value is assigned to the variable.
    • Exclusion statement: The use of increment and decrement operators in prefix form (e.g., ++x) is outside the scope of the AP Computer Science A course and exam. The use of increment and decrement operators inside other expressions (e.g., arr[x++]) is outside the scope of the AP Computer Science A course and exam.
Tiếng Việt

Mục tiêu học tập 1.6.A: Viết mã cho câu lệnh gán với các toán tử gán phức hợp và xác định giá trị được lưu trong biến như một kết quả.

  • 1.6.A.1 Các toán tử gán phức hợp +=, -=, *=, /= và %= có thể được dùng thay thế cho toán tử gán trong các biểu thức số. Một toán tử gán phức hợp thực hiện phép toán số học được chỉ định giữa giá trị ở vế trái và giá trị ở vế phải, sau đó gán kết quả vào biến ở vế trái.
  • 1.6.A.2 Toán tử tăng hậu ++ và toán tử giảm hậu -- được dùng để thêm 1 hoặc trừ 1 khỏi giá trị được lưu trong một biến số. Giá trị mới được gán cho biến.
    • Câu loại trừ: Việc sử dụng toán tử tăng và giảm theo dạng tiền tố (ví dụ: ++x) nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A. Việc sử dụng toán tử tăng và giảm bên trong các biểu thức khác (ví dụ: arr[x++]) nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

Shorthands combine an operation with assignment: x += 5 means x = x + 5; likewise -=, *=, /=, %=. The increment and decrement operators x++ and x-- add or subtract one.

Tiếng Việt

Các ký hiệu viết tắt kết hợp một phép toán với phép gán: x += 5 có nghĩa là x = x + 5; tương tự như vậy -=, *=, /=, %=. Các toán tử tăng và giảm x++ và x-- cộng hoặc trừ đi một.

1.7

Application Program Interface (API) and Libraries · ⁨Giao diện lập trình ứng dụng (API) và Thư viện⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.7.A: Identify the attributes and behaviors of a class found in the libraries contained in an API.

  • 1.7.A.1 Libraries are collections of classes. An application programming interface (API) specification informs the programmer how to use those classes. Documentation found in API specifications and libraries is essential to understanding the attributes and behaviors of a class defined by the API. A class defines a specific reference type. Classes in the APIs and libraries are grouped into packages. Existing classes and class libraries can be utilized to create objects.
  • 1.7.A.2 Attributes refer to the data related to the class and are stored in variables. Behaviors refer to what instances of the class can do (or what can be done with them) and are defined by methods.
Tiếng Việt

Mục tiêu học tập 1.7.A: Xác định các thuộc tính và hành vi của một lớp được tìm thấy trong các thư viện contained trong một API.

  • 1.7.A.1 Thư viện là tập hợp các lớp. Một tài liệu về giao diện lập trình ứng dụng (API) cung cấp thông tin cho lập trình viên cách sử dụng các lớp đó. Tài liệu có sẵn trong các tài liệu về API và thư viện là thiết yếu để hiểu được các thuộc tính và hành vi của một lớp do API xác định. Một lớp xác định một kiểu tham chiếu cụ thể. Các lớp trong API và thư viện được nhóm thành các gói (packages). Các lớp và thư viện lớp hiện có có thể được sử dụng để tạo ra các đối tượng.
  • 1.7.A.2 Thuộc tính đề cập đến dữ liệu liên quan đến lớp và được lưu trữ trong các biến. Hành vi đề cập đến những gì các thực thể của lớp có thể làm (hoặc những gì có thể được làm với chúng) và được xác định bởi các phương thức.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

An API (Application Programming Interface) 应用程序接口 is the published list of classes and methods you may use. A library 库 is a collection of ready-made classes (like Math, String, Scanner). You read the API documentation to learn what a method needs (its parameters) and returns, without seeing its inner code – an example of abstraction 抽象.

Tiếng Việt

API (Giao diện lập trình ứng dụng) là danh sách công bố các lớp và phương thức bạn có thể sử dụng. Một thư viện là tập hợp các lớp có sẵn (như Math, String, Scanner). Bạn đọc tài liệu API để biết phương thức cần gì (các tham số) và trả về điều gì, mà không cần xem mã nguồn bên trong – đây là một ví dụ về sự trừu tượng.

1.8

Documentation with Comments · ⁨Tài liệu hóa bằng Comment⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.8.A: Describe the functionality and use of code through comments.

  • 1.8.A.1 Comments are written for both the original programmer and other programmers to understand the code and its functionality, but are ignored by the compiler and are not executed when the program is run. Three types of comments in Java include /* */, which generates a block of comments; //, which generates a comment on one line; and /** */, which are Javadoc comments and are used to create API documentation.
  • 1.8.A.2 A precondition is a condition that must be true just prior to the execution of a method in order for it to behave as expected. There is no expectation that the method will check to ensure preconditions are satisfied.
  • 1.8.A.3 A postcondition is a condition that must always be true after the execution of a method. Postconditions describe the outcome of the execution in terms of what is being returned or the current value of the attributes of an object.
Tiếng Việt

Mục tiêu học tập 1.8.A: Mô tả chức năng và cách sử dụng mã nguồn thông qua các bình luận.

  • 1.8.A.1 Bình luận được viết cho cả lập trình viên gốc và các lập trình viên khác để hiểu mã nguồn và chức năng của nó, nhưng bị bỏ qua bởi trình biên dịch và không được thực thi khi chương trình chạy. Ba loại bình luận trong Java bao gồm /* */, tạo ra một khối bình luận; //, tạo ra một bình luận trên một dòng; và /** */, là bình luận Javadoc và được sử dụng để tạo tài liệu API.
  • 1.8.A.2 Tiền điều kiện là một điều kiện phải đúng ngay trước khi thực thi một phương thức để nó hoạt động như mong đợi. Không có yêu cầu nào rằng phương thức sẽ kiểm tra để đảm bảo tiền điều kiện được thỏa mãn.
  • 1.8.A.3 Hậu điều kiện là một điều kiện luôn phải đúng sau khi thực thi một phương thức. Hậu điều kiện mô tả kết quả của việc thực thi dựa trên giá trị được trả về hoặc giá trị hiện tại của các thuộc tính của một đối tượng.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

Comments 注释 are ignored by the compiler but explain code to humans: // for a single line, /* ... */ for a block, and /** ... */ for a Javadoc comment that documents a method's purpose, parameters, and return value. Precise preconditions and postconditions are written here.

Tiếng Việt

Comment bị trình biên dịch bỏ qua nhưng giải thích mã cho con người: // cho một dòng, /* ... */ cho một khối, và /** ... */ cho comment Javadoc tài liệu hóa mục đích, tham số và giá trị trả về của một phương thức. Các tiền đề và hậu đề chính xác được viết ở đây.

1.9

Method Signatures · ⁨Chữ ký phương thức⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.9.A: Identify the correct method to call based on documentation and method signatures.

  • 1.9.A.1 A method is a named block of code that only runs when it is called. A block of code is any section of code that is enclosed in braces. Procedural abstraction allows a programmer to use a method by knowing what the method does even if they do not know how the method was written.
  • 1.9.A.2 A parameter is a variable declared in the header of a method or constructor and can be used inside the body of the method. This allows values or arguments to be passed and used by a method or constructor. A method signature for a method with parameters consists of the method name and the ordered list of parameter types. A method signature for a method without parameters consists of the method name and an empty parameter list.

Learning Objective 1.9.B: Describe how to call methods.

  • 1.9.B.1 A void method does not have a return value and is therefore not called as part of an expression.
  • 1.9.B.2 A non-void method returns a value that is the same type as the return type in the header. To use the return value when calling a non-void method, it must be stored in a variable or used as part of an expression.
  • 1.9.B.3 An argument is a value that is passed into a method when the method is called. The arguments passed to a method must be compatible in number and order with the types identified in the parameter list of the method signature. When calling methods, arguments are passed using call by value. Call by value initializes the parameters with copies of the arguments.
  • 1.9.B.4 Methods are said to be overloaded when there are multiple methods with the same name but different signatures.
  • 1.9.B.5 A method call interrupts the sequential execution of statements, causing the program to first execute the statements in the method before continuing. Once the last statement in the method has been executed or a return statement is executed, the flow of control is returned to the point immediately following where the method was called.
Tiếng Việt

Mục tiêu học tập 1.9.A: Xác định phương thức đúng cần gọi dựa trên tài liệu và chữ ký phương thức.

  • 1.9.A.1 Một phương thức là một khối mã có tên chỉ chạy khi nó được gọi. Một khối mã là bất kỳ phần mã nào được bao quanh bởi dấu ngoặc nhọn. Trừu tượng hóa thủ tục cho phép lập trình viên sử dụng một phương thức bằng cách biết phương thức đó làm gì, ngay cả khi họ không biết phương thức đó được viết như thế nào.
  • 1.9.A.2 Một tham số là một biến được khai báo trong phần đầu của một phương thức hoặc constructor và có thể được sử dụng bên trong thân phương thức. Điều này cho phép các giá trị hoặc đối số được truyền vào và sử dụng bởi một phương thức hoặc constructor. Một chữ ký phương thức cho một phương thức có tham số bao gồm tên phương thức và danh sách có thứ tự các loại tham số. Một chữ ký phương thức cho một phương thức không có tham số bao gồm tên phương thức và một danh sách tham số rỗng.

Mục tiêu học tập 1.9.B: Mô tả cách gọi các phương thức.

  • 1.9.B.1 Một phương thức void không có giá trị trả về và do đó không được gọi như một phần của một biểu thức.
  • 1.9.B.2 Một phương thức không void trả về một giá trị có cùng loại với loại trả về trong phần đầu. Để sử dụng giá trị trả về khi gọi một phương thức không void, nó phải được lưu trữ trong một biến hoặc được sử dụng như một phần của một biểu thức.
  • 1.9.B.3 Một đối số là một giá trị được truyền vào một phương thức khi phương thức đó được gọi. Các đối số được truyền vào một phương thức phải tương thích về số lượng và thứ tự với các loại đã xác định trong danh sách tham số của chữ ký phương thức. Khi gọi các phương thức, các đối số được truyền bằng cách truyền theo giá trị. Truyền theo giá trị khởi tạo các tham số bằng các bản sao của các đối số.
  • 1.9.B.4 Các phương thức được nói là quá tải khi có nhiều phương thức với cùng tên nhưng khác nhau về chữ ký.
  • 1.9.B.5 Một lời gọi phương thức sẽ tạm dừng việc thực thi tuần tự của các câu lệnh, khiến chương trình thực thi trước các câu lệnh trong phương thức trước khi tiếp tục. Sau khi câu lệnh cuối cùng trong phương thức được thực thi hoặc một câu lệnh return được thực thi, luồng điều khiển sẽ trở lại điểm ngay sau nơi phương thức được gọi.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

A method signature 方法签名 is a method's name plus its parameter types, e.g. nextInt() or substring(int, int). To call a method you must supply arguments 实参 that match the parameters in number, type, and order. The method header (the full declaration) also states the return type – the type of value the method gives back (void if none) – but the return type is not part of the signature, which is why two methods cannot differ by return type alone.

Tiếng Việt

Chữ ký phương thức là tên phương thức cộng với các loại tham số của nó, ví dụ: nextInt() hoặc substring(int, int). Để gọi một phương thức, bạn phải cung cấp đối số khớp về số lượng, loại và thứ tự với các tham số. Tiêu đề phương thức (câu khai báo đầy đủ) cũng chỉ định loại trả về – loại giá trị mà phương thức trả lại (void nếu không có) – nhưng loại trả về không là một phần của chữ ký, đó là lý do hai phương thức không thể chỉ khác nhau bởi loại trả về.

1.10

Calling Class Methods · ⁨Gọi Phương thức Lớp⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.10.A: Develop code to call class methods and determine the result of those calls.

  • 1.10.A.1 Class methods are associated with the class, not instances of the class. Class methods include the keyword static in the header before the method name.
  • 1.10.A.2 Class methods are typically called using the class name along with the dot operator. When the method call occurs in the defining class, the use of the class name is optional in the call.
Tiếng Việt

Mục tiêu Học tập 1.10.A: Viết mã để gọi các phương thức lớp và xác định kết quả của các lời gọi đó.

  • 1.10.A.1 Phương thức lớp được gắn với lớp, không phải với các đối tượng (instance) của lớp. Các phương thức lớp bao gồm từ khóa static trong phần đầu (header) trước tên phương thức.
  • 1.10.A.2 Phương thức lớp thường được gọi bằng cách sử dụng tên lớp cùng với toán tử dấu chấm. Khi lời gọi phương thức xảy ra bên trong lớp định nghĩa, việc sử dụng tên lớp là tùy chọn trong lời gọi.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

A class (static) method 类方法 belongs to the class itself, so you call it on the class name: ClassName.method(args). No object is needed.

Tiếng Việt

Một phương thức lớp (tĩnh) thuộc về bản thân lớp, vì vậy bạn gọi nó trên tên lớp: ClassName.method(args). Không cần đối tượng nào.

Explore · ⁨Khám phá⁩

Follow a class-method call on the stack · ⁨Theo dõi gọi phương thức lớp trên ngăn xếp⁩

Calling a class method like Math.max pushes a new frame onto the call stack; when the method returns a value, its frame pops and control goes back to the caller. Step through to watch the stack grow and shrink. · ⁨Gọi một phương thức lớp như Math.max sẽ đẩy một khung mới vào ngăn xếp gọi; khi phương thức trả về một giá trị, khung của nó bị loại bỏ và quyền điều khiển quay trở lại người gọi. Bước qua để quan sát ngăn xếp mở rộng và thu hẹp.⁩

Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
class/klæs/ lớp
1.11

Math Class · ⁨Lớp Math⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.11.A: Develop code to write expressions that incorporate calls to built-in mathematical libraries and determine the value that is produced as a result.

  • 1.11.A.1 The Math class is part of the java.lang package. Classes in the java.lang package are available by default.
  • 1.11.A.2 The Math class contains only class methods. The following Math class methods—including what they do and when they are used—are part of the Java Quick Reference:
    • static int abs(int x) returns the absolute value of an int value.
    • static double abs(double x) returns the absolute value of a double value.
    • static double pow(double base, double exponent) returns the value of the first parameter raised to the power of the second parameter.
    • static double sqrt(double x) returns the nonnegative square root of a double value.
    • static double random() returns a double value greater than or equal to 0.0 and less than 1.0.
  • 1.11.A.3 The values returned from Math.random() can be manipulated using arithmetic and casting operators to produce a random int or double in a defined range based on specified criteria. Each endpoint of the range can be inclusive, meaning the value is included, or exclusive, meaning the value is not included.
Tiếng Việt

Mục tiêu Học tập 1.11.A: Viết mã để tạo biểu thức chứa các lời gọi đến thư viện toán học có sẵn và xác định giá trị được tạo ra như một kết quả.

  • 1.11.A.1 Lớp Math là một phần của gói java.lang. Các lớp trong gói java.lang có sẵn theo mặc định.
  • 1.11.A.2 Lớp Math chỉ chứa các phương thức lớp. Các phương thức lớp Math sau đây—bao gồm chức năng của chúng và thời điểm sử dụng—là một phần của Tài liệu tham khảo nhanh Java:
    • static int abs(int x) trả về giá trị tuyệt đối của một giá trị int.
    • static double abs(double x) trả về giá trị tuyệt đối của một giá trị double.
    • static double pow(double base, double exponent) trả về giá trị của tham số đầu tiên được nâng lên lũy thừa của tham số thứ hai.
    • static double sqrt(double x) trả về căn bậc hai không âm của một giá trị double.
    • static double random() trả về một giá trị double lớn hơn hoặc bằng 0.0 và nhỏ hơn 1.0.
  • 1.11.A.3 Các giá trị trả về từ Math.random() có thể được xử lý bằng các toán tử số học và chuyển đổi kiểu (casting) để tạo ra một số ngẫu nhiên int hoặc double trong một phạm vi xác định dựa trên các tiêu chí đã chỉ định. Mỗi đầu mút của phạm vi có thể là đóng (inclusive), nghĩa là giá trị được bao gồm, hoặc mở (exclusive), nghĩa là giá trị không được bao gồm.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

The Math class provides static math methods: Math.abs(x), Math.pow(base, exp), Math.sqrt(x), and Math.random() (a double in $[0,1)$). To get a random integer from 0 to n-1: (int)(Math.random() * n).

Tiếng Việt

Lớp Math cung cấp các phương thức toán học tĩnh: Math.abs(x), Math.pow(base, exp), Math.sqrt(x), và Math.random() (một double trong $[0,1)$). Để lấy một số nguyên ngẫu nhiên từ 0 đến n-1: (int)(Math.random() * n).

1.12

Objects: Instances of Classes · ⁨Đối tượng: Các实例 của Lớp⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.12.A: Explain the relationship between a class and an object.

  • 1.12.A.1 An object is a specific instance of a class with defined attributes. A class is the formal implementation, or blueprint, of the attributes and behaviors of an object.
  • 1.12.A.2 A class hierarchy can be developed by putting common attributes and behaviors of related classes into a single class called a superclass. Classes that extend a superclass, called subclasses, can draw upon the existing attributes and behaviors of the superclass without replacing these in the code. This creates an inheritance relationship from the subclasses to the superclass.
    • Exclusion statement: Designing and implementing inheritance relationships are outside the scope of the AP Computer Science A course and exam.
  • 1.12.A.3 All classes in Java are subclasses of the Object class.

Learning Objective 1.12.B: Develop code to declare variables to store reference types.

  • 1.12.B.1 A variable of a reference type holds an object reference, which can be thought of as the memory address of that object.
Tiếng Việt

Mục tiêu Học tập 1.12.A: Giải thích mối quan hệ giữa một lớp và một đối tượng.

  • 1.12.A.1 Một đối tượng là một instance cụ thể của một lớp với các thuộc tính được xác định. Một lớp là sự triển khai chính thức, hay bản thiết kế, của các thuộc tính và hành vi của một đối tượng.
  • 1.12.A.2 Một phân cấp lớp có thể được xây dựng bằng cách đưa các thuộc tính và hành vi chung của các lớp liên quan vào một lớp duy nhất gọi là lớp cha (superclass). Các lớp mở rộng lớp cha, gọi là lớp con (subclasses), có thể tận dụng các thuộc tính và hành vi hiện có của lớp cha mà không cần thay thế những thứ này trong mã. Điều này tạo ra một quan hệ thừa kế từ các lớp con đến lớp cha.
    • Câu loại trừ: Thiết kế và triển khai các quan hệ thừa kế nằm ngoài phạm vi của môn học và kỳ thi AP Computer Science A.
  • 1.12.A.3 Tất cả các lớp trong Java đều là lớp con của lớp Object.

Mục tiêu Học tập 1.12.B: Viết mã để khai báo biến để lưu trữ các loại tham chiếu (reference types).

  • 1.12.B.1 Một biến của loại tham chiếu giữ một tham chiếu đối tượng, điều này có thể được hiểu là địa chỉ bộ nhớ của đối tượng đó.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English
= copies the reference, not the object

A class 类 is a blueprint; an object 对象 is a concrete instance 实例 built from it. A class bundles data (fields) with behavior (methods) – the heart of object-oriented programming 面向对象编程. String, Scanner, and ArrayList are all classes you instantiate.

Classes can be organised into a hierarchy. A superclass 父类 holds attributes and behaviors shared by several subclasses 子类 that extend it – an inheritance relationship 继承关系. Every class in Java is ultimately a subclass of the built-in Object class, which is why every object already has a toString method; writing a subclass method with the same signature as a superclass one is method overriding 方法重写. (Designing your own inheritance is beyond this course, but you are expected to recognise this vocabulary.)

Tiếng Việt
= sao chép tham chiếu, không phải đối tượng

Một lớp là bản thiết kế; một đối tượng là một instance cụ thể được xây dựng từ nó. Một lớp đóng gói dữ liệu (các trường) với hành vi (các phương thức) – trái tim của lập trình hướng đối tượng. String, Scanner, và ArrayList đều là các lớp bạn có thể tạo instance.

Các lớp có thể được tổ chức theo cấu trúc phân cấp. Một lớp cha chứa các thuộc tính và hành vi chung mà nhiều lớp con extend nó – đây là mối quan hệ thừa kế. Mọi lớp trong Java đều cuối cùng là lớp con của lớp tích hợp sẵn Object, do đó mọi đối tượng đều đã có phương thức toString; việc viết một phương thức lớp con có cùng chữ ký với phương thức lớp cha gọi là ghi đè phương thức. (Việc thiết kế thừa kế riêng cho bạn nằm ngoài phạm vi khóa học này, nhưng bạn cần nhận diện được các thuật ngữ này.)

Sơ đồ lớp: thuộc tính riêng tư và phương thức công khai
Sơ đồ lớp: thuộc tính riêng tư và phương thức công khai
Một lớp là bản thiết kế; mỗi đối tượng là một instance được xây dựng từ nó
Một lớp là bản thiết kế; mỗi đối tượng là một instance được xây dựng từ nó
Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
object/ˈɒbdʒekt/ vật
instance/ˈɪnstəns/ thực thể
object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ lập trình hướng đối tượng
superclass/ˈsuːpəklæs/ siêu lớp
subclasses/ˈsʌbklæsɪz/ lớp con
inheritance relationship/ɪnˈherɪtəns rɪˈleɪʃənʃɪp/ mối quan hệ thừa kế
method overriding/ˈmeθəd ˌəʊvəˈraɪdɪŋ/ ghi đè phương thức
Instantiation/ˌɪnstænʃɪˈeɪʃn/ Khởi tạo đối tượng
reference/ˈrefrəns/ tham chiếu
1.13

Object Creation and Storage (Instantiation) · ⁨Tạo và Lưu trữ Đối tượng (Tạo Instance)⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.13.A: Identify, using its signature, the correct constructor being called.

  • 1.13.A.1 A class contains constructors that are called to create objects. They have the same name as the class.
  • 1.13.A.2 A constructor signature consists of the constructor's name, which is the same as the class name, and the ordered list of parameter types. The parameter list, in the header of a constructor, lists the types of the values that are passed and their variable names.
  • 1.13.A.3 Constructors are said to be overloaded when there are multiple constructors with different signatures.

Learning Objective 1.13.B: Develop code to declare variables of the correct types to hold object references.

  • 1.13.B.1 A variable of a reference type holds an object reference or, if there is no object, null.

Learning Objective 1.13.C: Develop code to create an object by calling a constructor.

  • 1.13.C.1 An object is typically created using the keyword new followed by a call to one of the class's constructors.
  • 1.13.C.2 Parameters allow constructors to accept values to establish the initial values of the attributes of the object.
  • 1.13.C.3 A constructor argument is a value that is passed into a constructor when the constructor is called. The arguments passed to a constructor must be compatible in order and number with the types identified in the parameter list in the constructor signature. When calling constructors, arguments are passed using call by value. Call by value initializes the parameters with copies of the arguments.
  • 1.13.C.4 A constructor call interrupts the sequential execution of statements, causing the program to first execute the statements in the constructor before continuing. Once the last statement in the constructor has been executed, the flow of control is returned to the point immediately following where the constructor was called.
Tiếng Việt

Mục tiêu Học tập 1.13.A: Xác định, dựa trên chữ ký (signature), constructor đang được gọi đúng.

  • 1.13.A.1 Một lớp chứa các constructor được gọi để tạo ra các đối tượng. Chúng có cùng tên với lớp.
  • 1.13.A.2 Chữ ký constructor bao gồm tên của constructor (cùng tên với tên lớp) và danh sách có thứ tự các loại tham số. Danh sách tham số, trong phần đầu của constructor, liệt kê các loại của các giá trị được truyền và tên biến của chúng.
  • 1.13.A.3 Các constructor được cho là bị quá tải (overloaded) khi có nhiều constructor với các chữ ký khác nhau.

Mục tiêu Học tập 1.13.B: Viết mã để khai báo biến có đúng loại để lưu trữ các tham chiếu đối tượng.

  • 1.13.B.1 Một biến của loại tham chiếu giữ một tham chiếu đối tượng, hoặc nếu không có đối tượng nào, thì là null.

Mục tiêu Học tập 1.13.C: Viết mã để tạo một đối tượng bằng cách gọi một constructor.

  • 1.13.C.1 Một đối tượng thường được tạo bằng cách sử dụng từ khóa new theo sau bởi một lời gọi đến một trong các constructor của lớp.
  • 1.13.C.2 Các tham số cho phép constructor chấp nhận các giá trị để thiết lập các giá trị ban đầu của các thuộc tính của đối tượng.
  • 1.13.C.3 Một tham số constructor là một giá trị được truyền vào một constructor khi constructor được gọi. Các tham số truyền vào một constructor phải tương thích về thứ tự và số lượng với các loại được xác định trong danh sách tham số của chữ ký constructor. Khi gọi constructors, các tham số được truyền theo cơ chế truyền theo giá trị (call by value). Truyền theo giá trị khởi tạo các tham số bằng các bản sao của các tham số.
  • 1.13.C.4 Một lời gọi constructor làm gián đoạn việc thực thi tuần tự của các câu lệnh, khiến chương trình thực thi các câu lệnh trong constructor trước, sau đó mới tiếp tục. Sau khi câu lệnh cuối cùng trong constructor được thực thi, luồng điều khiển sẽ trở lại điểm ngay sau nơi constructor được gọi.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

Instantiation 实例化 creates an object with the new keyword, which calls a constructor 构造函数:

The variable holds a reference 引用 (the object's address), not the object itself. Two references can point to the same object; comparing them with == compares addresses, not contents.

A reference can also point to nothing: the special value null 空值 means "not attached to any object". Calling a method on a null reference crashes at run time with a NullPointerException. Guard against it by testing with ==/!= and checking null first, so && short-circuits before the method runs: if (s != null && s.length() > 0).

Tiếng Việt

Tạo instance tạo ra một đối tượng bằng từ khóa new, điều này sẽ gọi một constructor:

Scanner in = new Scanner(System.in);
String s = new String("hi");   // or just "hi"

Biến lưu giữ một tham chiếu (địa chỉ của đối tượng), không phải bản thân đối tượng. Hai tham chiếu có thể trỏ đến cùng một đối tượng; so sánh chúng bằng == sẽ so sánh địa chỉ, không phải nội dung.

Tham chiếu cũng có thể trỏ vào không gì cả: giá trị đặc biệt null có nghĩa là "không liên kết với bất kỳ đối tượng nào". Gọi phương thức trên tham chiếu null sẽ gây lỗi thời gian chạy với một NullPointerException. Hãy phòng tránh bằng cách kiểm tra với ==/!= và kiểm tra null trước, để phép AND logic && ngắn mạch trước khi phương thức được thực thi: if (s != null && s.length() > 0).

Biến nguyên thủy lưu giá trị trực tiếp, tham chiếu lưu mũi tên trỏ đến đối tượng
Biến nguyên thủy lưu giá trị trực tiếp, tham chiếu lưu mũi tên trỏ đến đối tượng
Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
constructor/kənˈstrʌktə/ constructor
null/nʌl/ null
instance method/ˈɪnstəns ˈmeθəd/ phương thức thực thể
immutable/ɪˈmjuːtəbl/ không thể thay đổi
Interface/ˈɪntəfeɪs/ Giao diện
1.14

Calling Instance Methods · ⁨Gọi Phương thức Instance⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.14.A: Develop code to call instance methods and determine the result of these calls.

  • 1.14.A.1 Instance methods are called on objects of the class. The dot operator is used along with the object name to call instance methods.
  • 1.14.A.2 A method call on a null reference will result in a NullPointerException.
Tiếng Việt

Mục tiêu Học tập 1.14.A: Viết mã để gọi các phương thức instance và xác định kết quả của các lời gọi này.

  • 1.14.A.1 Phương thức instance được gọi trên các đối tượng của lớp. Toán tử dấu chấm được sử dụng cùng với tên đối tượng để gọi các phương thức instance.
  • 1.14.A.2 Một lời gọi phương thức trên một tham chiếu null sẽ dẫn đến một NullPointerException.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

An instance method 实例方法 acts on a specific object, so you call it on the object reference: object.method(args). Example: in.nextInt(), word.length().

Tiếng Việt

Một phương thức instance tác động lên một đối tượng cụ thể, vì vậy bạn gọi nó trên tham chiếu đối tượng: object.method(args). Ví dụ: in.nextInt(), word.length().

1.15

String Manipulation · ⁨Thao tác chuỗi⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 1.15.A: Develop code to create string objects and determine the result of creating and combining strings.

  • 1.15.A.1 A String object represents a sequence of characters and can be created by using a string literal or by calling the String class constructor.
  • 1.15.A.2 The String class is part of the java.lang package. Classes in the java.lang package are available by default.
  • 1.15.A.3 A String object is immutable, meaning once a String object is created, its attributes cannot be changed. Methods called on a String object do not change the content of the String object.
  • 1.15.A.4 Two String objects can be concatenated together or combined using the + or += operator, resulting in a new String object. A primitive value can be concatenated with a String object. This causes the implicit conversion of the primitive value to a String object.
  • 1.15.A.5 A String object can be concatenated with any object, which implicitly calls the object's toString method (a behavior that is guaranteed to exist by the inheritance relationship every class has with the Object class). An object's toString method returns a string value representing the object. Subclasses of Object often override the toString method with class-specific implementation. Method overriding occurs when a public method in a subclass has the same method signature as a public method in the superclass, but the behavior of the method is specific to the subclass.
    • Exclusion statement: Overriding the toString method of a class is outside the scope of the AP Computer Science A course and exam.

Learning Objective 1.15.B: Develop code to call methods on string objects and determine the result of calling these methods.

  • 1.15.B.1 A String object has index values from 0 to one less than the length of the string. Attempting to access indices outside this range will result in a StringIndexOutOfBoundsException.
  • 1.15.B.2 The following String methods—including what they do and when they are used—are part of the Java Quick Reference:
    • int length() returns the number of characters in a String object.
    • String substring(int from, int to) returns the substring beginning at index from and ending at index to - 1.
    • String substring(int from) returns substring(from, length()).
    • int indexOf(String str) returns the index of the first occurrence of str; returns -1 if not found.
    • boolean equals(Object other) returns true if this corresponds to the same sequence of characters as other; returns false otherwise.
    • int compareTo(String other) returns a value < 0 if this is less than other; returns zero if this is equal to other; returns a value > 0 if this is greater than other. Strings are ordered based upon the alphabet.
    • Exclusion statement: Using the equals method to compare one String object with an object of a type other than String is outside the scope of the AP Computer Science A course and exam.
  • 1.15.B.3 A string identical to the single element substring at position index can be created by calling substring(index, index + 1).
Tiếng Việt

Mục tiêu Học tập 1.15.A: Viết mã để tạo các đối tượng chuỗi và xác định kết quả của việc tạo và kết hợp các chuỗi.

  • 1.15.A.1 Một đối tượng String đại diện cho một chuỗi các ký tự và có thể được tạo bằng cách sử dụng một hằng chuỗi (string literal) hoặc bằng cách gọi constructor của lớp String.
  • 1.15.A.2 Class String là một phần của gói java.lang. Các class trong gói java.lang được khả dụng mặc định.
  • 1.15.A.3 Một đối tượng String là không biến đổi (immutable), nghĩa là sau khi một đối tượng String được tạo ra, các thuộc tính của nó không thể thay đổi. Các phương thức được gọi trên một đối tượng String sẽ không làm thay đổi nội dung của đối tượng String.
  • 1.15.A.4 Hai đối tượng String có thể được nối lại với nhau hoặc kết hợp bằng toán tử + hoặc +=, tạo ra một đối tượng String mới. Một giá trị nguyên thủy có thể được nối với một đối tượng String. Điều này gây ra sự chuyển đổi ngầm của giá trị nguyên thủy thành một đối tượng String.
  • 1.15.A.5 Một đối tượng String có thể được nối với bất kỳ đối tượng nào, điều này ngầm gọi phương thức toString của đối tượng đó (một hành vi được đảm bảo tồn tại bởi mối quan hệ thừa kế mà mọi class đều có với class Object). Phương thức toString của một đối tượng trả về một giá trị chuỗi đại diện cho đối tượng đó. Các class con của Object thường ghi đè (override) phương thức toString bằng cách triển khai cụ thể theo class. Ghi đè phương thức xảy ra khi một phương thức công khai trong class con có cùng chữ ký phương thức với một phương thức công khai trong class cha, nhưng hành vi của phương thức lại đặc thù cho class con.
    • Câu loại trừ: Việc ghi đè phương thức toString của một class nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.

Mục tiêu học tập 1.15.B: Phát triển mã để gọi các phương thức trên các đối tượng chuỗi và xác định kết quả của việc gọi các phương thức này.

  • 1.15.B.1 Một đối tượng String có các chỉ số từ 0 đến nhỏ hơn độ dài của chuỗi. Việc cố gắng truy cập các chỉ số nằm ngoài phạm vi này sẽ dẫn đến một StringIndexOutOfBoundsException.
  • 1.15.B.2 Các phương thức String sau đây—bao gồm chức năng của chúng và thời điểm sử dụng—là một phần của Trang tham khảo nhanh Java:
    • int length() trả về số lượng ký tự trong một đối tượng String.
    • String substring(int from, int to) trả về chuỗi con bắt đầu từ chỉ số from và kết thúc tại chỉ số to - 1.
    • String substring(int from) trả về substring(from, length()).
    • int indexOf(String str) trả về chỉ số của lần xuất hiện đầu tiên của str; trả về -1 nếu không tìm thấy.
    • boolean equals(Object other) trả về true nếu this tương ứng với cùng một dãy ký tự như other; trả về false ngược lại.
    • int compareTo(String other) trả về một giá trị < 0 if this is less than other; returns zero if this is equal to other; returns a value > 0 nếu this lớn hơn other. Các chuỗi được sắp xếp dựa trên bảng chữ cái.
    • Câu loại trừ: Sử dụng phương thức equals để so sánh một đối tượng String với một đối tượng có kiểu khác với String nằm ngoài phạm vi của khóa học và kỳ thi AP Computer Science A.
  • 1.15.B.3 Một chuỗi giống hệt với chuỗi con đơn lẻ tại vị trí index có thể được tạo ra bằng cách gọi substring(index, index + 1).

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English
Strings are immutable

String objects are immutable 不可变 – methods return a new string rather than changing the original. Key methods (all indices start at 0):

Exam skill: substring(a, b) includes index a but excludes b, and String comparison must use .equals, not == – two of the most-tested String pitfalls.

Worked example. Let String s = "COMPUTER"; (indices 0–7). Then s.length() is 8; s.substring(0, 4) is "COMP" (indices 0,1,2,3 – index 4 excluded); s.substring(4) is "UTER" (from index 4 to the end); s.indexOf("PU") is 3; and s.indexOf("X") is -1 (not found). Counting the excluded endpoint of substring is the single most common slip.

Asking for an index outside 0 to length()-1 (a bad substring or charAt argument, e.g. s.substring(0, 20) here) crashes with a StringIndexOutOfBoundsException – the String cousin of the array-index error.

Tiếng Việt
Chuỗi là bất biến

Đối tượng String là bất biến – các phương thức trả về một chuỗi mới thay vì thay đổi chuỗi gốc. Các phương thức quan trọng (tất cả chỉ số bắt đầu từ 0):

s.length();            // number of characters
s.substring(2, 5);     // chars at index 2,3,4 (5 excluded)
s.indexOf("ab");       // first position, or -1
s.equals(other);       // content comparison (never use == for Strings)
s.compareTo(other);    // <0, 0, >0 by dictionary order

Kỹ năng thi: substring(a, b) bao gồm chỉ số a nhưng loại trừ b, và so sánh String phải dùng .equals, không phải == – hai trong những bẫy String thường gặp nhất.

Ví dụ minh họa. Cho String s = "COMPUTER"; (chỉ số từ 0–7). Khi đó s.length() trả về 8; s.substring(0, 4) trả về "COMP" (chỉ số từ 0,1,2,3 – chỉ số 4 bị loại trừ); s.substring(4) trả về "UTER" (từ chỉ số 4 đến hết mảng); s.indexOf("PU") trả về 3; và s.indexOf("X") trả về -1 (không tìm thấy). Việc đếm điểm đầu cuối bị loại trừ trong substring là sai lầm phổ biến nhất.

Yêu cầu một chỉ số nằm ngoài 0 đến length()-1 (một tham số substring hoặc charAt không hợp lệ, ví dụ: s.substring(0, 20) ở đây) sẽ gây lỗi với một StringIndexOutOfBoundsException – họ hàng của lỗi chỉ số mảng trong String.

Chỉ số chuỗi bắt đầu từ 0
Chỉ số chuỗi bắt đầu từ 0
Explore · ⁨Khám phá⁩

Explore string indices and slicing · ⁨Khám phá chỉ mục xâu và cắt xâu⁩

Every character has an index, and the numbering starts at 0. Drag the start and end to see how substring(from, to) takes the characters from from up to — but not including — to. · ⁨Mỗi ký tự đều có một chỉ mục, và đánh số bắt đầu từ 0. Kéo điểm bắt đầu và kết thúc để xem substring(from, to) lấy các ký tự từ from lên đến — nhưng không bao gồm — to.⁩

1.15

Exam tips · ⁨Mẹo làm bài thi⁩

English
  • Trace code by hand line by line, tracking each variable's value in a table — the exam rewards careful tracing over guessing.
  • Know Java's primitive types and that integer division truncates ($7/2$ gives $3$); use a cast or a double for real division.
  • Distinguish compile-time errors (syntax, types) from run-time errors – know the named ones: ArithmeticException (int ÷ 0), NullPointerException (method on a null reference), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – and logic errors (wrong output).
  • Follow operator precedence and initialise every variable before you use it.
  • On the free-response, write complete, compilable Java — return the right type and match the method header exactly.
Tiếng Việt
  • Theo dõi mã bằng tay từng dòng, theo dõi giá trị của từng biến trong bảng — bài thi đánh giá cao sự theo dõi cẩn thận hơn là đoán mò.
  • Biết các loại nguyên thủy của Java và rằng phép chia số nguyên bị cắt ($7/2$ cho $3$); hãy dùng phép ép kiểu hoặc double cho phép chia thực.
  • Phân biệt các lỗi compile-time (cú pháp, kiểu dữ liệu) với các lỗi run-time – biết các tên gọi cụ thể: ArithmeticException (int ÷ 0), NullPointerException (phương thức trên tham chiếu null), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – và các lỗi logic (kết quả sai).
  • Tuân theo độ ưu tiên của toán tử và khởi tạo mọi biến trước khi sử dụng.
  • Trong phần tự luận, viết Java hoàn chỉnh, có thể biên dịch được – trả về đúng kiểu và khớp chính xác với header phương thức.

Interactive lessons on this topic · ⁨Bài học tương tác về chủ đề này⁩

Work through it step by step, with instant-check exercises. · ⁨Làm theo từng bước, kèm theo bài tập kiểm tra ngay lập tức.⁩

Past Papers · ⁨Đề thi cũ⁩

More topics in AP Computer Science A · ⁨AP Khoa học máy tính A⁩ · ⁨Nhiều chủ đề hơn trong AP Computer Science A · ⁨AP Khoa học máy tính A⁩⁩

Log in or create account · ⁨Đăng nhập hoặc tạo tài khoản⁩

IGCSE, A-Level & AP