举例:
class {
    public static void main(String[] args) {
         Person p = new Person();
    }
}class Person{}疑问:
1.main方法是静态方法,在new Person对象是调用Person构造方法,但是Person构造方法不是静态的为什么能直接调用??
2.假设说Java虚拟机给Person构造加了隐士静态方法,但是在静态方法中是不是能使用this引用??请高手解答!!!!
谢谢!!虚拟机javaclass

解决方案 »

  1.   

    因为你new了对象,等于初始化了对象!
      

  2.   

    构造方法的作用是返回给调用者该类的实例,可是在该实例产生之前是不能调用该类中的任何方法的(没有鱼竿,怎么拿鱼竿钓鱼),所以任何类的构造方法都是用new关键字来调用的
      

  3.   

    new只是调用对象构造函数创建对象,这个不受是否是静态方法影响,但是静态方法里面不能使用this那是因为静态方法可以在对象为初始化之前调用,当然对象都没初始化,如果来通过this来获取当前对象呢
      

  4.   

    构造方法实际上是static ,只不过是隐式的static声明!
      

  5.   


    是因为new关键字的作用,而不是隐式的static声明,了解一下new关键字吧
      

  6.   


    谁都知道new是返回对象的实例
    你要弄明白楼主这个题目的意思:static方法只能调用static方法,但是构造方法不是static为什么能static调用(被main调用),这个才是问题的关键。
    而不是简单的回答什么没有鱼竿,怎么拿鱼竿钓鱼的问题
      

  7.   

    Person p = new Person();  1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
      2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
      3,在堆内存中开辟空间,分配内存地址。
      4,在堆内存中建立对象的特有属性。并进行默认初始化。
      5,对属性进行显示初始化。
      6,对对象进行构造代码块初始化。
      7,对对象进行对应的构造函数初始化。
      8,将内存地址付给栈内存中的p变量。
      

  8.   

    不理解new一个对象跟构造函数是不是隐式static有半毛关系;
    假如有一个非静态方法里面执行了Person p = new Person(),那是不是又说构造函数有一个隐式非static方法
    另外,static方法只能调用static方法没错,但是,这里是new一个对象,跟方法没关系啊,new一个对象只是在堆中分配一块空间,然后在初始化,并把这个指向堆内存的指针引用给实例变量p,完全看不到跟有没有静态构造函数有啥关系。
      

  9.   


    benfangdewoniu 说的对,我疑惑的不是具体实现,是java规则有冲突;
    1.static方法只能调用静态方法(构造方法);
    2.static方法中不能使用this关键字;问题是,构造方法是static的话,那么就不能使用this关键字;static方法只能调用static方法没错,但是,这里是new一个对象,跟方法没关系啊跟构造方法一定有关系。
      

  10.   

    没看出来有任何冲突this 是实例 static中可以创建实例,但不能访问本类的某个已有实例(除非传递进来的),这符合逻辑,static 一个类一个,this一个实例一个更何况 java里面构造函数前连function关键字都没加,为什么非得把他当个方法看,还要分清楚是不是隐性 静态
      

  11.   

    Person 是一个类,而你所说的静态方法是本类中(Person)所具有的 方法, new Person 是创建了一个实例 对象,通过实例对象调用本类(Person)的静态方法是可以的,你也可以直接调用,比如
    class Person{
    public static void fun(){}

    public class Demo{
    public static void main(String []args){
    Person p = new Person();
    p.fun();
    }
    }
      

  12.   

    明显的是:实例方法只能通过对象实例来调用,不是什么static方法里只能调用static方法。
      

  13.   

    静态方法是不能调用非静态方法和属性,前提是不能调用没有确定实例化对象的非静态方法和属性,而new Person()并不是一个单纯的非静态方法,它是在构建一个类对象及其初始化对象,返回的是一个对象实例,相当于调用的是一个以构建好的实例化对象。对象都确定了,静态方法当然可以使用了...
      

  14.   

    静态方法是不能调用非静态方法和属性,前提是不能调用没有确定实例化对象的非静态方法和属性,而new Person()并不是一个单纯的非静态方法,它是在构建一个类对象及其初始化对象,返回的是一个对象实例,相当于调用的是一个以构建好的实例化对象。对象都确定了,静态方法当然可以使用了...