------- android培训、java培训、期待与您交流! ----------
例1:
class Person
{
String name;
static String city = "China";
int age;
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String talk()
{
return name+"\t"+age+"\t"+city;
}
public static void setCity(String c)
{
city = c;
}
}
public class Test01
{
public static void main(String[] args)
{
Person p1 = new Person("zhansan",20);
Person p2 = new Person("lisi",25);
Person p3 = new Person("wangwu",30);
System.out.println(p1.talk());
System.out.println(p2.talk());
System.out.println(p3.talk());
System.out.println("*****************修改之后*********************");
Person.setCity("USA"); // 由 Person 调用 setCity() 方法,对 city 的内容进行修改。
System.out.println(p1.talk());
System.out.println(p2.talk());
System.out.println(p3.talk());
}
}
注意:
1. 静态方法只能访问静态成员(静态先加载,非静态还未加载,所以不能访问非静态)。 非静态方法既可以访问静态也可以访问非静态。
2. 静态方法中不可以定义 this 、 super 关键字。( 因为 this 和 super 都代表对象,而静态优先于对象存在,所以静态方法中不可以出现 this 、super 。)
3. 主方法必须是静态的。
例2:
class Person
{
String name;
public static void show()
{
System.out.println("hh"); // show 这个功能没有访问到非静态数据 name 时,show 功能可以定义成静态的。
}
}
class privateTest
{
public static void main(String[] args)
{
//Person p = new Person();
//p.show();
Person.show(); //直接用类名调用函数。
}
}
例3:
class Person
{
String name;
public static void show()
{
System.out.println(name+"\t"+"hh");
}
}
class Test
{
public static void main(String[] args)
{
Person p = new Person();
p.show();
}
}
运行结果:
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
不能对非静态字段 name 进行静态引用
at Person.show(Test.java:7)
at Test.main(Test.java:16)
例4:
class Person
{
String name;
public void show()
{
System.out.println(name+"\t"+"hh");
}
}
class Test
{
public static void main(String[] args)
{
Person p = new Person();
p.show();
}
}
点评:什么时候使用静态方法?
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。