java#静态方法与非静态方法的访问
//静态方法与非静态方法的访问
//调用静态对象无需创建对象,可以直接用“类名。方法名”访问;调用非静态需创建对象,使用“对象。方法名”访问
public class StaticMethod { //定义一个非静态方法
public void NonStatic_callMe2()
{
System.out.println("This is a nonstatic method");
}
public static void Static_callMe(){//定义一个静态方法
System.out.println("This is a static method");
}
public void Test(){
Static_callMe(); //正确,可以直接调用访问本类静态方法
NonStatic_callMe2(); //正确,可以直接调用访问本类非静态方法
StaticMethod.Static_callMe(); //调用静态对象无需创建对象,可以直接用“类名。方法名”访问
StaticMethod mob=new StaticMethod();
mob.NonStatic_callMe2(); //调用非静态的使用“对象。方法名”访问
}
public static void main(String[] args){
StaticMethod.Static_callMe();
//静态方法在访问本类的成员时,只允许访问静态方法,在静态方法中不能调用非静态的方法和引用非静态的成员变量
Static_callMe(); //正确,可以直接调用访问本类静态方法
//NonStatic_callMe2();
//静态方法在访问本类的成员时,只允许访问静态方法,所以不能直接访问callMe2();因为callMe2()是非静态的。
StaticMethod oa=new StaticMethod();
oa.Test();
//静态方法在访问本类的成员时,只允许访问静态方法,Test是非静态的,尽管Test内部又调用了静态的CallMe()
}
}
class Run{
public void RunTest(){
// callMe(); //错误
// callMe2(); //错误
StaticMethod.Static_callMe(); //调用静态对象无需创建对象,可以直接用“类名。方法名”访问
//StaticMethod.NonStatic_callMe2();
//错误:Cannot make a static reference to the non-static method NonStatic_callMe2() from the type StaticMethod
StaticMethod ob=new StaticMethod(); //调用非静态对象要先实例化对象
ob.NonStatic_callMe2(); //调用非静态的使用“对象。方法名”访问
ob.Static_callMe(); //不建议这么调用静态方法
}
public static void Run_main(String[] args){
StaticMethod.Static_callMe();
//静态方法在访问本类的成员时,只允许访问静态方法,在静态方法中不能调用非静态的方法和引用非静态的成员变量
//StaticMethod.callMe2();
//静态方法在访问本类的成员时,只允许访问静态方法,所以不能直接访问callMe2();因为callMe2()是非静态的。
StaticMethod oa=new StaticMethod();
oa.Static_callMe();
//调用静态对象虽无需创建对象,可以直接用“类名。方法名”访问,也可以使用“对象。方法名”访问
//不建议这么调用静态方法
oa.NonStatic_callMe2(); //调用非静态的使用“对象。方法名”访问
oa.Test();
//静态方法在访问本类的成员时,只允许访问静态方法,Test是非静态的,尽管Test内部又调用了静态的CallMe()
}
}
//无注释代码,与上面一致
public class StaticMethod { //定义一个非静态方法
public void NonStatic_callMe2()
{
System.out.println("This is a nonstatic method");
}
public static void Static_callMe(){//定义一个静态方法
System.out.println("This is a static method");
}
public void Test(){
Static_callMe();
NonStatic_callMe2();
StaticMethod.Static_callMe();
StaticMethod mob=new StaticMethod();
mob.NonStatic_callMe2();
}
public static void main(String[] args){
StaticMethod.Static_callMe();
Static_callMe();
//NonStatic_callMe2();
StaticMethod oa=new StaticMethod();
oa.Test();
}
}
class Run{
public void RunTest(){
// callMe();
// callMe2();
StaticMethod.Static_callMe();
//StaticMethod.NonStatic_callMe2();
StaticMethod ob=new StaticMethod();
ob.NonStatic_callMe2();
ob.Static_callMe();
}
public static void Run_main(String[] args){
StaticMethod.Static_callMe();
StaticMethod oa=new StaticMethod();
oa.Static_callMe();
oa.NonStatic_callMe2();
oa.Test();
}
}