Bảng cheat đa luồng java

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh GIT chấp nhận cả tên thẻ và tên chi nhánh, vì như vậy việc tạo chi nhánh này có thể gây ra hành vi bất ngờ. Bạn có chắc là bạn muốn tạo chi nhánh này không?

1branch0tags nhánh 0 thẻ

Mã số
  • Sử dụng Git hoặc thanh toán với SVN bằng URL Web

  • Mở bằng máy tính để bàn GitHub
  • Tải xuống Zip

Cam mới nhất

File files

liên kết cố định

Unloading new cam information

Loại hình

Mười

Tin nhắn cam kết mới nhất

Cam end time

Bảng cheat Java

Hướng dẫn thiết lập toàn diện Java cho các dự án nhỏ. Tốt nhất cho mọi người, những người đến từ ngôn ngữ lập trình khác hoặc chỉ muốn làm mới nhanh Hướng dẫn lập trình Java với Mini Project. Tốt nhất cho những người đến từ ngôn ngữ lập trình khác hoặc Chỉ muốn Làm mới nhanh

Chủ đề được bảo hiểm

  1. Chương trình Helloworld
  2. Nhận xét trong Java
  3. Method in Java
  4. Variation in Java
  5. Kiểu dữ liệu trong Java
  6. Vận hành người trong Java
  7. Nhập chuột vào Java
  8. Get head from user trong Java
  9. Chuỗi & chức năng của nó trong Java
  10. Lớp toán học trong Java
  11. Điều kiện trong Java
  12. Vòng lặp trong Java
  13. Mang trong Java
  14. Please try in Java

PDF

Bảng cheat Java

Hướng dẫn thiết lập toàn diện Java cho các dự án nhỏ. Tốt nhất cho mọi người, những người đến từ ngôn ngữ lập trình khác hoặc chỉ muốn làm mới nhanh

  • Chủ đề được bảo hiểm
import java.util.Scanner; public class Main { public static void main(String[] args) { String choice = "yes"; while(choice == "yes") { System.out.println("\n\n[?] Enter 1st Number :"); Scanner scan = new Scanner(System.in); float num1 = scan.nextInt(); System.out.println("[?] Enter 2nd Number :"); float num2 = scan.nextInt(); System.out.println("[Choose From List] : \n\t(M)ultiply\n\t(D)ivide\n\t(S)um\n\t(Su)btract\n"); Scanner scan1 = new Scanner(System.in); String operator = scan1.nextLine(); operator = operator.toLowerCase(); switch(operator) { case "m": System.out.print("[+] Multiple of 1st & 2nd is "); System.out.print(num1 * num2); break; case "d": System.out.print("[+] Divide of 1st & 2nd is "); System.out.print(num1 / num2); break; case "s": System.out.print("[+] Sum of 1st & 2nd is "); System.out.print(num1 + num2); break; case "su": System.out.print("Subtract of 1st & 2nd is "); System.out.print(num1 - num2); break; default: System.out.println("Invalid Input !"); } // switch } // While Loop } // main() } // Main()

Chương trình Helloworld

Nhận xét trong Java

Method in Java

Variation in Java

Kiểu dữ liệu trong Java

Vận hành người trong Java

Nhập sao vào sao Java

Get head from user trong Java

Chuỗi & chức năng của nó trong khi xem Java

Lớp toán học trong Java

Điều kiện trong Java fork

Hướng dẫn Java cho người mới bắt đầu - Một tờ Cheat

Xem lại các khái niệm Java 9 ở tốc độ phản hồi

Complete to key learning Java

Tiếp tục học hỏi mỗi ngày

  • 1. Theo dõi Ranga trên LinkedIn THEO DÕI Ranga trên LinkedIn

Kiểm tra các lộ trình tuyệt vời của chúng tôi

  • 1. Lộ trình AWS AWS Lộ trình
  • 2. Lộ trình Azure Azure
  • 3. Lộ trình Google Cloud Google Cloud Roadmap
  • 4. Lộ trình bắt đầu đám mây Cloud Sơ đồ cho người mới bắt đầu
  • 5. Lộ trình DevOps Lộ trình DevOps
  • 6. Lộ trình Stack Full Stack Lộ trình Java Full Stack
  • 7. Lộ trình Microservice Java Java Microservices Roadmap

Giới thiệu

Tiểu sử

Sự phổ biến của Java

  • Nền tảng độc lập hoặc di động
  • Ngôn ngữ định hướng đối tượng
  • Bảo vệ
  • API phong phú
  • IDE tuyệt vời
  • Toàn diện
    • Ứng dụng web (Java EE (JSP, Servlets), Spring, Struts. )
    • Ứng dụng di động (Android)
    • Microservice (khởi động mùa xuân)

Nền tảng độc lập

  • Build one times, run any places

  • Mã byte Java là bộ hướng dẫn của máy ảo Java
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions]

JDK so với JVM so với JRE

  • JVM (Máy ảo Java)
    • Chạy mã byte Java
  • JRE
    • JVM + Library + other components (để chạy applet và các ứng dụng Java khác)
  • JDK
    • JRE + Trình biên dịch + Trình sửa lỗi

Lớp học Layer

  • Tìm và tải các lớp Java

Ba loại

  • Trình tải lớp hệ thống - Tải tất cả các lớp ứng dụng từ ClassPath
  • Trình tải lớp mở rộng - Tải tất cả các lớp từ thư mục mở rộng
  • Trình tải lớp Bootstrap - Tải tất cả các tệp Java lõi

Thứ tự thực hiện tải lớp

  • JVM cần tìm một lớp, nó bắt đầu với trình tải hệ thống lớp
  • Nếu nó không được tìm thấy, nó sẽ kiểm tra với Trình tải lớp mở rộng
  • Nếu nó không tìm thấy, nó sẽ đi đến trình tải lớp bootstrap
  • Nếu một lớp vẫn chưa được tìm thấy, một classnotfoundException sẽ bị ném

First Java program

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }

Ghi chú

  • Mỗi dòng mã chúng tôi viết trong Java là một phần của thứ gọi là lớp. Chúng ta sẽ nói về lớp học sau
  • Dòng đầu tiên xác định một lớp công khai được gọi là Helloworld. Tất cả các mã trong một lớp nằm giữa {và}
  • Khi một chương trình đang chạy, Java nên biết dòng mã nào phải được chạy trước đó. Công khai void void main (String [] args) là phương thức đầu tiên được chạy khi một chương trình được thực thi

Java, giống như bất kỳ ngôn ngữ lập trình nào khác, đặc biệt về cú pháp

Use Java and Javac

Có hai bước liên quan đến việc chạy chương trình Java

  • Tổng hợp
  • chấp nhận hành động

Tổng hợp

chấp nhận hành động

  • We use Javac to compile Java code
  • Mở CommandPrompt/Terminal và CD vào thư mục nơi có tệp helloworld. java
  • thực hiện lệnh bên dưới
  • You will see two file HelloWorld. java và Helloworld. las in directory

chấp nhận hành động

  • We use Javac to compile Java code
  • Mở CommandPrompt/Terminal và CD vào thư mục nơi có tệp helloworld. java
  • thực hiện lệnh bên dưới

You will see two file HelloWorld. java và Helloworld. las in directory

  • Chào thế giới. Lớp chứa mã byte Java
  • Bây giờ tôi có thể chạy chương trình bằng JVM
  • Bạn sẽ thấy đầu ra "Hello World" nằm trong bảng điều khiển

Class and object

  • Lớp học là gì?
int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//9

Xác định một thể hiện của một lớp - một đối tượng

  • Call a method on objects

Variation

  • Giá trị của một biến thay đổi trong quá trình thực hiện chương trình
  • Khai báo và khởi tạo các biến
  • Tuyên bố là đặt tên biến và loại

Lời khuyến khích

Hai hoặc nhiều biến của danh mục có thể được khai báo giống nhau

Biến có thể là địa phương hoặc toàn cầu. Các biến cục bộ có thể được tham chiếu (IE, only valid) trong phạm vi phương thức (hoặc hàm) của chúng

Tất cả sáu loại số trong Java đã được ký kết

Các biến nguyên thủy

Các biến mà giá trị lưu trữ

  • Java định nghĩa một số loại như int (số), float (số điểm nổi), char (ký tự). Các biến của các loại này lưu trữ giá trị của các biến trực tiếp. This is not a object. Chúng được gọi là các biến nguyên thủy
  • Một ví dụ được hiển thị bên dưới. Các biến nguyên chứa bit đại diện cho giá trị của biến
  • Các loại thủy nguyên khác nhau trong Java là char, boolean, byte, short, int, long, double or float. Do những loại nguyên thủy này, Java không được coi là ngôn ngữ định hướng phản đối nguyên chất

Data type number

  • Các loại. Byte, Short, Int, Long, Float, Double

Number of bit. 8, 16, 32, 64, 32, 64

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';

phạm vi. -x to x -1 in that x = power(2, bit number -1)

Animal dog = new Animal();

Char data type

Được sử dụng để lưu trữ các ký tự. Kích thước của ký tự là 16 bit

Ví dụ

Animal dog1 = new Animal(); dog1 = new Animal();

Reference variable

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;

Ví dụ về động vật mới - đối tượng động vật - được tạo ra trong bộ nhớ. Bộ nhớ địa chỉ của các đối tượng được tạo đã được lưu trữ trong biến tham chiếu chó

Các biến tham chiếu bao gồm một tham chiếu hoặc hướng dẫn để truy cập các đối tượng thực tế trong bộ nhớ

câu đối

The reason list name

  • Kết hợp các chữ cái, số, $ và ghi điểm (_)
  • Unable to start with a number
  • Unable to a keyword
  • Không giới hạn độ dài của danh sách

Từ khoá Java

Danh sách các từ khóa Java

  • thủy nguyên kiểu. Byte, Short, Int, Long, Float, Double, Char, Boolean
  • Kiểm soát luồng. Nếu, khác, cho, làm, trong khi, chuyển đổi, trường hợp, mặc định, phá vỡ, tiếp tục, trở lại
  • Xử lý ngoại lệ. Hãy thử, bắt, cuối cùng, ném, ném, khẳng định
  • Changes. công khai, riêng tư, được bảo vệ, cuối cùng, tĩnh, bản địa, phản đối, đồng bộ, thoáng qua, dễ bay hơi, nghiêm ngặt fp
  • Lớp liên quan. lớp, giao diện, gói, mở rộng, thực hiện, nhập khẩu
  • Đối tượng liên quan. Mới, Instanceof, Super, this
  • biết chữ. Đúng, Sai, NULL
  • Những người khác. Vô hiệu, Enum
  • Không sử dụng được. Goto, const

Nghĩa đen

Bất kỳ giá trị loại dữ liệu thủy nguyên nào trong mã nguồn được gọi là màu đen

Có nhiều loại chữ

  • Số nguyên & độ dài
  • điểm nổi
  • Boolean
  • Kép

Nghĩa đen

Bất kỳ giá trị loại dữ liệu thủy nguyên nào trong mã nguồn được gọi là màu đen

  • Có nhiều loại chữ
    • Số nguyên & độ dài
    • điểm nổi
    • Boolean
  • Kép

Định nghĩa đen số nguyên

  • Có 3 cách đại diện cho một số nguyên theo nghĩa đen

thập phân số. Ví dụ. 343, 545

  • Bát phân. Chữ số 0 đến 7. Set 0 before a number. Ví dụ. 070. 011
  • lục phân. Chữ số 0 đến 9 và bảng chữ cái A đến F (10-15). Trường hợp không cảm ứng
  • Một số nguyên theo mặc định là int
  • chữ dài

Tất cả 3 định dạng nguyên. thập phân, bát phân và thập lục phân có thể được sử dụng để biểu diễn độ dài bằng cách kết nối thêm với L hoặc L

  • Bình luận nổi
  • Number with the compiles. Ví dụ. int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';78

Để khai báo một chiếc phao, kết nối f. Ví dụ. Phao f = 123. 456f;

  • Comment comcom động là gấp đôi theo mặc định
  • Bấp đến D hoặc D ở cuối theo chữ kép là ví dụ tùy chọn. int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';79
  • Boolean Biết chữ
  • Boolean giá trị hợp lệ là đúng và sai

Đúng, sai hoặc đúng, sai là không hợp lệ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 0

Nhân vật theo nghĩa chữ

Được đại diện bởi các ký tự đơn giữa các trích dẫn đơn ví dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';80

Đại diện Unicode cũng có thể được sử dụng. Prefix with \ u. Ví dụ. char lettera = '\ u0041';

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 2

Một số giá trị cũng có thể được gán cho các ký tự. Ví dụ. Chữ Charb = 66;

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 0

Có thể sử dụng thoát mã để biểu diễn một ký tự không thể nhập theo nghĩa đen. Ví dụ. char dòng mới = '\ n';

câu đối

  • tip - chuyển đổi toán tử
  • Toán tử gán đánh giá biểu thức ở phía bên phải và sao chép giá trị vào biến ở phía bên trái

ví dụ cơ bản

  • câu đối
    • Đúc - cấm và rõ ràng
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 1

Đúc được sử dụng khi tôi muốn chuyển đổi một loại dữ liệu sang loại dữ liệu khác

  • Một số nguyên theo nghĩa đen là theo mặc định int. Các hoạt động liên quan đến kích thước int hoặc ít hơn luôn luôn dẫn đến int
    • Dòng chữ nổi theo mặc định gấp đôi
  • Downing
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 2

Đức ẩn được thực hiện trực tiếp bởi biên dịch

  • Ví dụ. Mở rộng chuyển đổi, tức là lưu trữ các giá trị nhỏ hơn trong các loại biến lớn hơn
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 3

Clearance

Rõ ràng ràng buộc phải được xác định chỉ bởi lập trình viên trong mã

  • Ví dụ. Chuyển đổi thủ thuật. Lưu trữ các giá trị lớn hơn cho các loại biến nhỏ hơn;
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 4

Rõ ràng là sẽ gây ra sự giảm giá trị nếu giá trị được lưu trữ lớn hơn kích thước của biến

  • Người vận hành vận tải giao hợp chất
  • Ví dụ. +=, -=, *=
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 5

Các nhà khai thác khác nhau

  • Nhà điều hành còn lại (%)
  • Còn lại khi một số được chia cho một số khác
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 6

Điều hành có điều kiện

  • Toán tử có điều kiện là một toán tử bậc ba (3 toán hạng)

cú pháp. int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';81

  • Các nhà khai thác bitwise
  • You can work at level bit with this nhà khai thác

Trả về một giá trị từ phương thức

  • Chuyển các biến cho các phương thức
  • Tất cả các biến, nguyên thủy và tài liệu tham khảo, trong Java, được truyền đến các chức năng bằng cách sử dụng giá trị sao chép
  • Chuyển các biến cho các phương thức. Ví dụ

Chuyển một biến nguyên thủy và sửa đổi giá trị trong một phương thức

  • Chuyển một tham chiếu tham chiếu và sửa đổi giá trị trong một phương thức

Trả về một giá trị từ phương thức

  • Null là một giá trị trả về hợp lệ cho một đối tượng
  • You may be return to the type Andy may be used to be used to pay for the type
  • You could not return any anything from a void method

Các loại biến

  • Các loại biến khác nhau. tĩnh, thành viên (hoặc ví dụ), cục bộ, khối
  • Cannot current
  • bên tuyên bố bên trong một lớp bên ngoài bất kỳ phương pháp

Mỗi trường hợp của lớp sẽ có các giá trị riêng

  • Cũng được gọi là giá trị thành viên, trường hoặc tài sản

Các biến cục bộ

  • Các biến được khai báo trong một phương thức

Các biến cục bộ chỉ có thể được đánh dấu bằng công cụ sửa đổi cuối cùng

  • Nếu tên của một bộ biến cục bộ giống như tên của một biến thể hiện, thì nó sẽ dẫn đến bóng
  • Các biến tĩnh có thể được truy cập thông qua a. Layer name and b. Tham khảo đối tượng. Không nên sử dụng các đối tượng tham chiếu để tham khảo các biến tĩnh

Ví dụ Im lặng và thành viên

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 7

phạm vi của một biến

  • Phạm vi của một biến xác định nơi (phần nào của mã) có thể truy cập một biến

Các quy tắc quan trọng

  • Biến tĩnh có thể được sử dụng ở bất kỳ đâu trong lớp
  • Biến thành viên có thể được sử dụng trong bất kỳ phương pháp không tĩnh nào
  • Bộ biến đổi cục bộ chỉ có thể được sử dụng trong phương thức được khai báo
  • Biến khối chỉ có thể được sử dụng trong khối (mã giữa {và}) trong đó nó được khai báo

Phạm vi biến đổi

Mã bên dưới hiển thị tất cả các quy tắc này trong hành động

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 8

phạm vi Ví dụ 1

  • StaticVarable được khai báo bằng cách sử dụng từ khóa tĩnh
  • Nó có sẵn trong Phương thức phiên bản 1 và phương thức tĩnh được đặt tên là phương thức tĩnh

Phạm vi Ví dụ 2

  • Thành viên được báo cáo trực tiếp trong lớp và không sử dụng từ khóa tĩnh. Vì vậy, nó là một biến thể hiện
  • Nó có sẵn trong phương thức phiên bản 1 nhưng không thể truy cập được trong phương thức tĩnh có tên STATICMETHOD

Phạm vi Ví dụ 3

  • Phương thức1LocalVarable được khai báo trong phương thức1. Vì vậy, nó là một biến cục bộ
  • Nó có sẵn trong Phương thức phiên bản 1 nhưng có sẵn trong bất kỳ trường hợp hoặc phương thức tĩnh nào khác

Phạm vi Ví dụ 4

  • BlockVarable được khai báo trong một khối trong Phương thức1. Vì vậy, nó là một biến khối
  • Nó chỉ có sẵn trong khối nơi nó được xác định
  • Nó không thể truy cập được bất kỳ nơi nào bên ngoài khối, ngay cả trong cùng một phương thức

Khởi tạo biến

  • Khởi tạo xác định giá trị mặc định được gán cho một biến nếu nó không được khởi động

Các quy tắc quan trọng

  • Biến tĩnh có thể được sử dụng ở bất kỳ đâu trong lớp
  • Biến thành viên có thể được sử dụng trong bất kỳ phương pháp không tĩnh nào
  • Bộ biến đổi cục bộ chỉ có thể được sử dụng trong phương thức được khai báo
  • Biến khối chỉ có thể được sử dụng trong khối (mã giữa {và}) trong đó nó được khai báo
  • Phạm vi biến đổi

Mã bên dưới hiển thị tất cả các quy tắc này trong hành động

phạm vi Ví dụ 1

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 9

StaticVarable được khai báo bằng cách sử dụng từ khóa tĩnh

  • Nó có sẵn trong Phương thức phiên bản 1 và phương thức tĩnh được đặt tên là phương thức tĩnh
  • Phạm vi Ví dụ 2

Thành viên được báo cáo trực tiếp trong lớp và không sử dụng từ khóa tĩnh. Vì vậy, nó là một biến thể hiện

  • Nó có sẵn trong phương thức phiên bản 1 nhưng không thể truy cập được trong phương thức tĩnh có tên STATICMETHOD
  • Phạm vi Ví dụ 3
  • Phương thức1LocalVarable được khai báo trong phương thức1. Vì vậy, nó là một biến cục bộ
  • Nó có sẵn trong Phương thức phiên bản 1 nhưng có sẵn trong bất kỳ trường hợp hoặc phương thức tĩnh nào khác

Phạm vi Ví dụ 4

  • BlockVarable được khai báo trong một khối trong Phương thức1. Vì vậy, nó là một biến khối

  • Nó chỉ có sẵn trong khối nơi nó được xác định

  • Nó không thể truy cập được bất kỳ nơi nào bên ngoài khối, ngay cả trong cùng một phương thức

  • Khởi tạo biến

  • Khởi tạo xác định giá trị mặc định được gán cho một biến nếu nó không được khởi động

    • Các biến thành viên/tĩnh được khởi tạo bằng các giá trị mặc định
    • Các giá trị mặc định cho các loại số là 0, các loại điểm nổi là 0,0, boolean là sai, char là '\ u0000' và đối tượng tham chiếu biến là null
    • Các biến cục bộ không được khởi động theo mặc định bởi trình biên dịch
    • Sử dụng một biến cục bộ trước khi khởi động dẫn đến biên dịch lỗi
    • Gán giá trị null được khởi tạo hợp lệ cho các biến tham chiếu
    • Ví dụ khởi tạo biến
    • Hãy xem xét một ví dụ chương trình để hiểu tất cả các quy tắc liên quan đến khởi động thay đổi
  • Khởi tạo Ví dụ 1

    • Người chơi là một ví dụ của người chơi lớp. Nó chứa các biến thành viên tên và điểm số
    • Tất cả các biến thành viên được khởi động theo mặc định. Vì tên đề cập đến một chuỗi, một biến tham chiếu, nó được khởi tạo thành null. Point is a INT variable and do that was started to 0
    • Khởi tạo Ví dụ 2
  • bộ cục bộ là một biến cục bộ được xác định trong phương pháp chính

Một nỗ lực truy cập một biến cục bộ mà không cần khởi động sẽ dẫn đến lỗi biên dịch

Tương tự là trường hợp với Value1 là một chuỗi biến cục bộ

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }0

Nếu NULL được gán cho một biến tham chiếu, thì biến tham chiếu được coi là được gán

  • Lớp bao bọc

ví dụ 1

Một lớp bao bọc kết thúc (bao quanh) xung quanh một loại dữ liệu và mang lại cho nó một vẻ bên ngoài

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }1

Bao bọc. boolean, byte, nhân vật, gấp đôi, phao, số nguyên, dài, rút ​​ngắn

nguyên thủy. Boolean, byte, char, double, float, int, long, short

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }2

Ví dụ về việc tạo các lớp bao bọc được liệt kê dưới đây

Number integer = new integer(55);

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }3

Number integer Number2 = New Integer("55");

Số float3 = float mới (55. 0);

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }4

Số float4 = float mới (55. 0f);

Số float5 = float mới ("55. 0f"); // chuỗi

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }5

Ký tự c1 = new character ('c');

Boolean b = new Boolean (true);

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }6

Reason

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }7

null là một giá trị có thể

  • Use it in a collection file
  • Hai đối tượng trình bao bọc được tạo bằng cách sử dụng mới không phải là đối tượng
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }8
  • Hai đối tượng trình bao bọc được tạo bằng cách sử dụng quyền anh là cùng một đối tượng
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }9

Class string

  • Một lớp chuỗi có thể lưu trữ một chuỗi ký tự. Chuỗi không phải là nguyên thủy trong Java mà là một lớp theo đúng nghĩa của nó

String is any variable

  • Giá trị của một chuỗi đối tượng khi được tạo không thể sửa đổi. Bất kỳ sự thay đổi nào trên một chuỗi đối tượng được tạo ra một chuỗi đối tượng mới
int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//90

Lưu ý rằng giá trị của str3 không được sửa đổi trong ví dụ trên. Kết quả phải được gán cho một biến tham chiếu mới (hoặc cùng một biến có thể được sử dụng lại)

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//91

Chuỗi có chữ được lưu trữ trong bộ nhớ ở đâu?

Tất cả các chuỗi theo nghĩa đen được lưu trữ trong "Bể không đổi chuỗi". Nếu biên dịch tìm thấy một chuỗi theo nghĩa đen, nó sẽ kiểm tra xem nó có tồn tại trong nhóm không. Nếu nó tồn tại, nó được tái sử dụng. Câu lệnh sau khi tạo chuỗi đối tượng 1 (được tạo trên nhóm) và 1 biến tham chiếu

Tuy nhiên, nếu toán tử mới được sử dụng để tạo chuỗi đối tượng, đối tượng mới sẽ được tạo trên ngăn xếp. Phần sau của mã tạo 2 đối tượng

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//92

Chuỗi so với StringBuffer so với StringBuilder

  • Unknown variable. chuỗi
  • Toàn chủ đề. Chuỗi (bất biến), StringBuffer
  • Hiệu lực. StringBuilder (đặc biệt là khi một số sửa đổi được thực hiện. )
  • ví dụ 1

Chuỗi không đổi nhóm

  • Tất cả các chuỗi theo nghĩa đen được lưu trữ trong "Bể không đổi chuỗi". Nếu biên dịch tìm thấy một chuỗi theo nghĩa đen, nó sẽ kiểm tra xem nó có tồn tại trong nhóm không. Nếu nó tồn tại, nó được tái sử dụng

  • Câu lệnh sau khi tạo chuỗi đối tượng 1 (được tạo trên nhóm) và 1 biến tham chiếu

  • Tuy nhiên, nếu toán tử mới được sử dụng để tạo chuỗi đối tượng, đối tượng mới sẽ được tạo trên ngăn xếp. Phần sau của mã tạo 2 đối tượng

Chuỗi so với StringBuffer so với StringBuilder

Unknown variable. chuỗi

Toàn chủ đề. Chuỗi (bất biến), StringBuffer

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//94Hiệu lực. StringBuilder (đặc biệt là khi một số sửa đổi được thực hiện. )

ví dụ 1

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//95

Chuỗi không đổi nhóm

Tất cả các chuỗi theo nghĩa đen được lưu trữ trong "Bể không đổi chuỗi". Nếu biên dịch tìm thấy một chuỗi theo nghĩa đen, nó sẽ kiểm tra xem nó có tồn tại trong nhóm không. Nếu nó tồn tại, nó được tái sử dụng

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//96

Câu lệnh sau khi tạo chuỗi đối tượng 1 (được tạo trên nhóm) và 1 biến tham chiếu

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//92

  • Ví dụ string method
  • Lớp chuỗi xác định một số phương thức để có được thông tin về chuỗi nội dung
  • Nhận thông tin từ chuỗi
int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//97

Các phương pháp sau giúp lấy thông tin từ một chuỗi

  • Phương pháp thao tác chuỗi

Điều quan trọng nhất cần nhớ là chuỗi đối tượng không thể sửa đổi. Khi bất kỳ phương thức nào trong số này được gọi, chúng sẽ trả về một chuỗi mới với giá trị đã sửa đổi. Ban đầu string is not change

Chuỗi tử toán

Ba quy tắc nối dây chuỗi

Quy tắc1. Biểu thức được đánh giá từ trái sang phải. Ngoại trừ nếu có một dấu ngoặc đơn

Quy tắc2. số + số = số

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//98

Quy tắc3. Số + Chuỗi = Chuỗi

Các toán tử tăng và giảm

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//99

Hãy tìm hiểu về các thuật toán tăng và giảm trong Java

  • Những điều cơ bản về tăng và giảm toán tử

Ngoại trừ một sự khác biệt nhỏ ++ i, i ++ tương tự như i = i+1 và --i, i-- tương tự như i = i-1

++ Tôi được gọi là trước khi tăng và tôi ++ POST POST

Gia tăng toán tử

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';0

Tăng lệnh trước Trả về giá trị sau khi tăng. Đăng ký lệnh tăng giá trị trả về giá trị trước khi tăng

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';1

Các toán tử giảm

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';2

Các toán tử giảm tương tự như các toán tử tăng

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';3

Nhà khai thác quan hệ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';4

Các hệ thống quan hệ toán tử được sử dụng để so sánh các hạng toán. Họ luôn trả về đúng hoặc sai. Danh sách các toán tử quan hệ bao gồm =, == và. =

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';5

Các nhà khai thác quan hệ ví dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';6

Hãy xem xét một vài ví dụ về các nhà khai thác quan hệ. Giả sử một biến số INT có tên có giá trị 7

lớn hơn nhà điều hành

lớn hơn so với người vận hành

  • less than nhà điều hành

ít hơn bằng người vận hành

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';7

bằng người vận hành

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';8

Un Vận hành người dùng

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';9

Đơn vị = là toán tử được gán và == là so sánh. Câu lệnh dưới đây sử dụng =

  • == (bằng) toán tử
Animal dog = new Animal();0

Chúng ta hãy xem cách == bằng người vận hành vận hành với các nguyên thủy và biến tham chiếu

  • Các biến nguyên thủy

Bình đẳng cho nguyên thủy chỉ so sánh các giá trị

  • Câu lệnh dưới đây so sánh nếu A và B có cùng giá trị
Animal dog = new Animal();1

Reference variable

Đối chiếu với các biến tham chiếu, == so sánh nếu chúng đang đề cập đến cùng một đối tượng

Animal dog = new Animal();2

Các nhà khai thác bitwise

Animal dog = new Animal();3

Các nhà khai thác bitwise là. , &,^ và ~

  • Toán tử logic
    • Toán tử logic là &&,. ,. , &,. and ^
    • Thông mạch và toán tử - &&
    • Đúng khi cả hai hạng hạng là đúng
Animal dog = new Animal();4

Ngắn mạch hoặc toán tử -

  • Đúng khi ít nhất là một trong các hạng tính toán là đúng
  • chứng từ nhận. Các nhà khai thác logic làm việc với các giá trị boolean nhưng không phải là số

chứng từ nhận. Trong khi & and. rất hiếm khi chúng được sử dụng, điều quan trọng là phải hiểu từ góc độ chứng nhận

Animal dog = new Animal();5

Nhà điều hành độc quyền-or (^)

  • Kết quả chỉ đúng nếu một trong các hạng hạng là đúng
Animal dog = new Animal();6

Không phải nhà điều hành (. )

Kết quả là sự phủ định của biểu thức

Animal dog = new Animal();7

Mảng

  • LÀM. Tại sao chúng ta cần mảng?
Animal dog = new Animal();8

Array 2D

Cách tốt nhất để trực quan hóa một mảng 2D là một mảng

Animal dog = new Animal();9

Các mảng hoạt động khác

Animal dog1 = new Animal(); dog1 = new Animal();0

Mảng của các đối tượng

Animal dog1 = new Animal(); dog1 = new Animal();1

mẹo và câu đối chứng mảng nhận biết

Animal dog1 = new Animal(); dog1 = new Animal();2

If other condition

  • Thực thi có điều kiện mã
  • Mã bên trong nếu chỉ được thực hiện nếu điều kiện là đúng

// ví dụ cơ bản

Animal dog1 = new Animal(); dog1 = new Animal();3

If other question

Animal dog1 = new Animal(); dog1 = new Animal();4

// đầu ra là "l

Animal dog1 = new Animal(); dog1 = new Animal();5

Câu đối tiếp tục

Animal dog1 = new Animal(); dog1 = new Animal();6

bố cục chuyển đổi

  • Select between a tập hợp các tùy chọn
  • Từ Java 6, chuỗi có thể được sử dụng để chuyển đổi đối số
Animal dog1 = new Animal(); dog1 = new Animal();7

Lời giới thiệu quan trọng

  • Có một tuyên bố phá vỡ trong mọi trường hợp. Nếu không có tuyên bố phá vỡ, Switch vẫn tiếp tục thực hiện các trường hợp khác
  • Có một trường hợp có tên mặc định. If does not have the field HỢP ĐỒNG NÀO PHÙ HỢP VỚI TRƯỜNG HỢP ĐẶT ĐỊNH ĐÃ ĐƯỢC THỰC THI
Animal dog1 = new Animal(); dog1 = new Animal();8

Header of the rule on

Vì không có sự cố đột phá sau trường hợp 2 nên việc thực thi rơi vào trường hợp 3. Không có sự phá vỡ trong trường hợp 3. Vì vậy, thực thi rơi vào mặc định

Mã trong Switch được thi từ một trường phù hợp cho đến khi bị lỗi hoặc kết thúc câu lệnh Switch

Bố cục chuyển đổi Ví dụ 3, vài lần nghỉ

Animal dog1 = new Animal(); dog1 = new Animal();9

Đầu chương trình

Trường hợp 2 trận đấu. Vì trường hợp 2 không có mã nên thực thi rơi vào trường hợp 3 nên thực thi println. Tuyên bố phá vỡ thực thi ra khỏi công tắc

Chuyển đổi bố cục Ví dụ 4, hãy mặc định

  • Default is done thi if not have any trận đấu trong trường hợp
Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;0

Head code

Bố cục chuyển đổi Ví dụ 5 - Không cần thiết lập mặc định không phải là cuối cùng

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;1

đầu ra

Bố cục chuyển đổi Ví dụ 6

Công tắc chỉ có thể được sử dụng với char, byte, short, int, string or enum

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;2

Giá trị trường hợp phải là một hằng số thời gian biên dịch

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;3

Loop

Một vòng lặp được sử dụng để chạy cùng một mã nhiều lần

Trong khi lặp lại

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;4

Trong khi vòng lặp ví dụ 2

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;5

Làm trong khi vòng lặp

  • Sự khác biệt giữa một thời gian và một trong khi được mã hóa trong DO trong khi được thực hiện ít nhất một lần
  • Trong một vòng lặp khi kiểm tra các điều kiện xảy ra sau khi mã trong vòng lặp được thực hiện một lần

Làm trong khi vòng lặp ví dụ 1

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;6

Làm trong khi vòng lặp ví dụ 2

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;7

Cho loop

Đối chiếu với vòng lặp được sử dụng để lặp lại số lượng mã đã được định nghĩa

Cho loop Ví dụ 1

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;8

Cú pháp - Đối với câu lệnh Loop có 3 phần

  • Khởi tạo => int i = 0. Khởi tạo xảy ra lần đầu tiên Một vòng lặp cho phép được chạy
  • Điều kiện => i
  • Activity (tăng hoặc giảm thường xuyên) => i++. Hoạt động được gọi khi bắt đầu mỗi vòng lặp (ngoại trừ lần đầu tiên)

Đối chiếu với vòng lặp Ví dụ 2. Có thể có nhiều câu lệnh trong quá trình khởi động hoặc hoạt động được phân tách bằng dấu phẩy

Animal animal1 = new Animal(); Animal animal2 = new Animal(); animal1 = animal2;9

Upgrade for loop

Nâng cao vòng lặp có thể được sử dụng để vòng lặp xung quanh Mảng hoặc danh sách

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 00

Bất kỳ 3 phần nào trong vòng lặp cho vòng lặp đều có thể trống

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 01

Tuyên bố phá vỡ

Break a tuyên bố thoát khỏi một vòng lặp

ví dụ 1

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 02

Phá vỡ có thể được sử dụng trong một thời gian

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 03

Tuyên bố phá vỡ thực thi từ vòng lặp bên trong

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 04

Nhãn có thể được sử dụng để dán nhãn và công cụ tham khảo có thể cho vòng lặp trong một vòng lặp được lồng vào vòng lặp

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 05

Tiếp tục tuyên bố

  • Tiếp tục tuyên bố bỏ qua phần còn lại của các câu lệnh trong vòng lặp và bắt đầu lặp lại theo
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 06

Tiếp tục cũng có thể được sử dụng trong một khoảng thời gian

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 07

Tuyên bố tiếp tục thực hiện để lặp lại tiếp theo của vòng lặp bên trong

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 08

Ví dụ nhãn

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 09

liệt kê

  • Enum cho phép chỉ định danh sách các giá trị hợp lệ (hoặc giá trị được phép) cho một loại

Tuyên bố liệt kê

Xem xét ví dụ dưới đây. Nó tuyên bố một mùa enum với 4 giá trị có thể

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 20

Enum Ví dụ 1

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 21

Quy tắc liệt kê

  • Enums có thể được tuyên bố trong một lớp riêng biệt (spinentoutsideclass) hoặc là thành viên của một lớp (mùa). Không thể khai báo Enums trong một phương thức

Chuyển đổi Enum. Chức năng value value (chuỗi) được sử dụng để chuyển chuỗi thành Enum

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 22

Hàm name() được sử dụng để tìm chuỗi giá trị của enum

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 23

Java gán các chế độ mặc định cho một enum theo thứ tự. Tuy nhiên, không nên sử dụng các lệnh để thực thi logic

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 24

Vòng lặp xung quanh danh sách các giá trị được phép cho một enum có thể thu được bằng cách gọi các giá trị hàm ()

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 25

So sánh hai enum

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 26

Enum Ví dụ 2

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 27

Nhiều điều cơ bản hơn

  • Enums may could contain biến, phương thức, hàm tạo. Trong ví dụ 2, chúng tôi đã tạo một biến cục bộ có tên mã với một getter
  • Chúng tôi cũng tạo một hàm tạo với mã làm tham số
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 28

Mỗi loại mùa được tạo bằng cách gán giá trị cho mã

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 29

Các hàm tạo enum chỉ có thể là (default) hoặc (riêng tư). Các hàm tạo enum không thể được gọi trực tiếp

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 00

Ví dụ dưới đây cho thấy cách chúng ta có thể sử dụng một công tắc xung quanh một enum

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 01

Enum Ví dụ 3

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 02

Lớp không đổi enum - Trong ví dụ trên, hãy xem cách khai báo loại mùa đông. nó cung cấp một sự phát triển ghi đè cho phương pháp GetExpectedMoxtemate đã được khai báo trong enum. Tính năng này trong một enum được gọi là một lớp không thay đổi

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 03

Di sản

Kế thừa cho phép mở rộng chức năng của một lớp và cũng thúc đẩy việc tái sử dụng mã hiện có

Mỗi lớp mở rộng lớp đối tượng

  • Mỗi lớp trong Java là một lớp phụ của lớp đối tượng
  • Khi chúng ta tạo một lớp trong Java, chúng ta thừa hưởng tất cả các phương thức và thuộc tính của lớp đối tượng
graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 04

Tạo một lớp diễn viên

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 05

Chúng tôi có thể mở rộng lớp này bằng cách sử dụng từ khóa

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';82. ________ 483 ________ 106

Bởi vì anh hùng mở rộng diễn viên, các phương pháp được xác định trong diễn viên cũng có sẵn thông qua một trường hợp của lớp anh hùng

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 07

Chúng ta hãy xem một lớp học diễn viên mở rộng khác - diễn viên hài

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 08

Các phương pháp trong lớp động vật có thể được thực hiện từ một trường hợp của lớp diễn viên hài

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 09

Các lớp tham chiếu tham chiếu có thể giữ một đối tượng của các lớp phụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 10

Đối tượng là lớp của tất cả các lớp. Vì vậy, một đối tượng tham chiếu biến có thể duy trì khả năng hiển thị của bất kỳ lớp nào

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 11

Kế thừa. IS-A Mối quan hệ

Chúng ta chỉ nên sử dụng kế thừa khi có mối quan hệ IS-A giữa các lớp. Ví dụ, diễn viên hài là diễn viên, anh hùng là diễn viên đều đúng. Vì vậy, kế thừa là mối quan hệ chính xác giữa các lớp

  • Diễn viên hài được gọi là một lớp phụ. Diễn viên là siêu lớp

Nhiều kết quả kế thừa trong một số phức tạp. Java không hỗ trợ nhiều kế thừa

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 12

We have to create a kế thừa chuỗi

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 13

Di truyền và đa hình

Đa hình được định nghĩa là "cùng một mã" có "hành vi khác nhau"

Thí dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 14

chấp nhận hành động

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 15

Câu đố và mẹo - Toán tử InstanceOf theo chiều sâu

Nhà điều hành InstanceOf kiểm tra xem một đối tượng thuộc loại cụ thể

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 16

Lớp, đối tượng, trạng thái và hành vi

  • Trong hướng dẫn này, hãy xem xét một vài khái niệm định hướng đối tượng quan trọng

Lớp, đối tượng, trạng thái và ví dụ về hành vi

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 17

Class

Một lớp là một mẫu

  • Trong ví dụ trên, lớp cricketscorer là mẫu để tạo nhiều đối tượng

Một lớp xác định trạng thái và hành động mà một đối tượng có thể thực hiện

Sự kiện

Một ví dụ của một lớp

  • Trong ví dụ trên, chúng tôi tạo một đối tượng bằng cricketscorer () mới
  • Tham chiếu của các đối tượng được tạo ra đã được lưu trữ trong biến ghi bàn
  • Chúng ta có thể tạo nhiều đối tượng của cùng một lớp

tiểu bang

Trạng thái đại diện cho các giá trị được gán cho các biến thể hiện của một đối tượng tại một thời điểm cụ thể

Xem xét các đoạn mã sau từ ví dụ trên

  • Giá trị trong điểm ban đầu biến là 0
  • It change to 6 and after that 10

Trạng thái của một đối tượng có thể thay đổi theo thời gian

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 18

Hành vi

Hành vi của một đối tượng đại diện cho các phương pháp khác nhau được hỗ trợ bởi nó

  • Ví dụ về hành động được hỗ trợ là sáu (), bốn () và getScore ()

Phương pháp ToString

Phương thức toString() trong java được sử dụng trong nội dung của một đối tượng

Thí dụ

chấp nhận hành động

Câu đố và mẹo - Toán tử InstanceOf theo chiều sâu

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 20

Nhà điều hành InstanceOf kiểm tra xem một đối tượng thuộc loại cụ thể

Lớp, đối tượng, trạng thái và hành vi

  • Trong hướng dẫn này, hãy xem xét một vài khái niệm định hướng đối tượng quan trọng
  • Lớp, đối tượng, trạng thái và ví dụ về hành vi
  • Class

Thí dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 21

chấp nhận hành động

  • Câu đố và mẹo - Toán tử InstanceOf theo chiều sâu
  • Nhà điều hành InstanceOf kiểm tra xem một đối tượng thuộc loại cụ thể
  • Lớp, đối tượng, trạng thái và hành vi

Thí dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 22

chấp nhận hành động

  • Câu đố và mẹo - Toán tử InstanceOf theo chiều sâu
  • Nhà điều hành InstanceOf kiểm tra xem một đối tượng thuộc loại cụ thể
  • Lớp, đối tượng, trạng thái và hành vi
  • Trong hướng dẫn này, hãy xem xét một vài khái niệm định hướng đối tượng quan trọng
  • Đối chiếu với bất kỳ giá trị tham chiếu nào không null x, x. equals (null) sẽ trả về sai

Bây giờ chúng ta hãy cung cấp một sự phát triển khai thác các tính năng bằng nhau, đáp ứng các thuộc tính này

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 23

Phương pháp Hashcode

  • Mã băm được sử dụng trong băm để quyết định bất kỳ nhóm (hoặc xô) nào mà một đối tượng nên được đặt vào
    • Một nhóm đối tượng có thể chia sẻ cùng một mã mũ
    • Thực hiện xác định mã băm xác định hiệu quả của trùm
    • Một hàm băm tốt phân phối đồng đều các đối tượng phân phối thành các nhóm (hoặc xô) khác nhau

Thuộc tính HashCode phương thức

  • Nếu obj1. equals (obj2) is true, then obj1. mã băm () phải bằng obj2. Mã Băm ()
  • đối tượng. hashcode () sẽ trả về cùng một giá trị khi chạy nhiều lần, nếu giá trị của obj được sử dụng trong bằng () không thay đổi
  • Nếu obj1. equals (obj2) là sai, không bắt buộc phải obj1. hashcode() not by obj2. Mã Băm (). Hai đối tượng không đồng đều có thể có cùng một mã mũ

Thí dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 24

Lớp học đối tượng

Không thể khởi tạo một lớp trưng bày

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 25

Lời khuyến khích

  • Các phương pháp hiển thị đối tượng không thể được ghép nối với các truy cập thay đổi cuối cùng hoặc riêng tư đã sửa đổi
  • Một biến không thể là đối tượng

Người xây dựng

  • Constructor được gọi là bất kỳ khi nào chúng ta tạo ra một thể hiện (đối tượng) của một lớp. Chúng ta không thể tạo một đối tượng mà không có chức năng tạo. Nếu chúng tôi không cung cấp một hàm tạo, thì trình biên dịch cung cấp một hàm tạo không đối xứng mặc định

Xây dựng trình ví dụ 1. Default build

Trong ví dụ dưới đây, không có công trình xây dựng nào được xác định trong lớp động vật. Trình biên dịch cung cấp cho chúng tôi một hàm tạo mặc định, giúp chúng tôi tạo ra một thể hiện của lớp động vật

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 26

Constructor Ví dụ 2. Tạo một chức năng tạo

Nếu chúng tôi cung cấp một hàm tạo trong lớp, trình biên dịch sẽ không cung cấp hàm tạo mặc định. Trong ví dụ dưới đây, chúng tôi đã cung cấp một hàm tạo "động vật công cộng (tên chuỗi)". Vì vậy, trình biên dịch sẽ không cung cấp hàm tạo mặc định

Hàm tạo có cùng tên với lớp và không có loại trả về. Nó có thể chấp nhận bất kỳ số lượng tham số nào

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 27

Xây dựng trình ví dụ 3. Không cung cấp hàm tạo đối số

Nếu chúng ta muốn cho phép tạo một đối tượng không có đối số cấu trúc, chúng ta cũng có thể cung cấp một hàm tạo không đối số

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 28

Xây dựng trình ví dụ 4. Gọi một hàm tạo lớp siêu

Một hàm tạo có thể gọi một hàm tạo khác, hoặc một hàm tạo siêu lớp, nhưng chỉ là câu lệnh đầu tiên trong hàm tạo. Một hàm tạo khác trong cùng một lớp có thể được gọi từ một hàm tạo, sử dụng lệnh gọi phương thức ({tham số}) này. Để gọi một hàm tạo siêu lớp, Super ({tham số}) có thể được sử dụng

Cả hai hàm tạo ví dụ dưới đây đều có thể thay thế hàm tạo "động vật công cộng ()" không đối số trong ví dụ 3

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 29

Super () hoặc cái này () nên là câu lệnh đầu tiên trong một hàm tạo

Các ví dụ dưới đây sẽ đưa ra một biên dịch lỗi nếu các cuộc gọi siêu tốc hoặc cuộc gọi này không được đưa ra

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 30

Chất xây dựng Ví dụ 5

Không nên sử dụng các biến/công thức thành viên trong các cuộc gọi của hàm tạo (Super hoặc this). Các biến hoặc phương pháp tĩnh có thể được sử dụng

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 31

Chất xây dựng Ví dụ 6. Constructor could not be call direct

Một hàm tạo không thể được gọi rõ ràng từ bất kỳ phương thức nào ngoại trừ một hàm tạo khác

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 32

Xây dựng trình ví dụ 7. Trình xây dựng siêu lớp được gọi tự động

Nếu hàm tạo lớp phụ không được gọi rõ ràng từ hàm tạo lớp phụ, thì hàm tạo lớp phụ (không có đối số) sẽ tự động được gọi (như dòng đầu tiên) từ hàm tạo lớp phụ

Xem xét ví dụ dưới đây

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 33

Nó gần như là phương thức Super() được gọi là dòng đầu tiên của mọi hàm tạo. Ví dụ dưới đây để xem mã trên hoạt động như thế nào

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 34

Chất xây dựng Ví dụ 8

Bởi vì một hàm tạo lớp con gọi một hàm tạo siêu lớp không có đối số, điều này có thể gây ra một vài lỗi của trình biên dịch

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 35

con chó công khai () thực hiện một cuộc gọi siêu tốc () tạm thời, tức là một người gọi động vật () (không có đối số). Nhưng không có nhà xây dựng như vậy được định nghĩa trong lớp động vật

Chất xây dựng Ví dụ 9

Ví dụ tương tự dưới đây ngoại trừ con chó không có đối số xây dựng chương trình không được cung cấp bởi lập trình viên. Tuy nhiên, trình biên dịch sẽ cung cấp hàm không tạo đối số, sẽ gọi phương thức Super(). Điều này một lần nữa sẽ dẫn đến một lỗi biên dịch

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 36

Hai cách để giải quyết lỗi trên. 1. Tạo một hàm tạo không đối số trong lớp động vật. 2. Please call a Super Super ("Tên chó mặc định") trong hàm tạo con chó ()

Tạo một Siêu lớp không có đối số trình xây dựng

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 37

Thực hiện một cuộc gọi siêu dễ hiểu

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 38

Người xây dựng không được hưởng lợi

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 39

Con chó mới ("Terry") không được phép mặc dù có một người xây dựng trong động vật siêu lớp với động vật công cộng đặc trưng (tên chuỗi)

Giải pháp là tạo ra một hàm rõ ràng trong lớp phụ gọi hàm tạo siêu lớp. Thêm bên dưới nhà xây dựng vào lớp chó

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 40

Khớp nối

  • Khớp nối là thước đo mức độ một lớp phụ thuộc vào các lớp khác. Các thuộc tính phụ thuộc tối thiểu giữa các lớp. Vì vậy, chúng ta phải luôn luôn nhắm đến các khớp nối thấp hơn giữa các lớp

Khớp nối vấn đề ví dụ

Xem xét ví dụ dưới đây

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 41

Phương pháp OrderTotalPrice theo thứ tự lớp được kết hợp rất nhiều với các lớp mua sắm và mua sắm. Nó sử dụng các thuộc tính khác nhau (mục, giá, số lượng) từ các lớp này. Nếu bất kỳ thuộc tính nào trong số này thay đổi, OrderTotalPrice cũng sẽ thay đổi. Điều này không tốt để bảo trì

Giải pháp ví dụ Matching

Vui lòng xem xét sự phát triển tốt hơn so với khớp nối ít hơn giữa các lớp dưới đây. trong quá trình triển khai này, các thay đổi trong ShoppingCartEntry hoặc Cartcontents có thể không ảnh hưởng đến lớp đơn đặt hàng

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 42

Unmounting

  • Sự gắn kết là thước đo về cách liên quan đến nhiệm vụ của một lớp. Một lớp phải gắn kết cao, tức là nhiệm vụ (phương pháp) của nó phải liên quan cao với nhau

Các vấn đề ví dụ gắn kết

Lớp ví dụ bên dưới đang tải xuống từ Internet, phân tích dữ liệu và lưu trữ dữ liệu vào cơ sở dữ liệu. Các nhiệm vụ của lớp này không thực sự liên quan. Đây không phải là lớp học gắn kết

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 43

Giải thích ví dụ về kết nối

Đây là một cách tốt hơn để tiếp cận vấn đề. Các lớp khác nhau có nhiệm vụ riêng của họ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 44

Đóng gói

  • Đóng gói đang che giấu việc thực hiện một lớp phía sau một giao diện đã được xác định. Đóng gói giúp chúng tôi thay đổi việc thực hiện một lớp mà không phá vỡ mã khác

Phương pháp đóng gói 1

Trong phương pháp này, chúng tôi tạo ra một điểm biến công khai. Phương pháp chính trực tiếp truy cập vào điểm biến, cập nhật nó

Lớp học ví dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 45

Vui lòng sử dụng lớp cricketscorer

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 46

Phương pháp đóng gói 2

Trong phương pháp này, chúng tôi tạo điểm số là riêng tư và giá trị truy cập thông qua các phương thức GET và đặt. Tuy nhiên, logic của công việc thêm 4 vào điểm được thực hiện trong phương pháp chính

Lớp học ví dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 47

Vui lòng sử dụng lớp cricketscorer

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 48

Phương pháp đóng gói 2

Trong phương pháp này, chúng tôi tạo điểm số là riêng tư và giá trị truy cập thông qua các phương thức GET và đặt. Tuy nhiên, logic của công việc thêm 4 vào điểm được thực hiện trong phương pháp chính

Lớp học ví dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 49

Vui lòng sử dụng lớp cricketscorer

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 50

Phương pháp đóng gói 2

Trong phương pháp này, chúng tôi tạo điểm số là riêng tư và giá trị truy cập thông qua các phương thức GET và đặt. Tuy nhiên, logic của công việc thêm 4 vào điểm được thực hiện trong phương pháp chính

Phương pháp đóng gói 3

  • Theo cách tiếp cận này - để đóng gói tốt hơn, logic thực hiện bốn thao tác cũng được chuyển sang lớp cricketscorer

Ví dụ đóng gói

Về cách tiếp cận gói 3> Cách tiếp cận 2> Cách tiếp cận 1. Trong cách tiếp cận 3, người dùng của lớp ghi bàn thậm chí không biết rằng có một biến có tên là SCORE. Việc thực hiện ghi bàn có thể thay đổi mà không thay đổi các lớp khác bằng cách sử dụng bàn

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 51

giao diện

Giao diện xác định hợp đồng cho nhiệm vụ (công thức) của một lớp. Hãy xem xét một vài ví dụ về giao diện

Specify an interface

Một giao diện được khai báo bằng cách sử dụng giao diện từ khóa. Nhìn vào ví dụ dưới đây. Flyable is a interface

Một giao diện có thể chứa các phương thức hiển thị - không đúng nữa

Trong ví dụ trên, phương thức bay là đối tượng vì nó chỉ được khai báo (không có định nghĩa nào được cung cấp)

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 52

Thực hiện một giao diện

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 53

Chúng ta có thể xác định một lớp thực hiện giao diện bằng cách sử dụng từ khóa thực thi. Chúng ta hãy xem một vài ví dụ

ví dụ 1

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 54

Lớp máy bay thực hiện có thể bay và thực hiện phương thức mặt đối tượng Fly ()

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 55

Ví dụ 2

Sử dụng giao diện và khai thác

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 56

Các lớp giao diện có thể được khởi tạo trực tiếp và được lưu trữ trong các lớp tham chiếu tham chiếu

Một biến tham chiếu giao diện có thể giữ các đối tượng của bất kỳ giao diện nào được phát triển

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 57

Các biến trong giao diện

Các biến trong một giao diện luôn được khai báo, tĩnh, cuối cùng. Các biến trong một giao diện không thể được khai báo riêng tư

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 58

Các phương thức trong giao diện

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 59

Phương thức giao diện theo mặc định khai báo và hiển thị đối tượng. Một phương thức định nghĩa cụ thể (phương thức được định nghĩa đầy đủ) có thể được tạo trong một giao diện. Xem xét ví dụ dưới đây

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 60

Mở rộng một giao diện

Một giao diện có thể mở rộng giao diện khác. Xem xét ví dụ dưới đây

Lớp khai thác SubinterFace1 nên phát triển khai cả hai phương thức - Method3 và Method1 (từ exampleInterface1) Một giao diện không thể mở rộng lớp

  • Một lớp có thể thực hiện nhiều giao diện. Nó nên thực hiện tất cả các phương thức được khai báo trong tất cả các giao diện đang được triển khai

Method too loading ví dụ 1

Phương thức DOIT bị quá tải trong ví dụ dưới đây

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 61

Method too loading ví dụ 2

Quá trình tải xuống cũng có thể được thực hiện từ một lớp phụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 62

Too loading - other rules

Một phương thức quá tải nên có các đối số khác với phương thức ban đầu. Nó cũng có thể có một loại trả lại cho nhau. Một phương thức không thể bị quá tải chỉ bằng cách chỉ thay đổi loại trả về. Các phương pháp quá tải luôn được đối xử vì chúng hoàn toàn là các phương pháp khác nhau. Quá trình tải xuống không đặt bất kỳ chế độ giới hạn nào đối với các truy cập đã sửa đổi hoặc ngoại lệ được ném từ phương thức. Phương thức gọi lệnh quá tải dựa trên loại biến tham chiếu. Nó không dựa trên các đối tượng mà nó đề cập đến

  • Ví dụ về Java
    • Người xây dựng
    • Hashmap công khai (int intabilities, float loadfactor)
    • hashmap công khai () {
    • Hashmap công khai (int intabilities)
    • Phương pháp
    • Boolean Addall công khai (Bộ sưu tập C)
    • Boolean Addall công khai (Int Index, Bộ sưu tập C)
  • Quy tắc

Override method

  • Tạo một phương thức lớp phụ có cùng chữ ký với phương thức trong lớp siêu được gọi là phương thức ghi đè

Phương thức override ví dụ 1

Xác định một lớp vật chất bằng một tiếng hét

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 63

Hãy tạo ra một lớp con của động vật, CAT - ghi đè lên phương pháp hét lên hiện có trong động vật

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 64

Phương pháp vỏ cây trong lớp CAT đang ghi đè phương pháp vỏ cây trong lớp động vật

  • Ví dụ về Java
    • Người xây dựng
  • Hashmap công khai (int intabilities, float loadfactor)

hashmap công khai () {

Hashmap công khai (int intabilities)

Phương pháp

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 65

Boolean Addall công khai (Bộ sưu tập C)

Boolean Addall công khai (Int Index, Bộ sưu tập C)

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 66

Quy tắc

Override method

Tạo một phương thức lớp phụ có cùng chữ ký với phương thức trong lớp siêu được gọi là phương thức ghi đè

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 67

Phương thức override ví dụ 1

Xác định một lớp vật chất bằng một tiếng hét

Hãy tạo ra một lớp con của động vật, CAT - ghi đè lên phương pháp hét lên hiện có trong động vật

Phương pháp vỏ cây trong lớp CAT đang ghi đè phương pháp vỏ cây trong lớp động vật

Hashmap công khai kích thước int ()

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 68

Thí dụ

Ghi đè phương pháp không thể có khả năng hiển thị ít hơn

Phương thức ghi đè không thể có khả năng hiển thị ít hơn so với phương thức siêu lớp. Xem xét hai ví dụ này

ví dụ 1

  • publicMethod in layer con only can be tuyên bố là công khai. Từ khóa được bảo vệ, riêng tư hoặc (mặc định) thay vì công khai sẽ dẫn đến biên dịch lỗi

Ví dụ 2

DefaultMethod trong Super Class được khai báo với quyền truy cập mặc định. Bất kỳ phương thức nào bị ghi đè có thể có quyền truy cập mặc định hoặc lớn hơn. Vì vậy, mặc định, được bảo vệ và công khai là tốt. Override method could not be private

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 69

Ghi đè phương pháp không thể ném các ngoại lệ mới được kiểm tra

Xem xét ví dụ dưới đây

publicMethod() trong lớp ném filenotfoundException. Vì vậy, lớp con publicMethod() có thể ném filenotfoundException hoặc bất kỳ lớp phụ của filenotfoundException. Nó cũng không thể ném một ngoại lệ (như trong ví dụ). Tuy nhiên, nó không thể ném bất kỳ ngoại lệ mới nào. Ví dụ. ÒPublic void publicMethod() throw IOExceptionó sẽ gây ra lỗi biên dịch

  • Các quy tắc ghi khác

Một lớp phụ chỉ có thể ghi đè các phương pháp hiển thị cho nó. Các phương thức được đánh dấu là tĩnh hoặc cuối cùng không thể bị ghi đè. Bạn có thể gọi phương thức siêu lớp từ phương thức ghi đè bằng từ khóa Super

Ví dụ về ghi đè và đa hình

Ghi đè phương thức ghi dựa trên các đối tượng được đề cập. Nó không dựa trên loại biến tham chiếu. Điều này được gọi là đa hình. Xem xét ví dụ dưới đây

Động vật [0] chứa tham chiếu đến chó đối tượng. Khi động vật [0]. Bark () phương thức được gọi là phương pháp trong lớp chó được gọi là mặc dù loại biến tham chiếu là động vật. Động vật [1] chứa tham chiếu đến vật thể động. Khi động vật [1]. sủa () phương pháp được gọi là phương pháp trong lớp động vật được gọi

Covariant return

Một lớp phụ được coi là cùng loại với lớp siêu của nó. Vì vậy, trong các giao diện hoặc lớp vật chất, việc cung cấp các triển khai bằng cách sử dụng các loại lớp phụ là loại trả về. (Cốm. trong28 phút. cùng loại)

Sửa đổi biểu đồ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 70

Chúng ta hãy tìm hiểu về một vài lần thay đổi lớp Java

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 71

Bản cập nhật đã sửa đổi

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 72

Quá trình sửa đổi truy cập cho một lớp có thể là công khai hoặc (mặc định), nó không thể được bảo vệ hoặc được bảo vệ

  • Các bản sửa đổi không truy cập được

StrictFP, Final, Song đã sửa đổi bản tóm tắt có giá trị trên một lớp

Các thay đổi truy cập lớp đã sửa đổi

Hãy tìm hiểu về một vài thay đổi truy cập lớp Java đã được sửa đổi

Công cụ sửa đổi lớp công khai

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 73

Có thể truy cập thông qua kế thừa không?

Chúng ta có thể truy cập các biến và phương thức siêu lớp từ một lớp phụ không?

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 74

Những điều quan trọng cần nhớ

Một lớp phụ cố gắng truy cập thông qua các biến tham chiếu/có thể hiện, sẽ có quyền truy cập giống như một lớp bình thường (lớp không phụ). Cannot áp dụng các biến truy cập vào các biến cục bộ

Truy cập ví dụ về sửa đổi

Vui lòng xem xét lớp sau với các biến và phương thức được khai báo với tất cả 4 công cụ đã sửa đổi truy cập

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 75

Phương pháp sửa đổi truy cập

Hãy thảo luận về các sửa đổi truy cập để tăng quyền truy cập

riêng

một. Các biến và phương thức riêng chỉ có thể truy cập được trong lớp chúng được khai báo. b. Các biến và phương thức riêng từ các lớp không có sẵn trong lớp con

default or package

một. Các biến và phương thức mặc định có thể được truy cập trong cùng một gói lớp. b. Các biến và phương thức mặc định từ các lớp siêu cấp chỉ có sẵn cho các lớp con trong cùng một gói

được bảo vệ

một. Các biến và phương thức được bảo vệ có thể được truy cập gói trong cùng một lớp. b. Các biến và phương thức được bảo vệ từ các siêu lớp có sẵn cho lớp con trong bất kỳ gói nào

công cộng

một. Các biến và phương thức khai báo có thể được truy cập từ mọi lớp Java khác nhau. b. Các biến và phương thức khai báo từ các lớp đều có sẵn trực tiếp trong lớp con

Editing access ví dụ. Lớp trong cùng một gói

Nhìn vào mã bên dưới để hiểu những gì có thể truy cập được và những gì không thể

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 76

Editing access ví dụ. Class in other packages

Nhìn vào mã bên dưới để hiểu những gì có thể truy cập được và những gì không thể

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 77

Editing access ví dụ. Class in other packages

Nhìn vào mã bên dưới để hiểu những gì có thể truy cập được và những gì không thể

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 78

Editing access ví dụ. Class in other packages

Nhìn vào mã bên dưới để hiểu những gì có thể truy cập được và những gì không thể

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 79

Editing access ví dụ. Class in other packages

  • Editing access ví dụ. Lớp phụ trong cùng một gói

Editing access ví dụ. Lớp phụ trong các gói khác nhau

Công cụ sửa đổi cuối cùng

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 80

Hãy thảo luận về công cụ sửa đổi cuối cùng trong Java

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 81

Last class could not be expand

Vui lòng xem xét lớp dưới đây được tuyên bố là cuối cùng

Dưới đây, các lớp sẽ không biên dịch nếu chưa được khai thác. Last class could not be expand

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 82

Ví dụ về lớp cuối cùng trong Java là lớp chuỗi. Cuối cùng được sử dụng rất hiếm khi nó bị chặn sử dụng lại các lớp học

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 83

Last method could not be override

Vui lòng xem xét lớp FinalMemberModifierSexample với phương thức FinalMethod được tuyên bố là cuối cùng

Bất kỳ lớp con nào mở rộng trên lớp không thể ghi đè FinalMethod ()

The last value value can't change

Sau khi khởi động, giá trị của biến cuối cùng không thể thay đổi

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 85

đồ thị TD A[Mã Java] -->. biên soạn. B(Mã byte) B --> C{Run} C -->. mã byte. D[Windows JVM] D -> K[Hướng dẫn Windows] C ->. mã byte. E[Unix JVM] E -> L[Hướng dẫn Unix] C ->. mã byte. F[Linux JVM] F --> M[Hướng dẫn Linux] C -->. mã byte. G[Bất kỳ JVM nền tảng nào khác] G -> N[Hướng dẫn Linux] 84

  • The end of the value value can't be used

Xem xét ví dụ dưới đây

Các công cụ sửa đổi không truy cập khác

bay hơi

Một lớp học không thể là cả vật thể và cuối cùng

tự nhiên

nghiêm ngặtFP

Công cụ sửa đổi này có thể được sử dụng trên một lớp và một phương thức. Điều này (StrictFP) không thể được sử dụng trên một biến. Tiêu chuẩn IEEE cho các điểm nổi sẽ được theo dõi trong phương thức hoặc lớp nơi chỉ định công cụ sửa đổi StricTFP

  • Disrile only can be used for the current variable. Một biến dễ bay hơi là một biến có giá trị luôn được ghi và đọc từ "bộ nhớ chính". Mỗi chủ đề có bộ đệm riêng trong Java. Biến dễ bay hơi sẽ không được lưu trữ trên bộ đệm luồng

Chỉ có thể áp dụng cho các phương pháp. Các phương thức này được khai thác bằng ngôn ngữ bản địa (như C)

Các biến và phương pháp tĩnh

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 86

Các biến tĩnh và phương pháp là các biến và phương thức cấp lớp. Chỉ có một bản sao của biến tĩnh cho toàn bộ lớp. Mỗi phiên bản của lớp (đối tượng) sẽ không có bản sao duy nhất của biến tĩnh. Hãy bắt đầu với một ví dụ trong thế giới thực về một lớp có biến và phương pháp tĩnh

Biến/phương pháp tĩnh, ví dụ

Dem variable in layer cricketer is tĩnh. Phương pháp để có được giá trị getCount() cũng là một phương thức tĩnh

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 87

4 trường hợp của vận động viên cricket lớp được tạo. Số lượng biến được tăng lên với mọi trường hợp được tạo trong hàm tạo

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 88

Các biến tĩnh và phương pháp Ví ​​dụ 2

Lớp ví dụ dưới đây giải thích tất cả các quy tắc liên quan đến các biến tĩnh và phương thức tĩnh

Trong một phương thức tĩnh, các biến thể hiện không thể truy cập được. Từ khóa Điều này cũng không thể truy cập được. Tuy nhiên, các biến tĩnh có thể truy cập được

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 90

Trong các phương thức ví dụ, cả hai biến tĩnh và đều có thể truy cập được

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 91graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 89

Phương pháp tĩnh không thể bị ghi đè

Xem xét ví dụ dưới đây

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 92

Khi mã bên dưới được chạy, phương pháp tĩnh trong động vật được thực thi. Nhu cầu phương pháp tĩnh dựa trên các loại tham chiếu tham chiếu. Nó không phụ thuộc vào loại đối tượng được đề cập

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 93

Các biến cục bộ không thể được khai báo là tĩnh

Ví dụ dưới đây

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 94

Nội dung lớp học

  • Hãy thảo luận về những gì một lớp Java có thể chứa và những gì nó không thể

#Section Quy tắc tệp nguồn Java Một tệp nguồn Java có thể chứa một. 0 hoặc 1 lớp công khai B. 0 hoặc 1 hoặc nhiều lớp không thành công

Set row should be

  1. Tuyên bố gói
  2. Import
  3. Tuyên bố lớp học

Nhận xét có thể là bất cứ nơi nào trong tập tin. Nếu có một lớp công khai, tên tệp nên (tên của lớp công khai) + ". Java". Nếu tên của lớp công khai là người ghi bàn, thì tên của tệp phải là người ghi bàn. java. Nếu không có lớp công khai, không có giới hạn chế độ về tên tệp

Lớp học ví dụ

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 95

Layers together

  • Các lớp lồng nhau là các lớp được khai báo bên trong các lớp khác nhau

Ví dụ các lớp lồng nhau

Xem xét ví dụ sau

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 96

Lớp bên trong

Nói chung thuật ngữ lớp bên trong được sử dụng để chỉ một lớp không tĩnh được khai báo trực tiếp trong một lớp khác. Vui lòng xem xét ví dụ về lớp có tên bên trong

Lớp bên trong tĩnh

Một lớp được tuyên bố trực tiếp bên trong một lớp khác và được tuyên bố là tĩnh. Trong ví dụ trên, tên lớp StaticNestedLass là một lớp bên trong tĩnh

Phương pháp lớp bên trong

Một lớp được khai báo trực tiếp bên trong một phương thức. Trong ví dụ trên, tên lớp Phương thứcLocalinnerClass là một lớp bên trong phương thức

Lớp bên trong

  • Nói chung thuật ngữ lớp bên trong được sử dụng để chỉ một lớp không tĩnh được khai báo trực tiếp trong một lớp khác. Vui lòng xem xét ví dụ về lớp có tên bên trong

Lớp bên trong tĩnh

Một lớp được tuyên bố trực tiếp bên trong một lớp khác và được tuyên bố là tĩnh. Trong ví dụ trên, tên lớp StaticNestedLass là một lớp bên trong tĩnh

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 97

Phương pháp lớp bên trong

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 98

Một lớp được khai báo trực tiếp bên trong một phương thức. Trong ví dụ trên, tên lớp Phương thứcLocalinnerClass là một lớp bên trong phương thức

graph TD A[Java Code] -->|Compiled| B(Bytecode) B --> C{Run} C -->|bytecode| D[Windows JVM] D --> K[Windows Instructions] C -->|bytecode| E[Unix JVM] E --> L[Unix Instructions] C -->|bytecode| F[Linux JVM] F --> M[Linux Instructions] C -->|bytecode| G[Any other platform JVM] G --> N[Linux Instructions] 99

Lớp bên trong là một khái niệm Java rất quan trọng. Hãy tìm hiểu về nó trong hướng dẫn này

Ví dụ về lớp bên trong

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }00

Xem xét ví dụ sau

Các lớp bên trong không thể khởi tạo trực tiếp

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }01

Để tạo một lớp bên trong, bạn cần thể hiện một lớp bên ngoài

  • Tạo một lớp có thể hiển thị bên trong lớp bên ngoài

Vui lòng xem xét phương thức tạoInnerClass từ ví dụ trên. Phương thức này cho thấy cách tạo một lớp thể hiện bên trong

Xem xét ví dụ dưới đây

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }02

Các biến thể hiện của lớp bên ngoài có sẵn trong lớp bên trong

Hãy xem xét phương thức PrivateVariabledofouterClassareAvailable từ bên trong được tuyên bố ở trên

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }03

Lớp bên trong tĩnh

Chúng ta hãy cùng tìm hiểu về lớp học nội tâm trong hướng dẫn Java này

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }04

Ví dụ các lớp lồng nhau trong tĩnh

Tạo các lớp lồng nhau

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }05

Phương pháp lớp bên trong

  • Một lớp được khai báo trực tiếp bên trong một phương thức. Trong ví dụ trên, tên lớp Phương thứcLocalinnerClass là một lớp bên trong phương thức

Lớp bên trong là một khái niệm Java rất quan trọng. Hãy tìm hiểu về nó trong hướng dẫn này

Ví dụ về lớp bên trong

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }06

Xem xét ví dụ sau

Các lớp bên trong không thể khởi tạo trực tiếp

Để tạo một lớp bên trong, bạn cần thể hiện một lớp bên ngoài

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }07

Tạo một lớp có thể hiển thị bên trong lớp bên ngoài

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }08

Vui lòng xem xét phương thức tạoInnerClass từ ví dụ trên. Phương thức này cho thấy cách tạo một lớp thể hiện bên trong

  • Các biến thể hiện của lớp bên ngoài có sẵn trong lớp bên trong

Hãy xem xét phương thức PrivateVariabledofouterClassareAvailable từ bên trong được tuyên bố ở trên

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }09

Lớp bên trong tĩnh

Chúng ta hãy cùng tìm hiểu về lớp học nội tâm trong hướng dẫn Java này

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }10

Ví dụ các lớp lồng nhau trong tĩnh

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }11

Tạo các lớp lồng nhau

Lớp lồng nhau có thể được tạo ra mà không cần phải tạo cha mẹ của nó. Không tạo ra nestedClassExample, chúng tôi đã tạo phân loại

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }12

Các biến thành viên không tĩnh

Các biến thành viên các lớp lồng nhau không tĩnh. Họ có thể có các giá trị khác nhau

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }13

Các biến thể hiện các lớp bên ngoài không thể truy cập được

  • Các biến thể hiện của lớp bên ngoài không có sẵn trong lớp tĩnh

Hãy để chúng tôi hiểu về phương pháp lớp bên trong hướng dẫn này

Phương pháp ví dụ lớp bên trong

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }14

Vui lòng xem xét ví dụ dưới đây. Phương thứcLocalinnerClass được khai báo trong Bài kiểm tra ();

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }15

Phương thức lớp bên trong không thể truy cập được bên ngoài phương thức

Nhìn vào mã nhận xét bên dưới Bài kiểm tra. Phương thứcLocalinnerClass chỉ có thể được khởi tạo trong phương thức mà nó được khai báo

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }16

Nhìn vào dấu vết ngăn xếp. Ngoại lệ bị ném trong Phương thức 2 đang truyền sang Phương thức 1 và sau đó đến chính. Điều này là do không có khả năng xử lý ngoại lệ trong cả 3 phương pháp - Main, Method1 và Method2

ExeException 3. Thực thi phương thức đã dừng

Nhìn vào ví dụ dưới đây. Một cuộc gọi phương thức println được thêm vào sau mỗi cuộc gọi phương thức

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }17

Lưu ý rằng không có dòng nào có văn bản "dòng sau ngoại lệ - ****" được thực thi. If a NGOẠI LỆ XUẤT XỨ, the lines after the exception lines not be done. Vì tất cả ba phương thức chính, phương thức1() và phương thức2() không có bất kỳ xử lý ngoại lệ nào, ngoại lệ truyền từ phương thức2 đến phương thức1 đến chính thức

Ví dụ về xử lý ngoại lệ 4. thử Bắt khối

Please add a try Catch Block in Method2

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }18

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }19

Vì xử lý ngoại lệ được thêm vào trong Phương thức 2, nên ngoại lệ không hỗ trợ Phương thức 1. Bạn có thể thấy "dòng sau ngoại lệ - **" trong đầu ra cho Chính, Phương thức 1 vì chúng không bị ảnh hưởng bởi ngoại lệ. Vì ngoại lệ được xử lý trong Phương pháp 2, Phương pháp 1 và chính không bị ảnh hưởng bởi nó. Đây là bản chất chính của xử lý ngoại lệ. Tuy nhiên, lưu ý rằng dòng sau khi dòng lệnh ngoại lệ trong Phương thức 2 không được thực thi

một vài điều quan trọng cần nhớ từ ví dụ này. 1. Nếu ngoại lệ được xử lý, nó không hỗ trợ thêm. 2. Trong một khối thử nghiệm, các dòng sau khi dòng lệnh ngoại lệ không được thực thi

Ví dụ về xử lý ngoại lệ 5. The end of the end

Vui lòng xem xét ví dụ dưới đây. Trong Phương thức2, một kết nối đã được mở. Tuy nhiên, do lỗi ngoại lệ, kết nối không được đóng. Điều này dẫn đến kết nối không được giải thích

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }20

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }21

Vì xử lý ngoại lệ được thêm vào trong Phương thức 2, nên ngoại lệ không hỗ trợ Phương thức 1. Bạn có thể thấy "dòng sau ngoại lệ - **" trong đầu ra cho Chính, Phương thức 1 vì chúng không bị ảnh hưởng bởi ngoại lệ. Vì ngoại lệ được xử lý trong Phương pháp 2, Phương pháp 1 và chính không bị ảnh hưởng bởi nó. Đây là bản chất chính của xử lý ngoại lệ. Tuy nhiên, lưu ý rằng dòng sau khi dòng lệnh ngoại lệ trong Phương thức 2 không được thực thi

một vài điều quan trọng cần nhớ từ ví dụ này. 1. Nếu ngoại lệ được xử lý, nó không hỗ trợ thêm. 2. Trong một khối thử nghiệm, các dòng sau khi dòng lệnh ngoại lệ không được thực thi

Ví dụ về xử lý ngoại lệ 5. The end of the end

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }22

Vui lòng xem xét ví dụ dưới đây. Trong Phương thức2, một kết nối đã được mở. Tuy nhiên, do lỗi ngoại lệ, kết nối không được đóng. Điều này dẫn đến kết nối không được giải thích

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }23

The end connection is open not be close. Vì một ngoại lệ đã xảy ra trong Phương thức 2, Kết nối. close() không chạy được. Điều này dẫn đến một kết nối treo lơ lửng (chưa đóng)

Ví dụ xử lý ngoại lệ 6 - Cuối cùng

Cuối cùng, khối được sử dụng khi mã cần được thực thi bất kể ngoại lệ có bị ném hay không. Bây giờ chúng ta hãy di chuyển kết nối. gần (); . Ngoài ra, khai báo kết nối đã được chuyển từ khối cố gắng để hiển thị nó trong khối cuối cùng

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }24

đầu ra

Kết nối bị đóng ngay cả khi ngoại lệ bị ném. Điều này là để kết nối. close() được gọi trong khối cuối cùng. Cuối cùng, khối luôn được thực thi (ngay cả khi một ngoại lệ bị ném). Vì vậy, nếu chúng ta muốn một số mã luôn được thực thi, chúng ta có thể chuyển nó để cuối cùng ngăn chặn

Mã cuối cùng không chỉ được thực thi trong hai vấn đề. If exception was started to the last. Nếu JVM gặp sự cố ở giữa (ví dụ. Hệ thống. lối ra ())

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }25

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }26

Cuối cùng đã được thực thi ngay cả khi có câu lệnh được trả lại trong Bắt hoặc thử

Cú pháp xử lý ngoại lệ

Vui lòng xem một vài điều bất ngờ về cú pháp xử lý ngoại lệ

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }27

Please try that not started

Hãy thử mà không bắt được là hữu ích khi bạn muốn làm điều gì đó (đóng kết nối) ngay cả khi xảy ra ngoại lệ mà không xử lý ngoại lệ

Please try that do not started both and the last last not allow

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }28

Phương pháp dưới đây sẽ đưa ra một tổng hợp lỗi. (Kết thúc của khối thử nghiệm)

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }29

Ngoại lệ Xử lý phân cấp

Thủ môn là mức độ cao nhất của các lớp xử lý lỗi

Dưới đây là các lớp định nghĩa cho thấy hệ thống phân cấp ngoại lệ đã được xác định trước trong Java

Dưới đây là các lớp định nghĩa cho thấy việc tạo ra một lập trình viên được xác định ngoại lệ trong Java

Error

Lỗi được sử dụng trong các tình huống khi không có gì mà một thành viên lập trình có thể làm về một lỗi. Ví dụ. Stackoverflowerror, OutofMemoryError

Ngoại lệ

Ngoại lệ được sử dụng khi một thành viên lập trình có thể xử lý ngoại lệ

Ngoại lệ không được kiểm tra

RunTimeException và các lớp mở rộng RunTimeException được gọi là ngoại lệ không được kiểm soát. Ví dụ. RunTimeException, UncedException, UncedEdException2 không được kiểm tra hoặc ngoại lệ thời gian chạy. Có các lớp con của RunTimEException (có nghĩa là chúng cũng là các lớp ngoại lệ. )

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }30

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }31

Vì xử lý ngoại lệ được thêm vào trong Phương thức 2, nên ngoại lệ không hỗ trợ Phương thức 1. Bạn có thể thấy "dòng sau ngoại lệ - **" trong đầu ra cho Chính, Phương thức 1 vì chúng không bị ảnh hưởng bởi ngoại lệ. Vì ngoại lệ được xử lý trong Phương pháp 2, Phương pháp 1 và chính không bị ảnh hưởng bởi nó. Đây là bản chất chính của xử lý ngoại lệ. Tuy nhiên, lưu ý rằng dòng sau khi dòng lệnh ngoại lệ trong Phương thức 2 không được thực thi

một vài điều quan trọng cần nhớ từ ví dụ này. 1. Nếu ngoại lệ được xử lý, nó không hỗ trợ thêm. 2. Trong một khối thử nghiệm, các dòng sau khi dòng lệnh ngoại lệ không được thực thi

Bây giờ chúng ta hãy cố gắng thay đổi phương thức AddAmounts để ném một ngoại lệ thay vì RunTimeException. Nó cho chúng ta một tổng hợp lỗi

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }32

Tất cả các lớp không phải là RunTimeException hoặc các lớp con của RunTimEException nhưng Extend Exception được gọi là CheckedExceptions. Quy tắc kiểm tra là chúng ta phải xử lý hoặc ném. Xử lý có nghĩa là nó nên được xử lý hoàn thành - tức là không loại bỏ phương pháp. Ném có nghĩa là phương pháp nên tuyên bố rằng nó ném ngoại lệ

Ném ví dụ ngoại lệ

Chúng ta hãy xem cách tuyên bố ném một ngoại lệ từ một phương thức

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }33

Nhìn vào dòng "Số tiền tĩnh của số lượng bổ sung (số tiền 1, số tiền 2) ném ngoại lệ". Đây là cách chúng tôi tuyên bố rằng một phương thức ném ngoại lệ. Điều này dẫn đến biên dịch lỗi trong phương pháp chính. Điều này là làm phương pháp chính đang gọi một phương thức đang tuyên bố rằng nó có thể loại bỏ ngoại lệ. Phương pháp chính một lần nữa có hai tùy chọn a. Ném b. Xử lý

Mã với lệnh ngoại lệ chính bên dưới

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }34

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }35

Xử lý một ngoại lệ

Chính cũng có thể xử lý ngoại lệ thay vì khai báo ném. Mã cho nó dưới đây

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }36

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }37

Xử lý một ngoại lệ

Chính cũng có thể xử lý ngoại lệ thay vì khai báo ném. Mã cho nó dưới đây

Các lớp ngoại lệ đã được xác định tùy chỉnh

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }38

Đối với kịch bản trên, chúng ta có thể tạo ra một tùy chỉnh ngoại lệ, CurrenciesDonotMatchException. Nếu tôi muốn biến nó thành một ngoại lệ đã được kiểm tra, thì tôi có thể làm cho nó mở rộng lớp ngoại lệ. Nếu không, chúng ta có thể mở rộng lớp RunTimeException

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }39

Mở rộng lớp ngoại lệ

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }40

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }41

Không, chúng tôi có thể thay đổi phương thức bổ sung để loại tiền tệDonotMatchException - ngay cả việc khai báo phương thức đã thay đổi

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }42

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }41

Phương pháp chính cần được thay đổi để bắt. Tiền tệDonotMatchException

Vui lòng thay đổi phương thức chính để xử lý ngoại lệ thay vì tiền tệDonotMatchException

There are no instead of change the start up from the ví dụ trước. Điều này là do Khối bắt ngoại lệ có thể bắt ngoại lệ và tất cả các lớp ngoại lệ

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }44

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }41

Open width RunTimEException

Please change the money class

Thay đổi phương thức bổ sung trong số lượng để loại bỏ tuyên bố "ném tiền tệDonotMatchException"

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }46

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }47

Không có biên dịch lỗi xảy ra do RunTimeException và các lớp con của RunTimeException không được kiểm tra ngoại lệ. Vì vậy, họ không cần phải bị xử lý hoặc tuyên bố. Nếu bạn quan tâm đến việc xử lý chúng, hãy tiếp tục và xử lý chúng. Tuy nhiên, Java không yêu cầu bạn xử lý chúng

Hủy bỏ thử bắt từ phương pháp chính. Không cần thiết vì CurrenciesDonotMatchException hiện là một RunTimEException

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }48

đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }49

Nhiều khối bắt

Bây giờ, hãy thêm hai khối bắt vào chính

Chúng tôi có thể có hai khối bắt để thử. Thứ tự xử lý các trường hợp lệ ngoại lệ. một. Cùng một lớp b. Super Layer

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }50

Các ngoại lệ cụ thể có thể đặt trước các trường hợp ngoại lệ chung

Các khối bắt ngoại lệ cụ thể phải có trước khi khối bắt đầu cho một ngoại lệ chung. Ví dụ, CurrenciesDonotMatchException nên bị ngoại lệ. Mã bên dưới đưa ra một biên dịch lỗi

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }51

Khởi động khối xử lý khối chỉ được xác định (và các loại phụ)

Một khối bắt của EXCECTYPE chỉ có thể bắt các loại ExpytyPE và các lớp phụ của ExceptionType. Ví dụ. Please to them me change the main method as display bên dưới. Phương pháp chính ném một nullpulinterExceptionion

Vì nullpulumException không phải là một lớp phụ của tiền tệ ngoại lệDonotMatchException nên nó sẽ không được xử lý bởi khối Catch. Thay vào đó, một nullpulinterExceptionion sẽ bị ném ra bằng phương pháp chính

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }52

Xử lý ngoại lệ thực hành tốt nhất

  • Trong tất cả các ví dụ trên, chúng tôi đã không thực hiện theo một ngoại lệ xử lý (các) hành động tốt. Unknown time che Exception complete. Ít nhất họ đã đăng nhập. Phương thức printstackTrace trong toàn bộ dấu vết Ngăn xếp khi xảy ra ngoại lệ. Nếu bạn xử lý một ngoại lệ, nó luôn luôn là một hành động tốt để ghi lại dấu vết

Control Panel

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }53

Control Panel được sử dụng để đọc đầu vào từ bàn phím và ghi đầu ra

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }54

Nhận bảng điều khiển tham chiếu

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }55

Phương pháp tiện ích giao diện điều khiển

  • Mật khẩu không hiển thị những gì đang được nhập

Format or printf

Định dạng hoặc chức năng printf giúp chúng tôi trong đầu ra định dạng vào bảng điều khiển

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }56

Format/ví dụ printf

Hãy xem xét một vài ví dụ để nhanh chóng hiểu chức năng printf

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }57

Ở dạng đơn giản nhất, chuỗi được định dạng bắt đầu với % theo sau chỉ là báo chuyển đổi => b - boolean c - char d - integer f - point floating s - string

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }58

Một lỗi trong công việc chỉ định sẽ đưa ra một RunTimEException. Trong ví dụ dưới đây, một chuỗi được chuyển đến %d đối số

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }59

Bộ đệm chuỗi & trình tạo chuỗi

  • StringBuffer và StringBuilder được sử dụng khi bạn muốn sửa đổi các giá trị của chuỗi thường xuyên. Lớp đệm chuỗi là chủ đề an toàn trong đó do String Builder không an toàn

Ví dụ về chuỗi bộ đệm

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }60

Ví dụ về chuỗi tạo

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }61

Các chức năng tương tự tồn tại trong StringBuffer

method string

Tất cả các chức năng cũng trả về một tham chiếu đến các đối tượng sau khi sửa đổi nó. Điều này cho phép một khái niệm được gọi là chuỗi phương thức

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }62

Ngày

  • Ngày không còn là lớp Java khuyến nghị để lưu trữ và thao tác ngày và giờ. Hầu hết các phương pháp trong ngày không được chấp nhận. Sử dụng lớp lịch thay thế. Date of the current interface for date is number mili giây (giá trị dài) kể từ ngày 1 tháng 1 năm 1970

Create object date

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }63

Thao tác hủy đối tượng ngày

Bây giờ chúng ta hãy xem thêm vài giờ vào một đối tượng ngày. Tất cả các thao tác của ngày cho đến nay cần phải được thực hiện bằng cách thêm mili giây vào ngày. Ví dụ. nếu tôi muốn thêm 6 giờ, chúng tôi chuyển đổi 6 giờ thành mili giây. 6 giờ = 6 * 60 * 60 * 1000 mili giây. Dưới đây ví dụ để tìm mã cụ thể

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }64

Day format

Định dạng ngày được thực hiện bằng cách sử dụng lớp DateFormat. Hãy xem xét một vài ví dụ

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }65

Định dạng ngày với một địa điểm

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }66

Định dạng ngày sử dụng SimpleDateFormat

Chúng ta hãy xem một vài ví dụ về định dạng ngày bằng SimpleDateFormat

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }67

default address

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }68

lịch

  • Lớp lịch sử được sử dụng trong Java để thao tác ngày. Lớp lịch cung cấp các cách dễ dàng để thêm hoặc giảm ngày, tháng hoặc năm kể từ ngày. Nó cũng cung cấp rất nhiều thông tin chi tiết về một ngày (ngày nào trong năm?

Lịch là đối tượng

Lớp lịch không thể được tạo bằng cách sử dụng lịch mới. Cách tốt nhất để có thể hiện được lớp lịch là sử dụng phương thức tĩnh getInstance () trong lịch

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }69

Lịch thiết lập ngày, tháng và năm

Đặt ngày, tháng hoặc năm trên một đối tượng lịch rất đơn giản. Phương thức đã đặt được đặt với hằng số thích hợp cho ngày, tháng hoặc năm. Tham số tiếp theo là giá trị

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }70

Lịch nhận phương pháp

Chúng ta hãy nhận thông tin về một ngày cụ thể - ngày 24 tháng 9 năm 2010. Chúng tôi sử dụng phương thức Lịch Get. Tham số được truyền cho thấy giá trị nào mà chúng tôi muốn nhận được theo lịch, ngày hoặc tháng hoặc năm hoặc. Một số ví dụ về các giá trị bạn có thể nhận được từ lịch được liệt kê dưới đây

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }71

Lich - Edit the date

Chúng ta có thể sử dụng các phương thức bổ sung và cuộn lịch để sửa đổi ngày. Phương pháp bổ sung lịch có thể được sử dụng để tìm một ngày 5 ngày hoặc 5 tháng trước ngày bằng cách vượt qua A, 5 tức là một âm 5

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }72

Phương pháp cuộn

Phương thức cuộn sẽ chỉ thay đổi giá trị đã được sửa đổi. Năm vẫn không bị ảnh hưởng khi tháng được thay đổi, ví dụ

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }73

Create a history. Ví dụ 2

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }74

Định dạng đối tượng lịch

Thực hiện theo cách nhận ngày bằng cách sử dụng lịch. getTime() and used normal date format

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }75

Định dạng số

  • Định dạng số được sử dụng để định dạng một số cho các địa phương khác nhau và các định dạng khác nhau

Định dạng số bằng cách sử dụng Ngôn ngữ mặc định

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }76

Định dạng số bằng cách sử dụng Ngôn ngữ

Định dạng một số sử dụng địa phương Hà Lan

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }77

Định dạng một số sử dụng địa phương Đức

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }78

Định dạng một loại tiền tệ bằng cách sử dụng địa chỉ mặc định

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }79

Định dạng tiền tệ sử dụng địa phương

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }80

Đặt các chữ số phân số tối đa cho một chiếc phao

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }81

Phân tích cú pháp bằng cách sử dụng numberFormat

Phân vùng giá trị nổi bằng định dạng số

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }82

Chỉ phân tích giá trị số bằng cách sử dụng định dạng số

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }83

Giao diện thu thập

  • Mảng không phải là động. Khi một mảng có kích thước cụ thể được khai báo, kích thước không thể được sửa đổi. Để thêm một phần tử mới vào mảng, một mảng mới phải được tạo với kích thước lớn hơn và tất cả các phần tử từ mảng cũ đã được sao chép sang mảng mới. Bộ sưu tập được sử dụng trong các tình huống trong đó dữ liệu là động. Bộ sưu tập cho phép thêm một phần tử, xóa một phần tử và máy chủ của các hoạt động khác. Có một số bộ sưu tập trong Java cho phép chọn bộ sưu tập phù hợp với bối cảnh. Trước khi xem xét các lớp thu thập, hãy xem nhanh tất cả các giao diện thu thập quan trọng và các hoạt động mà chúng cho phép

Giao diện thu thập

Hầu hết các phương thức quan trọng được khai báo trong giao diện thu thập là các phương thức để bổ sung và xóa một phần tử. Phương thức bổ sung cho phép thêm một phần tử vào một phương thức thu thập và xóa cho phép xóa một phần tử khỏi bộ sưu tập. Kích thước () Phương thức trả về số phần tử trong bộ sưu tập. Các phương pháp quan trọng khác được định nghĩa là một phần của giao diện thu thập được hiển thị bên dưới

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }84

Danh sách giao diện

Giao diện danh sách mở rộng giao diện thu thập. Vì vậy, nó bao gồm tất cả các phương thức được xác định trong giao diện thu thập. Ngoài ra, danh sách giao diện cho phép hoạt động chỉ định vị trí của phần tử trong bộ sưu tập. Bất kỳ việc thực hiện giao diện danh sách sẽ duy trì thứ tự chèn. Khi một phần tử mới được thêm vào, nó được thêm vào cuối danh sách các phần tử. Chúng ta cũng có thể sử dụng void add(int paramint, e parame); . Chúng tôi cũng có thể đặt và nhận các yếu tố tại một mục cụ thể trong danh sách bằng các phương thức tương ứng

Các phương pháp quan trọng khác được liệt kê dưới đây

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }85

Giao diện bản đồ

Đầu tiên và quan trọng nhất, giao diện bản đồ không mở rộng giao diện thu thập. Vì vậy, nó không kế thừa bất kỳ phương pháp nào từ giao diện thu thập. Giao diện bản đồ hỗ trợ các bộ sưu tập sử dụng cặp giá trị chính. Một cặp giá trị khóa là một tập hợp các mục dữ liệu được liên kết. a key, is a list duy nhất cho một số mục dữ liệu và giá trị, đó là dữ liệu hoặc con trỏ đến dữ liệu. Các cặp giá trị khóa được sử dụng trong các bảng tra cứu, bảng băm và tệp cấu hình. Một cặp giá trị chính trong giao diện bản đồ được gọi là mục nhập. Set the method for allow more a cặp, giá trị vào bản đồ

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }86

Phương thức Get allow allow being value from the map based on key

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }87

Các phương pháp quan trọng khác được hiển thị dưới đây

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }88

Set interface

Đặt giao diện mở rộng giao diện thu thập. Đặt giao diện chỉ chứa các phương thức từ giao diện thu thập với hạn chế bổ sung mà nó không thể chứa các bản sao

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }89

Sắp xếp giao diện

Giao diện sắp xếp mở rộng giao diện. Vì vậy, nó không cho phép lặp lại. Ngoài ra, việc triển khai giao diện sắp xếp để duy trì các yếu tố thành phần của nó theo thứ tự sắp xếp. Nó bổ sung các hoạt động cho phép nhận được một loạt các giá trị (tập hợp con, tai nghe, đuôi). Các hoạt động quan trọng được liệt kê dưới đây.
Các thao tác quan trọng được liệt kê bên dưới.

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }90

Sắp xếp giao diện

Giao diện Sắp xếp mở rộng giao diện bản đồ. Ngoài ra, việc triển khai giao diện Sắp xếp duy trì các từ khóa theo thứ tự sắp xếp. Các phương thức có sẵn trong giao diện để có được một loạt các giá trị dựa trên các khóa của chúng

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }91

Chờ đợi giao diện

Giao diện chờ mở rộng giao diện thu thập. Giao diện chờ đợi thường được sử dụng để thực hiện các yếu tố giữ nguyên để xử lý. Giao diện hàng đợi cung cấp các phương thức peek () và poll () nhận phần tử ở hàng đợi. Sự khác biệt là phương pháp Thăm dò ý kiến ​​() cũng loại bỏ đầu ra khỏi hàng đợi. Peek() sẽ giữ đầu của queue do not change.
Giao diện hàng đợi cung cấp các phương thức peek() và poll() lấy phần tử ở đầu hàng đợi. Sự khác biệt là phương thức poll() cũng loại bỏ phần đầu khỏi hàng đợi. peek() sẽ giữ cho phần đầu của hàng đợi không thay đổi.

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }92

Vòng lặp giao diện

Iterator Giao diện cho phép chúng tôi lặp lại (vòng lặp xung quanh) một bộ sưu tập. Tất cả các bộ sưu tập xác định một phương thức lặp () có trình lặp của bộ sưu tập. HasNext () kiểm tra xem có phần tử khác trong bộ sưu tập tập tin không được lặp lại. Tiếp theo () có phần tử tiếp theo

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }93

bộ sưu tập

  • Bộ sưu tập chỉ có thể giữ các đối tượng - không phải là nguyên thủy

Lập danh sách

ArrayList thực hiện giao diện danh sách. Vì vậy, ArrayList sẽ lưu trữ các phần tử theo thứ tự chèn (theo mặc định). Phần tử có thể được thêm vào và xóa khỏi ArrayList dựa trên vị trí của chúng. Chúng ta hãy xem cách khởi tạo một danh sách các nguyên

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }94

Mã như dưới đây được cho phép vì quyền anh tự động. 5 là tự động được đóng hộp vào đối tượng nguyên và được lưu trữ trong ArrayList

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }95

Add the method (theo default) add phần tử ở cuối danh sách

ArrayList of ví dụ chuỗi

Ví dụ dưới đây cho thấy cách tạo và sử dụng một chuỗi danh sách. ArrayList có thể có các bản sao (vì danh sách có thể có các bản sao). Kích thước () Phương thức nhận được số lượng các phần tử trong ArrayList. Hàm chứa (đối tượng) Phương thức kiểm tra xem một phần tử có mặt trong ArrayList

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }96

lặp lại xung quanh một danh sách

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }97

Các phương thức ArrayList (danh sách) khác

Hàm indexof() - Trả về chỉ mục của phần tử nếu tìm thấy phần tử. Other sound number

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }98

Hàm Get() - Nhận giá trị tại mục được định nghĩa

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }99

remove() function

Hàm () có thể có hai biến

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//900

Sắp xếp bộ sưu tập

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//901

Danh sách các đối tượng của một lớp tùy chỉnh

Vui lòng xem xét các cricketer lớp sau

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//902

Bây giờ chúng ta hãy cố gắng sắp xếp một danh sách bao gồm các đối tượng của lớp cricketer

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//903

Chúng tôi nhận được một lỗi trình biên dịch vì vận động viên cricket lớp không thực hiện giao diện tương đương. Chúng tôi đã có thể sắp xếp các số trong ví dụ trước đó vì chuỗi lớp thực hiện có thể so sánh. Please make layer cricketer thực hiện giao diện tương đương

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//904

Bây giờ chúng ta hãy cố gắng sắp xếp các vận động viên cricket

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//905

Tùy chọn khác để sắp xếp các bộ sưu tập là bằng cách tạo một lớp riêng thực hiện giao diện so sánh. Ví dụ dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//906

Bây giờ chúng ta hãy thử sắp xếp bộ sưu tập đã được xác định trước đó

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//907

Chuyển đổi danh sách thành mảng

Có hai cách. Đầu tiên là sử dụng chức năng Toarray (Chuỗi). Ví dụ dưới đây. Điều này tạo ra một mảng của chuỗi

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//908

Other is used toarray() function. Ví dụ dưới đây. Điều này tạo ra một mảng các đối tượng

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//909

Chuyển mảng thành danh sách

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//910

Việc triển khai giao diện danh sách khác

Các lớp khác nhau thực hiện giao diện danh sách là vector và LinkedList

véc tơ

Vector có các hoạt động giống như một mảng danh sách. Tuy nhiên, tất cả các phương pháp trong vector đều được đồng bộ hóa. Vì vậy, chúng tôi có thể sử dụng khám nếu chúng tôi chia sẻ một danh sách giữa hai luồng và chúng tôi muốn chúng được đồng bộ hóa

LinkedList

Danh sách được liên kết mở rộng danh sách và hàng đợi. Khác với các hoạt động được hiển thị bởi giao diện chờ đợi, LinkedList có các hoạt động giống như một danh sách ArrayList. Tuy nhiên, sự phát triển cơ bản của danh sách được liên kết khác với danh sách ArrayList. ArrayList sử dụng một loại cấu trúc mảng để lưu trữ các yếu tố thành phần. Vì vậy, hãy thêm và xóa từ một mảng danh sách là các hoạt động phụ thuộc vào tiền. Tuy nhiên, tìm kiếm một danh sách mảng nhanh hơn LinkedList. LinkedList sử dụng một đại diện được liên kết. Mỗi đối tượng giữ một liên kết đến phần tử tiếp theo. Làm điều đó, thêm và xóa nhanh hơn ArrayList. Nhưng tìm kiếm chậm hơn

Set interface

  • Hashset, LinkedHashset và Treeset thực hiện giao diện đã đặt. Hãy xem xét các ví dụ về các lớp thu thập này

Bộ băm

Hashset thực hiện giao diện. Bộ không cho phép lặp lại. Hashset không hỗ trợ đặt hàng

Ví dụ Hashset

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//911

Hãy cố gắng thêm Sachin vào bộ ngay bây giờ. Sachin là trùng lặp. Vì vậy, sẽ không được thêm vào. hoàn trả sai

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//912

LinkedHashset

LinkedHashset thực hiện giao diện cài đặt và hiển thị các hoạt động tương tự với một hash. Sự khác biệt là LinkedHashset duy trì thứ tự chèn. Khi tôi lặp lại một LinkedHashset, chúng tôi sẽ lấy lại các yếu tố theo thứ tự mà chúng tôi đã thêm vào

cây

Treset thực hiện các giao diện Set, Sortedset và Navigableset. Treeset tương tự như Hashset ngoại trừ việc nó lưu trữ phần tử theo thứ tự sắp xếp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//913

Lưu ý rằng danh sách được sắp xếp sau khi chèn Dravid

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//914

Lưu ý rằng danh sách được sắp xếp sau khi chèn Ganguly

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//915

Các đối tượng được thêm vào một cây nên có thể so sánh được

Treeset - Giao diện Navigableset Ví dụ 1

Cây cối thực hiện giao diện này. Hãy xem xét một ví dụ với cây. Lưu ý rằng các yếu tố trong cây được sắp xếp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//916

Navigableset interface with the following method. Phương pháp thấp hơn tìm thấy phần tử cao nhất thấp hơn phần tử được chỉ định. Phương pháp sàn tìm thấy phần tử cao nhất thấp hơn hoặc bằng phần tử được chỉ định. Các phương pháp tương ứng để tìm lượng thấp nhất cao hơn phần tử chỉ được xác định là cao hơn và trần. Một vài ví dụ sử dụng bộ được tạo trước đó dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//917

Navigableset file con, tai nghe, đuôi phương thức trong cây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//918

Tất cả ba phương pháp - tập hợp con, tai nghe, đuôi - bao gồm giới hạn thấp hơn và không bao gồm giới hạn cao hơn. Trong bộ phụ bên dưới, giới hạn thấp hơn bao gồm - bao gồm 25. Giới hạn cao hơn không bao gồm - 55 loại trừ

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//919

Trong bộ phụ bên dưới, giới hạn cao hơn không bao gồm - 55 loại trừ

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//920

Tất cả các tập tin phụ thuộc phương thức - tập hợp con, tai nghe, đuôi - trả về các bộ phụ động. Khi bộ gốc được sửa đổi (bổ sung hoặc xóa), những thay đổi tương ứng cũng có thể ảnh hưởng đến các bộ phụ

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//921

Bây giờ chúng ta hãy chèn một giá trị 30 vào bài kiểm tra. Hãy nhớ rằng Subtreeset, Headtreeset, Tailtreeset là bộ phụ của bài kiểm tra

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//922

30 is in range of Subtreeset and Headtreeset. Vì vậy, nó được đưa vào như một phần của Bài kiểm tra, Subtreeset và Headtreeset

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//923

65 was in as a part of the check check and the end. Điều quan trọng cần nhớ là tất cả các bộ phụ đều là động. Nếu bạn sửa đổi bộ gốc, bộ phụ có thể bị ảnh hưởng

Treeset - Phương pháp giao diện Navigableset - Pollfirst, Polllast và nhiều hơn nữa

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//924

Pollfirst trả về phần tử đầu tiên và loại bỏ nó khỏi tập hợp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//925

Polllast trả về phần tử cuối cùng và loại bỏ nó khỏi tập hợp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//926

Giao diện bản đồ

  • Chúng ta hãy xem các sự phát triển khác nhau của giao diện bản đồ

bản đồ

Hashmap thực hiện giao diện bản đồ, ở đó bằng cách hỗ trợ các cặp giá trị chính

ví dụ hashmap

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//927

Phương pháp bản đồ trùm

Nhận phương thức nhận giá trị của từ khóa khớp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//928

If the current key is being used back, it will instead of the current value with new value has been transfer to

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//929

sơ đồ cây

Treemap tương tự như Hashmap ngoại trừ việc nó lưu trữ các từ khóa theo thứ tự sắp xếp. Nó thực hiện giao diện NavigableMap và giao diện Sắp xếp tương tự với giao diện bản đồ

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//930

Bây giờ chúng tôi sẽ thêm một vận động viên crickê với Dravid chính. Theo thứ tự sắp xếp, Dravid to before Sachin. Vì vậy, value with the key Dravid was added to the head map

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//931

Bây giờ chúng tôi sẽ thêm một vận động viên crickê với cầu thủ chính. Theo thứ tự sắp xếp, ponting phù hợp giữa Dravid và Sachin

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//932

Giao diện NavigableMap Ví dụ (Treemap) Đặt I

Hãy xem xét một ví dụ với Treemap. Lưu ý rằng các từ khóa trong Treemap được sắp xếp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//933

Phương pháp LowerKey tìm thấy khóa thấp nhất cao hơn so với quy định. Phương pháp sàn nhà tìm thấy khóa cao nhất thấp hơn hoặc bằng khóa được chỉ định. Các phương pháp tương ứng để tìm khóa thấp nhất cao hơn khóa quy định cao hơn và trần. Một số ví dụ sử dụng bản đồ được tạo trước đó dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//934

Các ví dụ giao diện NavigableMap (Treemap) Set II

Các phương pháp tương tự như tập hợp con, tai nghe, đuôi (của cây) cũng có sẵn trong Treemap. Chúng được gọi là Tiểu bản, Headmap, Tailmap. Họ có các ký tự và kết quả tương tự như các phương thức Treeset tương ứng. Chúng bao gồm giới hạn thấp hơn và không bao gồm giới hạn cao hơn - ngoại trừ khi cờ bao gồm (tùy chọn) được thông qua. Kết quả bản đồ phụ là động. Nếu bản gốc bị sửa đổi, bản phụ cũng có thể bị ảnh hưởng

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//935

Ví dụ giao diện NavigableMap (Treemap) Set III

Xem xét bộ ví dụ phương thức tiếp theo bên dưới

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//936

Phương thức giảm dần api Trả về cây được đặt theo thứ tự ngược

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//937

Pollfirstentry trả về mục đầu tiên trong bản đồ và xóa nó khỏi bản đồ

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//938

Polllastentry trả về mục cuối cùng từ bản đồ và loại bỏ nó khỏi bản đồ

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//939

Ưu tiên hàng đợi

  • Pre-predied the queue interface

Ví dụ ưu tiên

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//940

Add an element into priority priority - Phương thức cung cấp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//941

Ví dụ phương pháp PEEK

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//942

queue and so priority

Chúng ta có thể tạo các hàng đợi ưu tiên bằng cách sử dụng lớp so sánh, tức là ưu tiên được xác định tùy chỉnh

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//943

Bộ sưu tập phương pháp tĩnh

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//944

thuốc gốc

  • Generics được sử dụng để tạo các lớp chung và các phương thức chung có thể hoạt động với các loại (lớp) khác nhau

Cần cho thuốc generic, ví dụ

Xem xét các lớp dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//945

Danh sách của tôi có thể được sử dụng để lưu trữ một danh sách các chuỗi

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//946

Để lưu trữ số nguyên, chúng ta cần tạo một lớp mới. Đây là vấn đề mà Generics giải quyết. Thay vì lớp chuỗi mã hóa cứng là loại duy nhất mà lớp có thể hoạt động, chúng tôi biến lớp loại thành tham số cho lớp

Ví dụ chung

Vui lòng thay thế chuỗi bằng T và tạo một lớp mới

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//947

Lưu ý Tuyên bố của lớp

Thay vì T, chúng ta có thể sử dụng bất kỳ danh mục hợp lệ nào nếu một danh mục chung được khai báo là một phần của lớp khai báo, nó có thể được sử dụng bất kỳ loại nào có thể được sử dụng trong một lớp - . v. . Xem cách sử dụng tham số và kiểu trả về trong lớp myListGeneric. Bây giờ lớp MylistGeneric có thể được sử dụng để tạo danh sách các số nguyên hoặc danh sách các chuỗi

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//948

General mode

In mylistgeneric, type T được định nghĩa là một phần của lớp khai báo. Bất kỳ loại Java nào cũng có thể sử dụng một loại cho lớp này. Nếu chúng ta muốn hạn chế các loại được phép cho một loại chung, thì chúng ta có thể sử dụng các hạn chế chung. Xem xét lớp ví dụ dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//949

Trong tuyên bố của lớp, chúng tôi chỉ có một ràng buộc bắt buộc "T extension number". Chúng tôi có thể sử dụng lớp mylistrestred với bất kỳ số mở rộng nào - float, integer, gấp đôi, v. v

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//950

Invalid string could not instead to instead of "T extension number"

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//951

Ví dụ phương pháp chung

Một loại chung có thể được khai báo là một phần của phương thức khai báo. Sau đó, loại chung có thể được sử dụng ở bất kỳ đâu trong phương thức (kiểu trả về, loại tham số, loại biến cục bộ hoặc khối khối). Xem xét phương pháp dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//952

Phương thức bây giờ có thể được gọi với bất kỳ loại mở rộng loại nào

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//953

Generics và bộ sưu tập Ví dụ 1

Xem xét các lớp dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//954

Hãy tạo một vài mảng và danh sách như hình dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//955

Please create a vài phương thức tĩnh như hình dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//956

Phương pháp mảng có thể được gọi với động vật [] hoặc chó []

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//957

Active list method with list. Cung cấp biên dịch lỗi với danh sách

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//958

tóm tắt. Danh sách không tương thích với Danh sách thậm chí chó suy nghĩ kéo dài động vật. Tuy nhiên, chó [] tương thích với động vật []

Generics và bộ sưu tập Ví dụ 2 - Mở rộng

Xem xét các phương pháp dưới đây

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//959

Phương thức được khai báo với các biên dịch danh sách với cả danh sách và danh sách

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//960

Generics và bộ sưu tập ví dụ 3 - Super

Phương thức được khai báo với danh sách biên dịch với cả danh sách và danh sách

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//961

Danh sách của bất kỳ siêu lớp chó nào là tốt. Danh sách của bất kỳ lớp con của chó không phải là tham số hợp lệ

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//962

Generics và bộ sưu tập Ví dụ 4, mở rộng với giao diện

Phương thức dưới đây có thể được gọi với danh sách được khai báo với bất kỳ loại giao diện thực hiện nào có thể kết nối tiếp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//963

Generics và bộ sưu tập, một vài ví dụ và quy tắc khác

Một phương thức được khai báo với danh sách chỉ có thể được gọi với một danh sách được khai báo với đối tượng loại. Không có lớp nào khác là hợp lệ. Một phương thức được khai báo với danh sách có thể được gọi với bất kỳ loại danh sách nào. // Một phương thức được khai báo với danh sách có thể được gọi với danh sách bất kỳ loại nào - vì tất cả các lớp đều là lớp phụ của đối tượng. ? . Unable to be used as a section of the meaning

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//964

Generics và bộ sưu tập, khả năng tương thích với mã cũ

Vui lòng xem xét phương pháp dưới đây. It was tuyên bố chấp nhận một danh sách chung. Phương thức thêm một chuỗi vào ArrayList

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//965

Xem xét mã bên dưới

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//966

Chúng tôi đang chuyển một danh sách mảng cho một phương thức chấp nhận ArrayList làm tham số. Chúng tôi cũng đang cố gắng thêm một chuỗi vào nó, bên trong phương thức. Việc biên dịch các lớp này sẽ đưa ra một cảnh báo. Javac đưa ra cảnh báo vì Multiplynumbersby2 (ArrayList) được gọi bằng danh sách danh sách mảng cụ thể và trong phương thức bổ sung, một phần tử được thêm vào danh sách ArrayList

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//967

Để có thêm chi tiết, hãy chạy javac only tham số xlint. không được kiểm soát

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//968

File files

  • Trước tiên, chúng ta hãy nhìn vào lớp tệp giúp chúng ta tạo và xóa các tệp và thư mục. Không thể sử dụng lớp tệp để sửa đổi nội dung của một tệp

Lớp học tập tin

Tạo một tệp đối tượng

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//969

Tập tin các phương pháp cơ bản

Kiểm tra xem tệp có tồn tại không

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//970

Nếu tệp không tồn tại sẽ tạo ra nó và trả về đúng. If file tồn tại, trả về sai

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//971

Received full path of file

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//972

Đổi tên một tập tin

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//973

Class file - directory

Một lớp tệp trong Java đại diện cho tệp và thư mục

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//974

In full directory directory

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//975

Điều này không tạo ra tệp thực tế

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//976

Tệp thực tế được tạo khi chúng tôi gọi phương thức tạo tệp mới

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//977

In files and directory has in the directory

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//978

Tạo một thư mục

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//979

Tạo một tệp trong một thư mục mới

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//980

Read and write from a file

Triển khai khai thác các lớp vật liệu của người viết và đọc giúp chúng tôi viết và đọc (nội dung của) các tệp. Phương thức của nhà văn - Flush, Close, Phụ lục (Văn bản) Phương thức đầu đọc - Read, Close (Không có Flush) Triển khai nhà văn - FileWriter, BufferedWriter, PrintWriter Reader Triển khai

FileWriter và Filereader

  • FileWriter và Filereader cung cấp các hoạt động viết và đọc tệp cơ bản. Hãy viết một ví dụ để viết và đọc từ một tệp bằng Filereader và FileWriter

Lớp FileWriter

We could write to a file by Layer FileWriter

Viết chuỗi vào tệp bằng FileWriter

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//981

Trình xây dựng FileWriter

Trình xây dựng FileWriter có thể nhận tệp (tệp) hoặc đường dẫn đến tệp (chuỗi) làm đối số. Khi một đối tượng nhà văn được tạo, nó sẽ tạo tệp - nếu nó không tồn tại

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//982

Lớp học Filereader

Trình đọc tệp có thể được sử dụng để đọc toàn bộ nội dung từ một tệp trong một lần

Read from file by Filereader

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//983

Người xây dựng Filereader

Trình xây dựng Filereader có thể nhận tệp (tệp) hoặc đường dẫn đến tệp (chuỗi) làm đối số

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//984

BufferedWriter và BufferedReader

  • BufferedWriter và BufferedReader cung cấp bộ đệm tốt hơn ngoài các hoạt động viết và đọc tệp cơ bản. Ví dụ. thay vì đọc toàn bộ tệp, chúng tôi có thể đọc một dòng tệp từng dòng. Vui lòng viết một ví dụ để viết và đọc từ một tệp bằng cách sử dụng BufferedReader và BufferedWriter

Buffer class

Class BufferedWriter giúp ghi vào một lớp có bộ đệm tốt hơn FileWriter

Buffer build material

Bộ đệm dựng trình chỉ chấp nhận một người viết khác làm đối số

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//985

Use layer BufferedWriter

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//986

Lớp BufferedReader

Bufferedreader giúp đọc từng dòng tệp từng dòng

Xây dựng BufferedReader

BufferedReader Constructor chỉ chấp nhận một đầu đọc khác làm đối số

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//987

BufferedReaderer, đọc một tệp

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//988

Bản in

  • PrintWriter cung cấp các phương thức nâng cao để viết văn bản được định dạng vào tệp. Chức năng printf hỗ trợ

Build build in

Trình xây dựng bản hỗ trợ các loại đối số, tệp, chuỗi (đường dẫn tệp) và người viết

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//989

Máy in, ghi vào một tệp

Khác với chức năng viết, bạn có thể sử dụng chức năng định dạng, printf, print, println để ghi vào tệp printwriter

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//990

Đọc tệp được tạo bằng BufferedReader

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//991

Tự động hóa tuần tự

  • Tái hóa giúp chúng ta lưu và lấy trạng thái của một đối tượng

Tuần tự hóa và khử nối tiếp hóa - các phương pháp quan trọng

Chu kỳ tự hóa => Chuyển đổi trạng thái đối tượng thành một số biểu tượng bên trong biểu tượng. Hủy tuần tự hóa => ngược lại. Chuyển đổi biểu tượng nội bộ sang đối tượng

Hai phương thức quan trọng 1. Đối tượngĐầu raLuồng. WriteObject() // tuần tự hóa và ghi vào tệp 2. ObjectInputStream. ReadObject() // Read from file and deserialize

Thực hiện serializable interface

Để tuần tự hóa một đối tượng, nó nên thực hiện giao diện có thể kết nối tiếp. Trong ví dụ dưới đây, lớp hình chữ nhật thực hiện giao diện có thể kết nối tiếp. Lưu ý rằng giao diện có thể kết nối tiếp mà không khai báo bất kỳ phương pháp nào được thực hiện

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//992

Tuần tự hóa một đối tượng - ví dụ

Dưới đây là ví dụ để xem cách thể hiện của một đối tượng có thể được tuần tự hóa. Chúng tôi đang tạo một đối tượng hình chữ nhật mới và tuần tự hóa nó thành một tệp hình chữ nhật. ser

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//993

Defer-serializing a object, ví dụ

Dưới đây là ví dụ cho thấy làm thế nào một đối tượng có thể được phân biệt từ một tệp tuần tự hóa. Một đối tượng hình chữ nhật được phân biệt từ tệp hình chữ nhật. ser

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//994

Biến hóa tuần tự, thông qua biến thông thoáng

Khu vực trong ví dụ trước là một giá trị tính toán. Nó không cần thiết để tuần tự hóa và giải tuần tự hóa. Chúng ta có thể tính toán nó khi cần thiết. Trong tình huống này, chúng tôi có thể làm cho biến thời gian tạm thời. Các khoảng trống thông qua không được kết nối tiếp. (Khu vực Int thoáng qua;)

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//995

Nếu bạn chạy chương trình một lần nữa, bạn sẽ nhận được đầu theo dõi

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//996

Lưu ý rằng giá trị của hình chữ nhật. area was set to 0. Các biến vùng được đánh dấu qua lỗ. Vì vậy, nó không được lưu trữ vào tuần tệp tự hóa. And when reject s-serialization value area is set to default value, tức là 0

Phương pháp tuần tự hóa, ReadObject

Chúng ta cần tính toán lại khu vực khi đối tượng hình chữ nhật bị khử. Điều này có thể đạt được bằng cách thêm phương thức ReadObject vào lớp hình chữ nhật. Ngoài bất kỳ điều gì Java thường làm trong khi giải nén, chúng ta có thể thêm mã tùy chỉnh cho các đối tượng

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//997

Khi một đối tượng của lớp hình chữ nhật được tuần tự hóa, Java sẽ gọi phương thức ReadObject. Vùng được tính toán lại trong phương pháp này. Nếu tôi chạy lại chương trình, chúng tôi sẽ lấy lại giá trị tính toán. Hãy nhớ rằng khu vực không phải là một phần của tệp tuần tự hóa. Nó được tính toán lại trong phương thức ReadObject

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//998

Phương pháp tuần tự hóa, WriteObject

Chúng ta cũng có thể viết mã tùy chỉnh khi tuần tự hóa đối tượng bằng cách bổ sung phương thức WriteObject vào lớp trực tiếp. Phương thức WriteObject chấp nhận một đối tượngOutputStream làm tham số đầu vào. Đối với phương thức WriteObject, chúng ta có thể thêm tùy chỉnh mã mà chúng ta muốn chạy trong quá trình tự hóa tuần trình

int number; number = 5; System.out.println(number);//5 number = number + 2; System.out.println(number);//7 number = number + 2; System.out.println(number);//999

Nếu bạn chạy lại chương trình trên, bạn sẽ nhận được đầu theo dõi

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';00

Tự động hóa chuỗi đối tượng tuần tự

Đối tượng của một lớp có thể chứa các đối tượng của các lớp khác. Khi tuần tự hóa và khử serialize, chúng ta có thể bắt buộc phải tuần tự hóa và khử serial hóa toàn bộ chuỗi đối tượng. Nhìn vào lớp dưới đây. Một đối tượng của lớp nhà chứa một đối tượng của lớp tường

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';01

Nhà thực hiện tuần tự hóa nơi không có tường

Please run this program ví dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';02

Điều này là do tường không phải là tuần tự hóa. Hai giải pháp có thể. Làm cho tường thông thoáng => tường sẽ không được tự hóa. Điều này làm cho trạng thái của đối tượng tường bị mất. Làm cho bức tường thực hiện tuần tự hóa => Đối tượng tường cũng sẽ được kết nối tiếp và trạng thái của đối tượng tường cùng với ngôi nhà sẽ được lưu trữ

Chu trình tuần tự hóa 1. Làm cho khoảng trống thông qua

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';03

Chu trình tuần tự hóa 2. Execute wall can be done

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';04

Với cả hai chương trình này, phương pháp chính trước đó sẽ chạy mà không ném một ngoại lệ

Nếu bạn cố gắng khử tuần tự hóa, trong ví dụ 2, trạng thái của tường đối tượng được giữ lại trong khi ở ví dụ 1, trạng thái của đối tượng tường bị mất

Tự động hóa tuần tự hóa và khởi động

Khi một lớp được tự động hóa, khởi tạo một lớp (trình xây dựng, bộ khởi động) không diễn ra. Trạng thái của các đối tượng được giữ lại như nó vốn có

Tự động hóa tuần tự và kế thừa

Tuy nhiên, trong trường hợp kế thừa (một lớp phụ và mối quan hệ siêu lớp), những điều thú vị thường xảy ra. Vui lòng xem xét ví dụ dưới đây

Lớp anh hùng mở rộng diễn viên và lớp anh hùng thực hiện tuần tự hóa. Tuy nhiên, lớp diễn viên không thực hiện tuần tự hóa

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';05

Please run bên dưới code

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';06

Mã thực thi thành công nhưng sau khi khử tuần tự hóa, giá trị của các biến thể hiện siêu lớp không được giữ lại. We are set to the ban đầu giá trị của chúng. Khi lớp con có thể nối tiếp và siêu lớp thì không, trạng thái của các biến phân lớp được giữ lại. Tuy nhiên, đối với super layer, startuping (hàm tạo và khởi động lại) lại xảy ra

Tự động hóa tuần tự và biến số tĩnh

Các biến tĩnh không phải là một phần của đối tượng. Họ không được tự hóa tuần

Chủ đề

  • Chủ đề cho phép mã Java chạy bài hát song. Trước tiên, chúng ta hãy hiểu sự cần thiết của công việc của chuỗi chuỗi và sau đó xem xét cách tạo một chuỗi và đồng bộ hóa là gì?

Cần chọn chủ đề

Chúng tôi đang tạo một ứng dụng thống kê cricket. Giải thích các bước liên quan đến ứng dụng là bước I. Tải xuống và lưu trữ Bowling Statistics => 60 phút Bước II. Tải xuống và lưu trữ thống kê đánh bóng => 60 phút Bước III. Tải xuống và lưu trữ Thống kê Fielding => 15 phút Bước IV. Hợp nhất và phân tích => 25 phút Bước I, II và III độc lập và có thể chạy song song với nhau. Chạy cá nhân Chương trình này mất 160 phút. Chúng tôi muốn chạy chương trình này trong thời gian ngắn hơn. Chủ đề có thể là một giải pháp cho vấn đề này. Chủ đề cho phép chúng tôi chạy song song bước I, II, III và chạy bước IV khi tất cả các bước I, II, III đã hoàn thành

Can ví dụ về chủ đề

Ví dụ dưới đây cho thấy cách chúng ta sẽ viết mã thường xuyên, mà không cần sử dụng các chủ đề

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';07

downloadandStorebowlingStatistic chỉ bắt đầu sau khi DownloadAndStorebattingStatistic hoàn tất thi. downloadandstorefieldingStatistic chỉ bắt đầu sau khi DownloadAndStorebowlingStatistic hoàn tất thi. Điều gì sẽ xảy ra nếu tôi muốn chạy bài hát của họ mà không chờ đợi người khác hoàn thành?

Tạo chủ đề lớp

Tạo chủ đề lớp trong Java có thể được thực hiện theo hai cách. Mở rộng lớp luồng và thực thi giao diện Runnable. Chúng ta hãy tạo BattingStatisticThread mở rộng lớp stream và BowlingStatisticThread phát triển giao diện Runnable

Tạo luồng bằng cách mở rộng lớp luồng

Lớp có thể được tạo bằng cách mở rộng lớp luồng và khai triển theo phương thức Run Run () công khai. Nhìn vào ví dụ dưới đây. Một triển khai giả cho BattingStatistic được cung cấp từ 1 đến 1000

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';08

Tạo luồng bằng cách phát triển giao diện Runnable

Lớp stream cũng có thể được tạo bằng cách khai triển giao diện Runnable và khai triển phương thức được khai báo trong giao diện Runnable ÒPublic void Run () Ó. Ví dụ dưới đây cho thấy chuỗi thống kê đánh bóng được thực hiện bằng cách phát triển giao diện Runnable

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';09

Chạy chủ đề

Chạy một luồng trong Java hơi khác nhau dựa trên cách tiếp cận được sử dụng để tạo luồng

Chủ đề được tạo ra để mở rộng lớp chủ đề

Khi sử dụng kế thừa, một đối tượng của luồng cần được tạo và bắt đầu () phương thức trên luồng cần được gọi. Hãy nhớ rằng phương thức cần được gọi là không chạy () nhưng nó là bắt đầu ()

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';10

Chủ đề đã được tạo phát triển khai RunnableInterface

Ba bước liên quan

  1. Tạo một đối tượng của bowlingstatisticthread (lớp thực hiện Runnable)
  2. Tạo một luồng đối tượng với đối tượng trước đó làm đối số của hàm tạo
  3. The method started on stream
int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';11

Ví dụ chủ đề, chương trình hoàn chỉnh

Vui lòng xem xét ví dụ hoàn chỉnh bằng cách sử dụng tất cả các đoạn mã được tạo ở trên

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';12

đầu ra

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';13

Thảo luận về ví dụ chủ đề

Đầu ra trên để xem thực thi mẫu của luồng. Đầu ra sẽ không giống nhau với mỗi lần chạy. Chúng ta có thể nhận thấy rằng chủ đề thống kê đánh bóng và chủ đề thống kê bowling đang xen kẽ trong công việc đang thực hiện. Chủ đề thống kê đánh bóng chạy đến 10, sau đó chủ đề Thống kê Bowling chạy đến 949, chủ đề thống kê đánh bóng chạy tiếp và chạy đến 384, v. v. Không có tập hợp mẫu thông thường khi các luồng chạy (đặc biệt là khi chúng có cùng mức độ ưu tiên, nhiều hơn về điều này sau. ). JVM quyết định chủ đề nào sẽ chạy vào thời điểm nào. Nếu một chủ đề đang chờ đợi đầu vào của người dùng hoặc kết nối mạng, JVM sẽ chạy các luồng chờ khác

Đồng bộ chủ đề

Do các chủ đề chạy bài hát nên một vấn đề mới phát sinh. tức là điều gì sẽ xảy ra nếu Thread1 sửa đổi dữ liệu được truy cập bởi Thread2? . Đầu tiên chúng ta hãy xem một ví dụ về vấn đề này có thể xảy ra

Ví dụ chương trình

Vui lòng xem xét bảng tính lớp dưới đây. Nó bao gồm ba ô và cũng là một phương thức thiết lập và nhận tổng đặt các giá trị vào ô và tổng hợp chúng

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';14

Run next connection

Trước tiên chúng ta hãy chạy ví dụ trên đường nối tiếp và xem đầu ra sẽ là gì

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';15

Đầu ra sẽ bao gồm bội số 6 luôn vì chúng tôi đang gọi là I, I2 và I3 và tóm tắt. Vì vậy, kết quả thường là i*6 khi tôi chạy từ 0 đến 3

Ví dụ chương trình sử dụng các chủ đề

Bây giờ chúng ta hãy chạy lớp bảng tính trong một luồng. Code ví dụ dưới đây

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';16

Chúng tôi đang tạo 2 trường hợp của luồng bằng giao diện, một và hai. And Method started being call to run stream. Cả hai chủ đề đều chia sẻ phiên bản của lớp bảng tính, bảng tính. đầu ra

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';17

Thảo luận đầu ra Những gì chúng ta thấy là các lần chạy khác nhau có kết quả khác nhau. That is queued with the titles. Điều không mong đợi là xem các số như 1, 9, 15 và 3 trong đầu ra. Chúng tôi đang mong đợi sẽ thấy bội số của 6 trong đầu ra (như trong lần chạy nối tiếp trước đó) nhưng chúng tôi thấy các số đó không phải là bội số của 6. Tại sao điều này xảy ra? . Please view test code in method SetAndgetSum

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';18

Sau khi đặt giá trị cho mỗi ô, có một cuộc gọi cho luồng ngủ một thời gian. Sau khi chủ đề 1 đặt giá trị của ô1, nó sẽ đi vào giấc ngủ. Vì vậy, Thread2 bắt đầu thực thi. Nếu luồng 2 đang thực thi thì return ô1 + ô2 + ô3; . Điều này dẫn đến kết quả bất ngờ mà chúng ta thấy khi phương thức được chạy song song. Những thứ được giải thích là một kịch bản có thể. Có một số kịch bản như vậy có thể. Cách bạn có thể ngăn chặn nhiều luồng thực thi cùng một phương thức là bằng cách sử dụng từ khóa được đồng bộ hóa trên phương thức. Nếu một phương thức được đánh dấu đồng bộ, một luồng khác chỉ được truy cập vào phương thức khi không có chủ đề nào khác đang thực hiện phương thức. Please đánh dấu phương pháp như được đồng bộ hóa

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';19

Đầu ra của chương trình bây giờ là Ò0 0 6 6 12 12 18 18ó. Đây là đầu dự kiến, tất cả các số là bội số của 6

Chủ đề & Từ khoá đồng bộ

Một phương pháp hoặc một phần của phương pháp có thể được đánh dấu là đồng bộ hóa. JVM sẽ đảm bảo rằng chỉ có phần chạy mã được đồng bộ hóa bất cứ lúc nào. Tuy nhiên, đồng bộ hóa luồng không phải là không có hậu quả. Sẽ có một tác động hiệu quả khi phần còn lại của các luồng chờ đợi cho luồng hiện tại đang thực hiện một khối được đồng bộ hóa. Vì vậy, mã càng ít càng tốt nên được đánh giá là đồng bộ hóa

Ví dụ phương pháp đồng bộ hóa

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';20

Ví dụ khối đồng bộ

Tất cả các mã đi vào khối đều được đồng bộ hóa trên các đối tượng hiện tại

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';21

Ví dụ Phương pháp tĩnh đồng bộ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';22

Ví dụ block dong bộ hóa tĩnh

Các khối tĩnh được đồng bộ hóa trên lớp

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';23

Các phương pháp và khối đồng bộ hóa tĩnh và không tĩnh

Phương pháp tĩnh và khối được đồng bộ hóa trên lớp. Các phương thức và khối có thể hiện được đồng bộ hóa trên thể hiện của lớp, tức là một đối tượng của lớp. Các phương pháp đồng bộ hóa tĩnh và các phương pháp đồng bộ hóa không ảnh hưởng đến nhau. Điều này là do chúng được đồng bộ hóa trên hai điều khác nhau

Trạng thái của một chủ đề

Các trạng thái khác nhau mà một chủ đề có thể được xác định là trạng thái lớp

  • MỚI;
  • CHẠY ĐƯỢC;
  • ĐANG CHẠY;
  • Bị chặn/chờ đợi;
  • chấm dứt/chốt;

Ví dụ chương trình

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';24

Trạng thái của một chủ đề - ví dụ

Một luồng ở trạng thái mới khi một đối tượng của luồng được tạo nhưng phương thức bắt đầu chưa được gọi. Ở cuối dòng 1, BattingThread1 đang ở trạng thái mới. Một chủ đề ở trạng thái có thể chạy được khi nó có đủ điều kiện để chạy, nhưng chưa chạy. . Trong ví dụ trên, đôi khi chuỗi thống kê đánh bóng đang chạy và tại một thời điểm khác, chuỗi thống kê bowling đang chạy. Khi chủ đề thống kê đánh bóng đang chạy, chuỗi thống kê bowling đã sẵn sàng để chạy. Chỉ là lịch trình chọn bảng thống kê chủ đề đánh bóng để chạy tại trường hợp đó và lùi lại. Khi chủ đề thống kê đánh bóng đang chạy, chuỗi thống kê bowling ở trạng thái có thể chạy được (lưu ý rằng chuỗi thống kê bowling không chờ đợi bất kỳ điều gì ngoại trừ bộ lập lịch để chọn nó và chạy nó). Một chủ đề đang chạy ở trạng thái khi nó là tên hiện tại, những gì khác để nói, đang chạy. Một chủ đề ở trạng thái bị chặn/chờ/ngủ khi không đủ điều kiện để chạy bởi bộ lập lịch. Chủ đề còn sống nhưng đang chờ đợi một cái gì đó. Một ví dụ có thể là một khối đồng bộ. Nếu Thread1 nhập khối đồng bộ, nó sẽ chặn tất cả các luồng nhập mã đồng bộ khác vào cùng một lớp hoặc lớp có thể hiển thị. Tất cả các chủ đề khác được chọn đều ở trạng thái bị chặn. Một chủ đề ở trạng thái chết/chấm dứt khi nó đã hoàn thành việc thực thi. Khi một chủ đề đi vào trạng thái chết, nó không thể được thực hiện trở lại

Ưu tiên hàng đầu

Trình lập lịch có thể được yêu cầu phân bổ CPU nhiều hơn cho một luồng bằng cách tăng mức độ ưu tiên của luồng. Mỗi luồng trong Java được gán ưu tiên mặc định 5. Ưu tiên này có thể được tăng hoặc giảm (phạm vi từ 1 đến 10). Nếu hai luồng đang chờ, bộ lập lịch chọn luồng với mức ưu tiên cao nhất sẽ được chạy. Nếu tất cả các luồng có ưu tiên như nhau, bộ lập lịch sau đó chọn một số trong số chúng một cách ngẫu nhiên. Các chương trình thiết kế để chúng tôi không phụ thuộc vào ưu tiên

Ví dụ ưu tiên chủ đề

Xem xét ví dụ chủ đề được khai báo dưới đây

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';25

Ưu tiên của luồng có thể được thay đổi bằng cách gọi phương thức đặtPriority trên luồng

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';26

Java cũng cung cấp các hằng số đã được xác định trước

Phương thức tham gia luồng

Phương thức tham gia là một phương thức có thể hiện trên lớp luồng. Hãy xem một ví dụ nhỏ để hiểu phương thức tham gia làm gì. Vui lòng xem xét tuyên bố của luồng bên dưới. Chủ đề2, chủ đề3, chủ đề4

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';27

Giả sử chúng tôi muốn chạy song song Thread2 và thread3 nhưng Thread4 chỉ có thể chạy khi Thread3 kết thúc. Điều này có thể đạt được bằng phương pháp tham gia

Tham gia ví dụ Phương thức

Nhìn vào ví dụ dưới đây

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';28

chủ đề3. Tham gia () Phương thức GỌI CALL Thực hiện phương thức chính dừng lại để đến khi Thread3 hoàn tất thi. Sau đó, phương thức Thread4. start() được gọi, đặt Thread4 vào trạng thái có thể chạy được

Phương thức tham gia quá tải

Phương pháp tham gia cũng có một phương thức quá tải nhận thời gian tính bằng mili giây dưới dạng tham số

Trong ví dụ chờ đợi, luồng phương thức chính sẽ 2000 ms hoặc kết thúc thực hiện Thread4, tùy theo mức tối thiểu

Chủ đề, phương pháp tĩnh

Phương pháp chủ đề chức năng

Năng suất là một phương pháp tĩnh trong lớp luồng. Nó giống như một chủ đề nói rằng "Tôi có đủ thời gian trong ánh đèn sân khấu. Một số chủ đề khác có thể chạy tiếp theo không?". Một cuộc gọi để mang lại phương thức thay đổi trạng thái của luồng từ đang chạy sang Runnable. Tuy nhiên, bộ lập lịch có thể chọn cùng một luồng để chạy lại, đặc biệt nếu đó là luồng có mức độ ưu tiên cao nhất. Tóm tắt là phương thức hiệu suất là một yêu cầu từ một chủ đề để đi đến trạng thái có thể chạy được. Tuy nhiên, bộ lập lịch có thể ngay lập tức thiết lập chuỗi trở lại trạng thái đang chạy

Phương pháp ngủ chủ đề

Ngủ là một phương pháp tĩnh trong lớp chủ đề. Phương pháp Ngủ có thể ném một đoạn gián đoạn. Phương pháp Chủ đề ngủ trưa chủ đề thực hiện đi ngủ với số lượng mili giây được chỉ định

Chủ đề và bộ điều khiển

Hãy xem xét một số vấn đề đang chờ giải quyết trong đó Thread1 đang Thread2 (Thread1 cần một đối tượng có mã được đồng bộ hóa được thực hiện bởi Thread1) và Thread2 đang chờ Thread1. Vấn đề này được gọi là bế tắc. Trong một tình huống xử lý tắc nghẽn, cả hai chủ đề này sẽ chờ đợi nhau mãi mãi

Ví dụ về bế tắc

Vui lòng xem xét các lớp ví dụ dưới đây. Tài nguyên đại diện cho bất kỳ tài nguyên nào bạn cần truy cập. Kết nối mạng, kết nối cơ sở dữ liệu, v. v. The activity could show an could be done on this resource. Giả sử rằng hoạt động cần có hai tài nguyên, Resource1 và Resource2 và cung cấp hai phương thức hoạt động1 và phương thức2. Nhìn vào chương trình dưới đây

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';29

Phương thức 1 thực thi một số mã trên Resource1 trước và sau đó thực thi một số mã trên Resource2. Phương thức 2 thực hiện ngược. Chúng tôi sử dụng cuộc gọi gọi phương thức ngủ để phỏng vấn thực tế rằng các hoạt động này có thể mất một khoảng thời gian để hoàn thành. Hãy tạo hai luồng chia sẻ thao tác tác vụ trên mã bên dưới. Chủ đề và một hai hiện đang chia sẻ thao tác đối tượng. Mã luồng chạy cả Phương thức hoạt động 1 và Phương thức 2

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';30

Khi thực hiện chương trình này chỉ bị treo, vì tắc nghẽn. Để làm cho những gì đang xảy ra phía sau màn hình rõ ràng hơn, hãy thêm vào một vài hệ thống trong lớp hoạt động

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';31

đầu ra

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';32

Bây giờ chúng ta có hai chủ đề đang chờ tài nguyên do nhau giữ chặt. Điều này dẫn đến tắc

Chủ đề - Chờ, thông báo và thông báo cho các phương thức

Vui lòng xem xét ví dụ dưới đây. luồng máy tính toán hai giá trị. tổng tối đa triệu và tổng tối đa 10 triệu. Chương trình chính sử dụng đầu ra của tổng số tiền tối đa

ví dụ 1

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';33

đầu ra

Đầu ra được in bằng 0. Điều này là do luồng chưa hoàn thành để tính toán giá trị của sumuptomillion khi phương thức chính trong giá trị đầu ra. Chúng ta phải tìm cách ngăn chặn phương pháp chính chạy đến khi sumuptomillion được tính toán. Một tùy chọn là sử dụng phương thức tham gia. Tuy nhiên, phương thức tham gia sẽ làm cho phương pháp dự đoán chính xác cho đến khi cả hai hoạt động (Sumuptomillion và Sumuptotenmillion) được hoàn thành. Nhưng, chúng tôi muốn phương pháp chính chỉ chờ Sumuptomillion. Chúng ta có thể đạt được điều này bằng cách sử dụng các phương pháp chờ đợi và thông báo. Chờ và thông báo các phương thức duy nhất có thể được sử dụng trong bối cảnh được đồng bộ hóa

Ví dụ với các phương thức chờ đợi và thông báo

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';34

đầu ra

Đầu ra được in bằng 0. Điều này là do luồng chưa hoàn thành để tính toán giá trị của sumuptomillion khi phương thức chính trong giá trị đầu ra. Chúng ta phải tìm cách ngăn chặn phương pháp chính chạy đến khi sumuptomillion được tính toán. Một tùy chọn là sử dụng phương thức tham gia. Tuy nhiên, phương thức tham gia sẽ làm cho phương pháp dự đoán chính xác cho đến khi cả hai hoạt động (Sumuptomillion và Sumuptotenmillion) được hoàn thành. Nhưng, chúng tôi muốn phương pháp chính chỉ chờ Sumuptomillion. Chúng ta có thể đạt được điều này bằng cách sử dụng các phương pháp chờ đợi và thông báo. Chờ và thông báo các phương thức duy nhất có thể được sử dụng trong bối cảnh được đồng bộ hóa

Ví dụ với các phương thức chờ đợi và thông báo

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';35int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';36

Phương pháp đợi ví dụ

Dưới đây đoạn trích dẫn cho thấy cách chờ đợi được sử dụng trong chương trình trước đó. Phương thức chờ đã được xác định trong lớp đối tượng. Điều này làm cho chủ đề chờ đợi cho đến khi nó được thông báo

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';37

Một sự kết hợp giữa các phương thức chờ đợi và thông báo làm cho phương pháp chính để chờ đợi khi tổng số triệu được tính toán. Tuy nhiên, không phải là phương pháp chính không đợi số tiền mười triệu được tính toán

Phương pháp thông báo

Nếu nhiều hơn một luồng đang chờ một đối tượng, chúng ta có thể thông báo tất cả các luồng bằng cách sử dụng phương thức thông báo

undefault

  • Các xác nhận được giới thiệu trong Java 1. 4. Chúng cho phép bạn xác nhận các giả định. Nếu một xác nhận thất bại (nghĩa là trả về sai), AssitSError sẽ bị loại bỏ (nếu các xác nhận được bật). Khẳng định là một từ khóa trong Java kể từ 1. 4. Trước 1. 4, khẳng định có thể được sử dụng làm định danh

Undeficit

To compile code by using 1. 3, bạn có thể sử dụng lệnh bên dưới javac -source 1. 3 mã cũ. java => khẳng định có thể sử dụng làm định danh với -source 1. 4,1,5,5,1. 6,6 => Khẳng định không thể sử dụng định danh

Các xác nhận có thể dễ dàng được bật và tắt nhanh chóng. Các xác nhận đã được vô hiệu hóa theo mặc định

Cho phép xác nhận

Bật xác nhận. java -EA com. trong28 phút. xác nhận ví dụ

Tắt xác nhận

Tắt xác nhận. java -da com. trong28 phút. xác nhận ví dụ

Bật xác nhận trong các gói cụ thể

Có chọn bộ lọc các xác nhận trong gói chỉ Java -EA. com. rithus

Có chọn bộ lọc các xác nhận trong một gói và thanh toán con của nó chỉ Java -EA. com. in28 phút

Bật xác nhận bao gồm các lớp hệ thống

Java -ea -esa

Ví dụ về điều kiện khẳng định cơ bản

Định nghĩa cơ bản được hiển thị trong ví dụ dưới đây

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';38

Undefault with error information. Ví dụ

Nếu cần - thông báo lỗi có thể được thêm vào một khẳng định. Nhìn vào ví dụ dưới đây

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';39

Định nghĩa sai - không xác nhận

Không nên sử dụng các xác nhận để xác nhận dữ liệu đầu vào cho một phương thức khai báo hoặc đối số dòng lệnh. IlledArgumentException sẽ là một lựa chọn tốt hơn

Trong phương pháp công khai, chỉ sử dụng các xác nhận để kiểm tra các trường hợp không xảy ra

Thu gom rác thải

  • Bộ sưu tập rác là một cái tên được đặt cho quản lý bộ nhớ tự động quản lý trong Java. Mục tiêu của bộ sưu tập là giữ càng nhiều ngăn xếp có sẵn (miễn phí) để chương trình càng tốt. JVM loại bỏ các đối tượng trên ngăn xếp mà không có tài liệu tham khảo từ ngăn xếp

Ví dụ thu gom rác

Giả sử phương thức dưới đây được gọi từ một hàm

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';40

Một đối tượng của lớp Gregoriancalendar được tạo trên ngăn xếp bằng dòng đầu tiên của hàm với một biến tham chiếu lịch

Sau khi chức năng kết thúc thực thi, biến tham chiếu lịch trình không còn hiệu lực. Do đó, không có tài liệu tham khảo nào cho các đối tượng được tạo trong phương thức

JVM nhận điều này ra và loại bỏ các đối tượng khỏi ngăn xếp. This is call is a collection file

Trình thu gom rác được chạy khi nào?

Bộ sưu tập rác chạy theo ý thích bất thường và ảo giác của JVM (nó không phải là tiền tệ như vậy). Các tình huống có thể xảy ra khi bộ sưu tập rác có thể chạy là 1. when memory has available on heap low 2. khi CPU miễn phí

Bộ sưu tập rác, điểm quan trọng

Về mặt chương trình, chúng ta có thể yêu cầu (hãy nhớ rằng đó chỉ là một yêu cầu - không phải là một đơn đặt hàng) JVM để chạy bộ sưu tập rác bằng phương thức gọi Hệ thống. gc()

JVM có thể ném OutofMemoryException khi bộ nhớ đầy đủ và không có đối tượng nào trên ngăn xếp đủ điều kiện để thu gom rác

Phương thức hoàn thiện () trên đối tượng được chạy trước khi đối tượng bị loại bỏ khỏi ngăn xếp từ bộ thu rác. Chúng tôi khuyên bạn không nên viết bất kỳ mã nào trong Finalize ();

khối khởi tạo

  • Khối khởi tạo - Mã chạy khi một đối tượng được tạo hoặc một lớp được tải

Các loại khối khởi tạo

Có hai loại khối khởi động để khởi động tĩnh. mã chạy khi một lớp được tải xuống. Phiên bản khởi tạo phiên bản. Mã chạy khi một đối tượng mới được tạo

booting booting

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';41

Mã trong tĩnh {và} được gọi là khởi động tĩnh. Điều này chỉ được chạy khi lớp được tải lần đầu tiên. Chỉ các biến tĩnh có thể truy cập được trong quá trình khởi tạo tĩnh

ví dụ đầu ra

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';42

Mặc dù ba trường được tạo ra nhưng bộ khởi động tạo tĩnh chỉ được chạy một lần

Khối khởi động có thể được thực hiện

Hãy xem xét một ví dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';43

Mã trong quá trình khởi động có thể được chạy mỗi khi một phiên bản của lớp được tạo

ví dụ đầu ra

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';44

Mặc dù ba trường được tạo ra nhưng bộ khởi động tạo tĩnh chỉ được chạy một lần

  • Khối khởi động có thể được thực hiện

Hãy xem xét một ví dụ

Mã trong quá trình khởi động có thể được chạy mỗi khi một phiên bản của lớp được tạo

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';45

Javaước đậu

Khi nào một lớp Java được gọi là đậu?

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';46

Ví dụ về Bean Bean

  • Xem xét ví dụ dưới đây
  • Getters không nên có bất kỳ đối số nào được thông qua
  • Các setters nên lấy một số đối số (giá trị thuộc tính) cùng loại với giá trị trả về của getter
  • Getter name not Boolean must be (Get + PropertyName)
  • Tên Getter Boolean có thể là (get + propertyName) hoặc (là + propertyName)
  • Tất cả các setters phải được đặt tên (set + propertyName)

Ví dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';47

Người nghe quy định đặt tên

Các phương thức đăng ký/thêm trình nghe nên sử dụng tiền tố "thêm" và hậu tố "người nghe". Họ nên chấp nhận 1 tham số - đối tượng người nghe sẽ được thêm vào

Thí dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';48

Các phương thức hủy đăng ký/xóa người nghe nên sử dụng tiền tố "xóa" và hậu tố "người nghe". Họ sẽ chấp nhận 1 tham số - đối tượng người nghe sẽ bị xóa

Thí dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';49

xuyên suốt biểu tượng cảm xúc

  • Biểu thức chính quy làm cho cú pháp phân tích, quét và chia một chuỗi rất dễ dàng. Đầu tiên chúng tôi sẽ xem xét cách bạn có thể đánh giá một biểu thức thông thường trong Java, sử dụng các lớp patter, matcher và máy quét. Sau đó chúng tôi sẽ xem xét làm thế nào để viết một biểu thức chính quy

Biểu thức chính quy trong Java, Matcher và mẫu

Mã dưới đây để xem cách thực hiện một biểu thức thông thường trong Java

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';50

Matching class

Lớp Matcher có các phương thức tiện ích sau. find(), start(), group(). Phương thức tìm kiếm () trả về true cho đến khi có một đối sánh cho biểu thức chính quy trong chuỗi. start() method start() for only start of the battle. Phương thức nhóm () trả về phần phù hợp của chuỗi

Ví dụ

Người nghe quy định đặt tên

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';51

Các phương thức đăng ký/thêm trình nghe nên sử dụng tiền tố "thêm" và hậu tố "người nghe". Họ nên chấp nhận 1 tham số - đối tượng người nghe sẽ được thêm vào

Thí dụ

Các phương thức hủy đăng ký/xóa người nghe nên sử dụng tiền tố "xóa" và hậu tố "người nghe". Họ sẽ chấp nhận 1 tham số - đối tượng người nghe sẽ bị xóa

Thí dụ

xuyên suốt biểu tượng cảm xúc

Biểu thức chính quy làm cho cú pháp phân tích, quét và chia một chuỗi rất dễ dàng. Đầu tiên chúng tôi sẽ xem xét cách bạn có thể đánh giá một biểu thức thông thường trong Java, sử dụng các lớp patter, matcher và máy quét. Sau đó chúng tôi sẽ xem xét làm thế nào để viết một biểu thức chính quy

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';52

Biểu thức chính quy trong Java, Matcher và mẫu

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';53

Mã dưới đây để xem cách thực hiện một biểu thức thông thường trong Java

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';54

Matching class

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';55

Lớp Matcher có các phương thức tiện ích sau. find(), start(), group(). Phương thức tìm kiếm () trả về true cho đến khi có một đối sánh cho biểu thức chính quy trong chuỗi. start() method start() for only start of the battle. Phương thức nhóm () trả về phần phù hợp của chuỗi

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';56

Chúng ta hãy chạy phương thức này với một biểu thức thông thường để tìm kiếm ò12ó trong chuỗi Ò122345612ó

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';57

đầu ra

  • Đầu ra để xem các chuỗi phù hợp 12, 12. Ngoài ra, được hiển thị trong đầu ra chỉ là số bắt đầu của mỗi trận đấu. 12 first face bắt đầu từ mục 0. 12 next in string started at INDEX 7
int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';58

Create a normal expression for Java

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';59

Vui lòng kiểm tra các biểu thức chính quy bằng cách sử dụng phương thức chúng tôi đã tạo trước đó. biểu thức chính quy ()

Đơn giản biểu thức thông thường

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';60

Search 12 in string

Một số ký tự được thoát ra bởi \ có ý nghĩa đặc biệt trong các biểu thức chính quy. Ví dụ, /s phù hợp với một ký tự khoảng trắng. Hãy nhớ rằng để đại diện cho \ trong một chuỗi, chúng ta nên dành cho nó. Hãy cho tôi xem một vài ví dụ dưới đây

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';61

Nhân vật không gian - \s

Chữ số - \ D

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';62

Ký tự từ (chữ cái, chữ số hoặc gạch dưới) - \ w

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';63

Dấu sao lưu bảng chữ cái được sử dụng trong các biểu thức thông thường để tìm kiếm một chuỗi các ký tự. Một vài ví dụ dưới đây. Tìm kiếm A, B, C, D, 1,2,3,4 => Lưu ý rằng điều này không tìm kiếm vốn A, B, C, D

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';64

Biểu thức chính quy, nhiều ký tự

được sử dụng trong biểu thức chính quy để tìm kiếm 1 hoặc nhiều ký tự. Ví dụ A+ tìm kiếm 1 hoặc nhiều ký tự A

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';65

Tìm kiếm hoặc nhiều ký tự từ A đến Z (chỉ có trường hợp nhỏ)

Thong thuong icon, find the repeat

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';66

Biểu thức thông thường có thể được kết hợp với nhau để tìm kiếm một sự kết hợp. A+ B+ nhìn 1 trở lên A và 1 hoặc nhiều B cạnh nhau. Lưu ý rằng chỉ có A hoặc chỉ có B không phù hợp

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';67

* - 0 hoặc lặp lại nhiều lần

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';68

Biểu thức dưới đây tìm kiếm 1 hoặc nhiều A theo sau là 0 hoặc nhiều B sau đó là 1 hoặc nhiều C. ABC => khớp. AC => match (vì chúng tôi đã sử dụng * cho B). AB => không khớp

?

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';69

Thí dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';70

Các phương thức hủy đăng ký/xóa người nghe nên sử dụng tiền tố "xóa" và hậu tố "người nghe". Họ sẽ chấp nhận 1 tham số - đối tượng người nghe sẽ bị xóa

  • Thí dụ

Phương pháp ví dụ để mã hóa

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';71

Thí dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';72

Mã thông báo bằng cách sử dụng lớp máy quét

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';73

Thí dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';74

Scanning class. Các chức năng khác nhau

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';75

Máy quét có các chức năng hữu ích hơn ngoài việc chỉ tìm kiếm một dấu phân cách

Thí dụ

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';76

đầu ra

int i = 15; long longValue = 1000000000000l; byte b = (byte)254; float f = 26.012f; double d = 123.567; boolean isDone = true; boolean isGood = false; char ch = 'a'; char ch2 = ';';77

Biểu thức

Đối tượng được tạo ở đâu?

làm

  • Replace_______484Java when started code
  • // getters và setters bị loại bỏ để giữ cho ví dụ rút ngắn
  • Java se vs me vs ee
  • Kiểm tra các dòng dài bị cắt trong pdf
  • Ghi chú từ cuộc nói chuyện của Venkat
    • Được thiết kế cho một thế giới khác - Chim cánh cụt
    • Tiếc - khủng khiếp - những năm 1970
    • FP - Tính toán Lambda -1929
    • Sự phức tạp từ các vấn đề so với mức độ phức tạp từ các giải pháp
    • Lập trình có cấu trúc - Một lần bắt đầu một lối đi ????
    • Chức năng lập trình
      • Lesser file
      • Phát biểu như vậy với biểu thức
      • Chức năng thuần túy - Không có tác dụng phụ và các phụ thuộc không thay đổi
      • Tính minh bạch tham chiếu
      • Chức năng thuần túy
        • bình thường
        • Tính minh bạch tham khảo
        • ghi nhớ
        • dễ dàng hơn để kiểm tra
        • may be being đánh giá một cách thoải mái
      • Chức năng cấp cao hơn
        • Lấy/tạo/trả lại Đối tượng Vs Lấy/tạo/trả lại Chức năng
      • Java Tương lai - mệnh lệnh + oops -> chức năng + oops
      • Luồng - chức năng không được đánh giá trên tất cả các dữ liệu. Nó cần một bộ sưu tập các chức năng (hợp nhất - các hoạt động trung gian kết hợp) và thực hiện chúng trên mỗi phần dữ liệu
        • Đường ống chức năng, chức năng
        • "Mẫu đường ống làm mát" -> Martin Fowler
      • Lambda - Không có quốc tịch
      • Close the status status
    • Mã là trách nhiệm không phải là một tài sản
    • Xử lý ngoại lệ - Lời hứa
    • Lập trình phản hồi
      • Error, data and channel end
      • Error is a best class
      • Xử lý lỗi khi xuống luồng

Complete to key learning Java

Xử lý sự cố

  • Tham khảo Hướng dẫn giải quyết sự cố của chúng tôi-https. //github. com/in28minutes/in28minutes-forid

Danh sách phát YouTube - hơn 500 video

Bấm vào đây - 30+ danh sách phát với hơn 500 video trên Spring, Spring Boot, Rest, Microservice và The Cloud

Tiếp tục học tập trong 22 phút

In28minutes đang tạo ra các giải pháp tuyệt vời cho bạn học Boot Spring, Full Stack và The Cloud - Docker, Kubernetes, AWS, React, Angular, v. v. - Kiểm tra tất cả các khóa học của chúng tôi ở đây

Chủ đề