基本前提:静态方法不能调用非静态成员(成员方法与成员变量)
代码:一个main方法可以这么写:
class Demo{ public static void main(String[] args){ Demo d = new Demo(); } }
解释:这里用的是Demo的内置无参构造函数,构造函数也是一个普通函数,也没有被static修饰,所以从这里理解构造函数只是一个成员函数。
问题:那么,作为静态函数的main,是如何调用作为成员函数的构造函数的?
这里是创建一个对象,不仅仅是调用构造函数,如果说连对象都不能创建了,还谈什么写程序了
这个问题我算是终于找到正确答案了,如下:
参考链接:http://rednaxelafx.iteye.com/blog/652719
准确来说,构造方法(Constructor)实际上与普通方法(Method)是两个东西,大概翻译过来的时候为了大家容易上手就说是构造方法了。其实这有点混淆了。
从JVM上看,静态static方法与构造方法(constructor)在内联优化的时候,效果是一样的,不过这不能说构造方法就是static。
其实最后还是不太清楚,JVM原理还是不太清楚,不过基本可以理解。
静态属性调用的时候不能创建实例,非静态属性必须通过创建的实例才能调用
为排除main程序的特殊性,再贴一段非main函数Demo:如下:
package com.antique; public class test { public static void main(String[] args){ callDemo(); // 静态方法调用静态方法 } public static void callDemo(){ Demo d = new Demo(); //静态方法调用别人的构造函数 } } class Demo { public Demo(){ //构造函数 普通成员函数 System.out.println("Constructor is called"); } }
这是main函数,不一样