nicky_zs 请讲下为什么"静态方法中不可访问非静态成员".谢谢啦。

来源:百度知道 编辑:UC知道 时间:2024/05/24 12:29:32

晕。。。你居然这样提问。。。我不一定每次都看得到的啊~ nicky_zs@163.com这是我的邮箱。
还记得我说的,如果类A中有一个普通方法f(),那么编译器会隐式地把它转化为f(A this)吗?那你也还记得我说,static方法就是没有这个this的方法吗?
如果A中有两个普通方法f()和g(),那么编译器会隐式地把它们变成f(A this)和g(A this)。这样,在f方法里面调用g方法的时候,编译器就可以隐式地把f方法参数中的this传递给g方法。
然而,如果f方法是static的,而g方法是非static的,那么,f方法本身就没有this参数,所以它无法隐式地提供给g方法一个this参数,因此,f方法就不能直接调用g方法了。我们有一个解决的办法,就是在f方法中手动产生一个A的对象obj,然后把这个对象当作this参数传递给g方法(obj.g()),这样就可以调用g方法了,明白了吗?
其实还可以跟你说简单一点。普通方法是对象的方法,也就是说,普通方法的调用都是跟某一个具体的对象相关联的(this),我们要用一个对象来调用它,它也可以改变这个对象属性;而静态方法是用作工具的方法,也就是说,它不跟任何对象相关联,它可以不通过对象来调用,它做的事情也不能改变任何对象的属性。明白了吗?

简单来说,静态方法是属于类所有,非静态方法属于对象所有。
对象又属于类,那么,非静态方法的作用域就小于静态方法。
所以,静态方法不能包含作用域较小的非静态方法

静态方法可以看作是类的方法,而非静态成员可以看作是对象的方法或变量,只有当创建了某个对象的时候才能够使用,静态方法可以通过类名来直接调用,如果还没有该类的实例,哪会有非静态成员?所以不可以这样调用..