Вниз  Java-программирование (1-ые посты)
- 5.06.2014 / 12:27
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Kalter, конкретно в этом примере деструктор необязателен. А вот если там в классе открытые потоки, интернет-соединения или ещё что-либо, тогда да.
__________________
 let live
- 5.06.2014 / 12:28
samogost
  Пользователь

samogost 
Сейчас: Offline
Kalter, метод-деструктор переопределяется в том случае если перед удалением обьекта надо сделать какие-то действия. Присвоив обьекту null ты указываешь сборщику мусора что в ближайшее время надо убрать этот обьект и он в зависимости от нагруженности делает свою работу, но перед этим смотрит на наличие деструктора.
Например имеется обьект "папа" и "сын", чтобы папа не оставил сына без крыши над головой ему надо присвоить деструктор таким образом:
public class Папа extends Человек{
protected void finalize(){ //деструктор
написать_завещание();
}
}

Сборщик мусора пусть будет киллером.
После этого мы можем в любой момент киллеру дать приказ уничтожить "Папу" без всякого риска для сына таким образом:
папа=null;
после чего киллер в ближайшее время уничтожить бедного папу, а сын не останется без квартиры.

Изменено samogost (5.06 / 12:39) (всего 5 раз)
- 5.06.2014 / 13:12
Kalter
  Пользователь

Kalter 
Сейчас: Offline
samogost, понятно. Но я уже читал пару книжек, и там было сказано, что на finallize особо надеяться не надо.
aNNiMON, понятно.
Т.е. я так понял, что всем объектам null не стоит присваивать, а деструктор нужен для финальных действий.
Спасибо.
__________________
 Homo homini penis est.
- 6.06.2014 / 12:16
Maxer
  Пользователь

Maxer 
Сейчас: Offline
Компилятор выдает ошибку:

Project settings saved
Building "MyFirstApp"
warning: [options] source value 1.3 is obsolete and will be removed in a future release
warning: [options] target value 1.3 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
C:\Users\us\j2mewtk\2.5.2\apps\MyFirstApp\src\MyFirstApp.java:22: error: cannot find symbol
f = new Form("Hello world!");
^
   symbol: variable f
   location: class MyFirstApp
C:\Users\us\j2mewtk\2.5.2\apps\MyFirstApp\src\MyFirstApp.java:23: error: cannot find symbol
f.append("Hello world!");
^
   symbol: variable f
   location: class MyFirstApp
C:\Users\us\j2mewtk\2.5.2\apps\MyFirstApp\src\MyFirstApp.java:24: error: cannot find symbol
d = Display.getDisplay(this);
^
   symbol: variable d
   location: class MyFirstApp
C:\Users\us\j2mewtk\2.5.2\apps\MyFirstApp\src\MyFirstApp.java:25: error: cannot find symbol
d.setCurrent(f);
           ^
   symbol: variable f
   location: class MyFirstApp
C:\Users\us\j2mewtk\2.5.2\apps\MyFirstApp\src\MyFirstApp.java:25: error: cannot find symbol
d.setCurrent(f);
^
   symbol: variable d
   location: class MyFirstApp
5 errors
3 warnings
com.sun.kvem.ktools.ExecutionException
Build failed

На такой код:

  1. import javax.microedition.midlet.MIDlet;
  2. import javax.microedition.lcdui.Form;
  3. import javax.microedition.lcdui.Image;
  4. import javax.microedition.lcdui.Display;
  5.  
  6. public class MyFirstApp extends MIDlet {
  7.  
  8. public void pauseApp() {
  9.  
  10. }
  11.  
  12. public void destroyApp(boolean unconditional) {
  13.  
  14. notifyDestroyed();
  15.  
  16. }
  17.  
  18. public void startApp() {
  19.  
  20. f = new Form("Hello world!");
  21. f.append("Hello world!");
  22. d = Display.getDisplay(this);
  23. d.setCurrent(f);
  24.  
  25. }
  26.  
  27. }

В чем проблема? :-(

Изменено Maxer (6.06 / 12:16) (всего 1 раз)
- 6.06.2014 / 12:22
samogost
  Пользователь

samogost 
Сейчас: Offline
Maxer, проблема в том, что перед новыми переменными не указан тип переменных, должно быть так:
Form f=...;
Display d=...;

Изменено samogost (6.06 / 12:24) (всего 1 раз)
- 6.06.2014 / 12:46
SeTSeR
  Пользователь

SeTSeR 
Сейчас: Offline
Переменные сначала определить надо
- 6.06.2014 / 12:54
mrEDitor
  Пользователь

mrEDitor 
Сейчас: Offline
Maxer, в общем, переменные в Java строго типизированы, т.е. если ты хочешь хранить число и строку, тебе нужно объявить две разные переменные: int number; String text;
В твоем случае:
  1. Display d;
  2. Form f;
Можно объявить либо сразу внутри класса, чтобы использовать во всех методах
  1. public class SomeClass {
  2.   Form f;
или только для одного метода
  1. public void startApp() {
  2.   Form f;
можно сразу и присвоить переменной что-то
  1. public void startApp() {
  2.   Form f = new Form();


Изменено mrEDitor (6.06 / 12:55) (всего 1 раз)
- 6.06.2014 / 13:30
Naik
  Пользователь

Naik 
Сейчас: Offline
Kalter (05.06.2014/13:12)
samogost, понятно. Но я уже читал пару книжек, и там было сказано, что на finallize особо надеяться не надо.
aNNiMON, понятно.
Т.е. я так понял, что всем объектам null не стоит присваивать, а дестру
тоже такое читал, советовали вообще без крайней необходимости не пользоваться, оно полезно только в каких-то экзотических случаях. Даже в стандартном api используют обычные методы вместо finalize.
- 6.06.2014 / 18:56
Maxer
  Пользователь

Maxer 
Сейчас: Offline
mrEDitor, Понял, спасибо! Но вот например метод:

  1. public void commandAction(Command c, Displayable d) {
  2.  
  3.     // команда перехода к следующей картинке.
  4.     // если текущая картинка не последняя
  5.     if (с == next && slideNum<maxSlideNum)
  6.       // увеличить номер текущей картинки
  7.       slideNum++;
  8.     // команда возврата к предыдущей картинке.
  9.     // если текущая картинка не первая
  10.     if (с == back && slideNum>1)
  11.       // увеличить номер текущей картинки
  12.       slideNum--;
  13.     // удалить из формы текущую картинку
  14.     form.delete(0);
  15.     // получить имя файла картинки из ее номера
  16.     // и добавить полученную картинку в форму
  17.     setImage("/"+Integer.toString(slideNum)+".png");
  18.   }

Та же ошибка:

C:\Users\us\j2mewtk\2.5.2\apps\MyFirstApp\src\MyFirstApp.java:58: error: cannot find symbol
     if (с == next && slideNum<maxSlideNum)
         ^
   symbol: variable с
   location: class MyFirstApp
C:\Users\us\j2mewtk\2.5.2\apps\MyFirstApp\src\MyFirstApp.java:63: error: cannot find symbol
     if (с == back && slideNum>1)
         ^
   symbol: variable с

Но тип же указан в c и d

Изменено Maxer (6.06 / 19:00) (всего 2 раза)
- 6.06.2014 / 19:25
mrEDitor
  Пользователь

mrEDitor 
Сейчас: Offline
Maxer, проверь раскладку, чтобы обе буквы c были в одной (желательно английской) раскладке. Просто сотри обе и напиши снова.

Изменено mrEDitor (6.06 / 19:25) (всего 1 раз)
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)