静态内部类访问外部类静态变量的原因分析

本文探讨了静态内部类如何访问外部类的静态变量及非静态变量的问题,并通过具体示例代码展示了静态内部类能够访问外部类的静态变量,但不能访问非静态变量的原因。

写一个类用来判断是否静态类和非静态类的能不能访问外部的静态变量和非静态变量,答案是静态内部类可以访问静态变量,而不可以访问类的非静态内部类。

原因是:当一个静态内部类被使用的时候,它的外部类一定已经被加载了(这个可以参考类加载机制),外部类加载了以后它的静态变量才会放到了方法区中,然后才能被静态内部类访问,而一般的成员变量此时还没有被分配内存,因而没法进行访问。

package Main;

import java.util.*;


import java.util.LinkedHashMap;

import java.util.Scanner;

public class Main

{

private static int c=0;

private int a=0;

public static class InnerStatic

{

void print(){

c+=1;

// a+=1;

System.out.println(c+"");

}

}

private class InnerNotStatic{

void print(){

c+=1;

a+=1;

System.out.println(c+"");

}


}

Callback call=new Callback(){

public void test(){

c=1;

}

};

public static void main(String[] args){

}

interface Callback{

void test();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值