虽然很基础,但我还是写一下.
定义两个类:TestMethod和TestMet,TestMethod内容如下:
package test;
public class TestMethod {
public static void main(String[] args) {
TestMet testMet=new TestMet();
testMet.onD0();
}
}
TestMet内容如下:
package test;
public class TestMet {
public TestMet() {
super();
}
void onD0() {
}
}
此时类TestMethod方能调用TestMet中的onDO方法,但是当你这样写时:
package test;
public class TestMethod {
public static void main(String[] args) {
//TestMet testMet=new TestMet();
TestMet.onD0();
}
}
报错,提示要将TestMet中的onDO方法改成static,事实上,我想要说的就是static修饰的方法才能用类名.方法调用,如果不是静态方法你还得通过构造器new 类名,才能调用该类的方法.
再来,看下static方法是否真的不能调用本类非静态方法,示例如下:
(注意:java类中,如果用户没有一个类创建构造器,java编译器就会自动识别,在jvm中为这个类创建一个默认构造器,这个构造器没有参数。当用户为类创建一个构造器时,不管这个构造器是否有参数,JVM就不再为该类创建一个无参的构造器了,为了防止这个类被其他类继承,所以我们要强调,在为类创建构造器时就要创建一个无参的构造器,以防止子类初始化时,调用父类的默认构造器。所以我们创建的这个无参构造器,也是默认构造器。)
package test;
public class TestMethod {
void Hello(){}
public static void main(String[] args) {
TestMet testMet=new TestMet();
testMet.onD0();
Hello();
}
}
报错提示:将Hello方法改成static,果真.
静态方法只能调用该类的静态变量?
package test;
public class TestMethod {
int a=5;
public TestMethod() {
super();
}
public void Hello(){
a=6;
aa();//非静态方法可以调用静态方法
}
static void aa(){}
public static void main(String[] args) {
TestMet testMet=new TestMet();
testMet.onD0();
TestMethod testMethod=new TestMethod();
testMethod.Hello();
// testMet.Hello();
// Hello();
}
}
确实如此,调用其他类的静态方法和变量试试:
答案是不行,只能通过类名.(静态)方法.