美文网首页
static关键字

static关键字

作者: 养码哥 | 来源:发表于2018-04-01 16:38 被阅读0次

    核心代码块1:

    /*
    static的特点:(它可以修饰成员变量,还可以修饰成员方法)
        A:随着类的加载而加载
            回想main方法。
        B:优先于对象存在
        C:被类的所有对象共享
            举例:咱们班级的学生应该共用同一个班级编号。
            其实这个特点也是在告诉我们什么时候使用静态?
                如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
            举例:
                饮水机(用静态修饰)
                水杯(不能用静态修饰)
        
        ***D:可以通过类名调用***
            其实它本身也可以通过对象名调用。因为静态是被所有对象共享的。
            推荐使用类名调用。
            
            静态修饰的内容一般我们称其为:与类相关的,类成员
            
            非静态:对象成员。
    */  
    class Student {
    //非静态变量
    int num = 10;
    
    //静态变量
    static int num2 = 20;
        }
    
    class StudentDemo {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.num);
        
        System.out.println(Student.num2);
        System.out.println(s.num2);
        }
    }
    
    static的内存图解

    核心代码块2:

     /*
    static关键字注意事项
        A:在静态方法中是没有this关键字的
            如何理解呢?
                静态是随着类的加载而加载,this是随着对象的创建而存在。
                静态比对象先存在。
        B:静态方法只能访问静态的成员变量和静态的成员方法
                静态方法:
                    成员变量:只能访问静态变量
                    成员方法:只能访问静态成员方法
                非静态方法:
                    成员变量:可以是静态的,也可以是非静态的
                    成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
            简单记:
                静态只能访问静态。
                
                静态不能访问非静态
                
                非静态可以访问一切
    */
    class Teacher {
    public int num = 10;
    public static int num2 = 20;
    
    public void show() {
        System.out.println(num); //隐含的告诉你访问的是成员变量
        System.out.println(this.num); //明确的告诉你访问的是成员变量
        System.out.println(num2);
        
        //function();
        //function2();
    }
    
    public static void method() {
        //无法从静态上下文中引用非静态 变量 num
        //System.out.println(num);
        System.out.println(num2);
        
        //无法从静态上下文中引用非静态 方法 function()
        //function();
        function2();
    }
    
    public void function() {
    
    }
    
    public static void function2() {
    
        }
    }
    
    class TeacherDemo {
    public static void main(String[] args) {
        //创建对象
        Teacher t = new Teacher();
        t.show();
        System.out.println("------------");
            t.method();
        }
    }
    

    main方法的格式讲解

    main

    /*
    main方法的格式讲解:
        public static void main(String[] args) {...}
        
        public:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。
        static:静态的,不需要创建对象,通过类名就可以。方便jvm的调用。
        void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。你返回内容给jvm没有意义。
        main:是一个常见的方法入口。我见过的语言都是以main作为入口。
        String[] args:这是一个字符串数组。值去哪里了?
            这个东西到底有什么用啊?怎么给值啊?
                这个东西早期是为了接收键盘录入的数据的。
                格式是:
                    java MainDemo hello world java
    */
    class MainDemo {
    public static void main(String[] args) {
        //System.out.println(args); //[Ljava.lang.String;@175078b
        //System.out.println(args.length); //0
        //System.out.println(args[0]); //ArrayIndexOutOfBoundsException
        
        //接收数据后
        System.out.println(args); 
        System.out.println(args.length); 
        //System.out.println(args[0]); 
        for(int x=0; x<args.length; x++) {
            System.out.println(args[x]);
            }
        }
    }
    

    总结:

    static关键字(理解)
    (1)静态的意思。可以修饰成员变量和成员方法。
    (2)静态的特点:
        A:随着类的加载而加载
        B:优先与对象存在
        C:被类的所有对象共享
            这其实也是我们判断该不该使用静态的依据。
            举例:饮水机和水杯的问题思考
        D:可以通过类名调用
            既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。
    (3)静态的内存图
        静态的内容在方法区的静态区
    (4)静态的注意事项;
        A:在静态方法中没有this对象
        B:静态只能访问静态(代码测试过)
    (5)静态变量和成员变量的区别
        A:所属不同
            静态变量:属于类,类变量
            成员变量:属于对象,对象变量,实例变量
        B:内存位置不同
            静态变量:方法区的静态区
            成员变量:堆内存
        C:生命周期不同
            静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
            成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
        D:调用不同
            静态变量:可以通过对象名调用,也可以通过类名调用
            成员变量:只能通过对象名调用
    (6)main方法是静态的
        public:权限最大
        static:不用创建对象调用
        void:返回值给jvm没有意义
        main:就是一个常见的名称。
        String[] args:可以接收数据,提供程序的灵活性
            格式:java MainDemo hello world java
                  java MainDemo 10 20 30
    

    相关文章

      网友评论

          本文标题:static关键字

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