用途:

1、通过递增静态变量了解已创建此类的多少个对象,与C++构造计数类似

static关键字修饰的变量属于类,不属于对象(实例)
对象的生存期和static关键字

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Enemy
  4. {
  5. //静态变量是在类的所有实例之间
  6. //共享的变量。
  7. public static int enemyCount = 0;
  8. public Enemy()
  9. {
  10. //通过递增静态变量了解
  11. //已创建此类的多少个对象。
  12. enemyCount++;
  13. }
  14. }
  1. using UnityEngine;
  2. using System.Collections;
  3. public class Game
  4. {
  5. void Start ()
  6. {
  7. Enemy enemy1 = new Enemy();
  8. Enemy enemy2 = new Enemy();
  9. Enemy enemy3 = new Enemy();
  10. //可以使用类名和点运算符
  11. //来访问静态变量。
  12. int x = Enemy.enemyCount;
  13. }
  14. }

2、static是共享(公交车)变量,静态变量是在类的所有实例(类对象)之间共享的变量

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Player : MonoBehaviour
  4. {
  5. //静态变量是在类的所有实例之间
  6. //共享的变量。
  7. public static int playerCount = 0;
  8. void Start()
  9. {
  10. //通过递增静态变量了解
  11. //已创建此类的多少个对象。
  12. playerCount++;
  13. }
  14. }

3、可以在没有类对象的情况下调用静态方法。请注意,静态方法无法访问非静态成员变量。

  1. using UnityEngine;
  2. using System.Collections;
  3. public static class Utilities
  4. {
  5. //可以在没有类对象的情况下调用
  6. //静态方法。请注意,静态方法无法访问
  7. //非静态成员变量。
  8. public static int Add(int num1, int num2)
  9. {
  10. return num1 + num2;
  11. }
  12. }

4、和面向对象一样,通过类名.对象名访问静态方法

  1. using UnityEngine;
  2. using System.Collections;
  3. public class UtilitiesExample : MonoBehaviour
  4. {
  5. void Start()
  6. {
  7. //可以使用类名和点运算符
  8. //来访问静态方法。
  9. int x = Utilities.Add (5, 6);
  10. }
  11. }

对比C++,改用::而不是.

  1. int Point::count = 0;//静态数据成员定义和初始化,使用类名限定

static关键字