Java static

1.我理解的static的作用就是把对象的东西变成类的东西

2.因为static修饰的东西是类的东西所以在随着类的加载而加载

3.在类的加载:加载——验证——准备——解析——初始化——使用——卸载这几步中,static修饰的变量在准备阶段会给默认值,然后再初始化阶段(注意是<client>,<client>初始化和<init>实例化要分清楚)给赋在代码中的值

类的初始化<client>其实就是把静态变量和静态代码块儿,按照代码顺序执行在字节码中他会

都放到 静态代码块儿中:

 public class A {

    static {
        System.out.println("我是父类的静态代码块儿");
    }

    public static int q = 10;

    A() {

     }



}

会变成:

static {
        System.out.println("我是父类的静态代码块儿");

        public static int q = 10;
    }

4.static为什么在内部类中不能有static:

其实归根结底,还是类与对象的区别,静态属性不依赖于对象,因为它保存在jvm的静态区,所以访问修改的时候不需要依赖当前有没有存活的对象,在虚拟机加载的时候也是优先于实例生成的。而实例对象则是保存在jvm的堆内存中,想要访问内部类,必须先实例化外部类,然后通过外部类才能访问内部类。内部类其实也可以认为是外部类的一个成员变量,只要是成员变量,各个对象都是不依赖的,静态属性的出现破坏了这一逻辑,所以java语言在语义层面不允许我们那么做,这其实不是技术问题,是一个语言的逻辑和语义问题。
 

5.如果是静态内部类在初始化<client>或者实例化<init>的时候会互相干涉吗

 public class A {
     
    static {
        System.out.println("我是A的静态代码块儿");
    }
    
    A() {

  }

    public static class C{

        static {
            System.out.println("我是C的静态代码块儿");

        }

        public static void w(){

            System.out.println("我是C的静态方法W");

        }
    }
}

 

C:<client>

class Test{

    public static void main(String[] args) {


        A.C.w();

//        A a = new A();


    }

}

 

结果:

这个结果显示C初始化<client>的时候并不会影响A,A不会跟着初始化

C:<client>加<init>

class Test{

    public static void main(String[] args) {


          A.C c = new A.C();

 //       A.C.w();

//        A a = new A();


    }

}

结果:

结果显示,C实例化的时候也不会引起A的初始化

 

A:<client>加<init>

结果:

并不会引起C的初始化

综上所述,如果是静态内部类的话,那它和外面的类是一样的,进行初始化等一系列操作并不会互相影响

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值