java基础知识补漏

本人的GitHub:戳我一下

一、静态代码块:

static {} 包住的代码块叫做静态代码块。
特点:随着类的加载而执行,只执行一次
示例:

class StaticCode {
    static {
        System.out.println("a");
    }
}
class StaticCodeDemo {
    static { 
        System.out.println("b");
    }
    public static void main(String[] args) {
        new StaticCode();
        new StaticCode();
        System.out.println("d");
    }
    static { 
        System.out.println("c");
    }
}

这里写图片描述

这里注意其中“a”只打印了一次,“d”最后打印,由此可以看出静态代码块随着类的加载而执行,只执行一次

二、对象初始化时发生了什么

1、先找到相应的.class文件加载到内存中
2、如果该类中有static代码块,执行static代码块
3、在堆内存中开辟空间,分配内存地址
4、在堆内存中建立对象的属性,并进行默认初始化
5、对属性进行显式初始化
6、对对象进行构造代码块的初始化
7、对对象进行构造函数的初始化

三、内部类

1、内部类的定义:可以直接在外部类中定义,也可以在外部类的成员函数中定义

class Outer { 
    private int x = 5;
    class Inner {
        public int y = 6;
    }
}
class Outer {
    void function() {
        class Inner {
            int num = 1;
        }
    }
}

2、内部类的访问规则:

  • 内部类可以直接访问外部类的属性和方法,包括私有的属性和方法
  • 外部类只能通过创建内部类对象的方式访问内部类的属性和方法,不能访问内部类的私有属性和方法

3、可以通过Outer.Inner = new Outer().new Inner()的方法直接创建内部类(有该内部类的访问权限的前提下)
4、内部类可以用所有的权限修饰符修饰:private public default(默认) protected
5、内部类可以被 static修饰,同时就具有了static的特性,只能访问外部类的静态属性和方法
6、内部类中还有一种匿名内部类,而想要定义一个匿名内部类,需要该匿名内部类继承一个抽象类或接口,其实,匿名内部类就是一个匿名内部子类,该子类实现继承与父类的抽象方法,示例:

abstract class AbsDemo {
    abctract void t();
}
class Outer {
    void function() {
        new AbsDemo() {//匿名内部类
            void t() {
                System.out.println("Hello,world");
            }
        }.t();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值