java 内部类 加载_java内部类及类加载顺序
package demo;
import demo.Enclosingone;
import demo.Enclosingone.InsideOne;
import demo.Enclosingone.InsideOne2;
class Enclosingone
{
static final int a=100;
static {
System.out.println("Enclosingone.enclosing_method():父類靜態代碼塊");
}
public Enclosingone() {
{
System.out.println("Enclosingone.Enclosingone():父類構造函數");
}
}
{
System.out.println("Enclosingone.enclosing_method():父類構造代碼塊");
}
public void name() {
{
System.out.println("Enclosingone.name():父類普通代碼塊");
}
}
public static class InsideOne {//靜態內部類
static{
System.out.println("Enclosingone.InsideOne.enclosing_method():靜態內部類");
}
}
public class InsideOne2{//內部類
//靜態內部類的加載不需要依附外部類,在使用時才加載。不過在加載靜態內部類的過程中也會加載外部類
//非靜態內部類不能使用靜態代碼塊(一般的非靜態類可以有靜態代碼塊)
//因為非靜態內部類相當于外部的非靜態成員變量,如果外部類要調用非靜態成員變量,則需要創建對象,
//進行調用;而非靜態內部類中有static代碼塊,那么在外部類加載的時候就會加載,不需要考慮外部狀態
//則與外部類的創建相駁論,所以靜態內部類不能創建靜態代碼塊
static final int a=200;//就近原則匹配a的值
//static final int a=6;
public InsideOne2() {
System.out.println(a);
}
}
@Override
protected void finalize() throws Throwable {
System.out.println("最后一次a:"+a);
}
}
class Enclosingonechild extends Enclosingone{
static {
System.out.println("Enclosingonechild.enclosing_method():子類靜態代碼塊");
}
public Enclosingonechild() {
{
System.out.println("Enclosingonechild.Enclosingonechild():子類構造函數");
}
}
{
System.out.println("Enclosingonechild.enclosing_method():子類構造代碼塊");
}
}
public class demo
{
public static void main(String[] args)
{
new InsideOne();//靜態內部類直接聲明使用//相當于外部類
System.out.println("-------------");
new Enclosingone().new InsideOne2();
System.out.println("--------------");
new Enclosingonechild().name();
System.out.println("--------------");
System.gc();//調用gc回收,觸發finalize方法;
}
}
總結
以上是生活随笔為你收集整理的java 内部类 加载_java内部类及类加载顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 修饰符作用_Java关键字修饰
- 下一篇: java wcf 未提供用户名_WCF的