Как мы знаем об этом вроде ...
Java.lang.Object.finalize () вызывается сборщиком мусора для объекта, когда сборщик мусора определяет, что больше нет ссылок на объект. Подкласс переопределяет метод finalize для удаления системных ресурсов или выполнения другой очистки. Также метод finailze () должен быть переопределен для объекта, чтобы включить код очистки или удалить системные ресурсы, которые должны быть выполнены до того, как объект будет собран сборщиком мусора.
Итак, я создал класс и переопределил в нем метод finalize () с некоторым моим кодом, как показано ниже, поскольку моя основная концепция - записать все данные, которые мой класс содержит, в конце, как перед закрытием формы в текстовом файле, чтобы сохранить его. ...
public class MainClass
{
public static void main(String[] args) {
NewDEMOClass obj = new NewDEMOClass();
obj.AddValueToMap("A",1);
obj.AddValueToMap("B",2);
obj.AddValueToMap("C",3);
// Many Value Added Here...
}
}
Тогда мой собственный класс ...
public class NewDEMOClass
{
private Map<String, Integer> customDictionary = new HashMap<String, Integer>();
public NewDEMOClass()
{
}
public AddValueToMap(String Key, Integer Value)
{
customDictionary.put(Key, Value);
}
@Override
protected void finalize()
{
String totalWord = "";
for ( Map.Entry<String, Integer> entry : customDictionary.entrySet() ) {
totalWord += entry.getKey() + "-" + entry.getValue() + System.lineSeparator();
}
while (true)
{
try(
PrintWriter out = new PrintWriter("customDictionary.txt", "UTF-8") ){
out.println( totalWord );
break;
} catch (FileNotFoundException ex) {
Logger.getLogger(AutoUrduPredictorAndSuggester.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(AutoUrduPredictorAndSuggester.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Итак, моя основная проблема и вопрос заключается в том, что я хочу построчно отлаживать внутренние коды метода finalize()
, чтобы увидеть ошибки и т. Д. Но я не могу добавить точку останова, поскольку использую среду IDE NetBeans. Так что же теперь делать и как ... ???
finalize
-метод с бесконечным циклом, безусловно, одна из худших идей, которые я мог придумать. Что касается проблемы с netbeans: просто используйте другой отладчик (работает в IntelliJ, я думаю, JDB также поддерживает это). И, наконец, что не менее важно, использованиеfinalize
в целом плохо. Вместо этого используйте обычный метод. - person Paul   schedule 31.12.2016finalize()
: вы не можете знать когда, вы не можете знать кто (какой поток), и вы даже не можете быть уверены в этом будет называться вообще. - person Jack   schedule 31.12.2016finalize()
работать или все еще нет? Есть ли какие-либо предложения по моей идее, кромеfinalize()
метода достижения того, что я хочу? - person Sahar Jabeen   schedule 31.12.2016finalize
метод не делает того, что должен: высвобождает ресурсы. Вместо этого он выделяет кучу новых вещей и выполняет всевозможные операции ввода-вывода и другие сумасшедшие вещи. Предполагается, что финализаторы избавляются от ресурсов в периоды нехватки памяти, а не тратят их впустую. - person Lew Bloch   schedule 01.01.2017ShutDown Thread
вместоfinalize()
, как показано ниже в вашем конструкторе классов ... `Runtime.getRuntime (). AddShutdownHook (new Thread (new Runnable () {public void run () {functionThatShouldWorkInFinalize ();}}, Shutdown-thread )); ` - person Muhammad Hassan   schedule 02.01.2017