Skip to content

Instantly share code, notes, and snippets.

@Chikitonik
Created August 26, 2017 18:51
Show Gist options
  • Save Chikitonik/b7d25b3034fb427935e40e0ec2491d0a to your computer and use it in GitHub Desktop.
Save Chikitonik/b7d25b3034fb427935e40e0ec2491d0a to your computer and use it in GitHub Desktop.
JavaRush исключения и поток
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