(1)在静态方法中不能使用关键字this关键字
静态方法可以在对象创建前通过类名调用,这时对象还不存在,所以在静态方法中不能使用this关键字。
(2)在静态方法中只能访问static关键字修饰的成员
静态方法可以通过类名调用,在被调用时,可以不创建任何对象,而非静态成员需要先创建对象再通过对象名来访问。所以在静态方法中访问任何非静态成员,系统会报错。
class show{
public static void main(String[] args) {
show1();
}
static void show1(){
this.introduce(); //系统会报错,不能调用非静态方法instroduce()
System.out.println("大家好!");
}
}
会出现下面的错误
静态方法的使用代码
class Person{
private String name;
private int age;
static String city; //静态成员变量
public Person(String name, int age) { //Person的有参构造方法
this.name = name;
this.age = age;
}
public void introduce(){
System.out.println("大家好,我是"+name+"今年"+age+"岁了。");
}
static void show(){
System.out.println("我来自"+city+"。");
}
}
测试代码
public class StaticMethoddemo{
public static void main(String[] args) {
Person p=new Person("张三",18);
Person.city="北京";
p.introduce();
Person.show();
p.show();
}
}
执行结果:
(3)非静态方法中可以访问静态成员,也可以访问非静态成员 ,例如下面的代码,是正确的:
public void introduce(){
Person.show(); //访问静态方法show()
System.out.println("大家好我是"+name+"今年"+age+"岁了。我来自"+city+"。") ; //访问静态成员变量city
}
(4)static修饰的成员既可以通过“l类名.成员名”调用,也可以通过“对象名.成员名”调用。如下面的代码所示:
public class StaticMethoddemo{
public static void main(String[] args) {
Person p=new Person("张三",18);
Person.city="北京";
p.introduce();
Person.show(); //使用类名调用show()方法
p.show(); //使用对象名调用show()方法
}
}