美文网首页java基础
java中static关键字

java中static关键字

作者: 小漫画ing | 来源:发表于2019-01-23 17:35 被阅读0次
    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关键字的注意事项

    • 在静态方法中是没有this关键字的
    • 静态方法只能访问静态成员变量和静态成员方法;

    相关文章

      网友评论

        本文标题:java中static关键字

        本文链接:https://www.haomeiwen.com/subject/mnckjqtx.html