在java中能否不创建对象的情况下调用一个非静态方法?

class Person{
public void eat (Apple apple){
Apple peeled=apple.getPeeled();
System.out.println("Yummy");
}
}
class Reeler{
static Apple peel(Apple apple){
return apple;
}
}
class Apple{
Apple getPeeled(){
return Peeler.peel(this);
}
}
public class PassingThis{
public static void main(String args[]){
new Person().eat(new Apple());
}
}
在new Person().eat(new Apple());中,并未创建Appla类对象,它是如何调用eat()方法的。
说错了,应该是Person类。
好吧,我知道了T.T
他喵的,new Person()就是一个新创建的对象了,那它的引用呢?

在java中是不可以不实例化对象去调用非静态方法的。
静态方法跟非静态方法主要的区别在于生命周期。
静态方法的生命周期从进程被创建就开始了,直到进程结束,所以说静态方法是全局的,贯穿整个进程。
非静态方法的生命周期,从类实例化对象开始,直到实例对象被注销回收之后结束。
所以可知,非静态方法的生命周期要短于静态方法,这也是非静态方法中不能调用静态方法的原因。
你给的例子中的语句:new Person().eat(new Apple());已经实例化对象了,new Person()就是在实例化对象,否则不能调用非静态的eat()方法。
当然也可以这么写,你就会非常熟悉。
Person person = new Person();
person.eat(new Apple());

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-02
没有引用~ 或者说是一个匿名的引用。追问

那么说这个对象不能被调用?或者讲是一次性的?