以下都是总结的简单说法,定义上可能没那么严谨。
成员变量:类里定义的变量。
局部变量:方法里定义的变量。
其中成员变量又分为:实例变量和类变量(静态变量)
类变量:static修饰的变量
注:如果局部变量和成员变量的名称相同,那么成员变量被隐藏,即方法内失效,方法中如需要访问该类中的成员变量,则需要加上关键字 this。
实例方法既能操作成员变量也能操作类变量,而类方法只能操作类变量。
实例方法能调用实例方法和类方法,类方法只能调用类方法。
只要记住,static修饰的只能操作static修饰的,而无static修饰的都能操作。
简单的例子:
public class Man
{
static String head;
public void func()
{
head="大头";
}
public static void main(String[] args)
{
Man man1=new Man();
Man man2=new Man();
man1.func();
System.out.println(man2.head);
}
}
以上的类编译执行后的结果是 ”大头“
public class Man
{
String head;
public void func()
{
head="大头";
}
public static void main(String[] args)
{
Man man1=new Man();
Man man2=new Man();
man1.func();
System.out.println(man2.head);
}
}
以上代码编译执行后则输出的结果是null
这也就是说,静态变量属于类,而不属于对象。
new 对象的时候,对象将被分配不同的内存空间,准确的说,不同的对象分配不同的内存空间,而如果类中含有类变量,则所有对象的类变量都被分配给相同的一处内存空间,改变其中一个对象的这个类变量都会影响其他对象的这个类变量,也就是说,对象共享类变量。
当java执行程序时,类的字节码文件被加载到内存,如果该类没有创建对象,类的实例变量不会分配内存,但是类中的类变量,在该类加载到内存时,就分配了相应的内存空间。如果该类创建对象,不同的对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,类变量的内存空间直到程序退出时,才释放内存。