[软构java基础] 小白对static修饰符的理解

小白对static修饰符的理解

要说权限控制修饰符public、private、protected的功能和使用肯定是每个java使用者的核心基础知识,但随后紧跟的static静态修饰符却在初级学习的过程中很少接触到。这里就来讲一下小白角度的static修饰符理解,提供java编程入门的一点参考。

首先static叫做静态修饰符,被其修饰的任何变量或者代码会在程序运行期间始终存在,不会消失,与程序共存亡。并且静态属性与普通属性的重大使用区别还在于,被静态修饰的变量或方法能够不通过实例化直接调用,而普通变量或方法需要实例化对象后才能调用。

例如Test类就能很好解释这个特性:

public class Test { 
        public static int a = 5; 
        public int b = 3;
        
        ``````
        public static void printStaticHello(){
        	System.out.println("Hello Static!");
        }
        public void printNormalHello(){
        	System.out.println("Hello Normal!");
        }
        ``````
}

现在来调用其中的变量和方法:

//被static修饰的能直接调用(注意都是public权限)
Test.printStaticHello(); //通过类直接调用static方法并正确输出
int i = Test.a; //i被赋值为5

Test.printNormalHello();  //静态编译检查不通过,炸不到printNormalHello方法
int i = Test.b;  //同样找不到b

//调用普通变量和方法必须创建实例
Test testIntsance = new Test(); //testIntsance 作为new出来的实例(对象)
int j = testIntsance.b; //拥有实例才能使用没有static修饰的变量
testIntsance.printNormalHello(); //同上

此时通过初步学习,我们知道static表示不要实例化就可以使用

接下来需要了解的是,被static修饰的部分,与这个类(Class)牢牢绑定在一起。也就是说,实例是Object层面,而被static修饰的部分放在了Class层面,一个Class不管会不会被用到,它在程序编译结束的时候都会进行载入内存。被修饰的部分成为了永恒属性,在程序运行的任意时刻都可以对其进行操作,例如:

Test.a = 10; //修改了静态变量a
Test testIntsance1 = new Test();
System.out.println(testIntsance1.a);  //输出不再是5而是修改后的10
System.out.println(testIntsance1.b);  //输出是3
testIntsance1.a = testIntsance1.a + 5;
testIntsance1.b = testIntsance1.b + 5;

Test testIntsance2 = new Test();
System.out.println(testIntsance2.a);  //输出不是10而是加五后的15
System.out.println(testIntsance2.b);  //b是普通变量,在实例创建的时候被赋值,所以还是输出是3

不管在什么时候在哪里new出实例,一个类的static属性在某一时刻只有一个值,并且对这个类的实例共享。所以Class中定义的static变量值只是初始状态值,在程序运行过程中随时可能发生变化,比如Test中定义a为5,但new出来的testIntsance2 观察a值却是15,而b为3。

作为编程新人,了解如上static使用事项后足够对付初级代码理解。

据我所知,static的常见应用还在于常量的定义和构造静态工厂方法。
常量的定义例如:

public class StudentNumberConstants {
    public static final int UPPER_LIMIT_CLASSROOM = 150;
    public static final int UPPER_LIMIT_ROOMMATE = 6;
    public static final int LOWER_LIMIT_TEAM = 4;
    ``````
}

在使用时调用常量更安全且更有逻辑,例如:

public createTeam(List<String> names) {
	if (names.size() < StudentNumberConstants.LOWER_LIMIT_TEAM){
		`````
	}
}

构造静态工厂方法则是软件设计模式的一种思想,用途在于隔离客户端可见和开发端代码实现,需要较为系统的软件构造知识作为理解基础,此处不过多展开。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值