我在向朋友解释的时候是这么说的:双亲委派模型中,ClassLoader 在加载类的时候,会先交由它的父 ClassLoader 加载,只有当父 ClassLoader 加载失败的情况下,才会尝试自己去加载...这样可以实现部分类的复用,又可以实现部分类的隔离,因为不同 ClassLoader 加载的类是互相隔离的。...不过贸然的向别人解释双亲委派模型是不妥的,如果在不了解 JVM 的类加载机制的情况下,又如何能很好的理解“不同 ClassLoader 加载的类是互相隔离的”这句话呢?...所以为了理解双亲委派,最好的方式,就是先了解下 ClassLoader 的加载流程。 Java 类是如何被加载的 2.1:何时加载类 我们首先要清楚的是,Java 类何时会被加载?...再谈双亲委派 如果你耐心的看完了上面的源码分析,你一定对 “不同ClassLoader加载的类是互相隔离的” 这句话的理解又上了一个台阶。
你真的知道 Java 类是如何被加载的吗?...我在向朋友解释的时候是这么说的:双亲委派模型中,ClassLoader在加载类的时候,会先交由它的父ClassLoader加载,只有当父ClassLoader加载失败的情况下,才会尝试自己去加载。...不过贸然的向别人解释双亲委派模型是不妥的,如果在不了解JVM的类加载机制的情况下,又如何能很好的理解“不同ClassLoader加载的类是互相隔离的”这句话呢?...所以为了理解双亲委派,最好的方式,就是先了解下ClassLoader的加载流程。 二:Java 类是如何被加载的 2.1:何时加载类 我们首先要清楚的是,Java类何时会被加载?...更多面试题,欢迎关注公众号 Java面试题精选 三:再谈双亲委派 如果你耐心的看完了上面的源码分析,你一定对 “不同ClassLoader加载的类是互相隔离的” 这句话的理解又上了一个台阶。
好问题,默认的ClassLoader只知道如何从本地的文件系统中加载类文件。一般场景下,当你在本地编写代码并且在本地编译时,完全足够了。...在Sun发布Java语言的时候,最令人兴奋的事情之一就是观察这项技术是如何执行从远程Web服务器及时加载代码的。它们是通过来自远程的Web服务器的HTTP连接发送字节码并在本地运行,这一点令人兴奋。...你会了解到每个方法的用途以及它在类加载过程中是如何调用的。你还会了解当你在自定义ClassLoader时需要完成的工作。...但是,有一种情况是不会在第一次调用时编译所有类的的。如果你通过类名Class.forNasme加载一个类,Java编译器不知道该类需要哪些信息。在这种场景下,你会看到CCL会再次运行Java编译器。...默认的实现会先调用父类的实现,在自己加载。但是这种模式是可以改变的。所有的ClassLoader的根节点是系统ClassLoader。它默认会从文件系统中加载类。
不要说你在 IDE 中写的时候就会爆红。细品。还有一个例子,就是你定义的 final 的变量。你在编写的时候,是必须要初始化,而且不允许再被修改的,这个值有没有被改过,也是在这个阶段来检查的。...这一步比较关键的内容就是生成 方法和 方法。类构造器和实例构造器。这个实例构造器和我们代码中的构造函数不同。 和 的作用主要是代码收敛,比如 可以确定父类的 static 代码块一定先于子类执行。...>()方法与类的构造函数(即在虚拟机视角中的实例构造器()方法)不同,它不需要显式地调用父类构造器,Java虚拟机会保证在子类的()方法执行前,父类的()方法已经执行完毕...类之间的比较,前提条件是同一个类加载器。如果由不同类加载器加载的相同完全限定名的类,那他们也是完全不同的(打标的原因其二)。也不能这样去做比较。...如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。 双亲委派模型 ?
JAVA8的 ConcurrentHashMap 为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。...所以如果创建一个java.lang.String的类,是不能被类加载器加载的。因为虚拟机会抛出异常。 说到类加载,就必须对类加载机制非常熟悉。...类加载使用的是双亲委派模型,当你想要加载一个类的时候,必须先给你的父加载器,它再去想办法加载,如果它不能加载,再告诉我们,我们自己想办法。...4.5 JVM 中一次完整的 GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的 JVM 参数。...系统下你关注过哪些内核参数,说说你知道的。
1、类加载过程 其实关于类加载过程是分为5个阶段的: 加载,验证,准备,解析,初始化 接下来我们看一下这五个阶段: 1.1 加载 JVM 在该阶段的主要目的是将字节码从不同的数据源(可能是 class...系统运行时,是由类加载器将 .class 文件的二进制数据从外部存储器(如光盘,硬盘)调入内存中,CPU再从内存中读取指令和数据进行运算,并将运算结果存入内存中的,显然类加载器是很重要的第一步。...它负责加载系统类路径java -classpath或-D java.class.path 指定路径下的类库,也就是我们经常用到的classpath路径,开发者可以直接使用系统类加载器,一般情况下该类加载是程序中默认的类加载器...在 Java 的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,需要注意的是,Java 虚拟机对 class 文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的...可能你会想,如果我们在 classpath 路径下自定义一个名为 java.lang.SingleInterge 类(该类是胡编的)呢?
因为你被绿了(default不支持不同包的子类); 可为了大局,你还是选择接受这个孩子,悄悄把方法设置成了proteced(保护子类,即使不同包); 后来你老了,明白了开源才是共赢,就设置成了public...在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次,可以用来优化程序性能 通俗理解: static是一个可以让你升级的关键字,被static修饰,你就不再是你了。...—>父类代码块——>父类构造器——>子类代码块——>子类构造器 泛型 泛”就是宽泛,泛指的意思,所谓泛型就是不指定具体类型,而是作为参数传递。...你只需要知道如何去操作他们,并不需要知道他们里面是怎么构造的,怎么实现这个功能的。 2.如何实现封装 在程序设计里,封装往往是通过访问控制实现的。也就是刚才提到的访问修饰符。...好比只要你手机的充电接口不变,无论以后手机怎么更新,你依然可以用同样的数据线充电或者与其他设备连接。 封装的设计使使整个软件开发复杂度大大降低。我只需要使用别人的类,而不必关心其内部逻辑是如何实现的。
1.面对对象与面对过程的区别 什么是封装?我看到过这样一个例子: 我要用洗衣机洗衣服,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内 部的结构吗?有必要碰电动机吗?...有必要了解如何通电的吗? 如果是对于面向过程来说,这些你都得知道。“吾生也有涯,而知也无涯”,面向对象的封装与庄子的思想遥相呼应:用有限的时间去做更适合的事情。...特性: 子类具有父类非private的属性和方法 子类可以扩展自己的属性和方法 构造器的继承问题 构造器是不会被子类继承的,但子类的对象在初始化时会默认调用父类的无参构造器。...当父类显示写了有参构造器,且没有无参构造器。子类继承父类的时候必须显示的调用父类的有参构造器。调用的方式可以使用super(a,b)来调用。...子类对象实例化过程 new出一个子类对象的时候,必须先new出一个父类对象。子类在调用构造方法时,会先调用父类的构造方法。(默认) 如果不写构造方法,编译器默认加上一个无参构造器。
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 4. ...初始化 初始化时类加载的最后一步,前面的类加载过程,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。...虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的 java 类型。 19. 类加载器双亲委派模型机制?...当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父类,由父类去加载,如果此时父类不能加载,反馈给子类,由子类去完成类的加载。 20. 什么是类加载器,类加载器有哪些 ?...实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。 主要有一下四种类加载器 : 1.
在社区内有一个激烈的讨论,即事件总线是否是一个好的解决方案,或者说监听器回调是否是真正的解决方案。无论如何,这种技术,作为监听器接口,也避免了数据丢失,并保持代码中的职责分离。...在使用事件总线时,你应该注意的另一件大事是与这种机制的一对多性质有关。相对于监听器的方法,你只有一个事件的订阅者,在事件总线的方法中,你可能会发现自己有许多订阅者,但并不是所有的订阅者你都知道的。...在基于数据变化而更新UI的情况下,比如在我们的例子中,我不认为有理由使用事件总线,但在这种方法和之前的监听器接口的方法中,我会选择后者。...Summary 在回顾了解决同一任务的不同方法后,我们可以把LiveData看作是界面监听器和基于事件的解决方案的混合体,从每个解决方案中吸取精华。...我希望你能从这篇文章中获得一些关于LiveData的知识,了解它在哪些情况下可以提供帮助,如何使用它,以及为什么它可能是一个比其他现有方法更好的解决方案。有其他想法吗?有更好的解决方案吗?
其中涉及到的类初始化、类锁、线程安全、kotlin语法知识? 静态变量实现单例——饿汉 保证一个实例很简单,只要每次返回同一个实例就可以,关键是如何保证实例化过程的线程安全?...这里先回顾下类的初始化。 在类实例化之前,JVM会执行类加载。 而类加载的最后一步就是进行类的初始化,在这个阶段,会执行类构造器方法,其主要工作就是初始化类中静态的变量,代码块。...在同一个类加载器下,一个类型只会被初始化一次,一共有六种能够触发类初始化的时机: 1、虚拟机启动时,初始化包含 main 方法的主类; 2、new等指令创建对象实例时 3、访问静态方法或者静态字段的指令时...(是真饿了,先实例化出来放着吧,要吃的时候就可以直接吃了) 缺点就是 有可能造成资源浪费(到最后,饭也没吃上,饭就浪费了) 但其实这种模式一般也够用了,因为一般情况下用到这个实例的时候才会去用这个类,很少存在需要使用这个类但是不使用其单例的时候...静态内部类是延时加载的,意思就是说只有在明确用到内部类时才加载。只使用外部类时不加载。
printf是无缓冲输出。有输出时立即输出 128、你知道重载运算符吗?...因为在编译时模板并不能生成真正的二进制代码,而是在编译调用模板类或函数的CPP文件时才会去找对应的模板声明和实现,在这种情况下编译器是不知道实现模板类或函数的CPP文件的存在,所以它只能找到模板类或函数的声明而找不到实现...y = x^y; x = x^y; x ^= y ^= x; 142、你知道strcpy和memcpy的区别是什么吗? 1、复制的内容不同。...This指针首先入栈,然后成员函数的参数从右向左进行入栈,最后函数返回地址入栈。 153、你知道静态绑定和动态绑定吗?讲讲? 1) 对象的静态类型:对象在声明时采用的类型。是在编译期确定的。...167、你知道数组和指针的区别吗?
问题 为什么必须要一级一级类加载器的往上找,直接从顶层类加载器开始找不就行了吗?...至于为什么不直接从顶层类加载器开始找,那是因为类加载器本身就是做的父子关系模型 你想一下Java代码实现,他最底下的子类加载器,只能通过自己引用的父类加载器去找。...问题 class文件分配内存是在准备阶段,那类的class对象是在准备阶段创建的吗? 如果实例变量有初始值,那实例变量是和类变量一同在初始化阶段赋值的吗?...问题 双亲委派可以解决类重复加载的问题。按照文章中介绍每个类加载器有不同的类加载路径,这些类加载路径是否可能重叠? 解答 不同类加载器的路径,一般是不会重叠的 ? 问题十五 ?...否则如果没有双亲委派机制,那么岂不是两个不同层级的类加载器可以加载同一个类,造成类的重复加载! ? 问题二十三 ? 问题 自定义类加载器如何实现?
我们既然知道了一个Java类的生命周期。那么一个类在什么时候被加载呢?类加载的时机是什么?什么是主动引用?什么是被动引用呢? 在Java的虚拟机规范中,没有对加载阶段作出明确约束。...扩展: 比较两个类是否相等的前提条件:两个类必须是同一个类加载器加载的。如果没有这个前提条件。比较的话,就是耍流氓。 比如:我要给你货币(法币):30000.当听到这个时候你是不是会很高兴呢?...我们知道Son这个类编译成class文件后,所在目录是在classpath下的。所以,引导类启动加载器是肯定找不到的。...具体的完整的初始化顺序(存在父类情况下): 父类的静态变量 父类的静态代码块 子类的静态变量 子类的静态代码块 父类非静态变量 父类非静态代码块 父类的构造器 子类的非静态变量 子类的非静态代码块 子类的构造器...与类不同的是,执行接口的()方法不需要先执行父接口的()方法。
JVM,它会加载classpath环境变量或 -classpath以及-cp命令行参数中指定的文件 当然,上面是 Java 默认的类加载器,我们还可以自定义类加载器,后文会分析如何自定义类加载器。...「可见性原则」 体现在允许子类加载器查看父类加载器加载的所有类,但是父类加载器不能查看子类加载器加载的类。...ClassLoader 如何工作 聊完双亲委派模型,你肯定想知道它是如何实现,那么来看一下 ClassLoader 的核心方法,其中的 loadClass 方法就是实现双亲委派机制的关键,为了缩短代码篇幅和方便阅读...而Tomcat 的自定义类加载器 WebAppClassLoader 解决了这个问题,每一个 web 应用都会对应一个 WebAppClassLoader 实例,不同的类加载器实例加载的类是不同的,Web...Java 类是如何被加载的吗?
特别是它如何将 xml 布局文件中的 TextView 替换成 AppCompatTextView 的呢? 这篇文章将深入探索 AppCompatActivity 的 视图加载 过程。...(); getDelegate() 根据 api 版本的不同返回对应的代理类(AppCompatDelegateImplV14, AppCompatDelegateImplV23, AppCompatDelegateImplN...文档中是这样描述的:它不能为空,且只能被设置一次;在设置之后,你不能对 Factory 进行改变 。...这个方法很强大,它可以让你的 App 使用 Material Design Components 这样的类库,却仅仅只需要设置合适的主题。...支持 app:theme 从 Android 5.0 开始,可以给 View 设置 app:theme 以覆盖特定 View 及其子类的属性。
扩展类加载器的任务是从扩展材料库$JAVA_HOME/jre/lib/ext获取扩展材料。应用类加载器的任务是从建筑工地周围(系统类路径CLASSPATH)收集所需的特定材料。...为了你加深对它们的印象,我了一张关于这三个的类加载器树图,你可以暂停看一下: 图片 --- 常见面试题 什么是类加载器(ClassLoader),类加载器有哪些? 能简单描述一下类的生命周期吗?...它们在JVM中的状态有哪些? 什么是双亲委派模型?这种模型有什么优点? 请解释一下引导类加载器、扩展类加载器和应用类加载器的区别?...并且为你解答了一些类加载器过程中遇到的问题,带你重新回顾了一下,本篇文章的三位主人公,它们分别是:引导类加载器,扩展类加载器,应用类加载器。最后我留了几道面试题,不知道你是否都能答上来呢。...类加载器可以自己定义吗?如何实现? 什么情况下需要使用自定义类加载器?你是否了解ServiceLoader和SPI机制?后面一篇我会回答这些问题,敬请期待。
Linux下如何进行进程调度的? Linux下你常用的命令有哪些? 操作系统什么情况下会死锁? 常用的hash算法有哪些? 什么是一致性哈希? 如何理解分布式锁? 数据库中的范式有哪些?...你知道的开源协议有哪些? 你知道的开源软件有哪些? 你最近在看的书有哪些? 你有什么问题要问我吗? 了解哪些设计模式?说说都用过哪些设计模式 如何判断一个单链表是否有环? 操作系统如何进行分页调度?...java虚拟机的区域如何划分,每一个区的动能,这一块自由发挥。 双亲委派模型中,从顶层到底层,都是哪些类加载器,分别加载哪些类? 有没有可能父类加载器和子类加载器,加载同一个类?...如果加载同一个类,该使用哪一个类? HashMap的结构,get(),put()是如何实现的?HashMap有哪些问题? ConcurrentHashMap的get(),put(),又是如何实现的?...你平常用什么排序?快速排序。说说在那些场景下适用,哪些场景下不适用。 你在项目中做什么?因为我用到Solr,他就问我Solr是如何工作的?
外加几种不会初始化的例子: (1)、同类子类引用父类的静态字段,不会导致子类初始化。至于是否会触发子类的加载和验证,则取决于虚拟机的具体实现。 (2)、通过数组定义来引用类,也不会触发类的初始化。...现在我们再来看看虚拟机是根据什么来重载选择哪个方法的。 对于静态类型相同,但实际类型不同的变量,虚拟机在重载的时候是根据参数的静态类型而不是实际类型作为判断选择的。...像重写就是动态分派的典型应用了。 更多的详情可以看我之前写的一篇文章从jvm角度看懂类初始化、方法重载、重写。 3、如何⾃定义⼀个类加载器?你使⽤过哪些或者你在什么场景下需要⼀个⾃定义的类加载器吗?...可以把自己自定义的类加载器继承 ClassLoader,然后重写 findClass() 方法,把自己的类加载逻辑写到 findClass() 方法中去。...使用类加载器的场景: 加载特定路径的 class 文件 热部署加载 class 文件 从网络中加载一个加密的 class 文件
领取专属 10元无门槛券
手把手带您无忧上云