CodeGym /Blog Java /Ngẫu nhiên /Tầng cũ 09
John Squirrels
Mức độ
San Francisco

Tầng cũ 09

Xuất bản trong nhóm

Kiến thức so với kỹ năng

Tầng cũ 09 - 1Đại học đã dạy chúng tôi rằng không có sự khác biệt lớn giữa lý thuyết và thực hành. Chà, chắc chắn bạn hiểu điều đó không giống nhau. Nhưng bạn không thấy sự khác biệt cốt lõi. Tuy nhiên, có một. Hầu hết mọi người đặt dấu bằng giữa “Tôi biết” và “Tôi có thể”. Bạn có? Làm thế nào về một vài ví dụ?
  1. Tôi biết rằng hút thuốc có hại cho tôi, nhưng tôi hút thuốc.
  2. Tôi biết rằng thức ăn nhanh có hại cho tôi, nhưng tôi vẫn ăn.
  3. Tôi biết quy định giao thông nhưng tôi không thể lái xe.
  4. Tôi biết chạy bộ là tốt cho tôi nhưng tôi không chạy bộ vào buổi sáng.
Thường xảy ra trường hợp mọi người coi “tôi biết” thay cho “tôi có thể”. Đó là một ví dụ tốt với quy định giao thông. Nếu một người biết các quy định và biết cách lái xe, điều đó có nghĩa là anh ta có thể lái xe? Không. Nếu anh ta nghĩ rằng anh ta biết lái xe thì sao? Vậy tại sao anh ta cần một người hướng dẫn – anh ta đã biết mọi thứ. Khi bạn chắc chắn rằng mình đã biết mọi thứ thì có lẽ bạn sẽ không học được điều gì mới. Và nếu bạn chắc chắn rằng bạn biết cách làm mọi thứ, bạn sẽ không học. Một ý nghĩ như thế này thậm chí sẽ không vượt qua tâm trí của bạn. Và điều đó có nghĩa là bạn sẽ bỏ lỡ tất cả những cơ hội tuyệt vời để học hỏi điều gì đó. Đại học thông thường chỉ cung cấp cho bạn kiến ​​thức; bạn sẽ phải tự mình đạt được các kỹ năng. Nhưng tôi nghe thấy gì? Bạn đã có thực hành bên cạnh lý thuyết ở trường đại học của bạn? Ok, nếu bạn học trên khoa vật lý, làm một mô hình hoạt động của động cơ hơi nước với hiệu suất ít nhất là 20%. Tôi cá là bạn biết cách làm, nhưng bạn sẽ không thực sự làm được, phải không? Bạn là một nhà hóa học ? Làm bột không khói. Bạn biết làm thế nào, nhưng bạn không thể, ha? Nhà toán học phải không? Tính quỹ đạo của đạn pháo. Đừng quên tính đến hình dạng của vỏ. Các dấu chấm toán học không bay trong cuộc sống thực. Và không có ngựa hình cầu. Tầng cũ 09 - 2Nhà sinh vật học? Phân lập penicilin. Loại nấm mốc này phát triển trên dưa, vì vậy bạn biết. Bạn biết làm thế nào - tuyệt vời! Bạn có làm được không? Nhà kinh tế?Thực hiện một dự báo về giá tăng trên dầu. Xong? Và bây giờ hãy biến nó thành 2.000 đô la hoặc 200.000 đô la một năm dựa trên dự đoán của bạn. Bạn đã bao giờ chơi trên FOREX chưa? Vì tiền thật? Hay bạn chỉ biết nó là gì? Kinh tế quốc tế? Tuyệt vời! Tôi mở công ty nước ngoài ở đâu? Ở Hong-Cong, Ireland hay ở USA. Tại sao? Ngay cả khi bạn biết điều đó, điều đáng nghi ngờ, bạn sẽ khó có thể làm được, vì bạn chưa bao giờ thực sự làm điều đó. Bạn thậm chí không có chút manh mối nào về cách thực hiện. Ồ, bạn đã không học điều đó ở trường đại học? Tôi có quyền gì để giao cho bạn những nhiệm vụ mà bạn chưa chuẩn bị? Vì đây là những nhiệm vụ của cuộc sống thực. Thực hành IS này , tất cả những gì bạn đã học ở trường đại học là: ngựa hình cầu, cạnh tranh hoàn hảo – không có gì tồn tại trong cuộc sống thực. Nhưng tại sao tôi lại quên đề cập đếnchuyên gia tiếp thị ? Cách tốt nhất để tiêu 500 đô la của tôi để càng nhiều người biết về bài giảng của tôi càng tốt là gì? Trên quảng cáo? Bạn có biết rằng không chỉ quảng cáo cổ điển đã lỗi thời mà cả khái niệm USP (đề xuất bán hàng độc nhất), mà tôi chắc chắn rằng bạn đã được dạy ở trường đại học như một liều thuốc gần như độc nhất. Quên bạn biết bất cứ điều gì. Hãy tự hỏi bản thân – tôi có thể làm gì? Hữu ích, ý tôi là? Một cái gì đó mọi người sẽ trả tiền cho? Tiền tốt, ý tôi là? Vì vậy, các bạn, hãy bày tỏ lòng biết ơn đối với một khóa học tuyệt vời như CodeGym. Nhờ nó, bạn sẽ không chỉ biết cách lập trình mà còn thực sự có thể làm được. Bạn cũng sẽ có thể kiếm được một công việc và kiếm được nhiều tiền trong một vài năm. Tôi hy vọng số tiền này sẽ đủ để sống tốt đẹp và ấm cúng. Tôi sẽ nói lại một lần nữa, để bạn nhớ rằng: bạn biết gì không quan trọng. Điều quan trọng duy nhất là bạn có những kỹ năng hữu ích nào, những kỹ năng mà mọi người sẵn sàng trả tiền cho bạn. Bạn càng sớm hiểu điều này thì càng tốt.

Bạn đã đạt đến một cấp độ mới

Cấp 9

Cấp Cũ 09 - 3

1 Risha, Dấu vết ngăn xếp

Tầng cũ 09 - 4- Chào! Hôm nay tôi sẽ cho bạn biết dấu vết ngăn xếp là gì. Nhưng trước tiên hãy để tôi giải thích cho bạn ngăn xếp là gì. - Hãy tưởng tượng một chồng giấy tờ - bài tập cho một nhân viên thư ký nào đó. Một nhiệm vụ mới có thể được đặt lên trên cùng của ngăn xếp và anh ta sẽ nhận nhiệm vụ từ trên cùng của ngăn xếp. Vì vậy, các nhiệm vụ sẽ được thực hiện không phải trên một ai đến trước. Mỗi khi thư ký nhận nhiệm vụ cuối cùng. Cấu trúc bộ sưu tập như vậy được gọi là ngăn xếp . - Trong Java có một tập hợp đặc biệt - Stack. Bộ sưu tập này có các phương thức «thêm một phần tử» và «lấy (lấy/lấy đi) một phần tử». Như bạn đã biết, phần tử được thêm vào cuối cùng sẽ được lấy trước. - Hừm. Nó không khó, tôi đoán vậy. - Khỏe. Sau đó, hãy để tôi giải thích dấu vết ngăn xếp là gìlà. - Hãy tưởng tượng rằng trong Java hàm А gọi hàm B , và hàm sau gọi hàm C , đến lượt nó gọi hàm D . Vì vậy, để thoát khỏi chức năng B , trước tiên bạn phải thoát khỏi chức năng C và để làm như vậy, bạn phải thoát khỏi chức năng D . Điều này rất giống với một ngăn xếp. - Và điểm tương đồng là gì? - Trong ngăn xếp, để đến được một nhiệm vụ nào đó, bạn cũng phải hoàn thành tất cả các nhiệm vụ được đưa lên trên. - Chà, nó cũng giống như một phép loại suy, nhưng tôi không chắc liệu mình có hiểu đúng mọi thứ không. - Nhìn đây. Trong Java, ngăn xếp là một tập hợp các phần tử. Nó giống như những tờ giấy trong một chồng. Để lấy tờ thứ ba từ trên xuống, bạn phải lấy tờ thứ hai, nhưng trước đó bạn phải lấy tờ thứ nhất. Bạn luôn có thể đặt và lấy các trang tính, nhưng bạn chỉ có thể đặt chúng ở trên cùng và chỉ lấy từ trên xuống. Điều tương tự cũng áp dụng cho lệnh gọi hàm. Hàm А gọi hàm B , hàm sau gọi hàm C . Để thoát A , trước tiên bạn phải thoát B , và để làm điều này bạn phải thoát C . - Đợi tí. Nếu tôi hiểu đúng, toàn bộ ngăn xếp sẽ biến thành «chỉ trang cuối cùng được đặt trên ngăn xếp mới có thể được lấy» và «đầu tiên, hàm được gọi cuối cùng sẽ thoát». Là vậy sao? - Đúng. Vì vậy, chuỗi các lệnh gọi hàm là «ngăn gọi hàm» hoặc đơn giản là «ngăn xếp lệnh gọi». Chức năng được gọi cuối cùng phải được kết thúc trước. Hãy xem ví dụ: Tầng cũ 09 - 5- OK. Tôi đoán mọi thứ đều rõ ràng với lệnh gọi hàm. Nhưng StackTraceElement này là gì ? - Máy ảo Java ghi nhật ký tất cả các lệnh gọi hàm. Với mục đích này, nó có một bộ sưu tập đặc biệt - ngăn xếp. Khi một hàm gọi một hàm khác, JVM sẽ đặt một phần tử mới StackTraceElement vào ngăn xếp này. Khi chức năng kết thúc, phần tử bị xóa khỏi ngăn xếp. Do đó, ngăn xếp này luôn lưu trữ thông tin cập nhật về trạng thái hiện tại của «ngăn xếp lời gọi hàm». - Mỗi StackTraceElementchứa thông tin về phương thức được gọi. Vì vậy, bạn có thể lấy tên của phương thức này bằng cách sử dụng getMethodName . - Ví dụ trên cho thấy:
  1. Nhận «ngăn xếp cuộc gọi»:
  2. Lặp lại mảng bằng vòng lặp for-each . Tôi hy vọng bạn đã không quên nó.
  3. In tên phương thức thành System.out .
- Một điều thú vị, và có vẻ dễ dàng. Cảm ơn Risha!

2 Diego, Tác vụ trên màn hình theo dõi ngăn xếp

- Này, Amigo! Đây là một nhiệm vụ nhỏ để hiển thị lên màn hình dấu vết ngăn xếp.
nhiệm vụ
1 Mỗi phương thức sẽ trả về StackTrace
Viết năm phương thức gọi lẫn nhau. Mỗi phương thức sẽ trả về StackTrace của nó.
2 StackTrace một lần nữa
Viết năm phương thức gọi lẫn nhau. Mỗi phương thức sẽ trả về tên của phương thức gọi của nó. Bạn có thể lấy phương thức người gọi bằng StackTrace.
3 Phương thức này sẽ trả về số dòng của mã mà phương thức này được gọi từ
Viết năm phương thức gọi lẫn nhau. Mỗi phương thức sẽ trả về số dòng của mã mà phương thức này được gọi từ đó. Sử dụng hàm element.getLineNumber() .
4 Dấu vết ngăn xếp của 10 cuộc gọi
Viết mã để nhận dấu vết ngăn xếp của 10 cuộc gọi.
5 Phương thức sẽ trả về một kết quả - độ sâu theo dõi ngăn xếp của nó
Viết một phương thức hiển thị và trả về độ sâu theo dõi ngăn xếp của nó. Độ sâu theo dõi ngăn xếp là số phương thức của nó (số phần tử trong danh sách).

3 Elly, Lỗi và Ngoại lệ

- Này, Amigo! Hôm nay chúng ta có một bài học rất thú vị. Tôi sẽ cho bạn biết về các trường hợp ngoại lệ. Ngoại lệ là một cơ chế đặc biệt để kiểm soát lỗi trong chương trình. Dưới đây là một số ví dụ về các lỗi có thể xảy ra trong chương trình:
  1. Chương trình cố gắng ghi một tệp vào đĩa đầy.
  2. Chương trình cố gắng gọi một phương thức của một biến lưu trữ tham chiếu null.
  3. Chương trình cố gắng chia một số cho 0.
Những hành động này dẫn đến một lỗi. Thông thường, điều này dẫn đến việc đóng một chương trình – không có lý do gì để tiếp tục thực thi mã. - Tại sao vậy? - Có ý nghĩa gì khi quay bánh xe khi xe đang lao xuống vực? - Bạn có nghĩa là chương trình nên kết thúc? - Đúng. Đó là cách nó đã được trước đây. Bất kỳ lỗi nào dẫn đến việc chấm dứt chương trình. - Đó là một quyết định rất sáng suốt. - Cố gắng làm tiếp không phải tốt hơn sao? - Vâng. Bạn đã gõ một văn bản rất lớn trong MS Word, đã lưu nó, nó vẫn chưa được lưu, nhưng chương trình cho bạn biết rằng mọi thứ đều ổn. Và bạn tiếp tục gõ. Ngớ ngẩn phải không? - Vâng. - Sau đó, các lập trình viên đã nghĩ ra một động thái thú vị:mỗi chức năng trả về trạng thái hoạt động của nó. 0 có nghĩa là chức năng này hoạt động như dự kiến, bất kỳ giá trị nào khác – rằng đã xảy ra lỗi : giá trị này là mã lỗi. - Nhưng phương pháp này có một nhược điểm. Sau mỗi lần gọi hàm (!), bạn phải kiểm tra mã (số) do hàm trả về. Đầu tiên, điều đó thật bất tiện: mã xử lý lỗi hiếm khi được thực thi, nhưng bạn luôn phải viết nó. Thứ hai, bản thân các hàm thường trả về các giá trị khác nhau - phải làm gì với chúng? - Vâng. Đó là điều tôi định hỏi. - Rồi một tương lai tươi sáng đã đến - các ngoại lệ và xử lý lỗi đã xuất hiện. Đây là cách nó hoạt động:
  1. Khi xảy ra lỗi, máy ảo Java sẽ tạo một đối tượng đặc biệt – một ngoại lệ – chứa tất cả thông tin về lỗi. Đối với các lỗi khác nhau, có các ngoại lệ khác nhau.
  2. Sau đó, ngoại lệ này buộc chương trình phải ngắt chức năng hiện tại ngay lập tức và chức năng tiếp theo cho đến khi nó thoát khỏi phương thức chính. Sau đó chương trình kết thúc. Các nhà phát triển Java gọi quá trình này là «khôi phục ngăn xếp cuộc gọi».
- Nhưng bạn đã nói rằng chắc chắn sẽ không thoát khỏi chương trình. - Đúng vậy, vì có một cách để bắt ngoại lệ. Bất cứ khi nào và bất cứ nơi nào bạn cần, bạn có thể viết một mã đặc biệt để nắm bắt những ngoại lệ này và thực hiện điều gì đó quan trọng. - Để làm được điều này, có một cấu trúc try-catch đặc biệt . Hãy xem nó hoạt động như thế nào: Tầng cũ 09 - 6- Tại sao «Sau khi gọi method1. Sẽ không bao giờ được hiển thị» sẽ không được hiển thị trên màn hình? - Tôi rất vui vì bạn đã hỏi về nó. Ở dòng 25, có một phép chia cho số không. Điều này dẫn đến một lỗi – một ngoại lệ. Máy ảo Java đã tạo đối tượng ArithmeticException chứa thông tin lỗi. Đối tượng này là một ngoại lệ. - Đã xảy ra ngoại lệ bên trong phương thức method1() .Điều này dẫn đến việc chấm dứt phương pháp ngay lập tức. Nó cũng sẽ dẫn đến việc chấm dứt phương thức main , nếu không có khối try-catch . - Nếu một ngoại lệ xảy ra bên trong khối thử, nó sẽ bị bắt trong khối bắt . Phần mã còn lại trong khối thử sẽ không được thực thi, quá trình thực thi bắt khối sẽ bắt đầu ngay lập tức. - Tôi không hiểu lắm. - Nói cách khác, mã này hoạt động như thế này:
  1. Nếu một ngoại lệ xảy ra bên trong khối thử , mã trong khối này không còn được thực thi nữa, nhưng quá trình bắt khối sẽ bắt đầu.
  2. Nếu không có ngoại lệ nào xảy ra, khối thử sẽ được thực hiện cho đến khi kết thúclệnh bắt không bao giờ được thực hiện .
- Ê hèm! - Hãy tưởng tượng rằng sau mỗi lần gọi phương thức, chúng ta kiểm tra xem phương thức được gọi có tự chấm dứt hay do ngoại lệ. Nếu có một ngoại lệ, JVM bắt đầu thực thi bắt khối nếu có và bắt một ngoại lệ. Nếu không có khối bắt, JVM sẽ chấm dứt phương thức hiện tại. Sau đó, kiểm tra tương tự bắt đầu trong phương thức được gọi là phương thức hiện tại. - Bây giờ tôi nghĩ là tôi hiểu rồi. - Tốt rồi. - Và ngoại lệ bên trong khối bắt là gì? - Tất cả các ngoại lệ đều là các lớp kế thừa từ lớp Exception. Chúng ta có thể bắt bất kỳ trong số chúng bằng cách chỉ định lớp của nó trong phần bắthoặc tất cả chúng cùng một lúc bằng cách chỉ định một Ngoại lệ lớp cha chung. Sau đó, từ biến e (biến này lưu trữ tham chiếu của một đối tượng ngoại lệ), bạn có thể nhận được tất cả thông tin cần thiết về lỗi. - Tuyệt vời! Và điều gì sẽ xảy ra nếu trong phương thức của tôi xảy ra các ngoại lệ khác nhau, tôi có thể xử lý chúng theo những cách khác nhau không? - Bạn phải. Bạn có thể làm điều đó như sau: Tầng cũ 09 - 7- Khối thử có thể chứa nhiều khối bắt , mỗi khối sẽ bắt các ngoại lệ thuộc loại của nó. - Ừm. Chà, tôi hiểu rồi. Tất nhiên, tôi sẽ không viết một cái gì đó như thế này bản thân mình. Tuy nhiên, tôi sẽ không sợ hãi nếu tôi gặp mã như vậy.

4 Elly, RuntimeException, ném

Tầng cũ 09 - 8- Hôm nay tôi quyết định đưa ra một chủ đề khác. Trong Java, tất cả các ngoại lệ được chia thành hai loại - được kiểm soát/kiểm trakhông được kiểm soát/không được kiểm soát . Các trường hợp ngoại lệ đã kiểm tra phải bị bắt, không được kiểm tra có thể bị bắt nhưng điều đó là không bắt buộc . - Có thể cố tình ném ngoại lệ vào mã không? - Trong mã của bạn, bạn có thể tự đưa ra các ngoại lệ. Bạn thậm chí có thể viết ngoại lệ của riêng bạn. Nhưng chúng ta sẽ đào sâu vào lỗ này sau. Bây giờ, hãy tìm hiểu cách làm việc với các ngoại lệ do máy ảo Java đưa ra. - ĐƯỢC RỒI. - Nếu ngoại lệ ClassNotFoundExceptionFileNotFoundExceptionđược ném (xuất hiện) trong một phương thức, lập trình viên phải chỉ định chúng trong chữ ký của một phương thức (tiêu đề phương thức). Những ngoại lệ như vậy được kiểm tra. Đó là những gì nó thường trông giống như: Tầng cũ 09 - 9- Vì vậy, chúng tôi chỉ viết ném và liệt kê các ngoại lệ được phân tách bằng dấu phẩy. Phải? Là vậy sao? - Đúng. Nhưng có một điều thú vị khác. Để ví dụ bên dưới được biên dịch, phương thức gọi method1() phải bắt các ngoại lệ này hoặc ném chúng về phía trước. Nếu bạn muốn ném ngoại lệ đã kiểm tra về phía trước, bạn cần chỉ định nó trong tiêu đề của phương thức . - Một lần nữa, nếu trong phương thức chính , bạn muốn gọi một phương thức mà trong tiêu đề của nó có cụm từ throws FileNotFoundException,…sau đó bạn phải làm một trong hai điều sau:
  1. để bắt ngoại lệ FileNotFoundException, …
    Bạn sẽ phải bọc mã nơi bạn gọi một phương thức nguy hiểm bằng khối thử bắt
  2. không bắt ngoại lệ FileNotFoundException,…
Bạn sẽ phải thêm các ngoại lệ này vào danh sách ném của phương thức main của bạn . - Cho tôi ví dụ được không? - Hãy xem ở đây: Tầng cũ 09 - 10- Ví dụ này sẽ không được biên dịch, bởi vì phương thức chính gọi phương thức method1(), phương thức này sẽ đưa ra các ngoại lệ phải được bắt. - Để ví dụ được biên dịch, bạn cần thêm xử lý ngoại lệ vào phương thức main . Bạn có thể làm điều này theo hai cách: Tầng cũ 09 - 11- Và ở đây chúng tôi bắt nó bằng cách sử dụng try-catch : Tầng cũ 09 - 12- Nó đang trở nên rõ ràng hơn, nhưng rất ít. - Hãy xem ví dụ dưới đây: Tầng cũ 09 - 13- Vẫn còn một ngoại lệ – RuntimeException và các lớp kế thừa từ nó.Không bắt buộc phải bắt hoặc ném chúng. Đây là những ngoại lệ không được kiểm soát. Những trường hợp ngoại lệ này được coi là khó dự đoán, vì vậy hầu như không thể dự đoán được sự xuất hiện của chúng. Bạn có thể làm những điều tương tự với chúng, nhưng không cần chỉ định chúng trong throws .

5 Risha, Chuyển ngăn xếp cuộc gọi, cách thực hiện trong các trường hợp ngoại lệ

- Tôi muốn nói với bạn thêm một chút về cách hoạt động của ngoại lệ. Ví dụ dưới đây giải thích rằng: Tầng cũ 09 - 14- Tôi không hiểu. - Được rồi. Tôi sẽ giải thích những gì đang xảy ra. - Trong ví dụ bên trái, chúng ta gọi một số phương thức theo thứ tự chuỗi. Trong method2() , chúng tôi đặc biệt tạo và đưa ra một ngoại lệ (để bắt đầu báo lỗi). - Ví dụ bên phải cho thấy điều gì sẽ xảy ra. Nhìn vào method2() . Đó là những gì việc tạo một ngoại lệ biến thành: chúng ta tạo một đối tượng thuộc loại RuntimeException , lưu trữ nó trong một biến ngoại lệ đặc biệt và ngay lập tức thoát khỏi phương thức – return . - Ở phương thức 1 , sau khi gọi phương thức 2 sẽ có một dấu kiểm,có ngoại lệ hay không; nếu có một ngoại lệ, thì phương thức 1 sẽ chấm dứt ngay lập tức. Việc kiểm tra này được thực hiện ngầm sau khi gọi từng (!) phương thức Java. - Ồ! - Chính xác. - Trong cột bên phải trong phương thức chính , tôi đã viết điều gì sẽ xảy ra khi một ngoại lệ bị bắt bởi khối try-catch . Nếu không có ngoại lệ, mã sẽ tiếp tục thực thi theo kế hoạch. Nếu có một loại ngoại lệ được chỉ định trong catch , thì chúng tôi sẽ xử lý nó. - Và néminstanceof nghĩa là gì? - Nhìn vào dòng cuối cùng bên trái ném new RuntimeException(s). Bằng cách này, chúng tôi tạo và ném một ngoại lệ. Đây chỉ là một ví dụ. Chúng tôi sẽ không làm điều đó cho đến nay. - Dùng lệnh « а instanceof B » ở khối bên phải ta kiểm tra đối tượng a có kiểu B hay không . Đó là, liệu đối tượng được lưu trữ trong biến ngoại lệ, có loại RuntimeException hay không . Đó là một biểu thức hợp lý. - Chà, nó đang trở nên rõ ràng hơn một chút.

6 Diego, Nhiệm vụ bắt ngoại lệ

- Nhìn đây! Chú Diego đã mang đến một vài nhiệm vụ bắt cá cho bạn. Chúc bạn may mắn. Tôi nghĩ bạn sẽ cần nó. Hừ. Tầng cũ 09 - 15- Này, Amigo! Dưới đây là một số nhiệm vụ bắt ngoại lệ thú vị.
bắt nhiệm vụ
1 1. Ngoại lệ khi thao tác với số
Bắt ngoại lệ xảy ra khi chạy code:
int a = 42 / 0;
Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó
2 2. Ngoại lệ khi thao tác với chuỗi
Bắt ngoại lệ xảy ra khi chạy code:
String s = null;
Chuỗi m = s.toLowerCase();
Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó.
3 3. Ngoại lệ khi thao tác với mảng
Bắt ngoại lệ xảy ra khi chạy code:
int[] m = new int[2];
m[8] = 5;
Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó.
4 4. Ngoại lệ khi thao tác với tập hợp Danh sách
Lưu ý ngoại lệ xảy ra khi chạy mã:
ArrayList<String> list = new ArrayList<String>();
Chuỗi s = list.get(18);
Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó.
5 5. Ngoại lệ khi thao tác với Map collection
Lưu ý ngoại lệ xảy ra khi chạy code:
HashMap<String, String> map = new HashMap<String, String>(null);
map.put(null, null);
map.remove(null);
Hiển thị ngoại lệ ra màn hình, chỉ định loại của nó.
- Mẹo: đầu tiên viết chương trình, sau đó xem ngoại lệ nào xảy ra và sau đó thay đổi mã và bắt ngoại lệ đó.

7 Risha, Cách hoạt động của nhiều lần bắt

Tầng cũ 09 - 16- Bây giờ, một số bài giảng thú vị hơn. Tôi thích giảng dạy rất nhiều. - Tôi muốn cho bạn biết cách bắt nhiều lần hoạt động. Trên thực tế, nó rất đơn giản: khi một ngoại lệ xảy ra trong khối try , việc thực thi chương trình được chuyển sang khối bắt đầu tiên . - Nếu loại được chỉ định trong ngoặc đơn của khối bắt giống với loại của đối tượng ngoại lệ, thì việc thực thi mã bắt đầu bên trong {}. Nếu không, chúng tôi đi đến đánh bắt tiếp theo . Việc kiểm tra được lặp lại ở đó. - Nếu không có khối bắt nào nữa , nhưng ngoại lệ chưa được bắt, nó sẽ bị ném về phía trước và phương thức hiện tại bị gián đoạn. - Tôi hiểu rồi. Quá trình bắt đó sẽ được thực thi, loại phù hợp với loại ngoại lệ. - Vâng đúng. Trên thực tế, nó phức tạp hơn một chút: Vấn đề là các lớp có thể kế thừa lẫn nhau. Nếu lớp «Cow» được kế thừa từ lớp «Animal», thì đối tượng kiểu «Cow» có thể được lưu trữ không chỉ trong một biến kiểu «Cow», mà còn trong một biến kiểu «Animal». . - Vậy thì sao? - Vì tất cả các ngoại lệ đều được kế thừa từ các lớp Exception hoặc RuntimeException (cũng được kế thừa từ Exception ), tất cả chúng có thể bị bắt bằng lệnh catch (Exception e) hoặc catch (RuntimeException e) . - Vậy thì sao? - Điều này có nghĩa rằng,trước tiên, bạn có thể bắt bất kỳ ngoại lệ nào bằng cách sử dụng lệnh catch(Exception e) . Thứ hai, thứ tự của các khối bắt có vấn đề. Ví dụ: - ArithmeticException do phép chia cho 0 bị bắt trong lần bắt thứ hai. Tầng cũ 09 - 17- Trong ví dụ bên dưới, ArithmeticException bị bắt trong lần bắt đầu tiên , bởi vì các lớp của tất cả các ngoại lệ đều được kế thừa từ Exception. Vì vậy, Exception bắt bất kỳ ngoại lệ nào . Tầng cũ 09 - 18- Trong ví dụ bên dưới, ngoại lệ ArithmeticException không bị bắt, nhưng được ném tới phương thức gọi. Tầng cũ 09 - 19- Chà, giờ thì rõ ràng hơn rồi. Những ngoại lệ này không phải là dễ dàng. - Hình như chỉ có vậy thôi. Trên thực tế, đó là một trong những điều đơn giản nhất trong Java. - Không biết nên vui hay buồn đây…

8 Diego, Nhiều nhiệm vụ bắt ngoại lệ

- Này, Amigo! Hôm qua tôi đã say và làm phức tạp hóa các nhiệm vụ của bạn, nhưng tôi hy vọng bạn không cảm thấy khó khăn và bạn sẽ giải quyết tất cả chúng chứ? Đó là vì lợi ích của chính bạn. Đây:
nhiệm vụ
1 1. Ngoại lệ
Có một phương thức ném ra hai ngoại lệ kế thừa từ Exception và hai ngoại lệ còn lại kế thừa từ RuntimeException : NullPulumException , ArithmeticException , FileNotFoundExceptionURISyntaxException .

Bạn cần bắt NullPulumExceptionFileNotFoundException , nhưng không bắt ArithmeticExceptionURISyntaxException . Làm thế nào để làm nó?
2 2. Bắt ngoại lệ
Có ba ngoại lệ kế thừa tuần tự từ Exception :
class Exception1 extends Exception
class Exception2 extends Exception1
class Exception3 extends Exception2
Có một phương thức được mô tả như sau:
public static void method1() throws Exception1, Exception2, Exception3

Viết một lệnh bắt chặn để bắt cả ba Exception1 , Exception2Exception3
3 3. Bắt các ngoại lệ có chọn lọc
1. Tìm hiểu những ngoại lệ nào được ném ra bởi phương thức BEAN.methodThrowExceptions .
2. Phương thức processExceptions() nên gọi phương thức BEAN.methodThrowExceptions và xử lý các ngoại lệ:
2.1. nếu một ngoại lệ FileSystemException xảy ra, thì hãy ghi lại nó bằng cách gọi phương thức BEAN.log và ném về phía trước
2.2. nếu xảy ra ngoại lệ CharConversionException hoặc bất kỳ IOException nào khác , chỉ cần ghi nhật ký bằng cách gọi phương thức BEAN.log
3. Thêm lớp/loại ngoại lệ mà bạn đang chuyển tiếp trong 2.1. đến processExceptions()chữ ký phương thức.
4. Xử lý ngoại lệ còn lại trong phương thức main() và ghi nhật ký. Sử dụng try..catch

Mẹo:
Nếu bạn bắt gặp ngoại lệ MyException mà bạn không muốn bắt, bạn có thể ném nó về phía trước bằng mã sau:
catch (MyException e) {
throw e;
}
4 4. Bắt các ngoại lệ đã kiểm tra
Xử lý tất cả các ngoại lệ đã kiểm tra trong phương thức processExceptions() .
Bạn cần hiển thị lên màn hình từng ngoại lệ được kiểm tra đã xảy ra.
Bạn chỉ có thể sử dụng một khối thử .
5 5. Bắt các ngoại lệ không được kiểm tra
Xử lý tất cả các ngoại lệ không được kiểm tra trong phương thức processExceptions() .
Bạn cần hiển thị lên màn hình dấu vết ngăn xếp của từng ngoại lệ đã xảy ra bằng cách sử dụng phương thức printStack() .
Bạn chỉ có thể sử dụng một khối thử .

9 Giáo sư, Bài giảng về ngoại lệ

- Hôm nay chúng ta có một chủ đề siêu thú vị - ngoại lệ. Vào thời điểm đó, khi các nhà khoa học và lập trình viên trẻ vô cùng hào hứng với chủ đề này… - Xin lỗi, tôi phải đến phòng thí nghiệm. Dưới đây là ghi chú bài giảng. Tôi nghĩ rằng bạn sẽ tìm ra nó cho chính mình. Tại đây: Java Exceptions (Tài liệu Oracle) Xử lý ngoại lệ trong Java (điểm Java T) Java - Xử lý ngoại lệ (điểm hướng dẫn) Xử lý ngoại lệ Java cơ bản

10 tháng 7

- Amigo, bạn nghĩ gì về bài học hôm nay? Bộ não positron của bạn vẫn chưa hoạt động sao? Nhiệm vụ của Diego đủ để làm mệt mỏi bất cứ ai. Hãy có một khoảnh khắc uống bia và thư giãn. Bạn vẫn còn đứng?

11 Đội Trưởng Sóc

- Chào chú bộ đội! - Chào buổi sáng thưa ngài! - Tôi có một số tin tuyệt vời cho bạn. Đây là một kiểm tra nhanh để củng cố kỹ năng của bạn. Làm điều đó mỗi ngày và bạn sẽ nâng cao kỹ năng của mình thật nhanh. Các tác vụ được thiết kế đặc biệt để thực hiện trong Intellij IDEA.
Các tác vụ bổ sung cần thực hiện trong Intellij Idea
1 1. Chia cho 0
Tạo một phương thức public static void divisionByZero() , trong đó bạn cần chia bất kỳ số nào cho 0 và hiển thị ra màn hình kết quả của phép chia.
Kết thúc cuộc gọi phương thức divisionByZero() thành một try..catch . Hiển thị lên màn hình dấu vết ngăn xếp ngoại lệ bằng cách sử dụng phương thức exception.printStackTrace() .
2 2. Đếm ngược từ 10 về 0
Viết một vòng lặp để đếm ngược từ 10 về 0. Sử dụng Thread.sleep(100) để tạo độ trễ;
Kết thúc cuộc gọi ngủ thành try..catch .
3 3. Đưa một phương thức vào một try..catch
Đọc các số từ bàn phím. Viết mã để đọc số từ bàn phím vào một phương thức riêng readData() .
Gói toàn bộ nội dung của phương thức này (toàn bộ mã bên trong phương thức readData() , ngoại trừ phần khai báo danh sách nơi các số sẽ được lưu trữ) vào một try..catch .

Nếu người dùng nhập một số văn bản thay vì nhập một số, phương thức phải bắt ngoại lệ và hiển thị ra màn hình tất cả các số đã nhập trước đó.
Hiển thị số ra màn hình. Mỗi số phải nằm trên một dòng mới. Thứ tự các số phải giống như trong đầu vào.
4 4. Bộ chuyển đổi ngày
Đọc từ bàn phím một ngày ở định dạng «08/18/2013»
Hiển thị ra màn hình ngày đó ở dạng «AUG 18, 2013».
Sử dụng các đối tượng DateSimpleDateFormat .
5 5. Nguyên âm và phụ âm
Viết chương trình đọc dòng từ bàn phím.
Chương trình sẽ hiển thị lên màn hình hai chuỗi:
1) chuỗi đầu tiên phải chứa các nguyên âm
2) chuỗi thứ hai phải chứa các phụ âm và ký tự dấu chấm câu từ văn bản đã nhập.
Tách các ký tự bằng dấu cách.

Đầu vào ví dụ:
Dừng nhìn nghe
Đầu ra ví dụ:
oooie
stplklstn
6 6. Chuyện cô bé quàng khăn đỏ
1. Có 5 lớp: Cô bé quàng khăn đỏ, bà ngoại, chú chó nhỏ, tiều phu, chó sói.
2. Mỗi lớp có hai trường kiểu ArrayList : bị giết và bị ăn.
3. Các đối tượng cần thiết đã được tạo sẵn (mũ, bà, ...).
4. Tạo mối quan hệ đúng (ai ăn ai giết ai) để có được logic của «Cô bé quàng khăn đỏ».
7 7. Di chuyển các sửa đổi tĩnh
Di chuyển các sửa đổi tĩnh để mã biên dịch.
số 8 8. Danh sách mảng số
Tạo danh sách có các phần tử là mảng số. Thêm vào danh sách năm mảng đối tượng có độ dài lần lượt là 5, 2, 4, 7, 0. Điền vào các mảng với bất kỳ dữ liệu nào và hiển thị chúng trên màn hình.
9 9. Mười con mèo
Tạo một lớp Cat với trường String name .
Tạo một từ điển Map<String, Cat> , thêm 10 con mèo vào mô hình «Name» - «Cat».
Lấy từ Bản đồ một Tập hợp tên và hiển thị tập hợp đó ra màn hình.
- Những nhiệm vụ đó là dành cho rau xanh. Tôi đã thêm các nhiệm vụ thưởng có độ phức tạp cao hơn. Chỉ dành cho súng hàng đầu.
nhiệm vụ tiền thưởng
1 1. Chương trình không biên dịch và chạy. Sửa nó.
Nhiệm vụ: Chương trình sẽ đọc từ bàn phím hai tên tệp và sao chép tệp đầu tiên vào vị trí được chỉ định bởi tên thứ hai.
2 2. Thêm chức năng mới cho chương trình.
Nhiệm vụ cũ: Chương trình sẽ đọc từ bàn phím hai tên tệp và sao chép tệp đầu tiên vào vị trí được chỉ định bởi tên thứ hai.
Nhiệm vụ mới: Chương trình sẽ đọc từ bàn phím hai tên tệp và sao chép tệp đầu tiên vào vị trí được chỉ định bởi tên thứ hai.

Nếu tệp (sẽ được sao chép) với tên được chỉ định không tồn tại, chương trình sẽ hiển thị trên màn hình thông báo «Tệp không tồn tại» và thử đọc lại tên tệp từ bảng điều khiển trước khi đọc tên của tệp thứ hai (đích).
3 3. Học và thực hành thuật toán.
Đọc từ bàn phím danh sách các từ và số. Hiển thị lên màn hình các từ theo thứ tự tăng dần và các số theo thứ tự giảm dần.

Ví dụ đầu vào:
Anh đào
1
Đậu
3
Táo
2
0
Dưa hấu

Đầu ra ví dụ:
Táo
3
Đậu
2
Anh đào
1
0
Dưa hấu
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION