static关键字(java基础)

来源:互联网 发布:广州java招聘 编辑:程序博客网 时间:2024/06/03 19:00
static有两个作用:
1、为指定某些类成员或对象分配单一的存储空间,与对创建对象的个数无关。
2、定义的类属性与实现的类方法与类关联在一起,与该类的实例无关,虽然类的实例也可以调用。该现象是一种假象,应通过类直接调用static修饰的属性与方法。
static修饰的变量和方法被称为静态变量与静态方法,反之成为非静态变量与静态方法,其中静态成员不能直接访问非静态成员
static关键字真正的作用并不是区分静态成员与非静态成员,它真正的作用是用于区分成员变量,方法,内部类,初始化块这四种成员到底属于类本身还是属于实例。在类中定义的成员,static相当于一个区别属于类本身与属于该类实例的一个标志。
static修饰的变量:
java类中提供两种类型的变量:一种是用static修饰的静态成员变量,属于该类所有,内存中分配单一存储空间,类一加载时,就为该变量分配了空间,这个变量就可以供我们使用了。通常使用静态成员变量的方式是通过 “类名.成员变量”的形式直接引用,另一种就是通过 “对象.成员变量”的形式引用(不建议使用)。
另一种是不用static修饰的非静态成员变量,也称实例变量,属于类的实例所有,只有在对象创建后,非静态变量才会被分配空间,在内存中可以分配多个空间,通过 “对象.实例变量”的形式引用。

static修饰的方法:
java类中提供static修饰的方法与非static修饰的方法,同static修饰的变量一样,static修饰的方法属于该类所有,也是在类一加载时,加载该方法,不需要创建对象之后在调用,可直接通过类名直接调用;而非static修饰的方法,只能在实例对象创建之后,通过实例对象调用。
static修饰的方法,不能使用this关键字与super关键字;不能调用非static修饰的方法,不能引用非static修饰的成员变量;只能使用static修饰的成员,因为类一加载时,就将static修饰的方法加载了,此时该类的实例对象还没有创建,所以只能使用static修饰的其他成员。
单例设计模式:
static一个很重要的用途就是实现单例设计模式。单利模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static,程序实例及程序执行步骤如下:
static修饰的代码块
在类中独立于成员变量与成员方法存在,代码块,在类加载时只加载一次。

static修饰的内部类
在内部类中可以将其声明为static的,这个时候,外部类可以直接调用内部类,因为static的内部类是在加载外部类的同时加载的,所以也就是说,并不要实例化外部类就能直接调用静态内部类。
如图:


补充:
Java中的static关键字不会影响到变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字。
static与final结合使用表示的意思:
对于变量,若使用static final修饰,表示一旦赋值不能修改,并且通过类名可以访问。
对于方法,若使用static final修饰,表示该方法不可被覆盖,并且可以通过类名直接访问。
0 0