Java之static关键字的使用

1.static:静态的

2.static可以用来修饰方法、属性、代码块、内部类

3.使用static修饰属性称为静态变量

  ①类当中的属性(字段),按是否用static修饰,分为:静态属性(类变量)     和      非静态属性(实例变量/实例字段)

  ②实例变量:在一个class中定义的属性,我们称之为实例变量。实例变量的特点是,每个实例都有独立的属性,各个实例的同名属性互不影响。换句话说就是,我们去修改一个对象当中的属性,不会导致其他对象中该同样属性值的修改。看下面的例子:

public class StaticTest {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        person1.age = 18;
        System.out.println(person2.age);//输出20
    }   //因为new出来的对象penson1、person2每一个对象都独立的拥有一套类中的字段(非静态属性)
}
class Person{
    int age = 20;
    String name;
}

  ③静态变量(类变量):我们创建类的多个对象,多个对象共享同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用该静态变量时,是修改过的。

public class StaticTest {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        person1.name = "张三";
        System.out.println(person1.name);
        person2.name = "李四";            //修改对象person2的静态变量值
        System.out.println(person1.name);//输出“李四”,发现对象person1的静态变量值改变了
                        //因为静态变量只有一个共享“空间”,所有实例都会共享该静态变量。
} } class Person{ //实例变量 int age ; //静态变量 static String name; }

  ④static修饰属性的其他说明:

    1.静态变量随着类的加载而加载,可以通过“类.静态变量”的方式地调用

    2.静态变量的加载要早于对象的创建

    3.由于类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域中

    4.可以通过类名去调用类变量,但是不能用类名去调用实例变量。可以通过对象去调用类变量和实例变量

  ⑤静态属性的举例:System.out     Math.PI

4.使用static修饰方法,称为静态方法

  ①静态方法随着类的加载而加载

  ②可以通过“类.静态方法”的方式去调用

  ③可以通过类名去调用静态方法,但是不能通过类名去调用非静态方法。可以通过对象去调用静态方法和非静态方法

  ④静态方法中,只能调用静态方法或者静态变量。非静态方法中,既可以调用非静态方法或非静态变量,也可以调用静态方法或静态变量

public class StaticTest {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        Person.show();//通过类名去调用静态方法
    }
}
class Person{
    //实例变量
    int age ;
    //静态变量
    static String name;

    //非静态方法
    public void eat(){
        age = 15;        //调用非静态变量
        sleep();        //调用非静态方法
        name = "张三";   //调用静态变量
        run();          //调用静态方法
    };
    
    //非静态方法
    public void sleep(){System.out.println("人们平均每天睡觉8小时");}
    
    //静态方法
    public static void show(){
        run();//调用静态方法
        System.out.println("名字是:"+name);//调用静态变量
        //eat();不能调用非静态的方法
        //System.out.println("年龄是:"+age);不能调用非静态的变量
        System.out.println("我是一个中国人");
    };
    
    //静态方法
    public static void run(){System.out.println("有的人不喜欢跑步");
    }
}

5.static注意点:在静态方法内,不能使用this关键字、super关键字

6.开发中,如何确定一个属性是否要声明为static的?

  属性是可以被多个对象所共享的,不会随着对象的不同而不同!

7.开发中,如何确定一个方法是否要声明为static的?

  调用静态变量的方法,通常会设置为static

  工具类中的方法,习惯上声明为static。比如Math、Arrays、Collections

 

posted @ 2021-03-23 23:03  懒惰的咸鱼  阅读(105)  评论(0)    收藏  举报