Что на самом деле делает ключевое слово 'new' в Java, и следует ли мне избегать создания новых объектов?

Я зарегистрировался несколько минут назад, хотя я хорошо пользуюсь этим сайтом с тех пор, как занялся компьютерным программированием, которому я сам учил и считаю своим маленьким хобби .

Я действительно искал похожие вопросы, но на самом деле я не мог найти ответ, который искал. Теперь, зная, что в Java (это язык, с которого мне было предложено начать) считается хорошей практикой программирования объявлять и создавать экземпляры переменных по мере необходимости, обратите внимание на следующие строки:

class MyClass {
    void myMethod() {
        AnotherClass myObject = new AnotherClass();
        myObject.doStuff();
    }
}

Теперь предположим, что я вызвать myMethod (), скажем, 10 раз при запуске моей программы, как это работает? Каждый раз создается новый объект? Перераспределяется ли переменная myObject каждый раз? Пропускает ли компилятор подобное в коде, поскольку он видит, что объект уже создан и переменная myObject уже назначена такому объекту? В двух словах: следует ли мне писать такой код только в том случае, если я планирую вызвать этот метод только один раз? Я знаю ... позор мне за такой глупый вопрос, но, пожалуйста, дайте мне шанс! Заранее спасибо!

--------------------------- отредактировано --------------- --------------

Теперь я должен редактировать это сообщение после получения новых ответов? кстати ... черт возьми, это было быстро, большое спасибо! И вау, это меня сильно смутило, я думаю, это из-за того, что я сам себя так учил ... В любом случае, разве не бесполезно каждый раз создавать объект new AnotherClass для переменной myObject ? Я имею в виду, что если я хочу использовать переменную myObject во всей программе, не следует ли мне объявить ее Раз и навсегда? может быть, в другом методе, который я буду вызывать только один раз? Потому что, насколько я понимаю, каждый раз, когда я вызываю myMethod () , создается новый объект, таким образом переопределяя собственные свойства myObject, известные как переменные, или я просто говорю ерунду?

------- -------------------- отредактировано -----------------------------

Мои сомнения возникли после прочтения этого кода с какого-то сайта, который я сейчас не могу вспомнить:

    public class DataBase {

    private static String buf, retString = "\n";
    private static File file = new File("test.txt");

    public static void readText(JTextArea area) {   
        try {
            FileReader fr = new FileReader (file);
            BufferedReader br = new BufferedReader(fr);
            while ((buf = br.readLine()) != null) {
                area.append(buf); 
                area.append(retString);
            }
            br.close(); 
            fr.close();
        }
        catch (IOException e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void writeText(JTextArea area) {
        try {
            FileWriter fw = new FileWriter (file);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(area.getText());
            bw.close(); 
            fw.close();
        }
        catch (IOException e) {
            System.out.println("Exception: " + e);
        }
    }
}

Я имею в виду, почему бы не объявить FileWriter, FileReader, BufferedReader и BufferedWriter в верхней части класса, как они делали для других переменных? и почему бы не инициализировать их, может быть, в конструкторе? Зачем делать это каждый раз при вызове метода вместо того, чтобы использовать одну и ту же переменную экземпляра?

31
задан Vadim Kotov 17 January 2018 в 10:36
поделиться