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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> модификатор final, параметров метода 
:(
    Опции темы
sergejzr
Дата 4.5.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Век живи - век учись smile Получается, что final - что то типа const в Си. Отлично! надо будет поиграть smile


Так как kashka запропастилась, я попробую перевести этот интересный абзатц про преимущества ассертов перед указанием if (Кстати тоже наследство Си, но в Яве они конечно элегантнее реализованы, т.к. не нужно никаких дефайнов )
------------------------------------------------------------------------------------------
  • Сорс короче и понятнее
  • С первого взгляда ясно, что речь идёт о проверке кода, а не разветвления if для обычного управления программой.
  • Ассершены можно включать и выключать по необходимости. В выключенном виде на проверку не затрачивается рессурсов (памяти, процессора. Прим. sergej.z).
Выражение проверяемое оператором "Assert" должно возвращать тип boolean. Если присутствует дополнительное выражение, которое может возвращать любой тип, оно будет передано в конструктор обьекта AssertionError и послужит текстом сообщения об ошибке.
------------------------------------------------------------------------------------------
Цитата(kashka @ 13.4.2005, 15:48)
assert x >= 0;

Das Programm überprüft die Bedingung und fährt fort, wenn sie erfüllt ist. Andernfalls wird eine Ausnahme ausgelöst. Natürlich hätte derselbe Test auch mit Hilfe einer einfachen if-Anweisung ausgeführt werden können. Die assert-Anweisung hat ihr gegenüber jedoch einige Vorteile:

Der Programmcode ist kürzer.
Auf den ersten Blick ist zu erkennen, daß es sich um einen Korrektheits-Check handelt und nicht um eine Verzweigung zur Steuerung des Programmablaufs.
Assertions lassen sich zur Laufzeit wahlweise an- oder ausschalten. Im Gegensatz zu einer einfachen if-Anweisung verursachen sie praktisch keine Verschlechterung des Laufzeitverhaltens, wenn sie deaktiviert sind.
Der im Syntaxdiagramm angegebene ausdruck1 muß immer vom Typ boolean sein, andernfalls gibt es einen Compilerfehler. Fehlt ausdruck2 (er darf von beliebigem Typ sein), wird im Falle des Nichterfülltseins der Bedingung ein AssertionError mit einer leeren Fehlermeldung erzeugt. Wurde ausdruck2 dagegen angegeben, wird er im Fehlerfall an den Konstruktor von AssertionError übergeben und dient als Meldungstext für das Fehlerobjekt.



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
batigoal
Дата 4.5.2005, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



У Эккеля это, оказывается, есть. Дочитываю, наконец smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
simanyay
Дата 4.5.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


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

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



Цитата(Lamer @ 4.5.2005, 15:54)
Исключений нет. m=null, но INSTANCE спокойно сидит в памяти.


Точно. Но I'll be back smile
Добавлено @ 14:34
sergej.z, хм... интересно. Спасибо за перевод.


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
Domestic Cat
Дата 5.5.2005, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(simanyay @ 4.5.2005, 05:33)

Точно. Но I'll be back smile

В смысле?


--------------------

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


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(Domestic @ 5.5.2005, 07:03)
В смысле?

simanyay еще подучит Джаву и покажет тебе, Zandr'у, модификатору final и остальным, где раки зимуют. smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
simanyay
Дата 5.5.2005, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


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

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



Цитата(Lamer @ 5.5.2005, 14:26)
simanyay еще подучит Джаву и покажет тебе, Zandr'у, модификатору final и остальным, где раки зимуют. smile


во во smile


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
simanyay
Дата 5.5.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


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

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



Перечитал я опять главу в Effective Java про синглтоны и теперь полностью согласен с Lamer George и модификатором final по поводу его работы. Вот.


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
Domestic Cat
Дата 5.5.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Ааа, ну тогда ладно smile


--------------------

PM   Вверх
Zandr
Дата 6.5.2005, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

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



Цитата
simanyay еще подучит Джаву и покажет тебе, Zandr'у, модификатору final и остальным, где раки зимуют.

Дык, я не против smile Лишь бы конструктив smile
PM MAIL   Вверх
hatsumeika
Дата 14.5.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я встречался с ситуацией когда нужно объявить аргумент метода final: при его использование в анонимном классе:

Код

public class FinalAndAnonimClass {
  
  void m(final int x){   // final нужен
    
    m2(new ICommand(){
      public void execute(){
        System.out.println(x);
      }
    });
  }
  
  void m2(ICommand command){  }
  
  interface ICommand{
    void execute();
  }
}


без final компилятор говорит:
"FinalAndAnonimClass.java": local variable x is accessed from within inner class; needs to be declared final at line 7, column 28

Это сообщение отредактировал(а) hatsumeika - 14.5.2005, 19:01
PM MAIL   Вверх
Zandr
Дата 16.5.2005, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

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



hatsumeika, в этом треде про этот случай уже минимум два раза написали smile
PM MAIL   Вверх
hatsumeika
Дата 16.5.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



сорри, не заметил smile
PM MAIL   Вверх
jer1
Дата 24.5.2005, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

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



вот ещё такая реплика:
различные инспекторы кода (pmd, findbugs etc) данный вопрос помещают в категорию optimization - imho логично: компилятору даётся дополнительная информация, о неизменности параметра по присвоению, а он уже вправе ею воспользоваться

smile
https://jjguidelines.dev.java.net/book/html...04.html#JAC_003
https://jjguidelines.dev.java.net/book/html/index.html
сподобалось




--------------------
:w!q
PM MAIL   Вверх
Tamerlann
Дата 24.5.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

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



Скажем прямо, даже у Sun не много про это сказано. http://java.sun.com/docs/books/tutorial/ja...lVariables.html
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Се ля ви
Дата 24.5.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

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



Цитата(Zandr @ 4.5.2005, 07:46)
Цитата
Народ, всё проще. Эккель пишет, что final - это просто напросто замена вызова метода его телом на уровне компиляции.

Укажи, пожалуйста, где он это пишет, только точно, чтобы можно было найти. Очень интересно было бы увидеть это своими глазами.
И еще вопрос был про final применительно к параметрам метода, а не к самому методу, или классу, или instance member'у.

Чё-то совсем из головы вылетело. Если ещё не нашлось, - страница 246, либо "глава 6" -> "Ключевое слово final".

Вот кусок (смог найти только английский вариант ):
Цитата
In the case of a compile-time constant, the compiler is allowed to “fold” the constant value into any calculations in which it’s used; that is, the calculation can be performed at compile time, eliminating some run-time overhead. In Java, these sorts of constants must be primitives and are expressed with the final keyword. A value must be given at the time of definition of such a constant. Feedback

A field that is both static and final has only one piece of storage that cannot be changed. Feedback

When using final with object references rather than primitives, the meaning gets a bit confusing. With a primitive, final makes the value a constant, but with an object reference, final makes the reference a constant. Once the reference is initialized to an object, it can never be changed to point to another object. However, the object itself can be modified; Java does not provide a way to make any arbitrary object a constant. (You can, however, write your class so that objects have the effect of being constant.) This restriction includes arrays, which are also objects.


Ну и дальше - там много про него интересного smile


--------------------
  )
 (
[_])
проф. блог

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

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

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


 




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


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

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