java基础

java中static关键字

2019-01-23  本文已影响0人  小漫画ing
package cn.manman.com;
class person{
    String name;
    int age;
    String country;
    public person(){
         
    }
    public person(String name,int age){
        this.age=age;
        this.name=name;
    }
    public person(String name,int age,String country){
        this.age=age;
        this.country=country;
        this.name=name;
    }
    public void show(){
        System.out.println("姓名:"+name+",年龄:"+age+",国家:"+country);
    }
    
}
public class Test {
    public static void main(String[] args) {
        person per1=new person("林青霞",23,"中国");
        per1.show();
        person per2=new person("张三",15,"中国");
        per2.show();
        person per3=new person("王五",16,"中国");
        per3.show();
    }
}

结果

先直接看这段代码,有一个person类,里面有三个构造,一个方法,在测试类里面通过创建对象,创建了三个对象,并且给他设定了值,但是会发现,他们三者的国籍都是中国,每创建一次,堆里面就会有一个中国,如果数据库较大,会导致代码冗余,针对多个对象有共同的这样的成员变量值得时候,java就提供了一个关键字来修饰:static;
所以我们可以这样来改进代码:

package cn.manman.com;
class person{
    String name;
    int age;
    static String country;
    public person(){
         
    }
    public person(String name,int age){
        this.age=age;
        this.name=name;
    }
    public person(String name,int age,String country){
        this.age=age;
        this.country=country;
        this.name=name;
    }
    public void show(){
        System.out.println("姓名:"+name+",年龄:"+age+",国家:"+country);
    }
    
}
public class Test {
    public static void main(String[] args) {
        person per1=new person("林青霞",23,"中国");
        per1.show();
        person per2=new person("张三",15);
        per2.show();
        person per3=new person("王五",16);
        per3.country="美国";
        per3.show();
    }
}

结果

仔细比较这两段代码会发现里面的一点点区别就是给局部变量country前加了关键字static,然后给了林青霞国籍之后,张三也相应的给了对应的国籍,这就是多个对象有共同的成员变量时资源共享的操作;如果在多个对象里面恰好有一个或者几个与别人不一致,我们我可以单独赋值,例如per3,我们会发现王五的国籍是美国;
再来看:

public class Test {
    public static void main(String[] args) {
        person per1=new person("林青霞",23,"中国");
        per1.show();
        person per2=new person("张三",15);
        per2.show();
        person per3=new person("王五",16);
        per3.country="美国";
        per3.show();
        per2.show();
        per1.show();
    }
}

结果

我们或发现再次调用之后,per1和per2 的国籍也被改变,这就是static关键字的好处;

static关键字的特点:

随着类的加载而加载
优先于对象存在
被类的所有对象共享
可以通过类名调用

package cn.manman.com;
class Student2{
    int a=10;
    static int b=20;
}
public class num1 {
    public static void main(String[] args) {
        Student2 student=new Student2();
        System.out.println(student.a);
        System.out.println(Student2.b);
                System.out.println(student.b);
    }
}

结果

我们明确成员变量a是一个非静态的变量,而成员变量b,是一个静态的变量。a的调用需要创建一个对象,然后去调用;而b则可以直接通过类名调用,也可以通过对象调用,但是推荐是类名调用;

static关键字的注意事项

上一篇下一篇

猜你喜欢

热点阅读