• [java/初学者]static修饰的静态变量、方法及代码块的特性与使用


     前言

    static关键字表示“静态的”,可以用来修饰类的变量、成员方法和代码块等。

    被其修饰的类成员具有一些特殊性,下面将介绍static所修饰的静态变量、静态方法和静态代码块的特性和用法。



    一、静态变量

    一个类通过使用new关键字可以创建多个不同的对象,而不同的对象实例将被分配到不同的内存空间。

    但在一些特殊情况下,我们也会希望某些特定的数据在内存中只有一份,但能够被一个类中的所有对象实例所共享。

    在java中,类的成员变量有两种:

    ①:被static修饰的变量,即类变量(静态变量),

    类加载的时候就完成内存空间的分配,在内存中占用一份备份,同时也只分配一次内存,供其他的实例对象访问(共享)。

    可以直接通过类名.变量名或对象名.变量名的方式来访问。

    1. //通过类名访问静态变量
    2. //类名.静态成员变量
    3. Demo.country="中国";
    4. System.out.println(Demo.country);
    1. //通过对象名访问静态成员变量
    2. //对象名.静态成员变量
    3. demo1.country="美国";
    4. System.out.println(Demo.country);

    ②:没被static修饰的变量,即实例变量

    每实例化一次就会为其分配一次内存,可能存在多次分配内存空间,

    必须通过对象名.变量名的方法来访问。

    1. demo1.name="张三";
    2. //通过对象名访问非静态变量
    3. System.out.println(demo1.name);

    若坚持使用类名.变量的方式来访问,则会出现以下错误,

    原因是此处的变量还没有经过实例化,就直接拿来访问了。

    关于静态变量,需要注意以下问题:

    static只能修饰成员变量,不能修饰局部变量

    因为局部变量此时还没有实例化,没有分配内存空间,而static在类加载时就要分配空间。

     

    二、静态方法

    被static修饰的方法被称为静态方法。

    与上文中的静态变量一样,访问静态方法也不需要创建类的实例,可直接通过类名来访问;

    若已经创建 了对象,也可以通过对象引用来访问。

    静态方法可以通过类名.方法名或者对象名.方法名两种方式来调用静态方法。

    关于静态变量,需要注意两点:

    ①:静态方法只能访问类中用static修饰的成员。


    静态方法可以通过类名来调用,且在调用时可以不创建任何对象,而没有被static修饰的从成员需要先创建对象才能访问。

    1. //类变量,代表人的国籍
    2. static String country;
    3. //实例变量,代表人的姓名
    4. String name;
    5. //静态方法
    6. static void printInfo()
    7. {
    8. System.out.println("Person的国籍是:"+country);
    9. //System.out.println(name); 错误!!!
    10. }

     若在静态方法,访问了类中非static修饰的成员,则会出现以下错误:

    ②:静态方法不能以任何方式引用this和super关键字。


    静态方法可以通过类名直接调用,这时,可能还没有任何对象产生。

    所以,代表当前对象的this和代表父类对象的super都是不存在的。

    三、静态代码块

    在Java程序中,代码块就是用一对大括号括起来的若干行代码。

    而所谓的静态代码块就是用static关键字修饰的代码块。

    在程序中,通常使用静态代码块来对类的静态成员变量就行初始化。

    1. class A
    2. {
    3. static int id;
    4. //静态代码块
    5. static
    6. {
    7. id=100;
    8. }
    9. }

    需要注意的是,类的静态代码块不可以访问类的非静态成员。

    当类加载时,其静态成员代码块也将同步执行,且由于类只加载一次,故静态成员代码块也只执行一次。

    非静态代码块在实例化对象时会被多次执行。

     

     

    先后顺序如下:

    静态代码块 > 普通代码块>无参构造方法

  • 相关阅读:
    浅谈矩阵 学习笔记
    2023国庆自驾游:山东
    【养成系】Linux常用命令
    图像处理的创意之旅:逐步攀登Python OpenCV的高峰
    Java中使用JDBC操作Postgresql
    新手教程,蛋糕小程序的搭建流程一网打尽
    [山东科技大学OJ]1169 Problem I: 统计单词数
    cookie时效无限延长方案
    js匹配查找JSON中属性并返回路径
    石油化工行业能源管理平台,让能源管理更简单,更高效
  • 原文地址:https://blog.csdn.net/DuFengYa/article/details/128141637