什么是Java静态属性?有什么作用?

如果在Java程序中使用static修饰属性,则该属性称为静态属性(也称全局属性),静态属性可以使用类名直接访问,访问格式如下:

类名·属性名

在学习静态属性之前,先来看一个案例,如文件3-13所示。

文件3-13 Example13.java

class Student {
    String name;                       //定义name属性
    int age;                          //定义age属性
    String school = "A大学";          //定义school属性
    public Student (String name,int age) {
        this.name = name;
        this.age = age;
    }
    public void info () {
   System.out.println ("姓名:" + this.name+", 年龄:"+this. age+", 学校:" + school);
  }
}
public class Example13 {
    public static void main (String[] args) {
        Student stul = new Student ("张三",18);  //创建学生对象
        Student stu2 = new Student ("李四",19);
        Student stu3 = new Student ("王五",20);
        stu1.info () ;
        stu2.info () ;
        stu3.info () ;
    }
}

文件3-13中,第5~7行代码声明了Student类的有参构造方法,第9~11行代码输出了name和age属性的值。第16~20行代码分别定义了Student类的3个实例对象,并分别使用3个实例对象调用info()方法。
在这里插入图片描述
在图3-18中,3名学生均来自A大学。下面考虑一种情况:假设A大学改名为B大学,而且此Student类已经产生了10万个学生对象,那么意味着,如果要修改这些学生对象的学校信息,就需要把这10万个对象中的学校属性全部修改,共修改10万遍,这样肯定是非常麻烦的。

为了解决上述问题,可以使用static关键字修饰school属性,将其变为公共属性。这样,school属性只会分配一块内存空间,被Student类的所有对象共享,只要某个对象进行了一次修改,全部学生对象的school属性值都会发生变化。

java静态内部类的作用

静态内部类,就是使用static关键字修饰的成员内部类。与成员内部类相比,在形式上,静态内部类只是在内部类前增加了static关键字,但在功能上,静态内部类只能访问外部类的静态成员,通过外部类访问静态内部类成员时,可以跳过外部类直接访问静态内部类。

创建静态内部类对象的基本语法格式如下:

外部类名.静态内部类名 变量名 = new 外部类名 ().静态内部类名 ();

下面通过一个案例学习静态内部类的定义和使用,如文件4-22所示。

文件4-22 Example22.java

class Outer {
    static int m = 0; // 定义类的成员变量
    // 下面的代码定义了一个静态内部类
    static class Inner {
        int n = 1;
        void show () {
            // 在静态内部类的方法中访问外部类的成员变量
            System.out.println("外部静态变量m = " +m);
        }
    }
}
public class Example22 {
    public static void main (String[] args) {
        Outer.Inner inner = new Outer.Inner () ;
        inner.show();
    }
}

文件4-22的运行结果如图4-22所示。
在这里插入图片描述
在文件4-22中,第1~11行代码定义了一个外部类Outer,其中第2~10行代码是在Outer类中定义了静态成员变量和静态内部类Inner。然后在静态内部类Inner中,编写了一个show()方法,在show()方法中打印了外部静态变量m,第14~15行代码声明了一个内部类对象inner,并使用inner对象调用show()方法测试对外部类静态变量m的调用。

Java最新课程:

Java零基础视频教程(2022最新Java入门,含斯坦福大学练习题+力扣算法题

Java基础入门:

java零基础自学首Java入门教程(含Java项目和Java真题)

Javaweb核心基础

JavaWeb基础教程,Java web从入门到企业实战完整版

Spring Cloud最全微服务架构

史上最全面的springcloud微服务技术栈

SSM框架教程:

SSM框架教程_Spring+SpringMVC+Maven高级+Spring

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值