Java中static修饰的静态变量、方法及代码块的特性与使用

 更新时间:2023年04月20日 10:21:04   作者:渡过晚枫  
这篇文章主要介绍了Java中static修饰的静态变量、方法及代码块的特性与使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

 前言

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

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

一、静态变量

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二、静态方法

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

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

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

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

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

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

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

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

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

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

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

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

三、静态代码块

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

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

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

class A
{
    static int id;
    //静态代码块
    static
    {
        id=100;
    }
}    

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

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

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

先后顺序如下:

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

到此这篇关于Java中static修饰的静态变量、方法及代码块的特性与使用的文章就介绍到这了,更多相关Java static修饰符的特性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合Spring Batch示例代码

    SpringBoot整合Spring Batch示例代码

    这篇文章主要来和大家一起探讨一下SpringBoot如何整合Spring Batch,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • 两个List集合取相同重复数据的方法

    两个List集合取相同重复数据的方法

    今天小编就为大家分享一篇关于两个List集合取相同重复数据的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • springboot如何读取配置文件(application.yml)中的属性值

    springboot如何读取配置文件(application.yml)中的属性值

    本篇文章主要介绍了springboot如何读取配置文件(application.yml)中的属性值,具有一定的参考价值,有兴趣的小伙伴可以了解一下
    2017-04-04
  • SpringBoot启动报错Failed to determine a suitable driver class

    SpringBoot启动报错Failed to determine a suitable driver class

    这篇文章主要介绍了SpringBoot启动报错Failed to determine a suitable driver class,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Spring Shell打Jar包时常用小技巧

    Spring Shell打Jar包时常用小技巧

    这篇文章主要介绍了Spring Shell打Jar包时常用小技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • struts2实现多文件上传

    struts2实现多文件上传

    这篇文章主要为大家详细介绍了struts2实现多文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • maven工程打包引入本地jar包的实现

    maven工程打包引入本地jar包的实现

    我们需要将jar包发布到一些指定的第三方Maven仓库,本文主要介绍了maven工程打包引入本地jar包的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • java实现的二级联动菜单效果

    java实现的二级联动菜单效果

    这篇文章主要介绍了java实现的二级联动菜单效果,结合实例形式分析了java前台页面布局及与后台交互构造联动菜单的相关技巧,需要的朋友可以参考下
    2016-08-08
  • Java开发中为什么要使用单例模式详解

    Java开发中为什么要使用单例模式详解

    单例对于大家来说并不陌生,但是在什么时候用单例呢?为什么要用呢?本文就带大家了解一下为什么要使用单例,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • java 和 json 对象间转换

    java 和 json 对象间转换

    这篇文章主要介绍了java 和 json 对象间转换,需要的朋友可以参考下
    2014-03-03

最新评论