首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IDEA查看接口的继承实现关系图「建议收藏」

看继承关系 快捷键 crtl + H 查看hierarchy,只能查看向上向下继承关系,而不能看实现了哪些接口。...右键选择Diagrams(也可以使用快捷键ctrl+alt+u,更快捷),然后显示 2.看接口实现关系 crtl + alt + B会显示出跟这个接口有关系的...(我暂时还没找到快捷的方法) 这样就形成了基本的关系图(可以自己选择想要的接口): 蓝色实线表示的是继承关系 绿色虚线表示的是接口实现关系 绿色实线表示的是接口接口的关系...3.展示/接口的详细信息: 第一种方法:右键有show categories,选择的展开种的属性,方法,构造方法等。...当然如果还想筛选,只想看protected方法以上的,可以右键 change visibility level 如果看不清,想放大的话,Alt键 想加其他的

3.3K30

【JavaSE专栏77】线程的创建和启动,继承Thread实现Runnable接口完成线程创建启动

Runnable接口实现run()方法 public class MyRunnable implements Runnable { @Override public void run(...Runnable 接口,这是因为 Java是单继承的,如果已经继承了其他,就无法再继承 Thread ,而实现 Runnable 接口没有这个限制,还可以更好地实现代码的解耦。...MyThread,并重写了其run()方法。...线程池:线程池是一种常见的线程管理机制,Java 提供了 ThreadPoolExecutor 实现线程池,线程池可以重复利用线程,避免频繁创建和销毁线程的开销,提高系统的性能和资源利用率。...如何实现线程间通信? Java 中的线程调度是如何工作的? 什么是守护线程? Java 中有哪些线程同步机制? 什么是线程安全的集合?举例说明。 什么是线程优先级?如何设置线程优先级?

13220
您找到你想要的搜索结果了吗?
是的
没有找到

HotSpot模型之InstanceKlass「建议收藏」

_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中,而静态字段值存储在表示当前Javajava.lang.Class

85730

Java反射探索-----从加载说起

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只能实现具体的实例化,不适合于接口编程。

49710

【JVM进阶之路】十三:加载过程

《Java虚拟机规范》 严格规定了有且只有六种情况必须立即对进行“初始化”: 1)遇到new、getstatic、putstaticinvokestatic这四条字节码指令时,如果类型没有进行过初始化...6)当一个接口中定义了JDK 8新加入的默认方法(被default关键字修饰的接口方法)时,如果有这个接口实现发生了初始化,那该接口要在其之前被初始化。...3)在内存中生成一个代表这个java.lang.Class对象,作为方法区这个的各种数据的访问入口。...加载阶段结束后,Java虚拟机外部的二进制字节流就按照虚拟机所设定的格式存储在方法区之中了,方法区中的数据存储格式完全由虚拟机实现自行定义,《Java虚拟机规范》规定此区域的具体数据结构。...类型数据妥善安置在方法区之后,会在Java堆内存中实例化一个java.lang.Class的对象, 这个对象将作为程序访问方法区中的类型数据的外部接口

36920

JVM学习记录-加载的过程

加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区中,方法区中的数据存储格式由虚拟机的实现自行定义,虚拟机规范规定此区域的具体数据结构。...然后再内存中实例化一个java.lang.Class的对象(这个对象,并没有要求必须是在Java堆中,就HotSpot而言,Class对象比较特殊,虽然是对象,但是是存放在方法区中的),这个对象将作为程序访问方法区中的这些类型数据的外部接口...验证内容包括:当前是否有父(除了Object之外,所有都该有父),当前的父是否继承了不被允许继承的(被final修饰的),如果当前不是抽象,是否实现了其父接口之中要求实现的所有方法...解析动作主要针对接口、字段、方法、接口方法、方法类型、方法句柄和调用点限定符,这7符号引用,分别对应于常量池的CONSTANT_Class_info、CONSTANT_Fieldref_info...()方法对于接口来说并不是必需的,如果一个中没有静态语句块,也没有对变量的赋值操作,那么编译器可以不为这个生产()方法。

31420

深入理解 Java 反射:Class (反射的入口)

字符: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 提供了以下方法用于获取该类的成员变量: ?

1.5K100

Java加载,getClassLoader()

加载器负责读取 Java 字节代码,并转换成 java.lang.Class的一个实例。每个这样的实例用来表示一个 Java 。...虚拟机规范中并没强行约束,这点可以交给虚拟机的的具体实现自由把握,但是对于初始化阶段虚拟机规范是严格规定了如下几种情况,如果类初始化会对进行初始化。...接口中不能使用static{}块。当一个接口在初始化时,并不要求其父接口全部都完成了初始化,只有真正在使用到父接口时(例如引用接口中定义的常量)才会初始化 三....直接引用是与虚拟机实现的内存布局相关的,如果有了直接引用,那么引用的目标必定已经在内存中存在。...两个不同的加载器 ClassLoaderA和 ClassLoaderB分别读取了这个 Sample.class文件,并定义出两个 java.lang.Class的实例来表示这个

26920

Java成神路 —— 加载器

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:它也被称为应用程序加载器 ,与平台加载器不同。

13510

JVM加载过程科普

主要做三件事 通过一个的全限定名获取定义此类的二进制字节流 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个java.lang.Class 对象,作为方法区这个的各种数据的访问入口...这个过程呢,也主要是依靠加载器来完成的 加载器 引导加载器: Bootstrap ClassLoader 启动 c/c++ 语言实现的,嵌套在 JVM 内部 用来加载 Java 核心库(...6 中情况下会进行初始化 遇到 new、getstatic、putstatic invokestatic 时,如果初始化则先初始化( 1. new 2.读取设置一个的静态字段 (被 final...调用一个的静态方法 ) 使用 java.lang.reflect 包的方法对进行反射调用时,如果初始化则先初始化 当初始化时,如果其父初始化则先触发其父初始化 当虚拟机启动时,用户需要指定一个要执行的主...,需要先初始化 当有 默认方法 接口实现发生了初始化,则该接口要在其初始化之前初始化 而我们的 main 方法满足 1 条 invokestatic 初始化过程中会对所有的变量进行赋值操作,会执行静态代码块

74590

JVM加载过程科普

主要做三件事 通过一个的全限定名获取定义此类的二进制字节流 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个java.lang.Class 对象,作为方法区这个的各种数据的访问入口...这个过程呢,也主要是依靠加载器来完成的 加载器 引导加载器: Bootstrap ClassLoader 启动 c/c++ 语言实现的,嵌套在 JVM 内部 用来加载 Java 核心库(...6 中情况下会进行初始化 遇到 new、getstatic、putstatic invokestatic 时,如果初始化则先初始化( 1. new 2.读取设置一个的静态字段 (被 final...调用一个的静态方法 ) 使用 java.lang.reflect 包的方法对进行反射调用时,如果初始化则先初始化 当初始化时,如果其父初始化则先触发其父初始化 当虚拟机启动时,用户需要指定一个要执行的主...,需要先初始化 当有 默认方法 接口实现发生了初始化,则该接口要在其初始化之前初始化 而我们的 main 方法满足 1 条 invokestatic 初始化过程中会对所有的变量进行赋值操作,

72220

《深入理解java虚拟机》笔记(8)的加载机制

一、加载机制 加载器将的.class文件中的二进制数据读入到内存中,将其放在方法区内,然后在堆区创建一个java.lang.Class对象,用来封装在方法区内的数据结构。...在Java堆中生成一个代表这个java.lang.Class对象,作为对方法区中这些数据的访问入口。...4、解析 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对接口、字段、方法、接口方法、方法类型、方法句柄和调用点限定符7符号引用进行。...接口不同的是,接口不需要先执行父的()方法,只有父接口定义的变量使用时,父接口才会被初始化。另外接口实现也不会先执行接口的()方法。...加载器的层次关系图(这里父加载器并不是通过继承关系来实现的,而是采用组合实现的): 加载器大致可分为三: 启动加载器(Bootstrap ClassLoader),负责加载存放在$JAVA_HOME

19550

一文搞懂 java -jar 发生了什么

在这里我们的 Test 并没有明确的父 ,JVM就把 Test 加载到 JVM 的内存中形成一个 java.lang.Class 对象 而对象在JVM 中的内存布局如下: ?...) 解析 准备阶段完成之后,开始解析,主要做一件事 将常量池中的符号引用转化为直接引用 主要针对接口、字段、方法、接口方法等 凡是在此阶段可以解析的方法引用都成为静态解析,调用的时候就叫静态调用...初始化的几种情况: 遇到 new、getstatic、putstatic invokestatic 时,如果初始化则先初始化( 1. new 2.读取设置一个的静态字段 (被 final 修饰...调用一个的静态方法 ) 使用 java.lang.reflect 包的方法对进行反射调用时,如果初始化则先初始化 当初始化时,如果其父初始化则先触发其父初始化 当虚拟机启动时,用户需要指定一个要执行的主...,需要先初始化 当有 默认方法 接口实现发生了初始化,则该接口要在其初始化之前初始化 接口并不要求父接口全都完成初始化,只有在真正使用到 父接口 的时候才会初始化 初始化其实就是调用构造器(

1.2K40

技术转载——详解Java 的加载、连接和初始化

程序运行到使用 system.exit() Runtime.getRuntime().exit() 代码处结束程序。 程序执行过程中遇到捕获的异常错误而结束。...如果没有意外,JVM 将会连续完成这三个步骤,所以有时也把这三个步骤统称为加载初始化。...加载指的是将的 class 文件读入内存,并为之创建一个 java.lang.Class 对象,也就是说,当程序中使用任何时,系统都会为之建立一个 java.lang.Class 对象。...当程序主动使用任何一个时,系统会保证该类以及所有父(包括直接父和间接父〕都会被初始化。 初始化的时机 当 Java 程序首次通过下面6种方式来使用某个接口时,系统就会初始化该类接口。...访问某个接口变量,或为该类变量赋值。 使用反射方式来强制创建某个接口对应的 java.lang.Class 对象。

41620

Java常用的使用

可以继承实现, 也可用匿名内部类 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:是属于挽救的比较器,除了可以实现排序的功能之外

13310

c#面试题抽象接口的区别-Java软件工程师的面试题及答案

即只允许输入单字符整数。   5.接口可以继承接口吗?   可以。而且可以实现多个接口接口可以继承多个接口,但一个不能继承多个。   6.接口和抽象的区别?   ...抽象定义了是什么,接口定义了可以做什么,一个只能继承一个抽象,但一个可以实现多个接口。比如动物是猫的抽象,猫继承了动物的抽象就不能继承植物的抽象,决定了猫只能是动物了。...接口吃和接口睡,猫都可以实现,因为猫既会吃也会睡,实现接口决定了猫具有相应的功能。   7.java里有哪些循环?   ...(1)加载JDBC驱动程序,通过java.lang.Class的静态方法()实现,提供JDBC连接的URL,用户名,密码。   ...(4)执行sql语句   1)执行查询数据库的sql,返回结果集   2)执行更新添加删除建表删表等   3)用于执行返回多个结果集,多个更新计数两者组合的语句。

44420

JVM加载、验证、准备、解析、初始化、卸载过程详解

,然后创建对应java.lang.Class实例。...在这个过程中,JVM会初始化继承树上还没有被初始化过的所有父,并且会执行这个链路上所有执行过的静态代码块、静态变量赋值语句等。 某些在使用时,也可以按需由加载器进行加载。...InstantiationException异常; 如果此构造方法没有权限访问,则拋 IllegalAccessException异常 Java 通过加载器把实现的定义进行解耦,所以是实现面向接口编程...的初始化时机 Java程序对的使用方式分为: 主动使用 被动使用 JVM必须在每个接口“首次主动使用”时才初始化它们,被动使用不会导致的初始化。...主动使用的场景: 创建实例 访问某个接口的静态变量 如果是 final 常量,而常量在编译阶段就会在常量池,没有引用到定义该常量的,因此不会触发定义该常量的初始化 调用的静态方法 反射某个

26420

高并发之——线程与多线程

二、实现线程的方式 在Java中,实现线程的方式大体上分为三种,通过继承Thread实现Runnable接口实现Callable接口。简单的示例代码分别如下所示。...() { //TODO 在此写在线程中执行的业务逻辑 } } 实现Runnable接口代码 package io.binghe.concurrent.executor.test...WAITING:表示等待状态,处于该状态的线程需要等待其他线程对其进行通知中断等操作,进而进入下一个状态。 TIME_WAITING:超时等待状态。可以在一定的时间自行返回。...此线程会在一个while(true)循环中,获取当前Class对象的synchronized锁,也就是说,这个无论创建多少个实例,synchronized锁都是同一个,并且线程会处于等待状态。...可以看到,输出任何结果信息。可以在命令行输入“jps”命令来查看运行的Java进程。

32030

Java学习历程之————进阶篇(五)

的 newlnstance() 实例方法来创建对象,代码格式如下: java.lang.Class Class 对象名称 = java.lang.Class.forName(要实例化的全称...); 名 对象名 = (名)Class对象名称.newInstance(); 调用 java.lang.Class 中的 forName() 方法时,需要将要实例化的的全称...1.3、调用对象的 clone() 方法 该方法不常用,使用该方法创建对象时,要实例化的必须继承 java.lang.Cloneable 接口。...2.3 提示:的加载是指把的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装在方法区内的数据结构...源码如下: package second.Test5; import java.lang.*; public class People implements Cloneable { // 实现

16610
领券