IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Day 238 注解与反射(3) -> 正文阅读

[Java知识库]Day 238 注解与反射(3)

注解与反射(3)

反射

哪些类型可以有class对象

class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类。

interface:接口

[]:数组

enum:枚举

annotation:注解@interface

primitive type:基本数据类型

void

package com.yangxu.Annotation.reflection;

import java.lang.annotation.ElementType;

public class Test03 {
    public static void main(String[] args) {
        Class c1 = Object.class;
        Class c2 = Override.class;
        Class c3 = Comparable.class;
        Class c4 = String[].class;
        Class c5 = int[][].class;
        Class c6 = void.class;
        Class c7 = Integer.class;
        Class c8 = Class.class;
        Class c9 = ElementType.class;

        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        System.out.println(c5);
        System.out.println(c6);
        System.out.println(c7);
        System.out.println(c8);
        System.out.println(c9);

        int[] a = new int[10];
        int[] b = new int[100];

        //目的是了解一个类中同一类型同一维度的对象,就是同一个Class
        System.out.println(a.getClass().hashCode()==b.getClass().hashCode());

    }
}

Java内存分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ohf7o5P-1647253099023)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220314172944831.png)]

类的加载与ClassLoader的理解

三个过程:加载——>链接——>初始化

  • 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象.

  • 链接:将Java类的二进制代码合并到JVM的运行状态之中的过程。

    • 验证:确保加载的类信息符合JVM规范,没有安全方面的问题
    • 准备:正式为类变量(static)分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配。
    • 解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程。
  • 初始化

    • 执行类构造器()方法的过程。类构造器()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。(类构造器是构造类信息的,不是构造该类对象的构造器)。
    • 当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。
    • 虚拟机会保证一个类的()方法在多线程环境中被正确加锁和同步。

具体的:

package com.yangxu.Annotation.reflection;

public class ReviewLearned {
    public static void main(String[] args) {
        MyView myView = new MyView();
        System.out.println(MyView.num);
    }
}

//加载:生成一个MyView的Class类文件
//链接:将static里面的变量初始化,此时num = 0
//初始化:<clinit>()方法,所有类变量的赋值搜集,和静态代码块中的内容合并组成
//具体的:
//clinit(){
//  int num = 10;
//  static int num = 100;
// }
class MyView{
    static {
        System.out.println("这是静态代码块");
        int num = 10;
    }
    static int num = 100;

    public MyView() {
        System.out.println("这是无参构造器");
    }
}

画图的理解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QrfVD7vq-1647253099024)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220314181419644.png)]

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:21:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:16:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码