static关键字

来源:互联网 发布:阿里云空间大小 编辑:程序博客网 时间:2024/06/14 21:45

转自《Java程序员面试笔试宝典》——何昊


Static关键字


Static关键字使用的两种场景:
(1)为某特定域分配单一存储空间,与创建多少对象无关,甚至根本就不创建任何对象。
(2)希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。


当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。


1.static成员变量


用static关键字修饰的静态变量和不用static关键字修饰的实例变量的区别:
(1) 静态变量属于类,在内存中只有一个复制,随着类的加载被分配空间
(2) 实例变量属于对象,在内存中存在多个复制,只有对象被创建后,才会被分配空间。


引用static成员变量的两种方法:
(1) 对象.静态变量
(2) 类.静态变量


2.static成员方法


Static方法是类的方法,不需要创建对象就可以被调用,而非static方法是对象的方法,只有对象被创建出来后才可以被使用。


需要注意:
(1) static方法中不能使用this和super关键字,因为this是操作当前此类型的对象,super是操作当前此对象的父类中的对象,不能调用非static方法,只能访问所属类的静态成员变量和成员方法。
(2) static方法也不能访问非static类型的变量。


static一个很重要的用途是实现单例模式。单例模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法申明为static。


3.static代码块
static代码块(静态代码块)在类中是独立于成员变量和成员函数的代码块的。它不在任何一个方法体内,JVM在加载类时会执行static代码块,如果有多个static代码块,JVM将会按顺序来执行。


4. static内部类
它可以不依赖于外部类实例对象而被实例化,而通常的内部类需要在外部类实例化后才能实例化。静态内部类不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法。
只有内部类才能被定义为static