ζ°≡ 爪哇攻城狮

Java之static关键字

static关键字主要有两种作用

  第一 为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。
  第二 实现某个方法或属性与类相关联。

具体用法

如下:

static成员变量
  • 静态变量属于类,在内存中只有一个复制,只要静态变量所在的类被加载,这个静态变量就会被分配空间,因此就可以被使用了。两种方式分别是“类.静态变量”和”对象.静态变量”。
  • 实例变量属于对象,只有对象被创建后,实例变量才会被分配内存空间,才能被使用,它在内存中存在多个复制,只有用“对象.实例变量”的方式来引用。
static成员方法
  • static方法是类的方法,不需要创建对象就可以被调用,而非static方法是对象的方法,只有对象被创建出来后才可以被使用。
  • static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法,static方法也不能访问非static类型的变量。因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。重要用途就是单例模式的应用。
static代码块:
  • static代码块在类中是独立于成员变量和成员函数的代码块的。
  • 注意:这些static代码块只会被执行一次。
static内部类
  • OuterClassObject.new InnerClassName(),如果省略了OuterClassObject则是this. new InnerClassName(),OuterClassObject或者this指代创建这个内部类对象的一个外部类对象,是一个隐式参数,它将传入内部类的构造方法(见前所述)。但是现在这个内部类对象是由“类”直接创建的,不会产生这样的一个隐式参数传入内部类构造方法,因此内部类也就不需要“编译器自动给内部类加上一个reference,指向产生它的那个外部类的对象”,所以我们把这个内部类声明为static。
不允许在函数内部定义static变量

  根据上文可以得知,在Java语言中,不能在成员函数内部定义static变量,以下代码将会编译失败:


class CT{
public void testStatic(){
static int i=0; //编译失败
System.out.println(i++);
}
}

坚持原创技术分享,您的支持将鼓励我继续创作!