英文:
Method was invoked without being called
问题
正如你所看到的,m1()
方法没有在主方法中被调用,但它却打印了语句。我只想知道在没有调用 m1()
方法的情况下是如何发生执行的。
class Test
{
double a = m1();
double m1()
{
System.out.println("m1() 实例方法被调用");
return 100;
}
public static void main(String[] args)
{
Test t = new Test();
}
}
英文:
As you can see, the m1()
method was not called in the main method but it prints the statement. I just want to know how the execution happened without invoking the m1()
method.
class Test
{
double a=m1();
double m1()
{
System.out.println("m1() instance method invoked");
return 100;
}
public static void main(String[] args)
{
Test t=new Test();
}
}
答案1
得分: 3
Test
的成员a
通过调用m1()
进行初始化。当你创建一个Test
的实例(通过调用new Test()
),它的成员被初始化,并且会调用m1
。
英文:
Test
's member a
is initialized with a call to m1()
. When you create an instance of Test
(by calling new Test()
), its members get initialized, and m1
gets called.
答案2
得分: 2
double a = m1();
这是内联初始化。
在Java中,我们有多种类型的初始化,如内联初始化、静态块初始化、非静态块初始化、构造函数初始化:**[Initializing Fields Oracle Docs][1]**
你是对的。虽然你没有直接调用`m1()`,但在创建了`Test`的新实例之后,它的成员就被初始化了。是通过什么方式呢?
Java会查找内联初始化、非静态块初始化或构造函数初始化。
在你的代码中,只进行了内联初始化。因此Java会评估`m1()`(调用`m1()`),并将其值赋给你的实例成员`a`。所以实际上你已经间接地调用了`m1()`。
[1]: https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
英文:
double a=m1();
This is inline initialization.
we have multiple type of initialization in java like inline,static block,non-static block,constructor:Initializing Fields Oracle Docs
You're right. you have not invoked m1()
directly but after creating a new instance of Test
, its members get initialized. how?
java will search for inline initialization or non-static block initialization or constructor initialization .
in your code, you just have inline initialization. so java will evaluate m1()
(invoke m1()
) and will assign its value to your instance member a
. so actually You have invoked m1()
but indirectly.
答案3
得分: 1
在Java编程语言中,一切都始于主函数(main function)。因此,当您从Test类创建一个实例时,该类的字段将被加载并进行内联初始化,并调用默认构造函数。这就是为什么您的m1函数会被调用。
英文:
in java programming language everything starts from main function, so when you creat an instance from Test, the fields of this class are loaded and inline initialize and default constructor is called. so that's why your m1 function is called
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论