java 内部类加载_java涉及内部类加载的问题。在加载了外部类的时候,内部类也会随之加载吗?...

不是的,只需在加载内部类的时分才初始化 //有问题能够持续沟通

楼主只需看懂一下的代码

那么关于类的加载

基本上就没问题了

最终类的加载进程的解说

public class Test6 {

public static void main(String[] args){

new B();

new A.C();

}

}

class A{

private P p1 = new P("A--p1");

static P p3 = new P("A--p3");

public A(){

System.out.println("A()");

}

private P p2 =new P("A--p2");

static{

new P("A--static");

}

{new P("A{...}");}

public static class C {

private P p1 = new P("C--p1");

static P p3 = new P("C--p3");

public C(){

System.out.println("C()");

}

private P p2 =new P("C--p2");

static{

new P("C--static");

}

{new P("C{...}");}

}

}

class B extends A {

private P p1 = new P("B --p1");

static P p3 = new P("B -- p3");

public B() {

System.out.println("B()");

}

public P p2 = new P("B -- p2");

static {

new P("B -- static");

}

{new P("B{...}");}

}

class P {

public P(String s) {

System.out.println(s);

}

}

/*

有父类的状况

1. 加载父类

1.1 为静态特点分配存储空间并赋初始值

1.2 履行静态初始化块和静态初始化句子(从上至下)

2. 加载子类

2.1 为静态特点分配存储空间

2.2 履行静态初始化块和静态初始化句子(从上至下)

3. 加载父类结构器

3.1 为实例特点分配存数空间并赋初始值

3.2 履行实例初始化块和实例初始化句子

3.3 履行结构器内容

4. 加载子类结构器

4.1 为实例特点分配存数空间并赋初始值

4.2 履行实例初始化块和实例初始化句子

4.3 履行结构器内容

5 回到main()

内部类的加载进程也相同

*/1.运用接口创立出来的而非运用类完成接口出来的就是匿名类了。

因为接口是无法new的,而运用接口new目标实践是就是发生了一个没有进行命名的类,而这品种就叫做匿名类了。

interface Abc{

public void fn();

}

class Test{

void fn(){

//这儿的new Abc()就是一个匿名类,由接口直接发生,而未经过class XXX implements Abc得到

new Abc(){

public void fn(){}

}

}

}

2.不太清楚你问的东西大约什么意思?说一下我的理解

一个类界说结束,假如JAVA虚拟机加载了这个类,那么它会将所有的static润饰的成员(变量和办法)加载入栈内存,这一部分内存只需一种时分才会被开释,就是JVM退出的时分。

假如运用该类界说了一个目标,也就是new出来的东西,那么会在堆内存中创立一块内存地址,用于寄存这个目标,当该目标被开释掉时(JVM不退出,仅仅是回收了这一块内存),被占用内存将清空。

至于内部类的问题,自己以为内部类实践上就是在一个类中界说了一种新的数据类型,当这种数据类型没有被运用时,JVM不会加载它,换句话说,内部类也是一品种,不运用就不加载,只不过它的格局特殊一些而已,单从JAVA编译后的形状来看,内部类独立成一个.class文件,只不过类名是:外部类名$内部类名.class。所以内部类操作时和一般类是相同的,彻底满足一般类的各种加载开释原理。

引证LZ的原话“办法的局部变量坐落栈上”这句话我不能苟同,自己以为局部变量是在堆内存中的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值