Created
August 26, 2017 18:51
-
-
Save Chikitonik/b7d25b3034fb427935e40e0ec2491d0a to your computer and use it in GitHub Desktop.
JavaRush исключения и поток
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.CharConversionException; | |
import java.io.IOException; | |
import java.nio.file.FileSystemException; | |
/* | |
Перехват выборочных исключений | |
*/ | |
public class Solution { | |
/** | |
* [1]Создается объект класса StatelessBean | |
* в этом классе (соответственно и объекте) есть два метода: | |
* log - выводит на экран сообщение об исключении и его подробности, | |
* methodThrowExceptions - генерирует число и в зависимости от того, | |
* чему оно равно выбрасывает исключение | |
*/ | |
public static StatelessBean BEAN = new StatelessBean(); | |
public static void main(String[] args) { | |
/** | |
* [2]запускается функция processExceptions, в которой в созданном | |
* объекте BEAN запускается метод methodThrowExceptions | |
*/ | |
try { | |
processExceptions(); | |
} | |
/** | |
* Если было выброшено исключение FileSystemException, то ловит | |
* его и запускает метод log | |
*/ | |
catch(FileSystemException e){ | |
BEAN.log(e); | |
} | |
} | |
public static void processExceptions() throws FileSystemException{ | |
/** | |
* [3] В объекте BEAN запускается метод methodThrowExceptions, | |
* который создает число и в зависимости от его значения выбрасывает | |
* исключения, которые здесь обрабатываются | |
*/ | |
try { | |
BEAN.methodThrowExceptions(); | |
} | |
catch(CharConversionException exception){ | |
BEAN.log(exception); | |
} | |
/** | |
* В отличии от остальных catch, здесь выбрасывается исключение | |
* FileSystemException. Чтобы можно было его выбросить, в методе | |
* прописано throws FileSystemException | |
*/ | |
catch(FileSystemException exception){ | |
BEAN.log(exception); | |
throw exception; | |
} | |
catch(IOException exception){ | |
BEAN.log(exception); | |
} | |
} | |
/** | |
* [5]В метод log передается значение исключения. Выводится на экран его | |
* сообщение и имя. | |
* Сообщение можно задать в методе methodThrowExceptions | |
*/ | |
public static class StatelessBean { | |
public void log(Exception exception) { | |
/** | |
* Определение потока, сделано для наглядности | |
*/ | |
StackTraceElement[] stack = Thread.currentThread().getStackTrace(); | |
System.out.println("Я метод " +stack[1].getMethodName()+ | |
" меня запустили со строки "+stack[2].getLineNumber()+" мой лог:"); | |
System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName()); | |
} | |
/** | |
* [4] Создается рандомное число от 0,0 до 1,0 и умножается на 3, | |
* также оно приводится к типу int, т.е. отрезается дробная часть. | |
* И, в зависимости от числа выбрасывается то или иное исключение | |
*/ | |
public void methodThrowExceptions() throws CharConversionException, | |
FileSystemException, IOException { | |
int i = (int) (Math.random() * 3); | |
/** | |
* Отображение числа i, сделано для наглядности | |
*/ | |
System.out.println("Сгенерированное число i равно "+i); | |
if (i == 0) | |
throw new CharConversionException(); | |
if (i == 1) | |
throw new FileSystemException(""); | |
if (i == 2) | |
throw new IOException(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment