static字段初始化过程与静态内部类
来源:互联网 发布:深圳赛维网络招聘 编辑:程序博客网 时间:2024/06/04 18:24
/**
* 无论多少对象,静态数据只占用一份存储区域。static 不能应用于 局部变量
* 因此,它只能作用于域(事实上,static修饰的类似全局变量的概念)。
* 下面的例子,阐明静态存储区域 何时初始化
*/
class Bowl{ Bowl(int marker){ System.out.println("Bowl("+marker+")"); } void f1(int marker){ System.out.println("f1("+marker+")"); }}class Table{ static Bowl bowl1 = new Bowl(1); Table(){ System.out.println("Table()"); bowl2.f1(1); } void f2(int marker){ System.out.println("f2("+marker+")"); } static Bowl bowl2 = new Bowl(2);}class Cupboard{ Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); Cupboard(){ System.out.println("Cupboard()"); bowl4.f1(2); } void f3(int marker){ System.out.println("f3("+marker+")"); } static Bowl bowl5 = new Bowl(5);}public class StaticInitialization { public static void main(String[] args) { System.out.println("Creating new Cupboard() in main"); new Cupboard(); System.out.println("Creating new Cupboard() in main"); new Cupboard(); table.f2(1); cupboard.f3(1); } static Table table = new Table(); static Cupboard cupboard = new Cupboard();}
/**
* 总结: 初始化的顺序是先 静态对象,而后是 非静态对象。要执行一个 方法,须加载对应的类(载入className.class),
* 这时,类的静态域首先被初始化,且只执行一次。
* 另外,先执行出现于字段定义处的初始化,后执行构造器。
*/
/==============分割线===================/
/** * 不需要内部类对象与其外部类有联系,那么就将内部类声明为 static。 * 普通的内部类对象隐式地保存一个外部类对象的引用, 然而 静态内部类 没有。 * 意味着: * 1)创建static类对象,并不需要外部类对象。 * 2)不能从static类对象中访问非静态的外部类对象。 * <p> * <p> * 静态内部类 与 普通内部类 另一区别:普通内部类不能有 static 数据和字段 * (除了静态常量表达式),但静态内部可以有。 */public class Parcel11 { private class Inner { private final static int x = 1; //以下语句不合法 //final static Inner a=new Inner(); //static Inner a1=new Inner(); //static int y; } private static class ParcelContents implements Contents { private int i = 2; @Override public int value() { return i; } } protected static class ParcelDestination implements Destination { private String label; private ParcelDestination(String whereTo) { label = whereTo; } @Override public String readLabel() { return label; } //静态内部类包含静态元素 public static void f() { } static int x = 3; static class AnotherLevel { public static void f() { } static int x = 4; } } //提供外部访问 public static Contents contents() { return new ParcelContents(); } public static Destination destination(String s) { return new ParcelDestination(s); } public static void main(String[] args) { Contents c = contents(); System.out.println(c.value()); Destination d = destination("Wust"); System.out.println(d.readLabel()); System.out.println("静态内部类 x = " + ParcelDestination.x); System.out.println("静态内部类 的 静态内部类 x = " + ParcelDestination.AnotherLevel.x); System.out.println("普通类的静态常量 x = " + Inner.x); }}
阅读全文
0 0
- static字段初始化过程与静态内部类
- Java 虚拟机内部类静态字段的初始化与访问
- static静态内部类
- static与内部类
- 关键字 static(非静态内部类&&静态内部类)
- Java中Static Class及静态内部类和非静态内部类与静态导包
- JAVA 内部类与静态内部类
- 静态内部类与普通内部类
- Java内部类与静态内部类
- Java内部类与静态内部类
- 静态内部类与成员内部类
- java内部类与静态内部类
- java 内部类与static
- java 结合内部类与外部类的静态(static)与非静态的用法
- 静态内部类(Static Inner Class)
- 静态内部类(Static Inner Class)
- Java之静态内部类(static class)
- java中的静态内部类(static class)
- 求逆序数
- Unity3d开发——保卫萝卜学习笔记一地图编辑器开发
- 排序(1)冒泡排序
- Hbase初探
- Ubuntu新增用户登录之后不能执行命令
- static字段初始化过程与静态内部类
- java多线程------实现多线程两种方式
- 309. Best Time to Buy and Sell Stock with Cooldown
- Spring 源码粘贴8-2
- 2016背包专题1005
- mac下配置环境变量
- 出栈顺序
- HDU5120:Intersection(圆环相交)
- 文章标题