用static声明的属性或方法放在内存中的全局数据区,归类所有或者说归所有的对象所有,不需要经过对象的实例化,直接用类名.的方式调用。通过Person1和Person2代码体会一下static的作用。
public class Person1{
private String name;
private int age;
private String city;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public void setCity(String city){
this.city=city;
}
public String getCity(){
return this.city;
}
public Person1(String name,int age){
this.name= name;
this.age= age;
}
}
public class Person2{
private String name;
private int age;
private static String city;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public static void setCity(String city){
this.city=city;
}
public String getCity(){
return this.city;
}
public Person2(String name,int age){
this.name= name;
this.age= age;
}
}
public class test1{
public static void main(String args[]){
Person1 p1 = new Person1("张三",10);
Person1 p2 = new Person1("李四",12);
p1.setCity("天津");
p2.setCity("天津");
Person2 p3 = new Person2("张三",10);
Person2 p4 = new Person2("李四",12);
Person2.setCity("天津");
}
}
所有人的城市都一样的时候,代码应该写成Person2那样,当Person1中的城市发生变化,生成了多少对象就要写多少代码来修改城市的变更,当写成Person2时,只需要修改类的这一属性即可,需要注意的是,这时如果不是通过类Person2.setCity("天津")来修改,而是通过某一对象p3.setCity("天津")来修改,可以达到一样的效果,所有对象的city属性都跟着改变,但是那样写不符合规范。
另外需要注意的是,所有静态方法只能操作静态成员,不能操作非静态成员,因为静态方法可以不经过类的实例化直接通过类名访问,试想,如果,静态方法可以访问非静态成员,则不需要经过类的实例化也可以访问非静态成员,会造成内存的混乱。
下面说一说static的应用,用static可以统计一个类实例化了多少个对象,代码如下:
class Person{
private String name;
private static int count;
public Person(){
count++;
}
public void getConut(){
system.out.println(this.count);
}
}
public class test{
public static void main(String args[]){
Person p1=new Person();
Person p2=new Person();
Person p3=new Person();
Person p4=new Person();
}
}
此段程序打印出的结果是1 2 3 4统计的是类实例化对象的个数。
也可通过static描述的属性来自动的给属性赋值。
class Person{
private String name;
private static int count;
public String getName(){
return this.name;
}
public Person(){
count++;
this.name="Num"+count;
}
public Person(String name){
this.name=name;
}
}
此文的实例和思想都来自于魔乐科技的java视频,很基础的视频,建议想好好扎实java基础的盆友看一遍。