JAVA静态

之所以研究这个静态,是因为在初学java的时候,在一个类里面,写了一个main方法,写了一个测试用的方法,然后我就在main方法里面调用这个测试用的方法,然后就报错了:non-static method cannot be referenced from a static context.

所以首先主要讲一下这个static是什么东西,java中是不存在全局变量的概念的,而static的作用就是实现一个伪全局的概念,static指的就是全局或者静态,用来修饰成员变量、成员方法或者代码块。

static修饰的变量称为静态变量,不被它修饰的就是实例变量。静态变量是可以被类的所有实例共享的,当它改变时所有实例都会被改变;而实例变量就是实例化一个类的时候才会被初始化的一种变量,只能被这个实例使用,其他实例无法使用。一般来说,当我们需要在对象之间共享数据、方便访问的话,就会使用静态变量。

static方法可以通过名字对其进行直接调用,不依赖于任何实例,比如说main方法,也就是程序的入口就是static修饰的,因为我们在运行代码的时候,实际上就是jvm虚拟机调用了这个main方法,所以首先它是public的这样才能被公开访问,然后因为不需要返回值所以是void,最后因为虚拟机调用这个main方法的时候不需要产生任何对象,直接就通过main这个名字调用,所以它是static。总的来说,static可以使得这个方法在创建对象之前被访问,不需要引用任何对象。

但是非静态方法就不一样了,它是一个对象属性,只有在对象存在的时候才可以被引用,所以如果还没有实例化对象的时候在静态方法中调用非静态成员的方法自然是非法的,就像我在main方法中调用了自己写的非静态方法,因为当时main里面没有实例化对象,所以就没有办法调用他了。那么应该怎么去修改呢,首先,当然是可以把这个非静态方法加上一个static让他变成静态的就可以被调用了,然后,也可以实例化我创建的类,再调用这个类里面的这个非静态方法。