标题 Java中静态方法和非静态方法的区别
概念
方法前加了static关键字,则该方法称为静态方法,否则为非静态方法。例如public void say(){};public static void sing(){},say方法就是一个非静态方法,而sing是一个静态方法。他们两者在方法的调用等方面有很大的不同
方法调用上的区别
静态方法:
在一个类中若是想调用另一个类的静态方法可以直接使用类名.方法名的方式点出该方法。
//Person类
public class Person {
//静态方法
public static void sing(){
System.out.println("唱了一首歌");
}
}
//测试类
public class Test {
public static void main(String[] args) {
//调用方法:类名.方法名
Person.sing();
}
}
非静态方法:
如果想要在类中调用一个非静态方法需要用new实例化这个方法,基本形式为:对象类型 对象名= new 构造方法
然后使用对象名.方法名可以调用该方法
//Person类
public class Person {
//非静态方法
public void say(){
System.out.println("说了一句话");
}
}
//测试类
public class Test {
public static void main(String[] args) {
//实例化
Person xiaoming=new Person();
xiaoming.say();
}
}
继承中的区别
静态方法:
父类:Person 类 子类:Student类
//父类
public class Person {
public static void sing(){
System.out.println("Peron唱了一首歌");
}
}
//子类
public class Student extends Person {
public static void sing(){
System.out.println("Student唱了一首歌");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Student hhh=new Student();
hhh.sing();
//父类的引用可以指向子类
Person sss=new Student();
sss.sing();
}
}
结果为:
由此可知,在继承中静态方法的调用只和实例化左边,即定义的数据类型有关,本例即只与Student hhh=new Student()、Person sss=new Student()中左边Student和Person有关。
非静态方法
//父类
public class Person {
public void sing(){
System.out.println("Peron唱了一首歌");
}
}
//子类
public class Student extends Person {
//此时对父类的sing方法进行了重写
public void sing(){
System.out.println("Student唱了一首歌");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Student hhh=new Student();
hhh.sing();
Person sss=new Student();
sss.sing();
}
}
结果为:
当方法为非静态方法时,构成子类重写了父类的方法。本例中就是Student类重写了Person类中的sing方法,由此可知方法的重写只存在于非静态方法中。