java中的static

来源:互联网 发布:淘宝怎么选发货地 编辑:程序博客网 时间:2024/06/06 19:31

最近贴吧有个小伙伴问我一些关于static关键字的问题,我当时感觉没有把一些根本的东西解释清楚,后来又翻了翻Think in java ,仔细学习了一下。


static是代表静态的意思,这个关键字可以用来修饰变量、方法、代码块、还有类。


1、static修饰变量时,表示这个变量是一个静态的变量,它被该类和所有该类创建的对象所共享,可以通过类名加点直接访问。

例子:

public class StaticExpample{

public static int i = 1;

public static void main(String[] args){

System.out.println(StaticExpample.i);

}

}

结果为1;

则这个i属性可以用StaticExpample.i直接访问。

2、static修饰的方法为静态方法,静态方法只可以访问该方法外的静态变量和静态方法,否则会报错。

例子:就是上面的程序,不过加了一个非静态的属性。

public class StaticExpample{

public static int i = 1;

public int j =2;

public static void main(String[] args){

System.out.println(j);

}

}

这个程序编译通不过,java: non-static variable j cannot be referenced from a static context,会报这个错误。

3、static修饰的代码块,它是在类被第一次加载的时候执行的。

例子:

public class StaticExpample{

public static int i = 1;

static{

i++;

}

public static void main(String[] args){

System.out.println(i);

}

}

这样结果就变为2了。

4、static只可以修饰内部类,普通的类它是不能修饰的,它的作用就是使内部类可以像普通的类一样初始化,不需要先声明一个外部类。

例子:

public class OuterClass{

static class InnerClass{

int i = 0;

}

}

如果像这样InnerClass有static修饰,InnerClass初始化new OuterClass.InnerClass()就行了。

如果类是这样:

public class OuterClass{

class InnerClass{

int i = 0;

}

}

则InnerClass的初始化:

OuterClass outerClass = new OuterClass();

OuterClass.InnerClass  innerClass = new outerClass.InnerClass();

感觉这个类就像静态变量了一样,可以类名加点访问了。


最后总结一下:static可以修饰变量、方法、代码块、和类,修饰变量和代码块是在类的第一次加载到内存中执行的,修饰方法和类可以看上面叙述的,感觉很详细了。





0 0
原创粉丝点击