JavaRush /Java Blog /Random-TL /Nangungunang 10 Mga Tanong tungkol sa Mga Pagbubukod sa J...
raynn
Antas
Нижний Новгород

Nangungunang 10 Mga Tanong tungkol sa Mga Pagbubukod sa Java

Nai-publish sa grupo
Inilalarawan ng artikulo ang 10 pinakamadalas itanong tungkol sa mga pagbubukod sa Java. Nangungunang 10 Mga Tanong tungkol sa Mga Pagbubukod sa Java - 1

1. Nabe-verify at hindi na-verify

Sa madaling salita, ang mga nasuri na exception ay dapat na tahasang mahuhuli sa method body o ideklara sa throws section ng method. Ang mga hindi naka-check na eksepsiyon ay sanhi ng mga problemang hindi malulutas, tulad ng paghahati sa 0, null pointer, atbp. Lalo na mahalaga ang mga nasuri na exception dahil inaasahan mong malalaman ng ibang developer na gumagamit ng iyong API kung paano pangasiwaan ang mga exception. Halimbawa, ang IOException ay isang karaniwang ginagamit na naka-check na exception, habang ang RuntimeException ay isang hindi naka-check na exception. Bago magbasa nang higit pa, tingnan ang Hierarchical Exception Diagram sa Java .

2. Pinakamahusay na paraan upang harapin ang mga pagbubukod

Kung ang pagbubukod ay maaaring mahawakan nang tama, dapat itong mahuli, kung hindi, dapat itong ipasa.

3. Bakit hindi magagamit ang mga variable na tinukoy sa pagsubok sa catch o sa wakas?

Sa sumusunod na piraso ng code, ang mga linyang idineklara sa isang try block ay hindi magagamit sa isang catch block. Ang code na ito ay hindi mag-compile.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
Ang dahilan ay hindi alam kung saan eksakto sa try block ang exception ay maaaring itinapon. Posible na ang pagbubukod ay itinapon bago ideklara ang bagay. At ito ay totoo para sa halimbawang ito.

4. Bakit ang Double.parseDouble(null) at Integer.parseInt(null) ay nagtatapon ng iba't ibang exception?

Iyan ay tama, sila ay nagtataas ng iba't ibang mga pagbubukod. Isa itong isyu sa JDK. Dinisenyo lang ang mga ito ng iba't ibang tao, at hindi ka dapat mag-alala masyado tungkol dito.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. Pangunahing runtime exception sa Java

Narito ang ilan sa kanila:
IllegalArgumentException
ArrayIndexOutOfBoundsException
Magagamit ang mga ito sa isang if statement kapag hindi natugunan ang kundisyon, tulad dito:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. Posible bang makahuli ng maraming exception sa isang catch block?

Ang sagot ay oo. Hangga't ang mga klase ng mga pagbubukod na ito ay maaaring masubaybayan ang class inheritance hierarchy sa parehong superclass, tanging ang superclass na iyon ang magagamit.

7. Maaari bang magtapon ng mga exception ang isang constructor?

Ang sagot ay oo. Ang isang constructor ay isang espesyal na uri ng pamamaraan lamang. Narito ang isang halimbawa ng code.

8. Paghahagis ng mga eksepsiyon sa huling bloke

Sa prinsipyo, maaari mong gawin ito nang legal:
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
Ngunit upang mapanatili ang pagiging madaling mabasa ng code, kailangan mong ideklara ang nested block try-catchbilang isang bagong paraan, at magpasok ng isang tawag sa paraang ito sa block finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. Posible bang gumamit ng return sa isang block sa wakas?

Oo kaya mo.

10. Bakit tahimik na pinangangasiwaan ng mga developer ang mga pagbubukod?

Halimbawa, madalas na lumilitaw ang mga naturang piraso ng code. Kung ang wastong paghawak ng exception ay napakahalaga, bakit patuloy itong isinusulat ng mga developer sa ganitong paraan?
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
Ito ay pinakamadaling huwag pansinin. Ngunit kahit na ito ay madalas na ginagawa, hindi ito nangangahulugan na ito ay tama. Mga link:
  1. Walang check na Exceptions sa Java
  2. Ang ugat ng isang hierarchical exception tree sa Java
  3. Mga tanong tungkol sa mga pagbubukod sa stackoverflow
Orihinal na artikulo
Ano pa ang dapat basahin:

Mga pagbubukod sa Java

Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION