рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмреАрдЪ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдореБрдХреНрдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ рдЬреЛ
java.io.Closeable
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рддреЛ, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд╣реА рд╣реИред
рд╣рдо
OutputStream
рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдХрд╛рд░реНрдп: рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ
OutputStream
рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░реЗрдВ,
OutputStream
рдмрдВрдж рдХрд░реЗрдВред
рдЧрд▓рдд рдирд┐рд░реНрдгрдп рдирдВрдмрд░ 1
OutputStream stream = openOutputStream();
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдХреЛрдб рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ stream.close () рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рдВрд╕рд╛рдзрди рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛ (рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдгрдХ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЖрджрд┐)
рдЧрд▓рдд рдирд┐рд░реНрдгрдп рдирдВред реи
рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо
try-finally
:
OutputStream stream = openOutputStream(); try {
рдЕрдм
close()
рд╣рдореЗрд╢рд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐
finally
): рд╕рдВрд╕рд╛рдзрди рд╡реИрд╕реЗ рднреА рдореБрдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ?
рдирд╣реАрдВред
рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред
close()
рд╡рд┐рдзрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХреЛрдб рднреА рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣
close()
рд╕реЗ рдЕрдкрд╡рд╛рдж рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред рдореВрд▓ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рдЬрд╛рдПрдЧреА: рд╣рдо рдХрднреА рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдореВрд▓ рдЕрдкрд╡рд╛рдж рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИред
рдЧрд▓рдд рдирд┐рд░реНрдгрдп рд╕рдВрдЦреНрдпрд╛ 3
рдЖрдЗрдП рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐
stream.close()
"рдореБрдЦреНрдп" рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЪрд▓реЛ
close()
рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ "рдирд┐рдЧрд▓" рджреЗрдВ:
OutputStream stream = openOutputStream(); try {
рдЕрдм рд╕рдм рдареАрдХ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рд╣реИред рд╣рдо рдЪрд╛рдп рдкреАрдиреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреИрд╕реЗред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рднреА рдмрджрддрд░ рд╣реИред рдХреНрдпреЛрдВ?
рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА
close()
рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рд╛ рдФрд░ рдирд┐рдЧрд▓ рд▓рд┐рдпрд╛ рдерд╛ред рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐
outputStream
рдПрдХ
FileOutputStream
рд╣реИ, рдЬреЛ
FileOutputStream
рд▓рд┐рдкрдЯрд╛ рд╣реБрдЖ рд╣реИред рдЪреВрдБрдХрд┐
BufferedOutputStream
рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрдЯреНрд░реАрдо рдкрд░
flush()
рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЗрд╕реЗ
close()
рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЬрд┐рд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╣рдо рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд▓реЙрдХ рд╣реИред рдлрд┐рд░
close()
рд╡рд┐рдзрд┐ рдПрдХ
IOException
рдХреЛ рдлреЗрдВрдХ
IOException
, рдЬрд┐рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рднреА рдмрд╛рдЗрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рдордиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реАрдЦрд╛ред рд╕реВрдЪрдирд╛ рдЧреБрдо рд╣реЛ рдЧрдИред
рдпрджрд┐ рд╣рдо рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреБрдЫ рдмреБрд░рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣рд╛рдВ, рд╕рднреА рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдиреЛрдЯ: рдпрджрд┐ OutputStream
рдмрдЬрд╛рдп InputStream
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдПрдХ рдЕрдкрд╡рд╛рдж InputStream.close()
рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ) рдХреЛрдИ рднреА рдмреБрд░рд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдзрд╛рд░рд╛ рд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рддреЗ рдереЗ, рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ InputStream
рдФрд░ OutputStream
рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╢рдмреНрджрд╛рд░реНрде рд╣реИредрдЗрдореНрдкреЗрдХреНрдЯ рд╕реЙрд▓реНрдпреВрд╢рди
рддреЛ, рд╕рдВрд╕рд╛рдзрди рд╕рдВрд╕рд╛рдзрди рдХреЛрдб рд╕рд╣реА рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ?
рд╣рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдореБрдЦреНрдп рдХреЛрдб рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдкреВрд░реНрд╡рд╡рд░реНрддреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ
close()
рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
OutputStream stream = openOutputStream(); Throwable mainThrowable = null; try {
рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ: рдмреЛрдЭрд┐рд▓ рдФрд░ рдХрдард┐рдиред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдореБрдЦреНрдп рдХреЛрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ
close()
рд╕реЗ рдЕрдкрд╡рд╛рдж
close()
рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛
openOutputStream()
null
рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ
NullPointerException
рдХреЛ
NullPointerException
рдЬрд╛рдПрдЧрд╛ (рдпрджрд┐ рдПрдХ рдФрд░ рдЬреЛрдбрд╝рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рдХреЛрдб рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
InputStream
рдФрд░
OutputStream
) рдпрд╛ рдЕрдзрд┐рдХ, рддреЛ рдХреЛрдб рдмрд╕ рдЕрд╕рд╣рдиреАрдп рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╣реА рд╕рдорд╛рдзрд╛рди (рдЬрд╛рд╡рд╛ 7)
рдЬрд╛рд╡рд╛ 7 рдиреЗ
try-with-resources
рдирд┐рд░реНрдорд╛рдг рдХрд╛
try-with-resources
рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
try (OutputStream stream = openOutputStream()) {
рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИред
рдпрджрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рдФрд░
close()
рд╡рд┐рдзрд┐ рдореЗрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рдЕрдкрд╡рд╛рдж рджрдмрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬ рд▓реА
Throwable.addSuppressed(Throwable exception)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬрд┐рд╕реЗ рдЬрд╛рд╡рд╛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ):
Exception in thread "main" java.lang.RuntimeException: Main exception at A$1.write(A.java:16) at A.doSomething(A.java:27) at A.main(A.java:8) Suppressed: java.lang.RuntimeException: Exception on close() at A$1.close(A.java:21) at A.main(A.java:9)
рд╕рд╣реА рд╕рдорд╛рдзрд╛рди (Google рдЕрдорд░реВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛ 6)
рдЬрд╛рд╡рд╛ 6 рдореЗрдВ, рдЕрдХреЗрд▓реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдХрд░рдг рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрджреНрднреБрдд
Google рдЕрдорд░реВрдж рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрддрд╛ рд╣реИред рд╡рд░реНрдЧ
com.google.common.io.Closer
(рдЧрд░реАрдмреЛрдВ рдХреЗ рд▓рд┐рдП
try-with-resources
) рдЕрдорд░реВрдж 14.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Closer closer = Closer.create(); try { OutputStream stream = closer.register(openOutputStream());
рд╕рдорд╛рдзрд╛рди рдЬрд╛рд╡рд╛ 7 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рд▓рдЧрднрдЧ рдЬрд╛рд╡рд╛ 7 рдЬреИрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ред
Closer
рдЗрд╕рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдордирдорд╛рдиреА рд░рд╛рд╢рд┐ (
register(...)
рд╡рд┐рдзрд┐) рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
Closer
рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ
@Beta
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рд╡рд┐рд▓реЛрдкрди рддрдХ) рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдЧреБрдЬрд░ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рд▓рдЧрддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ 7 рдореЗрдВ)ред рдЗрд╕ рдкрд░ рд╣рдореЗрд╢рд╛ рдзреНрдпрд╛рди рджреЗрдВред
InputStream
рдФрд░ OutputStream
( Reader
рдФрд░ Writer
) рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЬрд╛рд╡рд╛ 6 рдореЗрдВ)!рдкрд░рд┐рд╡рд░реНрдзрди / рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
рдЕрдЧрд▓реА рдмрд╛рд░ рдореИрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐
NullPointerException
рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред