новый экземпляр класса в основном методе java

Я java non-static methods, мне было интересно, почему мне нужно создать экземпляр основного метода класса для использования его в, но не в других методах, таких как следующиеpublic class Test { public void test(){ System.out.println("test"); } public static void main(String args[]){ test(); // error Cannot make a static reference to the non-static method test() from the type Test } public void tst(){ test(); // no errors } }main

static

java,

-8

Ответов: 7


0 принят

В java класс имеет поля и методы (или функции). К каждому из этих объектов можно добавить ключевое слово 'Test # test'.

Объекты, помеченные ключевым словом «Test», относятся к классам, а другие сущности связаны между собой экземплярами. Для доступа к публичному классу Test { public void test () { System . из . println ( «тест» ); } public static void main ( String args []) { Test test = new Test (); тест . test (); } public void tst () { test (); // no errors } } не требуется создавать поля или методы класса, для которого требуется только класс и его экземпляр (созданные с помощью нового ключевого слова).

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

Теперь предположим, что есть класс new.java, и у нас нет его экземпляра. Мы можем назвать любой из его методов, который помечен как статический. Попробуйте подумать над ответом: «Изнутри статического метода (без экземпляра класса), как мы можем вызвать метод или как мы можем получить доступ к полю, принадлежащему некоторому экземпляру?»

Для получения нестатического поля или метода из статического метода нам нужен экземпляр. Если «вызывающий метод» не статичен, он должен быть вызван на объект. Если теперь мы вызываем другой метод из этого нестационарного «метода вызова», мы можем это сделать, поскольку этот метод будет вызываться на том же объекте, на который был вызван «вызывающий метод».

Как упоминалось в его ответе Хави, вы также можете обратиться к https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html для понимания «статического».

Все нестатические методы и поля имеют «это» ( https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html ), связанные с ними, что относится к текущему активному экземпляру класса.

Следовательно, «новый» метод статический не может вызывать какой-либо нестационарный метод без экземпляра класса «статический»,


2

Посмотрите, mainэто staticметод. Вы вызываете его из класса, который еще не был инициализирован. Вы можете это сделать, однако вы не можете позвонить, staticне имея экземпляра .public class Test { public void test(){ System.out.println("test"); } public static void main(String args[]){ tst(); Test test = new Test(); test.test(); } public static void tst(){ Test test = new Test(); test.test(); } }

Рабочий код:

tst()

Объяснение:

Нестатические методы должны быть вызваны на объекты. Объекты создаются с newключевым словом. Иногда есть методы, которые возвращают новые объекты, но они вызывают newвнутри.

Статические методы можно назвать без создания объекта. Затем вам нужно объявить их static. Как? Просто добавьте staticперед возвратом тип.

Пример использования статических методов:

Test

Ошибок не было, tstпотому что вы вызвали метод, который вы видели из этой области. Это означает, что если бы существовал объект класса Test, вы могли бы позвонить testи test. Если вы попытались позвонить tstперед моим рефактором, вам было бы предупреждено о том же предупреждении.


1

По определению

Статические методы относятся к классу, то есть вы можете использовать их, вызывая

ClassName.methodName();

Методы экземпляров (нестатические) должны вызываться экземплярами объекта определенного класса.

как

Test test = new Test();
        test.test();

1

Вы не можете вызвать нестатический метод из статической области для этого, как вы должны создать объект, и через этот объект вы можете вызвать этот метод.

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

Зачем?? Обычно в java существует 3 типа переменных, основанных на нашей позиции объявления 1) локальная переменная 2) переменная экземпляра и 3) статическая переменная, такая же, как метод экземпляра и статический метод.

ПРИМЕЧАНИЕ Статический метод или блок выполняются во время загрузки класса и в то время, когда вы пытаетесь вызвать обычный метод, а область действия обычного метода такая же, как область действия объекта, поэтому без создания объекта u не может думать также о нормальном / instance.


1

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

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

public class Test {

    private static int var1 = 0;
    private int var2 = 0;

    public static void main(String[] args) {
        Test test1 = new Test();
        Test test2 = new Test();
        var1++;
        test1.testMethod();
        test2.testMethod();
        System.out.println("var1=" + var1);
        System.out.println("test1.var2=" + test1.var2);
        System.out.println("test2.var2=" + test2.var2);
    }

    private void testMethod() {
        var1++;
        var2++;
    }
}

будет производить следующее

var1=3
test1.var2=1
test2.var2=1

Статические методы также разделяются всеми экземплярами класса, поэтому не имеют прямого доступа к нестационарным переменным.

Ява,