Java基础学习-static关键字

在类中,用static声明的成员变量为静态成员变量,或者叫做:类属性,类变量。

静态属性的访问形式:

  1. 对象名.属性
  2. 类名.属性
  • 它为该类的公用变量,类属性,被该类的所有实例共享,在类被载入时被显式初始化
public class StaticDemo {
    String name = "zhangsan";
    static int age = 30;

    public static void main(String[] args) {
        StaticDemo staticDemo = new StaticDemo();
        //使用对象进行调用
        System.out.println(staticDemo.name);
        System.out.println(staticDemo.age);
        //使用类名进行调用
//        System.out.println(StaticDemo.name);//name无法引用,因为name为非静态变量
//        System.out.println(StaticDemo.age);//age可以引用,age为静态变量
        StaticDemo.age = 80;
        System.out.println(StaticDemo.age); //结果为80
        System.out.println(staticDemo.age);//结果为80

        staticDemo.age = 70;
        System.out.println(staticDemo.age); //结果为70
        System.out.println(StaticDemo.age);//结果为70
    }
}

public class StaticDemo {
    String name = "zhangsan";
    static int age = 30;

    public static void main(String[] args) {
        StaticDemo staticDemo = new StaticDemo();
        //使用对象进行调用
        System.out.println(staticDemo.name);
        System.out.println(staticDemo.age);
        //使用类名进行调用
        System.out.println(StaticDemo.name);//name无法引用,因为name为非静态变量
        System.out.println(StaticDemo.age);//age可以引用,age为静态变量
    }
}

  • 对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享
  • 可以使用“对象.类属性”来调用。一般都是用“类名.类属性”
  • static变量置于方法区中的静态区,成员变量在堆中
  • 静态变量不能定义在静态方法中

static声明的方法为静态方法

访问修饰符 static 返回值类型 方法名(){
}

访问形式:

  1. 对象名.方法名();
  2. 类名.方法名();
  • 不需要对象,就可以调用(类名.方法名)
  • 在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员
  • 静态方法不能以任何方式引用thissuper关键字
  • 静态方法可以在非静态方法中调用
public class StaticDemo2 {
    String name = "zhangsan";
    static int age = 30;
    //静态方法
    public static void test(){
        System.out.println("静态方法");
    }
    //普通方法
    public void test2(){
        test(); //静态方法可以在非静态方法中调用
    }

    public static void main(String[] args) {
        StaticDemo2 staticDemo2 = new StaticDemo2();
        staticDemo2.test();
        StaticDemo2.test();
        staticDemo2.test2();
    }
}

  • 静态方法中不能直接调用非静态方法,如果想调用,要使用new方法,但是不能直接new。

如下代码:不能使用这种方式:

public class StaticDemo2 {
    String name = "zhangsan";
    static int age = 30;
    //静态方法
    public static void test(){
        System.out.println("静态方法");
        new StaticDemo2().test2();//使用new方法,错误 错误
    }
    //普通方法
    public void test2(){
        test(); //静态方法可以在非静态方法中调用
    }

    public static void main(String[] args) {
        StaticDemo2 staticDemo2 = new StaticDemo2();
        staticDemo2.test();
        StaticDemo2.test();
        staticDemo2.test2();
    }
}

static可以修饰方法和成员变量

思考:

什么时候需要我们定义static方法?

答:一般工具类中的方法定义为static

正文完