5.06.2014 / 12:27 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Kalter, конкретно в этом примере деструктор необязателен. А вот если там в классе открытые потоки, интернет-соединения или ещё что-либо, тогда да.
__________________
let live |
5.06.2014 / 12:28 | |
samogost Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Kalter, метод-деструктор переопределяется в том случае если перед удалением обьекта надо сделать какие-то действия. Присвоив обьекту null ты указываешь сборщику мусора что в ближайшее время надо убрать этот обьект и он в зависимости от нагруженности делает свою работу, но перед этим смотрит на наличие деструктора. Например имеется обьект "папа" и "сын", чтобы папа не оставил сына без крыши над головой ему надо присвоить деструктор таким образом: public class Папа extends Человек{ protected void finalize(){ //деструктор написать_завещание(); } }
Сборщик мусора пусть будет киллером. После этого мы можем в любой момент киллеру дать приказ уничтожить "Папу" без всякого риска для сына таким образом: папа=null; после чего киллер в ближайшее время уничтожить бедного папу, а сын не останется без квартиры.
Изменено samogost (5.06 / 12:39) (всего 5 раз) |
5.06.2014 / 13:12 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| samogost, понятно. Но я уже читал пару книжек, и там было сказано, что на finallize особо надеяться не надо. aNNiMON, понятно. Т.е. я так понял, что всем объектам null не стоит присваивать, а деструктор нужен для финальных действий. Спасибо.
__________________
Homo homini penis est. |
6.06.2014 / 12:16 | |
Maxer Пользователь Сейчас: Offline
Имя: Максим Откуда: Киверцы Регистрация: 04.06.2013
| Компилятор выдает ошибку: 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
На такой код: import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Display;
public class MyFirstApp extends MIDlet {
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
notifyDestroyed();
}
public void startApp() {
f = new Form("Hello world!");
f.append("Hello world!");
d = Display.getDisplay(this);
d.setCurrent(f);
}
}
В чем проблема? Изменено Maxer (6.06 / 12:16) (всего 1 раз) |
6.06.2014 / 12:22 | |
samogost Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Maxer, проблема в том, что перед новыми переменными не указан тип переменных, должно быть так: Form f=...; Display d=...;
Изменено samogost (6.06 / 12:24) (всего 1 раз) |
6.06.2014 / 12:46 | |
SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| Переменные сначала определить надо
|
6.06.2014 / 12:54 | |
mrEDitor Пользователь Сейчас: Offline
Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
| Maxer, в общем, переменные в Java строго типизированы, т.е. если ты хочешь хранить число и строку, тебе нужно объявить две разные переменные: int number; String text; В твоем случае: Можно объявить либо сразу внутри класса, чтобы использовать во всех методах public class SomeClass {
Form f;
или только для одного метода public void startApp() {
Form f;
можно сразу и присвоить переменной что-то public void startApp() {
Form f = new Form();
Изменено mrEDitor (6.06 / 12:55) (всего 1 раз) |
6.06.2014 / 13:30 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Kalter (05.06.2014/13:12) samogost, понятно. Но я уже читал пару книжек, и там было сказано, что на finallize особо надеяться не надо. aNNiMON, понятно. Т.е. я так понял, что всем объектам null не стоит присваивать, а деструтоже такое читал, советовали вообще без крайней необходимости не пользоваться, оно полезно только в каких-то экзотических случаях. Даже в стандартном api используют обычные методы вместо finalize.
|
6.06.2014 / 18:56 | |
Maxer Пользователь Сейчас: Offline
Имя: Максим Откуда: Киверцы Регистрация: 04.06.2013
| mrEDitor, Понял, спасибо! Но вот например метод: public void commandAction(Command c, Displayable d) {
// команда перехода к следующей картинке.
// если текущая картинка не последняя
if (с == next && slideNum<maxSlideNum)
// увеличить номер текущей картинки
slideNum++;
// команда возврата к предыдущей картинке.
// если текущая картинка не первая
if (с == back && slideNum>1)
// увеличить номер текущей картинки
slideNum--;
// удалить из формы текущую картинку
form.delete(0);
// получить имя файла картинки из ее номера
// и добавить полученную картинку в форму
setImage("/"+Integer.toString(slideNum)+".png");
}
Та же ошибка: 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 Пользователь Сейчас: Offline
Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
| Maxer, проверь раскладку, чтобы обе буквы c были в одной (желательно английской) раскладке. Просто сотри обе и напиши снова.
Изменено mrEDitor (6.06 / 19:25) (всего 1 раз) |