java中有静态方法和非静态方法。
一、静态方法间的调用
class Person {
public static void eat(){
System.out.println("Eat");
}
public static void main(String args[]){
eat();
}
}
结果:编译通过,可以运行
结论:静态方法不需生成对象,可以直接调用
二、非静态方法的调用
class Person {
public void say(){
System.out.println("Start");
}
public void eat(){
say();
System.out.println("Eat");
}
}
结果:编译通过,可以运行;
结论:非静态方法都是对象实例的方法,在非静态方法中调用其他的非静态方法,相当于调用这个对象的非静态方法,上例的say()默认为this.say();this代表对象;
三、静态方法调用非静态方法
class Person {
public void say(){
System.out.println("Start");
}
public void eat(){
say();
System.out.println("Eat");
}
public static void main(String arg[]){
eat();
}
}
结果:
改动代码:
class Person {
public void say(){
System.out.println("Start");
}
public void eat(){
say();
System.out.println("Eat");
}
public static void main(String arg[]){
(new Person()).eat();
}
}
结果:运行成功
结论:静态方法调用非静态方法时,要先生成非静态方法的对象,然后才能调用
四、非静态方法调用静态方法
class Person {
public static void say(){
System.out.println("Start");
}
public void eat(){
say();
System.out.println("Eat");
}
public static void main(String arg[]){
(new Person()).eat();
}
}
结果:肯定是直接调用
总结:基本理解是静态的方法和变量会存在内存中,不会被垃圾回收机制回收;
非静态的方法和变量是会被回收的;