Java的静态方法里是不能调用非静态方法的,但为什么可以调用构造方法?
构造方法是特殊的方法,是类的初始化入口,是规定有的,就像我们建房子来住必须造门一样。静态方法为什么不能调用非静态方
法,因为非静态方法必须要实例对象才能调用,但构造方法不需要,相反,实例对象还需要经过构造方法之后才能创建。如果一个
门必须要从里面才能用,那这个门就没意义了。(当然门的举例,是无论多少个门只能使用一个门,这样才符合类的特性,毕竟类
有多个构造方法,但每次只能用一个初始化)
静态方法不需要实例化对象就可以调用,但非静态方法需要对象才能访问,构造方法用来实例化对象,不需要对象调用
因为该类的静态方法是程序启动时自动放在内存中了的,是属于程序的公共内存(但只能访问),而类名在这里你可以理解为命名空间。
静态方法不可以调非静态全局变量,从内存的角度看,就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中,就是在内存中开辟一段内存地址用来保存静态方法和静态属性,这时候没有被实例化的类在内存中是不存在的,所以静态方法是不能访问非静态的全局变量。在类被实例化的时候,就是new 某个类的时候,在内存中给这个类开辟一些内存空间保存这个类的对象,这个时候就可以用静态方法去访问非静态的全部变量。