Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在非静态方法中调用不带类实例的非静态方法_Java_Methods_Static_Class Method_Non Static - Fatal编程技术网

Java 在非静态方法中调用不带类实例的非静态方法

Java 在非静态方法中调用不带类实例的非静态方法,java,methods,static,class-method,non-static,Java,Methods,Static,Class Method,Non Static,在下面的代码中,当我在一个非静态方法中调用mod()方法而不为mod()方法创建类实例时,它确实起作用,并且给出了输出“Hi”; 根据非静态方法的定义,没有类实例不能调用非静态方法 它是如何工作的?它有一个实例,是您在main中创建的,在执行g.pri()时使用的实例。在像pri这样的实例方法中,调用它的实例可用作this,而this.是可选的。在一个实例方法中,这两条语句做了完全相同的事情: class GFG { public static void main (String[] args)

在下面的代码中,当我在一个非静态方法中调用mod()方法而不为mod()方法创建类实例时,它确实起作用,并且给出了输出“Hi”; 根据非静态方法的定义,没有类实例不能调用非静态方法


它是如何工作的?

它有一个实例,是您在
main
中创建的,在执行
g.pri()时使用的实例。在像
pri
这样的实例方法中,调用它的实例可用作
this
,而
this.
是可选的。在一个实例方法中,这两条语句做了完全相同的事情:

class GFG {
public static void main (String[] args) {
    GFG g=new GFG();
    g.pri();

}

void pri(){    
  mod();
}
void mod()
{
    System.out.println("HHI");
}

}
如果没有包含
this.
,Java编译器会为您添加它

(根据的意见,我建议您至少在字段中包含它,因为在代码
x=y+1
中,您不知道
x
y
是否是实例的方法或字段中的局部变量。)

它可以工作,因为您调用了GFC实例的非静态pri()方法

class GFG {
    public static void main (String[] args) {
        GFG g=new GFG();
        g.pri();
    }
}

将失败,因为您从static main()调用非静态pri()

new GFG()
确实创建了一个实例。那么你到底在问什么呢?四个字母-
this
必须有一个dupetarget。要调用pri(),可能的重复必须有一个实例(在main中使用“new”关键字创建)。一旦pri()被执行,您就在该实例中……并且调用mod()将在您所在的同一实例中运行它。因此,“this”关键字表示在当前运行的实例中查找对象。
class GFG {
    public static void main (String[] args) {
        GFG g=new GFG();
        g.pri();
    }
}
class GFG {
    public static void main (String[] args) {
        pri();
    }
}