面向对象——static关键字

静态属性

 

在类中(方法之外),用static修饰的变量我们称之为静态变量类变量

注意:static不能用于修饰局部变量!!!

  • 静态变量特点
  1. 一个类中,静态变量只有一份,可以被该类和该类的对象所共享。
  2. 我们可以通过 类名.静态变量 对象.静态变量 来操作静态变量。
  3. 静态变量优先于对象存在,它随着类的加载就已经存在了

 静态变量内存图4a92d60718504a65b2a067f92c7041eb.png

【示例】静态变量的使用示例

class Student {

      // 成员变量

      String name;

      // 静态变量

      static String classRoom;

      // 构造方法

      public Student(String name) {

            this.name = name;

      }

}

public class StaticVariableDemo {

      public static void main(String[] args) {

            // 通过类名,操作静态变量(推荐使用)

            System.out.println(Student.classRoom); // 输出:null

            Student.classRoom = "WH8527"; // 给静态变量赋值

            System.out.println(Student.classRoom); // 输出:"WH8527"

            // 创建对象操作

            Student stu = new Student("小明");

            // 通过对象,操作静态变量(不建议使用该方式)

            stu.classRoom = "WH8528"; // 给静态变量赋值

            System.out.println(stu.classRoom); // 输出:"WH8528"

      }

}

 

静态变量和成员变量区别   

区别一:生命周期不同

        成员变量--随着对象的创建而创建,随着对象的回收而释放。

        静态变量--随着类的第一次加载而存在,随着类的消失而消失。  

(所以不要随便滥用static资源,防止出现JVM内存不够的情况!)

区别二:调用方式不同

        成员变量--只能被对象调用。

        静态变量--可以被类名调用,也可以被对象调用。

区别三:数据存储位置不同

        成员变量--存储在堆中,也称为对象的特有数据。

        静态变量--存储在方法区(共享数据区)的静态区,也称为对象的共享数据。

区别四:创建次数不同 

        成员变量--可以创建任意多次,每创建一次对象就创建了一次成员变量。

        静态变量--只能创建一次,被该类和该类的对象所共享。

静态方法

在类中,用static修饰的方法我们称之为静态方法类方法

静态方法特点

  1. 静态方法优先于对象存在,静态方法随着类的加载就已经存在了。
  2. 我们可以通过 类名.静态方法() 对象.静态方法() 来调用静态方法。

【示例】静态方法使用示例

class Student {

      // 成员变量

      String name;

      // 构造方法

      public Student(String name) {

            this.name = name;

      }

      // 静态方法

      public static void study() {

            System.out.println("good good study, day day up");

      }

}

public class StaticMethodDemo {

      public static void main(String[] args) {

            // 使用类名调用静态方法

            Student.study();

            // 实例化一个对象

            Student stu = new Student("小明");

            // 使用对象来调用静态方法

            stu.study(); // 不建议使用!

      }

}

 静态方法和成员方法的区别

区别一:访问变量区别

      成员方法--既能访问成员变量,又能访问静态变量。

      静态方法--只能访问静态变量,不能访问成员变量,因为对象可能还未初始化

区别二:访问方法区别

      成员方法--既能访问成员方法,又能访问静态方法。

      静态方法--只能访问静态方法,不能访问成员方法,因为对象可能还未初始化

区别三:访问this区别

      成员方法中可以访问this。

      静态方法中不能访问this,因为对象可能还未初始化

静态代码块--JDBC

静态代码块

定义:在类中,用static修饰的代码块叫做静态代码块

作用:主要用于给类做初始化操作

静态代码块特点:

        1)静态代码块只能定义在类里面,独立于任何方法,不能定义在方法里面

        2)一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行(从上到下)。

        3)静态代码块中的变量都是局部变量,只能访问类的静态变量,而不允许访问成员变量。

        4)静态代码块会在类被加载时自动执行,并且只执行一次

【示例】静态代码块示例

class StaticBlockDemo {

      String name;

      static String sex;

      static {

            // 只能访问类的静态变量,而不允许访问实例变量

            // name = "小明"; 编译错误

            sex = "男";

            System.out.println("11");

      }

}

 构造代码块

定义:在类中,没有用static修饰的代码块叫做构造代码块(非静态代码块)

作用:

        主要用于给所有对象共性特点进行初始化操作

        可以将各个构造方法中公共的代码提取到构造代码块

        匿名内部类不能提供构造方法,此时初始化操作可以放到构造代码块中。

构造代码块的特点:

 

        1)构造代码块只能定义在类里面,独立于任何方法,不能定义在方法里面。

        2)一个类中允许定义多个构造代码块,执行的顺序根据定义的顺序进行。

        3)构造代码块中的变量都是局部变量,既可以访问静态变量也可以访问实例变量

        4)构造代码块随着对象的创建而加载,每创建对象一次就执行一次!

【示例】构造代码块

class BlockDemo {

      String name;

      static String sex;

      {

            // 可以访问静态变量也可以访问实例变量

            name = "小明";

            sex = "男";

      }

}

 代码执行顺序

静态代码块—>非静态代码块—>构造方法

【示例】演示代码执行顺序

class Student {

      static int num;

      static {

        System.out.println("静态代码块执行 num:" + ++num);//1

      }

      {

        System.out.println("构造代码块执行 num:" + ++num);//2

      }

      public Student() {

            System.out.println("无参构造方法在执行 num:" + ++num);//3

      }

      public Student(int number) {

            this();

            System.out.println("有参构造方法在执行 num:" + ++num);//4

      }

}

public class BlockDemo {

      public static void main(String[] args) {

            new Student(3);

            new Student();

      }

}

运行结果:

b31bf69c1ec64af69878163b93ad8479.png  

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深山老林.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值