Java进阶技术笔记

第一章 类加载器

1.1 类加载器介绍

作用:负责将.clss文件(存储的物理文件)加载到内存中。

1.2 类加载过程

类加载时机

创建类的实例(对象)

调用类的方法

访问类或接口的类变量,或者为该变量赋值

使用反射方法来强制创建某个类或接口对应的java.lang.Class对象

初始化某个类的子类

直接使用java.exe来运行某个主类

类加载的过程

1.加载

通过包名和类名,获取这个类,准备使用流进行传输

在这个类加载到内存中

加载完毕后创建一个class对象

2.链接

验证

确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全

准备

负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始值

解析

将类的二进制数据流中的符号引用替换为直接应用

3.初始化

根据程序员通过程序制定的主观计划去初始化变量和其他资源

1.3 类加载分类

分类

Bootstrap class loader:虚拟机的内置加载器,通常表示为null,并且没有父类

Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块

System class loader:系统类加载器,负责加载用户类路径所指定的类库

类加载器的继承关系

System的父类加载器为Platform

Platform的父类加载器为Bootstrap

1.4 双亲委派模型

介绍

如果一个类加载器收到了类加载的请求,它不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类的加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载,如果父类可以完成加载,就返回成功,倘若父类加载器无法完成此加载任务,子类加载器才会尝试自己去加载,这就是双亲委派模式。

第二章 反射

2.1 反射概述

反射机制:

是在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意属性和方法;

这种动态获取信息及动态调用方法的功能称为java语言的反射机制。

2.2 获取Class对象三种方式

三种方式分类

类名.class属性

对象名.getClass()方法

Class.forName(全类名)方法

2.3 获取构造方法使用

2.4 反射获取成员变量使用

2.5 反射获取成员方法使用

第三章 枚举

1.1 概述

为了间接的表示一些固定的值,Java给我们提供了枚举

是指将变量的值列出来,变量的值只限于列举出来的值的范围

1.2 定义格式

public enum s{
    枚举项1,枚举项2,枚举项3;
}
注意:定义枚举项要使用关键字enum

1.3 枚举特点

所有枚举类都是Enum类的子类

可以通过“枚举类名.枚举项名称”去访问指定的枚举项

每一个枚举项其实是该枚举的一个对象

枚举也是一个类,也可以定义成员变量

枚举类的第一行必须是枚举项,最后一个枚举项后的分号可以省略,但是如果有枚举类有其他东西,这个分号就不能省略。

枚举类可以有构造器,但必须是private的,它默认的也是private的

枚举项的用法比较特殊:枚举(“”);

枚举类也可以有抽象方法,但是枚举项必须重写该方法

1.4 枚举方法

package com.wedu;

public class EnumDemo {
    public static void main(String[] args) {
//        获取枚举项
        System.out.println(S.SPRING);
//        获取枚举项名称
        System.out.println(S.SUMMER.name);
//        返回枚举项在枚举类中的索引值
        System.out.println(S.AUTUMN.ordinal());
//        比较两个枚举项,返回的是索引差值
        System.out.println(S.SPRING.compareTo(S.WINTER));
//        返回枚举常量名称
        System.out.println(S.SPRING.toString());
//        获取指定枚举类中的指定名称的枚举值
        System.out.println(Enum.valueOf(S.class,"SPRING"));
//        获得所有枚举项
        S[] s = S.values();
        for (S value:s){
            System.out.println(value);
        }
    }
}
enum S{
    SPRING("春"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    },SUMMER("夏"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    },AUTUMN("秋"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    },WINTER("冬"){
        @Override
        public void show() {
            System.out.println(this.name);
        }
    };

    public String name;

    S(String name) {
        this.name = name;
    }
    public abstract void show();
}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值