static关键字

2018-04-01  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读