Что означает <init> в исключении Java?

Что означает <init> в исключении Java?

Например:

BlahBlahException...

at java.io.FileInputStream.<init>(FileInputStream.java:20)

Ответы

Ответ 1

Чтобы исключение было создано при построении объекта, есть два варианта:

  • в конструкторе
  • при инициализации переменных

Посмотрите эту демонстрацию я написал: http://ideone.com/Mm5w5


class Main
{
        public static void main (String[] args) throws java.lang.Exception
        {
                try
                { new Test(); } catch (Exception e) { e.printStackTrace(); }

                try
                { new Test2(); } catch (Exception e) { e.printStackTrace(); }

                try
                { new Test3(); } catch (Exception e) { e.printStackTrace(); }


        }

        static class Test
        {
                Object obj = getObject();
                Object getObject()
                { throw new RuntimeException("getObject"); }
        }

        static class Test2
        {
                Test2()
                {
                        throw new RuntimeException("constructor");
                }
        }

        static class Test3
        {
                Object obj1 = null;
                String str = obj1.toString();
        }
}

Выдает:

java.lang.RuntimeException: getObject
    at Main$Test.getObject(Main.java:24)
    at Main$Test.<init>(Main.java:22)
    at Main.main(Main.java:9)
java.lang.RuntimeException: constructor
    at Main$Test2.<init>(Main.java:31)
    at Main.main(Main.java:12)
java.lang.NullPointerException
    at Main$Test3.<init>(Main.java:38)
    at Main.main(Main.java:15)

Ответ 2

< INIT >

называется

Метод инициализации экземпляра

который создается вашим java-компилятором из конструктора, который вы определили. Хотя это неверное определение метода, ваш JVM ожидает этого, и все, что вы положили в конструктор, будет выполняться в методе. Поэтому, когда вы с исключением, вы можете быть уверены, что это из конструктора исполняемого Java-класса. Подробнее об этом читайте в статьях дизайна дизайна Bill Venner на Инициализация объектов.