Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Eclipse]непонятный static, видимо я не знаю синтаксиса совсем =( 
V
    Опции темы
Kakadu
Дата 7.3.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Код

public class BackendCommunicator {

     static {
          File gccFile; // ну это я ещё понял...
          try {
            // а почему это компилятор пропускает - загадка для меня
          }
     }
}


Нет, я нигде не пропустил объявление метода со скобочками - его там нет!!


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
gosnis
Дата 7.3.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.5.2007
Где: Тель Авив, Израил ь

Репутация: нет
Всего: 2



А что тебя удивляет? Ловится exception. Что бы, например, записать ошибку в логи.
PM MAIL ICQ Skype MSN   Вверх
Kakadu
Дата 7.3.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



try надо писать в теле какой-нить функции, но она тут даже не объявлена. получается что это сейчас пишется в общей куче с методами и полями класса. Как это понимать?


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
Evgeni68
Дата 7.3.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 9.7.2007

Репутация: 2
Всего: 3



Ничего сверхестественного, обычный блок статической инициализации.
А можно написать и так:
Код

class Test {

  {//блок инициализации
    try {
      //что-то делаем
    }
    catch(Exception _ex){...}
  }

...

}


Такой блок выполняется перед вызовом конструктора.

Это сообщение отредактировал(а) Evgeni68 - 7.3.2009, 18:14
PM MAIL   Вверх
gosnis
Дата 7.3.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.5.2007
Где: Тель Авив, Израил ь

Репутация: нет
Всего: 2



Цитата(Evgeni68 @ 7.3.2009,  18:04)
Такой блок выполняется перед вызовом конструктора.

Такой блок выполняется один раз при загрузке класса classloader-ом.
PM MAIL ICQ Skype MSN   Вверх
duk
Дата 7.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: 4
Всего: 4



Цитата(gosnis @  7.3.2009,  15:42 Найти цитируемый пост)
А что тебя удивляет? Ловится exception. Что бы, например, записать ошибку в логи. 


Exception ловится в блоке catch(...) {}

Кстати, попробуй откомпилировать этот код.
PM MAIL   Вверх
gosnis
Дата 7.3.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.5.2007
Где: Тель Авив, Израил ь

Репутация: нет
Всего: 2



Цитата(duk @ 7.3.2009,  20:00)
Цитата(gosnis @  7.3.2009,  15:42 Найти цитируемый пост)
А что тебя удивляет? Ловится exception. Что бы, например, записать ошибку в логи. 


Exception ловится в блоке catch(...) {}

Кстати, попробуй откомпилировать этот код.

Насколько я знаю, try без catch или finally не бывает. Поэтому я решил, что автор оригинального пост просто этот кусок кода опустил. Иначе как понимать его примечание о том, что компилятор код пропускает? Мой компилятор try без ничего отказывается пропускать. Может это он у меня бракованый. ;-)
PM MAIL ICQ Skype MSN   Вверх
duk
Дата 7.3.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: 4
Всего: 4



gosnis, нет. Он у тебя оригинальный ). Просто беседа выглядела так,  как будто этот одинокий try  таки пропускается.

Особенно если прочитать: 


Цитата(Evgeni68 @  7.3.2009,  18:04 Найти цитируемый пост)
Ничего сверхестественного, обычный блок статической инициализации.
А можно написать и так:
 bla bla bla

PM MAIL   Вверх
Evgeni68
Дата 7.3.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 9.7.2007

Репутация: 2
Всего: 3



Цитата(gosnis @ 7.3.2009,  19:36)
Цитата(Evgeni68 @ 7.3.2009,  18:04)
Такой блок выполняется перед вызовом конструктора.

Такой блок выполняется один раз при загрузке класса classloader-ом.

Ну, здесь я говорил о нестатическом блоке, который-таки выполняется при создании каждого объекта.
Что касается блока catch, я думаю автор просто забыл его здесь указать.

PM MAIL   Вверх
Kakadu
Дата 7.3.2009, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Аааааааааааааааааааааааааа

Теперь я понял, что конструкторы бывают и статические........ smile 


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
duk
Дата 7.3.2009, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: 4
Всего: 4



Цитата(Kakadu @  7.3.2009,  21:12 Найти цитируемый пост)
Теперь я понял, что конструкторы бывают и статические........ smile  

Конструкторов статических не бывает

Добавлено через 1 минуту и 34 секунды
бывают статические блоки инициализации, которые к не статическим переменным-членам, доступа абсолютно никакого не имеют
PM MAIL   Вверх
gosnis
Дата 7.3.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.5.2007
Где: Тель Авив, Израил ь

Репутация: нет
Всего: 2



Цитата(Evgeni68 @ 7.3.2009,  20:54)
Ну, здесь я говорил о нестатическом блоке, который-таки выполняется при создании каждого объекта.

А вот этого я таки до конца не понимаю. В чем изюминка? Зачем запускать что то каждый раз ДО конструктора? Где такое может применяться?
PM MAIL ICQ Skype MSN   Вверх
Evgeni68
Дата 7.3.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 9.7.2007

Репутация: 2
Всего: 3



Цитата(gosnis @  7.3.2009,  22:26 Найти цитируемый пост)
Где такое может применяться?

Лентяями, нежелающими писать конструктор, если он без параметровsmile 

А ещё можно сделать такой трюк:
Код

public class Foo 
{
  public void bar(List<String> _list)
  {
     ...
  }

  public static void main(String[] _args)
  {
     Foo foo = new Foo();
     foo.bar( new ArrayList<String>(){ {add("one"); add("two");} } );
  }
}


т.е. можно передавать объект в метод и тут же его инициализировать.

Это сообщение отредактировал(а) Evgeni68 - 7.3.2009, 23:35
PM MAIL   Вверх
gosnis
Дата 8.3.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.5.2007
Где: Тель Авив, Израил ь

Репутация: нет
Всего: 2



Цитата(Evgeni68 @ 7.3.2009,  22:42)
Цитата(gosnis @  7.3.2009,  22:26 Найти цитируемый пост)
Где такое может применяться?

Лентяями, нежелающими писать конструктор, если он без параметровsmile 

А ещё можно сделать такой трюк:
Код

public class Foo 
{
  public void bar(List<String> _list)
  {
     ...
  }

  public static void main(String[] _args)
  {
     Foo foo = new Foo();
     foo.bar( new ArrayList<String>(){ {add("one"); add("two");} } );
  }
}


т.е. можно передавать объект в метод и тут же его инициализировать.

И чем это помогает лентяям? Писать то все равно надо...

А насчет трюка, я бы так писать не стал, ибо нетривиально и нечитабельно. smile 
PM MAIL ICQ Skype MSN   Вверх
Evgeni68
Дата 8.3.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 9.7.2007

Репутация: 2
Всего: 3



Цитата(gosnis @  8.3.2009,  01:22 Найти цитируемый пост)
И чем это помогает лентяям? Писать то все равно надо...

Ну как же - не нужно писать public ClassName(){...}, достаточно {...}, а вообще мои слова были скорее шуткой, чем нет.

Цитата(gosnis @  8.3.2009,  01:22 Найти цитируемый пост)
А насчет трюка, я бы так писать не стал, ибо нетривиально и нечитабельно. 

Бесспорно, достаточно знать об этой возможности языка. 
Кроме того, данная фича просто необходима при использовании инструментов вроде JMock.

Это сообщение отредактировал(а) Evgeni68 - 8.3.2009, 10:12
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1015 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.