/*
什么时候定义静态函数:
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
其实,static 的问题就是一个 存在的先后顺序 的问题。
*/
class StaticDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.show();
}
}
class Person
{
String name = "zhangsan";
//public static void show()
public void show()
{
System.out.println(name+"haha");
}
}
/*
一个类中的成员(属性、方法)既可以是静态的也可以是非静态的,
非静态的成员是随着对象的创建而存在的。
静态的成员是随着类的被调用而存在的 (当静态成员所属的类被调用了时,静态成员就在方法区中存在了,
直到所属类生命周期结束,静态成员也一起消失。)
定义类是为了使用类来创建对象,并通过对象来体现一个类中定义的属性和方法,
以上面的show方法为例:
main函数中使用Person类创建了一个对象p,并调用了方法show : p.show();
这个过程是:
主函数main调用Person类创建了一个对象p,
这时,在堆中就有了一块区域是对象p的实体,变量name就在这个实体中
此时,如果show想调用变量name: System.out.println(name+"haha");
就可以找到name并使用,输出 zhangsanhaha
如果show方法是静态的,那么,主函数可以不需要创建对象,而直接通过类名的方式调用show方法
即 主函数可以用 Person.show(); 这样的方法来调用show方法。
但是由于此时并没有Person类的对象,所以变量name还不存在,
因为name不存在,所以name不可能被show使用,
所以方法
public static void show()
{
System.out.println(name+"haha");
}
是错的
错误提示为:
无法从静态上下文中引用非静态 变量 name
*/
|
|