Какова функциональная разница между экземпляром и объектом?

Я знаю, что в OOP, instance = object. Поэтому, если у нас есть класс следующим образом:

public class something
{
    public static void main(String args[])
    {
    }
}

Будет ли эта строка в основном методе создавать новый объект instance?

something instance=new something();

Мой второй вопрос схож: если мы создаем Thread object - Thread t1=new Thread();, значит ли это, что мы создали экземпляр класса Thread, из которого мы можем статически вызывать методы? (например, sleep()).

Ответ 1

если мы создаем объект Thread - Thread t1 = new Thread(); действительно ли это означает, что мы создали экземпляр класса Thread, из которого мы можем статически вызвать методы? (например, sleep()).

Когда вы вызываете статический метод, вы не вызываете его из объекта. Вот почему он статичен. Нет необходимости, чтобы экземпляр выполнял статический метод.

Пример

Thread t1 = new Thread();
t1.checkAccess();  // <--- This is an instance method.

Thread.activeCount(); // <-- This is a static method.

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

Как вы им рассказываете друг другу?

Ну, это просто. Если это метод экземпляра, он будет вызываться из контекста объекта.

String str = new String("hello");
str = str.replaceAll("o", "");

Как вы можете видеть, вам нужно создать экземпляр для использования метода экземпляра.

С помощью статического метода это еще проще. Они будут вызваны только с именем класса.

String.copyValueOf(new char[] {'a', 'b', 'c'});

Нет необходимости создавать новый экземпляр String. Просто используйте имя класса.

ПРИМЕЧАНИЕ. Как указано в комментариях, из объекта экземпляра можно вызвать статический метод, но это не обычная практика. Если вы когда-либо не уверены, документация - ваш лучший друг. Или вы можете просто протестировать, пытаясь вызвать тот же метод из статического контекста.

Когда использовать статический метод вместо метода экземпляра?

Ну, это ответ, очень хорошо, здесь: Java: когда использовать статические методы, и я не вижу смысла повторять его:)

Ответ 2

Объект создается в обоих случаях, которые вы указываете:

something instance=new something();
Thread t1=new Thread();

Однако во втором случае, хотя объект Thread создан, поток не запускается до его запуска.

действительно ли это означает, что мы создали экземпляр класса Thread, из которого мы можем статически обращаться к методам? (например, sleep()).

Вам не нужен объект для вызова статических методов. Статический метод применяется ко всему классу, а не к конкретному экземпляру. Вы можете вызвать Thread.sleep() следующим образом:

Thread.sleep( 500 );

Ответ 3

К вашему первому вопросу, да, это создало бы экземпляр something в переменной instance (кстати, не большое имя переменной).

К вашему второму вопросу, да, этот код создаст экземпляр Thread. Однако вы не вызывали бы с ней статические методы (например, t1.sleep()). Статические методы вызывают с именем класса, например, Thread.sleep. Вам не нужно создавать экземпляр для них.

Ответ 4

экземпляр - это не что иное, как распределение динамической памяти. Где в java "новый" оператор используется для создания экземпляра, но объект является распределением динамической памяти для членов класса или вы можете сказать, что объект является экземпляром класса. например, malloc(), calloc() - функция распределения динамической памяти, поэтому мы можем сказать, что они создают экземпляр, но мы не можем сказать, что они создают объект.