关键字static的作⽤是什么?
static关键字主要两种作⽤:第⼀,为某特定数据类型或对象分配单⼀的存储空间,⽽与创建对象⽆关。第⼆,希望某个⽅法或属性与类⽽不是对象关联在⼀起,
也就是说,在不创建对象的情况下就可以通过类来直接调⽤⽅法或使⽤类的属性。具体⽽⾔,static在Java语⾔中主要有四种使⽤情况:成员变量,成员⽅法,代码
及内部类。以下将本别对这4种情况进⾏介绍。
(1)static成员变量
虽然Java语⾔中没有全局的概念,但可以通过static关键字来达到全局的效果。Java类提供了两种类型的变量:⽤static关键字修饰的静态变量和没有static
关键字的实例变量。静态变量属于类,在内存中只有⼀个副本(所有实例都指向同⼀个内存地址),只要静态变量所在的类被加载,这个静态变量就会被分配空
间,因此,就可以被使⽤了。对静态变量的引⽤有两种⽅式,分别为“类.静态变量”和“对象.静态变量”。
实例变量属于对象,只有对象被创建后,实例变量才会被分配空间,才能被使⽤,它在内存中存在多个副本。只能⽤“对象.静态变量”的⽅式来引⽤。
静态变量只有⼀个,被类拥有,所有的对象都共享这个静态变量,⽽实例对象是与具体对象相关的。需要注意与C++语⾔不同的是,在Java语⾔中,不能在⽅法体中
定义static变量。
(2)static成员⽅法
与变量类似,Java类同时提供了static⽅法与⾮static⽅法。static是类的⽅法,不需要创建对象就可以被调⽤,⽽⾮static⽅法是对象的⽅法,只有对象被创建出
来后才可以被使⽤。
static⽅法中不能使⽤this和super关键字,不能调⽤⾮static⽅法,只能访问所属类的静态成员变量和成员⽅法,因为当static关键字被调⽤时,这个类的对象可能
还没被创建,即使已经被创建了,也⽆法确定调⽤哪个对象的⽅法。同理,static⽅法也不能访问⾮static类型的变量。
static的⼀个很重要的⽤途是实现单例模式。单例模式的特点是该类只能有⼀个实例,为了实现这个功能,必须隐藏类的构造⽅法,即把构造⽅法声明为private,
外界⽆法直接创建这个类型的对象,只能通过该类提供的⽅法来获取的对象,要达到这样的⽬的只能把创建对象的⽅法声明为static。程序⽰例如下:
public class Singleton {
private static Singleton instance = null;
private Singleton(){};
public static Singleton getInstance(){
if (instance==null) {
instance = new Singleton();
}
return instance;
}
}
⽤public修饰的static变量和⽅法本质上都是全局的,如果在static变量前⽤private修饰,则表⽰这个变量可以在类的静态代码或者类的其他静态成员⽅法
中使⽤,但是不能在其他类中通过类名直接引⽤。
(3)static代码块
static代码块(静态代码块)在类中是独⽴于成员变量和成员函数的代码块。它不在任何⼀个⽅法体内,JVM在加载类的时候会执⾏statci 代码块,如果有
多个static代码块,JVM将会按顺序来执⾏。static代码块经常会被⽤来初始化静态变量。需要注意的是,这些static代码块只会被执⾏⼀次。
static修饰的变量(4)static内部类
static内部类是指被声明为static的内部类,它可以不依赖于外部类实例对象⽽被实例化,⽽通常的内部类需要在外部类实例化后才能实例化。静态内部类不能
与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态⽅法(包括私有类型)。
需要注意的是,只有内部类才能定义为static
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论