第10天 Java static关键字

来源:互联网 发布:python编写网页登录 编辑:程序博客网 时间:2024/05/21 11:27



一、static关键字

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
static字段对每个类来说只有一个存储空间,而非static字段则对每个对象有一个存储空间

二、static分三部分:

static变量
static方法
static块


三、static变量作用:

引用时可以无需创建对象
全局变量,针对所有对象仅有一个,且相互共享
不创建对象的情况下,通过类本身调用static方法(多用于工具类,类似于全局方法)、或常量(类似于全局变量)

class StaticSuper {// 父类持有的共享变量static String str = "父类持有的静态变量";}class StaticSubOne extends StaticSuper {}class StaticSubTwo extends StaticSuper {}public class StaticConstants {public static void main(String[] args) {// 共享变量System.out.println(StaticSubOne.str);System.out.println(StaticSubTwo.str);StaticSubOne.str = "改变内容";System.out.println(StaticSuper.str);}}/*  output ~ 父类持有的静态变量父类持有的静态变量改变内容 * */

由上面例子可以看出static的常量是全局共享的,包括此类的所有子类也都共享static变量。


四、static方法

静态方法内部,不能调用非静态方法。(特例)
可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。( 很像全局方法 )
static方法就是没有this的方法
static方法的内部不能调用非静态方法。只能调用静态方法
单例:类设置为public , 把所有 构造器设置为private ,为了阻止任何人创建该类的对象,但是可以通过 static成员内部创建。

class Static {static int i = 85;}class Incrementable {static int increment() {Static.i += 1;return Static.i;}}public class StaticMethod {public static void main(String[] args) {// 静态方法依然共享变量System.out.println( Incrementable.increment() ); // 86Incrementable incrementable = new Incrementable();int value = incrementable.increment();System.out.println(value);  // 87System.out.println( Incrementable.increment() ); // 88}}/*  output ~868788 * */

static方法可以不创建对象仅通过类名就可以调用,而且通过类名调用和创建对象调用的static常量是同一个。

五、参考资料:

Java静态变量的初始化(static块的本质)
http://blog.csdn.net/darxin/article/details/5293427


0 0
原创粉丝点击