黑马程序员--03.面向对象--01.静态方法调用非静态成员【个人总结】
2013-07-18 09:41
711 查看
静态方法调用非静态成员
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------静态成员方法只能访问静态的成员 (方法/变量) ------静态只能访问静态
非静态可以访问静态(原因就是对象也可以调用静态成员)。
结论:静态 (方法)只能访问静态但是非静态
(方法)可以访问任意
*******************************************************************************
【个人理解】
[1].澄清一下:这个静态成员方法调用的是本类的非静态成员才会出问题。
原因:所以一旦在静态方法中调用了本类非静态的成员,那就说明一定有一个具体的对象来调用非静态的成员才对。没有写出来,就是说明是this。而this表示调用这个方法的对象。但是静态方法的调用是不需要对象存在的。所以this就没有具体的指向。
所以,如果通过静态方法调用
{1}.没有“对象.”非静态成员
{2}. “this.本类非静态成员”
都是错误的,编译无法通过!!
[2].如果调用有“非this的具体对象引用.非静态成员”是可以的。
所以,大原则:如果静态方法调用的非静态的成员,这个成员之前的对象是存在,那就没有问题。
分析案例:
show方法是Person类的静态方法。所以,一旦Person加载到内存的时候,show方法也在方法区开辟了内存空间。这个时候是没有某个对象来调用show方法的。但是,里面的p1.name ="Benjamin";
没有报错,原因就是在于在这个show加载的时候,已经为name这个变量的使用实例化了一个Person类对象p1。有明确存在的对象来调用非静态的name,所以编译通过。
但是System.out.println(name);重要调用这个name,没有显式给出对象引用名,说明是this。但是,静态方法show随着类Person加载的时候,没有什么实例变量来调用这个show方法,所以静态方法中不存在this
è 找不到调用这个name的对象 è报错。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
相关文章推荐
- 黑马程序员--03.面向对象--03.子类父类方法重写和覆盖的理解【个人总结】
- 黑马程序员--03.Java面向对象--02.【static关键字】【main方法】【静态成员】
- 黑马程序员--03.面向对象--02.子类和父类成员变量的关系【个人总结】
- 黑马程序员--03.Java面向对象--05.子类对象初始化的过程【个人总结】
- 黑马程序员--03.面向对象--04.子类构造必须访问父类构造的原因 this_super语句的含义【个人总结】
- 黑马程序员--Java基础加强--07.【反射创建对象 操作字段 调用方法的异同】【个人总结】
- 黑马程序员--03.Java面向对象--04.【对象初始化的过程】【对象调用成员的过程】
- 黑马程序员--03.Java面向对象--01.【OOP基本概念】【匿名对象】【封装】【构造函数】【this关键字】
- 黑马程序员--Java基础加强--16.利用反射操作泛型V【通过Constructor反射解析泛型构造方法】【通过Field反射解析泛型成员变量】【个人总结】
- php面向对象中static静态属性和静态方法的调用
- 黑马程序员--03.Java面向对象--05.【继承】【子父类中成员的特点】【子父类中构造函数的特点】
- php面向对象中static静态属性和静态方法的调用
- 黑马程序员--03.Java面向对象--08.【多态中成员的特点】
- 《黑马程序员》 静态方法中不能new内部类的实例对象的总结
- php面向对象中static静态属性和静态方法的调用
- php面向对象中static静态属性和静态方法的调用
- 黑马程序员--面向对象思想的个人理解以及类中成员
- 黑马程序员----java面向对象01(封装、静态)
- 面向对象和静态方法与非静态方法的变量调用问题
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证