Java中的main方法调用非静态方法处理
作者:依旧……
这篇文章主要介绍了Java中的main方法调用非静态方法处理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Java main方法调用非静态方法处理
初学Java,对于main 方法调用非静态方法所导致问题简单的分析一下
1.问题描述
代码
public class Object { public static void main(String[] args) { System.out.println(Object.totring()); } public String totring() { return ("在" + Object.class.getName() + "类中写totring()方法"); } }
问题
java: Cannot make a static reference to the non-static method totring() from the type Base.oop.Object
2. 原因
简单来说,main函数是静态/static类型的,静态类型都是和类/class一块加载在内存之中的,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中”寄居”,不需要通过类的构造器(构造函数)类实现实例化;
而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例化对象存在,所以静态函数不可以调用非静态函数,也不可以使用this关键字。
3.解决方法
解决方法一
根据原因,可以知道只有将非静态方法实例化创建对象之后才可以调用其方法
public class Object { public static void main(String[] args) { Object xiaoming = new Object(); // 类实例化为对象 System.out.println(xiaoming.totring()); //打印输出,也可匿名化实例对象,直接是 ==> new Object().toString() } public String totring() { return ("在" + getClass().getName() + "类中写totring()方法"); } }
解决方法二
尽管静态不可调用非静态,但静态之间可以相互调用,那就把方法改为静态方法
public class Object { public static void main(String[] args) { System.out.println(Object.totring()); } public static String totring() { return ("在" + Object.class.getName() + "类中写totring()方法"); } }
main方法中如何调用非静态方法
public class text1{ public static void main(String [] args){ int a = 12; int b = 23; text1 aa = new text1(); aa.add(a,b); } public void add(int a,int b){ System.out.println("计算的结果是:"+(a+b)); } }
main方法里面调用非静态方法时,需要new一个对象,因为静态方法,静态类属于模板,非静态类和方法属于对象。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。