静态方法中调用非静态方法
2015-06-22 15:46
183 查看
public class A{
//类A中非静态方法
public void func(){ ...... }
//类A中静态方法(主函数)
public static void main(String[] args){
A a=new A();//需实例化A的对象后才可以调用A中非静态方法
a.func();
}
如上面这个简单的例子,静态方法对非静态方法发起调用时,需实例化包含非静态方法的类的对象。如果类A中静态方法需调用类B中非静态方法时,也需实例化B的对象。
原因解释:类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中"寄居",不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。所以在静态方法中调用非静态方法时,编译器会报错(Cannot
make a static reference to the non-static method func() from the type A)。
//类A中非静态方法
public void func(){ ...... }
//类A中静态方法(主函数)
public static void main(String[] args){
A a=new A();//需实例化A的对象后才可以调用A中非静态方法
a.func();
}
如上面这个简单的例子,静态方法对非静态方法发起调用时,需实例化包含非静态方法的类的对象。如果类A中静态方法需调用类B中非静态方法时,也需实例化B的对象。
原因解释:类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中"寄居",不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。所以在静态方法中调用非静态方法时,编译器会报错(Cannot
make a static reference to the non-static method func() from the type A)。
相关文章推荐
- pl/sql编程基础
- Python装饰器
- 探索MySQL高可用架构之MHA(1)
- Nginx+Keepalived实现负载均衡高可用
- 【swift总结】集合
- 00-自测2. 素数对猜想 (20)
- Drawable之Ninepatch
- Python学习 之 内建函数
- 归并排序
- Win8.1安装SVN时 出现The code error = 2502\2503的解决方法
- Python上下文管理器
- 文件输入输出操作(字符流)
- HDU 1559 最大子矩阵--dp--(最大和子矩阵模型)
- poj 2751 双机调度问题Johnson算法(贪心)
- Javascript中的this
- 黑马程序员----Java语法基础(1){标示符,变量,常量,运算符}
- 00-自测1. 打印沙漏(20)
- C语言回顾(六、基类型,数组指针,字符串指针,函数指针,文字常量区)——iOS开发基础
- Python描述器
- string中c_str()、data()、copy(p,n)函数的用法