静态成员和非静态成员的区别?

。。。
2025-03-01 14:59:17
推荐回答(4个)
回答1:

静态成员----有static关键字修饰的成员变量或者方法
非静态成员---没有static关键字修饰的成员变量或者方法

在java里面,因为变量都是要存储在内存中,并且程序的运行也是在内存中,而静态成员的主调是该成员所属的类,当静态成员定义时类已经存在,所以相应的静态成员也就在内存中存在,并且分配给了内存空间,但是非静态成员的主调是属于类中的实例,只有当实例存在时才能为非静态成员分配存储空间,当静态成员存在的时候非静态成员可能还不存在,所以-----java里面静态成员不允许直接访问非静态成员,比如:

(以下代码来自参考书籍,只是为自己提供参考,不涉及任何违法内容)

//静态成员不能直接访问非静态成员

public class StaticAccessNoStatic

{

//创建一个非静态方法

public void info(){//非静态方法

//非静态方法的执行体

System.out.println("我们都是笨小孩,却不忘挺起胸膛");

}

public static void main(String[] args) //静态方法

{

//在java语言里面因为内存机制的问题,所以静态成员不能直接访问非静态成员,main()方法是静态方法

//而info()是非静态方法,所以不能直接访问,以下的语句是错误的

info();

由上面的代码运行结果可知:

静态成员访问非静态成员会出现编译的错误

可以利用对象来进行访问,代码如下

//静态成员要想访问非静态成员,可以借助于对象来进行调用访问

new
StaticAccessNoStatic().info();//利用new关键字调用构造器创建一个实例,利用实例直接调用非静态方法

//以下的方法与上面的句子是等价的

StaticAccessNoStatic s=new
StaticAccessNoStatic();

s.info();

}

}

即利用new关键字来调用构造器,定义一个对象,利用对象来访问非静态方法,从而实现非静态方法调用静态方法的目的

注意:非静态成员是可以直接调用静态成员的,注意java的一些特殊用法可以更好的实现java的学习。

回答2:

大致有两点:

  1. 静态成员是属于类的而不是对象的,所以只有一份拷贝,并不在类的对象中都有副本;

  2. 静态数据成员的值在函数退出时不消失,作为下一次调用时的初值,所以可在各对象之间传递数值。

回答3:

静态成员可以直接用 类名.成员访问,静态成员是这个类的属性,不管创建多少个实例,只要修改了一个实例对象的静态成员,其它实例对象的这个静态成员也会改变。

比如:
Family类中有一个静态成员,国籍。

Family.国籍 = “china”;
Family me = new Family();
Family mybrother = new Family();
那么me.国籍和mybrother.国籍 都是china.
如果执行me.国籍=“USA”,那么mybrother.国籍也将变为"USA"

回答4:

请参考:C++ 类的静态成员详细讲解

http://blog.csdn.net/morewindows/article/details/6721430