• ,

level09.lesson08.task03 | com.javarush.task.task09.task0915;

Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptios должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его (вызвать метод BEAN.log)
3. Добавь в объявление метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение — логируй его. Используй try..catch

Ошибка Добавь в объявление метода processExceptions класс исключения FileSystemException.

Куда добавить?(

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {

        try {

            processExceptions();
        }catch (Exception e){
            BEAN.log(e);
        }

    }

    public static void processExceptions() throws  IOException {
        try {

            BEAN.methodThrowExceptions();
        } catch (FileSystemException e) {
            BEAN.log(e);
            throw e;
        } catch (CharConversionException e) {
            BEAN.log(e);
        } catch (IOException e) {
            BEAN.log(e);
        }

    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}

level09.lesson08.task05 Три вопроса в порядке важности

Я читал, что дальнейший код метода после исключения в нём пропускается. А дальнейший код в блоке try тоже пропускается или нет? Похоже пропускается, да? Раз у меня всё время выводится в консоли исключение из method1()

Не совсем понял почему раньше писали такую строку(которую я тоже не понял) Thread.currentThread().getStackTrace() а тут на объекте вызываем getStackTrace()?

В консоли(ниже я скопировал вывод) что-то ничего не понял с 5 строки и до конца. Может кто — нибудь написать, что там за продолжение? =)) *invoke invoke0 и последняя строка*

package com.javarush.test.level09.lesson08.task05;
    
    /* Перехват unchecked исключений
    В методе processExceptions обработайте все unchecked исключения.
    Нужно вывести стек-трейс каждого возникшего исключения используя метод printStack.
    Можно использовать только один блок try..
    */
    
    public class Solution
    {
        public static void main(String[] args) {
            processExceptions(new Solution());
        }
    
        public static void processExceptions(Solution obj) {
            try
            {
                obj.method1();
                obj.method2();
                obj.method3();
            }
            catch (NullPointerException | IndexOutOfBoundsException | NumberFormatException e)
            {
                printStack(e);
            }
        }
    
        public static void printStack(Throwable throwable) {
            System.out.println(throwable);
            for (StackTraceElement element : throwable.getStackTrace()) {
                System.out.println(element);
            }
        }
    
        public void method1(){
            throw new NullPointerException();
        }
    
        public void method2() {
            throw new IndexOutOfBoundsException();
        }
    
        public void method3() {
            throw new NumberFormatException();
        }
    }

    java.lang.NullPointerException
    com.javarush.test.level09.lesson08.task05.Solution.method1(Solution.java:36)
    com.javarush.test.level09.lesson08.task05.Solution.processExceptions(Solution.java:18)
    com.javarush.test.level09.lesson08.task05.Solution.main(Solution.java:12)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
    
    Process finished with exit code 0

Plugin exception

JavaRush Plugin 1.21
IDEA 14.1.3 community and ultimate

Периодически при загрузке задач выдает эксепшн в плагине.

cannot share data context between Swing events; initial event count = 309368; current event count = 310172
java.lang.Throwable
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:115)
at com.intellij.ide.impl.DataManagerImpl$MyDataContext.getData(DataManagerImpl.java:346)
at com.intellij.openapi.actionSystem.DataKey.getData(DataKey.java:75)
at com.intellij.openapi.actionSystem.AnActionEvent.getData(AnActionEvent.java:165)
at com.intellij.openapi.actionSystem.AnActionEvent.getProject(AnActionEvent.java:120)
at com.javarush.plugin.JavaRushTaskChooser.actionPerformed(JavaRushTaskChooser.java:209)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$3.performAction(IdeKeyEventDispatcher.java:593)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:644)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:483)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:213)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:538)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Exception в лекциях опечатка

Добрый день
Я читаю сейчас про исключения. B по — моему в ваших лекциях неверно написано:
«Если метод выбрасывает исключения NullPointerException и ArithmeticException, он обязан указать их в своей сигнатуре. Это checked исключения....»

Но разве это верно? Разве NullPointerException and ArithmeticException проверяемые??
  • ,

level21.lesson10.task03

/* Найти и исправить ошибку
Найти и исправить ошибку
*/
public class Solution {
    public static void main(String[] args) {

        for (int i = 0; i < 1; i++)
            try {
                new Solution().readFile("ggg");
            } catch (Throwable throwable) {
                System.out.println(i + " " + throwable.getClass().getSimpleName());
            }
    }

    public void readFile(String path) {
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            System.out.println(br.readLine());
            dispose();
        } catch (FileNotFoundException ignored) {
            dispose();
        } catch (IOException ignored) {
            dispose();
        } finally {
            System.out.println("finally");
        }
    }

    public void dispose() {
        //pretend to call some method that throws an exception
        throw new RuntimeException("no matter");
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("inside finalize - before throwing");
        dispose();   //исключения игнорируются в finalize
        System.out.println("inside finalize - after throwing");
    }
}


Решить получилось. Но кто-то может объяснить почему это была ошибка?
  • ,

level05.lesson12.home05

Привет всем начинающим и не очень)
Пытался использовать исключения, поясните кто может что не так — программа не выходит из цикла.


package com.javarush.test.level05.lesson12.home05;

/* Вводить с клавиатуры числа и считать их сумму
Вводить с клавиатуры числа и считать их сумму, пока пользователь не введёт слово «сумма». Вывести на экран полученную сумму.
*/
import java.io.*;
import java.lang.NumberFormatException;

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        int sum = 0;
        BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in));
        String in = rdr.readLine();
        while (true) {
            try {
                int num = Integer.parseInt(in);
                sum += num;
            }
            catch (NumberFormatException e) {
                if (in.equals("сумма")) {
                    System.out.println(sum);
                    break;
                } else continue;
            }
        }
    }
}

6 Java исключений, которые преследуют новичков

Время от времени я сталкиваюсь с разработчиками-новичками, которые застряли на понимании следующих простых исключений и мне приходиться все заново объяснять им. Скорей всего в подобной ситуации оказываются многие опытные Java разработчики, которые помогают новичкам справиться со следующими исключениями. Поэтому я решил написать эту статью и в будущем ссылаться на нее. Комментарии и добавления в список исключений приветствуются.

level22.lesson05.task02

>Метод getPartOfString должен возвращать подстроку между первой и второй табуляцией.
На некорректные данные бросить исключение TooShortStringException.
Класс TooShortStringException не менять.



строка между табуляциями возвращается, но с приемом проблемы
1. что подразумевается под некорректными данными?
попробовал и проверять строку на нулевую длину и считать количество '\t' если меньше двух

проверка строки на null также не помогла

2. бросать — через сигнатуру метода, или выводить стектрейс внутри?
  • ,

level09.lesson08.task03;

Не понимаю, какой из пунктов я не выполнил / выполнил не правильно?

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {
        try{
            processExceptions();
        }
        catch (IOException e){
            BEAN.log(e);
        }
    }

    public static void processExceptions()throws FileSystemException, IOException {
        try{
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e){
            BEAN.log(e);
            throw  e;
        }
        catch (CharConversionException e){
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}