举例:
class {
public static void main(String[] args) {
Person p = new Person();
}
}class Person{}疑问:
1.main方法是静态方法,在new Person对象是调用Person构造方法,但是Person构造方法不是静态的为什么能直接调用??
2.假设说Java虚拟机给Person构造加了隐士静态方法,但是在静态方法中是不是能使用this引用??请高手解答!!!!
谢谢!!虚拟机javaclass
class {
public static void main(String[] args) {
Person p = new Person();
}
}class Person{}疑问:
1.main方法是静态方法,在new Person对象是调用Person构造方法,但是Person构造方法不是静态的为什么能直接调用??
2.假设说Java虚拟机给Person构造加了隐士静态方法,但是在静态方法中是不是能使用this引用??请高手解答!!!!
谢谢!!虚拟机javaclass
是因为new关键字的作用,而不是隐式的static声明,了解一下new关键字吧
谁都知道new是返回对象的实例
你要弄明白楼主这个题目的意思:static方法只能调用static方法,但是构造方法不是static为什么能static调用(被main调用),这个才是问题的关键。
而不是简单的回答什么没有鱼竿,怎么拿鱼竿钓鱼的问题
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量。
假如有一个非静态方法里面执行了Person p = new Person(),那是不是又说构造函数有一个隐式非static方法
另外,static方法只能调用static方法没错,但是,这里是new一个对象,跟方法没关系啊,new一个对象只是在堆中分配一块空间,然后在初始化,并把这个指向堆内存的指针引用给实例变量p,完全看不到跟有没有静态构造函数有啥关系。
benfangdewoniu 说的对,我疑惑的不是具体实现,是java规则有冲突;
1.static方法只能调用静态方法(构造方法);
2.static方法中不能使用this关键字;问题是,构造方法是static的话,那么就不能使用this关键字;static方法只能调用static方法没错,但是,这里是new一个对象,跟方法没关系啊跟构造方法一定有关系。
class Person{
public static void fun(){}
}
public class Demo{
public static void main(String []args){
Person p = new Person();
p.fun();
}
}