看继承关系 快捷键 crtl + H 查看hierarchy,只能查看向上向下继承关系,而不能看实现了哪些接口。...右键选择Diagrams(也可以使用快捷键ctrl+alt+u,更快捷),然后显示 2.看接口的实现关系 crtl + alt + B会显示出跟这个接口有关系的类...(我暂时还没找到快捷的方法) 这样就形成了基本的关系图(可以自己选择想要的类或接口): 蓝色实线表示的是继承关系 绿色虚线表示的是接口实现关系 绿色实线表示的是接口与接口的关系...3.展示类/接口的详细信息: 第一种方法:右键有show categories,选择的展开类种的属性,方法,构造方法等。...当然如果还想筛选,只想看protected方法以上的,可以右键 change visibility level 如果看不清,想放大的话,Alt键 想加其他的类,
Runnable接口并实现run()方法 public class MyRunnable implements Runnable { @Override public void run(...Runnable 接口,这是因为 Java是单继承的,如果已经继承了其他类,就无法再继承 Thread 类,而实现 Runnable 接口没有这个限制,还可以更好地实现代码的解耦。...MyThread类,并重写了其run()方法。...线程池:线程池是一种常见的线程管理机制,Java 提供了 ThreadPoolExecutor 类来实现线程池,线程池可以重复利用线程,避免频繁创建和销毁线程的开销,提高系统的性能和资源利用率。...如何实现线程间通信? Java 中的线程调度是如何工作的? 什么是守护线程? Java 中有哪些线程同步机制? 什么是线程安全的集合类?举例说明。 什么是线程优先级?如何设置线程优先级?
_local_interfaces 保存接口的指针数组,直接实现的接口Klass _transitive_interfaces 保存接口的指针数组,包含_local_interfaces和间接实现的接口..._local_interfaces 保存接口的指针数组,直接实现的接口Klass _transitive_interfaces 保存接口的指针数组,包含_local_interfaces和间接实现的接口...GC在垃圾回收时,遍历某个对象所引用的其它对象时,会结合此信息进行查找; 接口的实现类,只有当前类表示一个接口时存在。...如果接口没有任何实现类则为NULL;如果只有一个实现类则为该实现类的Klass指针;如果有多个实现类,为当前类本身; host klass,只在匿名类中存在,为了支持JSR 292中的动态语言特性,会给匿名类生成一个...正常情况下,HotSpot使用Klass来表示Java类,用oop来表示Java对象,而Java对象中可能定义静态或非静态字段,非静态字段值存储在oop中,而静态字段值存储在表示当前Java类的java.lang.Class
2、程序运行到使用System.exit()或Runtime.getRuntime().exit()代码结束程序。 3、程序执行过程中遇到未捕获的异常或错误而结束。...类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。...Java程序对类的使用方式 主动使用 1、创建类的实例 2、方法某个类或接口的静态变量,或者对该静态变量赋值 3、调用类的静态方法 4、反射(如 Class.forName(“com.itzhai.Test...类的初始化时机正是java程序对类的首次主动使用, 所有的Java虚拟机实现必须在每个类或接口被Java程序“首次主动使用”时才初始化它们。...3、newInstance()是实现IOC、反射、面对接口编程和依赖倒置等技术方法的必然选择,new只能实现具体类的实例化,不适合于接口编程。
()调用,该接口实现逻辑如下: ?...事实上,JDK类库中所提供的反射等工具类,其实都基于java.lang.Class这个内部镜像实现。例如下面这个Java程序: ?...从这个意义上而言,java.lang.Class并非是偶然有的,而是必然,是Java这种面向对象的语言与虚拟机实现机制这两种规范下的必然技术实现,如果非要说有巧合的话,那便是恰好叫了“java.lang.Class...类来实现,该类中定义了各种call_*()接口,这些接口最终都要调用StubRoutines::call_stub()例程,从而辅佐JVM执行Java方法。...,由本地类库实现。
《Java虚拟机规范》 严格规定了有且只有六种情况必须立即对类进行“初始化”: 1)遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类型没有进行过初始化...6)当一个接口中定义了JDK 8新加入的默认方法(被default关键字修饰的接口方法)时,如果有这个接口的实现类发生了初始化,那该接口要在其之前被初始化。...3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。...加载阶段结束后,Java虚拟机外部的二进制字节流就按照虚拟机所设定的格式存储在方法区之中了,方法区中的数据存储格式完全由虚拟机实现自行定义,《Java虚拟机规范》未规定此区域的具体数据结构。...类型数据妥善安置在方法区之后,会在Java堆内存中实例化一个java.lang.Class类的对象, 这个对象将作为程序访问方法区中的类型数据的外部接口。
加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区中,方法区中的数据存储格式由虚拟机的实现自行定义,虚拟机规范未规定此区域的具体数据结构。...然后再内存中实例化一个java.lang.Class类的对象(这个对象,并没有要求必须是在Java堆中,就HotSpot而言,Class对象比较特殊,虽然是对象,但是是存放在方法区中的),这个对象将作为程序访问方法区中的这些类型数据的外部接口...验证内容包括:当前类是否有父类(除了Object类之外,所有类都该有父类),当前类的父类是否继承了不被允许继承的类(被final修饰的类),如果当前类不是抽象类,是否实现了其父类或接口之中要求实现的所有方法...解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符,这7类符号引用,分别对应于常量池的CONSTANT_Class_info、CONSTANT_Fieldref_info...()方法对于类或接口来说并不是必需的,如果一个类中没有静态语句块,也没有对变量的赋值操作,那么编译器可以不为这个类生产()方法。
字符:char 布尔值:boolean 引用类型 所有的引用类型都继承自 java.lang.Object 类,枚举,数组,接口都是引用类型 java.io.Serializable 接口,基本类型的包装类...(比如 java.lang.Double)也是引用类型 对每一种对象,JVM 都会实例化一个 java.lang.Class 的实例,java.lang.Class 为我们提供了在运行时访问对象的属性和类型信息的能力...() 返回调用类的父类 Class.getClasses() 返回调用类的所有公共类、接口、枚举组成的 Class 数组,包括继承的 Class.getDeclaredClasses() 返回调用类显式声明的所有类...Member 有三个实现类: java.lang.reflect.Constructor:表示该 Class 的构造函数 java.lang.reflect.Field:表示该 Class 的成员变量...注意:构造函数无法从父类继承 获取成员变量 java.lang.Class 提供了以下方法用于获取该类的成员变量: ?
类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类。...虚拟机规范中并没强行约束,这点可以交给虚拟机的的具体实现自由把握,但是对于初始化阶段虚拟机规范是严格规定了如下几种情况,如果类未初始化会对类进行初始化。...接口中不能使用static{}块。当一个接口在初始化时,并不要求其父接口全部都完成了初始化,只有真正在使用到父接口时(例如引用接口中定义的常量)才会初始化 三....直接引用是与虚拟机实现的内存布局相关的,如果有了直接引用,那么引用的目标必定已经在内存中存在。...两个不同的类加载器 ClassLoaderA和 ClassLoaderB分别读取了这个 Sample.class文件,并定义出两个 java.lang.Class类的实例来表示这个类。
1.1 类加载 1. 类加载的描述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。...类的加载 就是指将class文件读入内存,并为之创建一个 java.lang.Class 对象 任何类被使用时,系统都会为之建立一个 java.lang.Class 对象 3....类的初始化时机 创建类的实例 调用类的类方法 访问类或者接口的类变量,或者为该类变量赋值 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类 直接使用java.exe...类加载器的作用 将Class文件字节码内容加载到内存中,并将这些静态数据转成方法区的运行时数据结构,然后再堆中生成一个代表整个类的Java.lang.Class对象,作为方法区中类数据的访问入口。...,平台类包括由平台类加载器或其祖先定义的Java SE平台API,其实现类和JDK特定的运行时类 System class loader:它也被称为应用程序类加载器 ,与平台类加载器不同。
主要做三件事 通过一个类的全限定名获取定义此类的二进制字节流 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口...这个过程呢,也主要是依靠类加载器来完成的 类加载器 引导类加载器: Bootstrap ClassLoader 启动类 c/c++ 语言实现的,嵌套在 JVM 内部 用来加载 Java 核心类库(...6 中情况下会进行初始化 遇到 new、getstatic、putstatic或 invokestatic 时,如果未初始化则先初始化( 1. new 2.读取或设置一个类的静态字段 (被 final...调用一个类的静态方法 ) 使用 java.lang.reflect 包的方法对类进行反射调用时,如果未初始化则先初始化 当初始化类时,如果其父类未初始化则先触发其父类初始化 当虚拟机启动时,用户需要指定一个要执行的主类...,需要先初始化 当有 默认方法 接口的实现类发生了初始化,则该接口要在其初始化之前初始化 而我们的 main 方法满足 1 条 invokestatic 初始化过程中会对所有的类变量进行赋值操作,会执行静态代码块
主要做三件事 通过一个类的全限定名获取定义此类的二进制字节流 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口...这个过程呢,也主要是依靠类加载器来完成的 类加载器 引导类加载器: Bootstrap ClassLoader 启动类 c/c++ 语言实现的,嵌套在 JVM 内部 用来加载 Java 核心类库(...6 中情况下会进行初始化 遇到 new、getstatic、putstatic或 invokestatic 时,如果未初始化则先初始化( 1. new 2.读取或设置一个类的静态字段 (被 final...调用一个类的静态方法 ) 使用 java.lang.reflect 包的方法对类进行反射调用时,如果未初始化则先初始化 当初始化类时,如果其父类未初始化则先触发其父类初始化 当虚拟机启动时,用户需要指定一个要执行的主类...,需要先初始化 当有 默认方法 接口的实现类发生了初始化,则该接口要在其初始化之前初始化 而我们的 main 方法满足 1 条 invokestatic 初始化过程中会对所有的类变量进行赋值操作,
一、类加载机制 类加载器将类的.class文件中的二进制数据读入到内存中,将其放在方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。...在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。...4、解析 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。...接口与类不同的是,接口不需要先执行父类的()方法,只有父接口定义的变量使用时,父接口才会被初始化。另外接口的实现类也不会先执行接口的()方法。...类加载器的层次关系图(这里父类加载器并不是通过继承关系来实现的,而是采用组合实现的): 类加载器大致可分为三类: 启动类加载器(Bootstrap ClassLoader),负责加载存放在$JAVA_HOME
接口也可以像上面显示的那样实现其他接口。...一个字段是一个具有关联值的类、接口或枚举。...如果一个公共字段是以下任一成员,则可以访问它: 这个类 这个类的一个超类 由这个类实现的接口 由这个类实现的接口扩展的一个接口 一个字段可以是一个类(实例)字段,比如java.io.Reader.lock...合成类成员的名称未指定,可能在所有编译器实现或版本中不同。...在所有其他情况下,这将产生编译时错误,因为接口未实现。桥接方法的添加避免了这个问题。 Method实现了java.lang.reflect.AnnotatedElement。
程序运行到使用 system.exit() 或 Runtime.getRuntime().exit() 代码处结束程序。 程序执行过程中遇到未捕获的异常或错误而结束。...如果没有意外,JVM 将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。...类加载指的是将类的 class 文件读入内存,并为之创建一个 java.lang.Class 对象,也就是说,当程序中使用任何类时,系统都会为之建立一个 java.lang.Class 对象。...当程序主动使用任何一个类时,系统会保证该类以及所有父类(包括直接父类和间接父类〕都会被初始化。 类初始化的时机 当 Java 程序首次通过下面6种方式来使用某个类或接口时,系统就会初始化该类或接口。...访问某个类或接口的类变量,或为该类变量赋值。 使用反射方式来强制创建某个类或接口对应的 java.lang.Class 对象。
可以继承实现, 也可用匿名内部类 new 一个Timer 调用Timer实例的 schedule 或 scheduleAtFixedRate 方法 将TimerTask放入Timer,并指定开始时间...3.1 核心: 任务 Job 我们想要调度的任务都必须实现 org.quartz.job 接口,然后实现接口中定义的 execute( ) 方法即可,类似于TimerTask。...4.2 Comparable 要想自定义的类,实现可以比的效果,可以实现我们的Comparable接口,实现其compareTo方法。定义比较规则。...String类就实现了Comparable这个接口,也就是说String类支持排序。...java.Jang.Comparable:是在类定义的时候实现的接口,该接口只存在有一个compareTo()方法用于确定大小关系; java.utilComparator:是属于挽救的比较器,除了可以实现排序的功能之外
在这里我们的 Test 类并没有明确的父类 ,JVM就把 Test 类加载到 JVM 的内存中形成一个 java.lang.Class 对象 而对象在JVM 中的内存布局如下: ?...) 解析 准备阶段完成之后,开始解析,主要做一件事 将常量池中的符号引用转化为直接引用 主要针对类或接口、字段、类方法、接口方法等 凡是在此阶段可以解析的方法引用都成为静态解析,调用的时候就叫静态调用...类初始化的几种情况: 遇到 new、getstatic、putstatic或 invokestatic 时,如果未初始化则先初始化( 1. new 2.读取或设置一个类的静态字段 (被 final 修饰...调用一个类的静态方法 ) 使用 java.lang.reflect 包的方法对类进行反射调用时,如果未初始化则先初始化 当初始化类时,如果其父类未初始化则先触发其父类初始化 当虚拟机启动时,用户需要指定一个要执行的主类...,需要先初始化 当有 默认方法 接口的实现类发生了初始化,则该接口要在其初始化之前初始化 接口并不要求父接口全都完成初始化,只有在真正使用到 父接口 的时候才会初始化 类初始化其实就是调用类构造器(
,然后创建对应类的java.lang.Class实例。...在这个过程中,JVM会初始化继承树上还没有被初始化过的所有父类,并且会执行这个链路上所有未执行过的静态代码块、静态变量赋值语句等。 某些类在使用时,也可以按需由类加载器进行加载。...InstantiationException异常; 如果此构造方法没有权限访问,则拋 IllegalAccessException异常 Java 通过类加载器把类的实现与类的定义进行解耦,所以是实现面向接口编程...类的初始化时机 Java程序对类的使用方式分为: 主动使用 被动使用 JVM必须在每个类或接口“首次主动使用”时才初始化它们,被动使用类不会导致类的初始化。...主动使用的场景: 创建类实例 访问某个类或接口的静态变量 如果是 final 常量,而常量在编译阶段就会在常量池,没有引用到定义该常量的类,因此不会触发定义该常量类的初始化 调用类的静态方法 反射某个类
将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在内存中生产一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。...直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄 解析动作主要针对类或接口、字段、类方法、接口方法等。...3、类加载器的分类 3.1、启动类加载器(引导类加载器,Bootstrap ClassLoader) 这个类加载器使用C语言实现的,嵌套在JVM内部 它用来加载java的核心库(JAVA_HOME/jre...,由sun.misc.Launcher$ExtClassLoader实现,内部类 派生于ClassLoader类 父类加载器为启动类加载器,通过扩展列加载器父类获取启动类加载器为null(表示启动类加载器...的类,返回结果为java.lang.Class类的实例 findClass(String name):查找名称为name的类,返回结果为java.lang.Class的实例 findLoadedClass
即只允许输入单字符或整数。 5.接口可以继承接口吗? 可以。而且类可以实现多个接口,接口可以继承多个接口,但一个类不能继承多个类。 6.接口和抽象类的区别? ...抽象类定义了类是什么,接口定义了类可以做什么,一个类只能继承一个抽象类,但一个类可以实现多个接口。比如动物是猫的抽象类,猫继承了动物的抽象类就不能继承植物的抽象类,决定了猫只能是动物了。...接口吃和接口睡,猫都可以实现,因为猫既会吃也会睡,实现了接口决定了猫具有相应的功能。 7.java里有哪些循环? ...(1)加载JDBC驱动程序,通过java.lang.Class类的静态方法()实现,提供JDBC连接的URL,用户名,密码。 ...(4)执行sql语句 1)执行查询数据库的sql,返回结果集 2)执行更新添加删除或建表删表等 3)用于执行返回多个结果集,多个更新计数或两者组合的语句。
领取专属 10元无门槛券
手把手带您无忧上云