静态

本文详细介绍了Java中的静态特性,包括静态类、静态变量、静态方法和静态构造函数。静态成员在类中只有一个实例,不随对象的创建而改变。静态类不能实例化,不能被继承,且只能包含静态成员。静态变量在程序运行期间保持其值,多线程访问需要同步。静态方法不能直接访问非静态成员,常用于工具类。静态构造函数在类实例化或引用静态成员前自动执行一次。合理使用静态修饰可以提高代码效率并实现资源共享。
摘要由CSDN通过智能技术生成
  1. 什么是静态
    static静态的,不变的,在某个类中只有一个,不会因实例化对象的不同而不同。static可以修饰类、字段、属性、方法等。如一个方法前加上static修饰后要对其进行调用可以直接通过类名点出来,不用再对类进行实例化。
  2. 静态类
    -只能包含静态成员(静态方法或静态变量),非静态成员是不能使用的,而非静态类可以包含静态的方法、字段、属性或事件,且无论对这个非静态类创建多少个实例,它的静态成员都只有一个。
    -不能对其实例化。
    -不能被继承,因为静态类本质是一个抽象的密封类。
    -不能包含实例构造函数。
  3. 静态变量
    -static只能修饰成员变量,不能修饰局部变量。
    -表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值。
    -静态变量一直记录变量的值,一直到下次赋值时。
    -不同线程下访问的静态属性总是同一属性,如果某一线程更改了属性值,将造成其他线程访问属性值的错误。因此方法中访问同一静态属性就需要使用lock关键字,或创建互斥对象来保持静态属性在同一时间只能被某一对象的属性或方法访问。
    -静态成员只被创建一次,所以静态成员只有一份,而实例成员有多少个对象,就有多少个成员。
 static int i = 10;
        static void Main(string[] args)
        {
            Console.WriteLine(Add());
            Console.WriteLine(Add2());
            Console.ReadLine(); 
        }
        static int Add()
        {
            return i += 10;
        }
​
        static int Add2()
        {
            return i += 10;
        }


  1. 静态方法
  • 在方法(函数)前用static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有。
    -在静态方法中只能直接调用同类中其他的静态成员(包括变量和方法), 而不能直接访问类中的非静态成员。
    -每一个线程在同一时间访问的静态方法都是不同的,因此静态方法在多线程调用中不会产生冲突。
    -在静态方法中不能直接调用实例成员,因为静态方法被调用时,对象还有可能不存在。
    -this/base关键字在静态方法不能使用,因为有可能对象还不存在。
    -静态方法只能被重载,不能被重写,因为静态方法不属于类的实例成员。
  1. 静态构造函数
    -静态类可以有静态构造函数,静态构造函数不可继承。
    -可以用于静态类,也可用于非静态类。
    -无访问修饰符、无参数,只有一个static标志。
    -不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。
  2. 什么时候适合用static修饰
    -当变量需要被共享时可以将变量定义为静态变量。
    -当方法需要被反复调用时可以将方法定义为静态方法。
    -当一个类中包含的成员都是静态时可以将类定义为静态类。
  3. 使用static时需要注意的地方
  • 静态类中的所有成员也必须是静态。
    -非静态类中的成员可以是静态也可以是非静态
    -一个静态的函数内部只能使用该函数外部的静态成员。
    -一个类中的公开静态成员,在另外一个类中通过直接使用类名点的形式调用这个成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值