}
try {
hO.
} catch(Exception e) {
System out.printlnCmairr printStackTraceO"); e printStackTrace(System out);
}
}
} /* Output
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² fO
java lang Exception thrown from f()
at Rethrowing.f(Rethrowing.java 7) at Rethrowing g(Rethrowing java:11) at Rethrowi ng.mai n(Rethrowi ng.java:29) main. printStackTraceO
java.lang.Exception: thrown from f() ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &
at Rethrowing.f(Rethrowing.java.7) at Rethrowing.g(Rethrowing java.11) at Rethrowing.main(Rethrowing.java 29) Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² f() Π ΠΌΠ΅ΡΠΎΠ΄Π΅ h(). e.printStackTraceO java.lang.Exception, thrown from f()
at Rethrowi ng.f(Rethrowi ng.javaβ’7) at Ret h rowi ng. h (Reth rowi ng. j a va: 20) at Rethrowing main(Rethrowing.java-35) main- printStackTraceO java lang.Exception: thrown from f()
at Ret h rowi ng. h (Ret h rowi ng. j a va β’ 24) at Rethrowi ng.mai n(Rethrowi ng.java:35)
*///:-
Π‘ΡΡΠΎΠΊΠ° Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ fiUInStackTrace() ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½ΠΎΠ²ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π²ΡΠ΄Π°ΡΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠ΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠ΅ΠΊΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ fillln-StackTrace() β ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠ΅ΡΡΠ΅ Π·Π°ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΠ΅ΡΡΡ, Π° ΠΎΡΡΠ°Π΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΎΡΠ½ΠΎΡΡΡΠ°ΡΡΡ ΠΊ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ throw.
//: exceptions/RethrowNew java // ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, // ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ΅Π³ΠΎΡΡ ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ
class OneException extends Exception {
public OneException(String s) { super(s); }
}
class TwoException extends Exception {
public TwoException(String s) { super(s), }
}
public class RethrowNew {
public static void f() throws OneException {
System.out printin("ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² f(D; throw new OneException("ΠΈΠ· f()");
}
public static void main(String[] args) { try {
try {
f().
} catch(OneException e) {
System out.printin(
"ΠΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ try.
e printStackTraceO"). .
e.printStackTrace(System.out);
throw new TwoException("ΠΈΠ· Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° try"),
}
} catch(TwoException e) {
System.out.printin(
"ΠΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ try, e.printStackTraceO"), e.printStackTrace(System.out),
}
}
ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² f()
ΠΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ try, Π΅.printStackTraceO
OneException- thrown from fO
at RethrowNew.f(RethrowNew.javaβ’15) at Reth rowNew.ma i n(Reth rowNew.j avaβ’20) ΠΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ try, e.printStackTraceO TwoException ΠΈΠ· Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° try
at RethrowNew main(RethrowNew.java 25)
*///.-
Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΠ»ΠΎ ΠΈΠ· Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° try, Π½ΠΎ Π½Π΅ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π° f().
ΠΠ°ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎΠ± ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π²ΠΎΠΎΠ±ΡΠ΅. ΠΡΠ΅ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΠΎΠ±ΡΠ΅ΠΉ ΠΊΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ new, ΠΈ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
Π¦Π΅ΠΏΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΠ°ΡΠ°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π±ΡΠ΄ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅, Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΠ² ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ β ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (exception chaining). ΠΠΎ Π²ΡΠΏΡΡΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° JDK 1.4 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΡΠΎΡ ΡΠ°Π½ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠ² Throwable ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΡΠΈΡΠΈΠ½Π° (cause). ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΅Π΅ Π² Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅ΠΊΠ° Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π΅Π³ΠΎ Π½Π°ΡΠ°Π»Π°, Ρ ΠΎΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°Π΅ΡΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° Throwable, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΡΠΈΡΠΈΠ½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΡΠ²Π»ΡΡΡΡΡ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ: Error (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ (JVM) Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ ), Exception ΠΈ RuntimeException. ΠΠ»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ initCause(), Π° Π½Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΎΠ±ΡΠ΅ΠΊΡ DynamicFields Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
//. exceptions/DynamicFields.java // ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΠ»Π°ΡΡ. // ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, import static net mindview.util Print *;
class DynamicFieldsException extends Exception {}
public class DynamicFields { private Object[][] fields; public DynamicFields(int initialSize) {
fields = new 0bject[initialSize][2]. for(int i = 0. i < initialSize. i++)
fields[i] = new Object[] { null, null };
}
public String toStringO {
StringBuilder result = new StringBuilderO. . Π
ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &
for(Objected obj : fields) {
result.append(obj[0]); result.append("β’ "); result.append(obj[l]); result.append("\n");
}
return result.toStringO;
}
private int hasField(String id) {
for(int i = 0; i < fields.length; i++) if(id.equals(fields[1][0])) return i;
return -1:
}
private int
getFieldNumber(String id) throws NoSuchFieldException { int fieldNum = hasField(id); if(fieldNum == -1)
throw new NoSuchFieldException0; return fieldNum;
}
private int makeField(String id) {
for(int i = 0; i < fields.length; i++) 1f(f1elds[i][0] == null) { fields[1][0] Β« id; return i;
}
// ΠΡΡΡΡΡ ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅Ρ. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅:
Object[][]tmp = new Object[fields.length + 1][2];
for(int i = 0; i < fields.length; i++)
tmp[i] = fields[i]; for(int i = fields.length; i < tmp.length; i++) tmp[i] = new Object[] { null, null }; fields = tmp;
// Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ: return makeField(id);
}
public Object
getField(String id) throws NoSuchFieldException { return fields[getFieldNumber(id)][l];
}
public Object setField(String id. Object value)
throws DynamicFieldsException { if(value == null) {
// Π£ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°.
// ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ-Β«ΠΏΡΠΈΡΠΈΠ½ΡΒ».
// Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
// ΠΌΠ΅ΡΠΎΠ΄ initCauseO, Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°ΠΌ
// ΠΊΠ»Π°ΡΡΠ° Throwable.
DynamicFieldsException dfe =
new DynamicFieldsExceptionO; dfe.i ni tCause(new Nul1Poi nterExcepti on Π); throw dfe;
}
int fieldNumber = hasField(id); if(fieldNumber == -1)
fieldNumber = makeField(id); Object result = null;
try {
result = getField(id). 11 ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ } catchCNoSuchFieldException e) {
// ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ Β«ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉΒ» throw new RuntimeException(e),
}
fields[fieldNumber][l] = value; return result;
}
public static void main(String[] args) {
DynamicFields df = new DynamicFields(3); print(df); try {
df setFieldC'd". "ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ d"); df setField("ΡΠΈΡΠ»ΠΎ", 47); df.setField("4Haio2\ 48); print(df);
df.setFieldC'd". "ΠΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ d"), df setField("4HOio3". 11). printCdf: " + df).
printCdf getField(\"d\")) " + df getFieldCd")); Object field = df setFieldC'd". null). // ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ } catch(NoSuchFieldException e) {
e printStackTrace(System out); } catch(DynamicFieldsException e) {
e.printStackTrace(System.out);
}
}
} /* Output: null null null: null' null: null d: ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ d ΡΠΈΡΠ»ΠΎ: 47 ΡΠΈΡΠ»ΠΎ2: 48
df- d- ΠΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ d ΡΠΈΡΠ»ΠΎ: 47 ΡΠΈΡΠ»ΠΎ:2 48 ΡΠΈΡΠ»ΠΎΠ- 11
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ df .getFieldCd") . ΠΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ d Dynami cFi eldsExcepti on
at DynamicFields.setField(DynamicFields.java:64) at DynamicFields main(DynamicFields java:94) Caused by: java.lang.NullPointerException
at DynamicFields.setField(DynamicFields.java 66) )
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ DynamicFields ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ°Ρ Object-Object. ΠΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ»Ρ (String), Π° Π²ΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΡΠΎΠΌΠ΅ Π½Π΅ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ². ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠ΅ΡΠΎΠ΄ setField() Π»ΠΈΠ±ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»Π΅ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π»ΠΈΠ±ΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ ΠΊΠΎΠΏΠΈΡΡΡ Π² Π½Π΅Π³ΠΎ ΡΡΠ°ΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ null ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ DynamicFieldsException, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ initCause() Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ NullPointer-Exception.
ΠΠ»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ setField() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ, ΠΏΠΎΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ getField(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π±ΡΠ΄ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ NoSuchFieldException. ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ getField() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ-ΠΊΠ»ΠΈΠ΅Π½Ρ, ΡΠΎ ΠΎΠ½ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π΅Π½ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ NoSuchFieldException, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ setField(), ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ; ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Runtime-Exception Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ-ΠΏΡΠΈΡΠΈΠ½Ρ.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° toStringO ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ StringBuilder. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Java
ΠΠ»Π°ΡΡ Java Throwable ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Throwable (ΡΠΎ Π΅ΡΡΡ Π²Π΅ΡΠ²ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ). Π’ΠΈΠΏ Error ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡΡΡ (ΠΊΡΠΎΠΌΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΡΠΎΠ±ΡΡ ΡΠ»ΡΡΠ°Π΅Π²). Π’ΠΈΠΏ Exception ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Java ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠΈΠΏ Exception.
ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ β ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ JDK. Π‘ΡΠΎΠΈΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΎΡΡ Π±Ρ ΡΠ°Π·, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄Π°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π²ΡΠΊΠΎΡΠ΅ Π²Ρ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΠΌ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΈΡ ΠΈΠΌΠ΅Π½Π°. Π ΡΠΎΠΌΡ ΠΆΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Java ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ°ΡΡΠ΅Ρ, ΠΈ Π΅Π΄Π²Π° Π»ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΡ Π² ΠΊΠ½ΠΈΠ³Π΅. ΠΡΠ±Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½Π΅Π΅ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠΌΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΡΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ΅ Π²ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ java.lang, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄ΡΡΠ³ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ util, net ΠΈ io, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ ΠΈΠ· ΠΏΠΎΠ»Π½ΡΡ ΠΈΠΌΠ΅Π½ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ (I/O), ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Ρ ΠΎΡ java.io.IOException.
ΠΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ: RuntimeException
ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅:
if(t == null)
throw new NullPointerExceptionO;
Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΠΊΠ°ΠΊ ΡΠΆΠ°ΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΡΠ»ΠΊΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π²Π°ΡΠ΅ΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ. Π ΡΡΠ°ΡΡΡΡ, Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ β ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ null-ΡΡΡΠ»ΠΎΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°Π΅ΡΡΡ Null-PointerException. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½Π°.