黑马程序员技术交流社区

标题: 静态和非静态成员的访问 [打印本页]

作者: 吴伟    时间: 2012-12-16 14:15
标题: 静态和非静态成员的访问
为什么静态方法可以访问类中的静态成员却不能访问非静态成员?非静态方法也是一样的访问规则吗
作者: netboy032    时间: 2012-12-16 14:29
静态方法随着类的加载而初始化,此时还没有非静态成员。所以不能访问,但是反过来,非静态方法既可以访问非静态成员也可以访问静态成员。
作者: Sailing.    时间: 2012-12-16 14:41
实例成员只有在对象初始化之后才能生成,而静态成员是随着类型成员一起初始化完成的。所以静态成员肯定不能访问到实例成员,因为它们还没有出生呢,我这样说应该比较好理解!
作者: 王晨    时间: 2012-12-16 15:34
因为,非静态的变量是依赖于对象存在的,对象必须实例化之后,它的变量才会在内存中存在。例如一个类 Student 表示学生,它有一个变量 String address。如果这个类没有被实例化,则它的 address 变量也就不存在。而非静态方法需要访问非静态变量,所以对非静态方法的访问也是针对某一个具体的对象的方法进行的。对它的访问一般通过 objectName.methodName(args......) 的方式进行。
而静态成员不依赖于对象存在,即使是类所属的对象不存在,也可以被访问,它对整个进程而言是全局的。因此,在静态方法内部是不可以直接访问非静态成员的。
作者: 黑马丁巍    时间: 2012-12-16 19:03
静态成员是跟着类一起声明的,不用new。而非静态成员是需要new之后才生成的,所以静态方法只能访问静态字段,而非静态方法既可以访问非静态字段也可以访问静态字段。
作者: 罗代势    时间: 2012-12-16 20:56
静态成员是类的,非静态成员是实例的!!
作者: 唐海军    时间: 2012-12-17 22:54
静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2