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

我们是否必须在静态类上创建新的

类加载器才能加载类?

答案:是的,必须在静态类加载器上创建新的类加载器才能加载类。

解释:在Java中,类加载器分为三种:引导类加载器、扩展类加载器和应用类加载器。它们之间的关系如下:

  • 引导类加载器主要负责加载Java的核心类库,如java.lang.Object等。
  • 扩展类加载器主要负责加载Java的扩展类库,如java.sql.DriverManager等。
  • 应用类加载器主要负责加载用户程序的类,如MyClass.class等。

当需要加载一个类时,如果该类没有被加载到引导类加载器中,那么将交给扩展类加载器尝试加载;如果扩展类加载器也无法加载该类,那么将交给应用类加载器尝试加载。

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中。如果父类加载器无法完成这个加载(因为在其类路径下没有找到所需的类),那么子类加载器才会尝试自己去加载。

因此,如果一个类在运行时只有一个类加载器可以加载这个类,那么就需要在静态类加载器上创建一个新的类加载器来加载这个类。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】static关键字及其修饰静态成员变量函数详解

静态成员变量和对象和其成员变量关系如下图: 静态成员变量必须在外定义,定义时不添加static关键字,中只是声明 静态成员即可用 名::静态成员 或者 对象.静态成员 来访问 静态成员函数没有隐藏...实现一个可以计算程序中正在使用对象有多少 我们可以利用对象创建调用构造,而销毁调用析构函数特性,在创建一个static对象来记录对象创建数/销毁数。...-析构函数静态成员变量 设计一个,在外面只能在栈/只能在堆上创建对象 如下,我们平常创建对象时候,如果不加以限制,则对象可能被创建在不同内存区域: class A { public...//对象在栈 A* ptr = new A; //对象在堆 return 0; } 但假如我们遇到了某种场景,即我们创建这个,只希望它在栈创建对象/只希望它在堆上创建对象时...其次,我们在主函数创建一个n个Sum数据数组,这意味着将要创建n个Sum对象,则Sum构造函数会被调用n次。

1.7K11

Java 基础高频面试题(2021年最新版)

通过new创建,在内存中指向两个不同对象 System.out.println(i1 == i2); equals:Object 中定义方法,通常用于比较两个对象是否相等。...静态变量存在于方法区中。 成员变量与对象共存亡,随着对象创建而存在,随着对象被回收而释放。静态变量与共存亡,随着加载而存在,随着消失而消失。 成员变量所属于对象,所以也称为实例变量。...20、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法调用? 区分两种情况,发出调用时是否显示创建了对象实例。...1)没有显示创建对象实例:不可以发起调用,非静态方法只能被对象所调用,静态方法可以通过对象调用,也可以通过名调用,所以静态方法被调用时,可能还没有创建任何实例对象。...如果我们合理使用线程池,则可以避免把系统搞崩窘境。总得来说,使用线程池可以带来以下几个好处: 降低资源消耗。通过重复利用已创建线程,降低线程创建和销毁造成消耗。 提高响应速度。

51120

深度讲解React Props

如果函数组件需要props功能,一定不能缺少该形参声明,在react组建中,使用constructor 获取Componentprops属性当组件继承了父props后,就可以通过this.props...props) { super(props); } render() { return 我是组件B {this.props.name} }}继承子类必须在...既然如此,我们就借用ES6中展开运算符(...),就是三个点这玩意。我们直接先定义好传递参数,然后再传递。..., // 限制name传,且为字符串}16版本之后,单独作为一个库使用写法一: 给组件class设置属性 propTypesimport React, {Component} from 'react'import...this.changeWeather是原型方法,通过bind改变this之后生成方法放在了实例自身上,导致了实例中也有changeWeather这个方法,这样就能进行调用了 this.changeWeather

2.3K40

深度讲解React Props_2023-02-28

super(props); } render() { return 我是组件B {this.props.name} } } 继承子类必须在...既然如此,我们就借用ES6中展开运算符(...),就是三个点这玩意。 我们直接先定义好传递参数,然后再传递。..., // 限制name传,且为字符串 } 16版本之后,单独作为一个库使用 写法一: 给组件class设置属性 propTypes import React, {Component} from '...// this.changeWeather是原型方法,通过bind改变this之后生成方法放在了实例自身上,导致了实例中也有changeWeather这个方法,这样就能进行调用了 this.changeWeather...props,是否传递给super, 取决于:是否希望在构造器中通过this访问props 五、三方库prop-types使用 基础类型验证 PropTypesDemo.propTypes = {

2K20

夯实Java基础系列12:深入理解Java中反射机制

,那么必须在enum实例序列最后添加一个分号。..."), WINTER("winter"); // 定义实例对应参数 private String msg; // 写:通过此构造器给枚举值创建实例 SeasonType...private Integer key; private String msg; // 写:通过此构造器给枚举值创建实例 Season(Integer key, String...n 个,因为声明每一个枚举值都会调用构造函数去创建实例,所以参数一定是一一对应;既然明白了这一点,那么我们只需要在枚举中把这 n 个参数定义为 n 个成员变量,然后提供对应 get() 方法,...(比如实战二中枚举或其它枚举都行,只要使用得当都可以使用此方法) values() 获取枚举所有枚举值(比如在实战三中就使用到了) 总结 枚举本质是通过普通来实现,只是编译器为我们进行了处理

1.6K00

还在使用SimpleDateFormat?

先看看《阿里巴巴开发手册》对于SimpleDateFormat是怎么看待 问题复现 一般我们在使用SimpleDateFormat时候会把它定义为一个静态变量,避免频繁创建它们对象实例,代码如下...其实SimpleDateFormat源码作者也给过我们提示: 翻译过来意思就是: 日期格式未同步。 建议为每个线程创建单独格式实例。...如果多个线程同时访问格式,则必须在外部同步 解决方案 只在需要时候创建实例,不用static修饰。...如上代码,仅在需要用到地方创建一个实例,就没有线程安全问题,不过也加重了创建对象负担,会频繁地创建和销毁对象,效率较低。...DateTimeFormatter源码作者也加注释说明了,他是不可变,并且是线程安全。 OK,现在是不是可以对你项目里日期工具进行一波优化了呢?

52740

来了来了它来了,100条背JAVA知识点(下)

55、子类对象实例化过程: 从结果看:子类继承父以后,就获取了父中声明属性或方法,创建子类对象,就会在堆空间中加载父中声明属性。...从过程看:通过子类构造器创建子类对象时,一定会直接或间接调用其父构造器,进而调用父构造器,直到调用了java.lang.Object中空参构造器为止。...61、当我们输出一个对象引用时,实际就是调用当前对象toString()。...如下: 83、接口使用上也满足多态性,接口,实际就是定义了一种规范,下面这个例子可以帮你深刻理解并记住接口! 85、Java中关于接口规范 ①接口中定义静态方法,只能通过接口来调用。...④如果实现实现了多个接口,而这多个接口中定义了同名同参数默认方法,那么在实现没重写此方法情况下,报错。–>接口冲突。这就需要我们须在实现中重写此方法。

66010

夯实Java基础系列14:深入理解Java枚举

,那么必须在enum实例序列最后添加一个分号。..."), WINTER("winter"); // 定义实例对应参数 private String msg; // 写:通过此构造器给枚举值创建实例 SeasonType...private Integer key; private String msg; // 写:通过此构造器给枚举值创建实例 Season(Integer key, String...n 个,因为声明每一个枚举值都会调用构造函数去创建实例,所以参数一定是一一对应;既然明白了这一点,那么我们只需要在枚举中把这 n 个参数定义为 n 个成员变量,然后提供对应 get() 方法,...(比如实战二中枚举或其它枚举都行,只要使用得当都可以使用此方法) values() 获取枚举所有枚举值(比如在实战三中就使用到了) 总结 枚举本质是通过普通来实现,只是编译器为我们进行了处理

36600

夯实Java基础系列14:深入理解Java枚举

,那么必须在enum实例序列最后添加一个分号。..."), WINTER("winter"); // 定义实例对应参数 private String msg; // 写:通过此构造器给枚举值创建实例 SeasonType...private Integer key; private String msg; // 写:通过此构造器给枚举值创建实例 Season(Integer key, String...n 个,因为声明每一个枚举值都会调用构造函数去创建实例,所以参数一定是一一对应;既然明白了这一点,那么我们只需要在枚举中把这 n 个参数定义为 n 个成员变量,然后提供对应 get() 方法,...(比如实战二中枚举或其它枚举都行,只要使用得当都可以使用此方法) values() 获取枚举所有枚举值(比如在实战三中就使用到了) 总结 枚举本质是通过普通来实现,只是编译器为我们进行了处理

50620

创建型模式(二)

关于创建型模式中工厂方法模式,抽象工厂模式在上一篇文章中我们了解了一下,今天我们看一下单例模式,建造者模式,原型模式。 ?...单例模式 单例模式我们很多,我想大家也都理解这种模式,就是保证一个仅有一个实例,并提供一个访问它全局访问点。...这种模式涉及到一个单一,该类负责创建自己对象,同时确保只有单个对象被创建。这个提供了一种访问其唯一对象方式,可以直接访问,不需要实例化该类对象。...2、如内部变化复杂,会有很多建造。 建造者模式举例:去肯德基点餐,我们可以认为点餐就属于一个建造订单过程。...,可以为 Builder 添加构造函数来保证传参数不会遗漏,例如在构建一个 http 请求时, url 是: public class RequestBuilder{ private

28610

java面试强基(6)

继承是使用已存在定义作为基础建立新技术,定义可以增加数据或功能,也可以用父功能,但不能选择性地继承父。 ​...通过使用继承,可以快速地创建,可以提高代码重用,程序可维护性,节省大量创建时间 ,提高我们开发效率。...多态特点: 对象类型和引用类型之间具有继承()/实现(接口)关系; 引用类型变量发出方法调用到底是哪个方法,必须在程序运行期间才能确定; 多态不能调用“只在子类存在但在父不存在”方法...如果你想要调用父静态方法和属性,直接通过父名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在”隐藏”这种情况。 2)....重写了 equals()方法 :一般我们都重写 equals()方法来比较两个对象中属性是否相等;若它们属性相等,则返回 true(即,认为这两个对象相等)。 举个例子(这里只是为了举例。

51561

温故而知:周末复习一下 Android & Java 面试题

谈谈冷启动与热启动 app冷启动: 当应用启动时,后台没有该应用进程,这时系统会重新创建一个进程分配给该应用,这个启动方式就叫做冷启动((后台不存在该应用进程) 冷启动因为系统会重新创建一个进程分配给它...,所以会先创建和初始化Application,再创建和初始化MainActivity(包括一系列测量、布局、绘制),最后显示在界面上。...冷启动流程 当点击app启动图标时,安卓系统会从Zygote进程中fork创建出一个进程分配给该应用,之后会依次创建和初始化Application创建MainActivity、加载主题样式...但凡是对集合操作,我们应该保持一个原则就是能用JDK中API就用JDK中API,比如排序算法我们不应该去用冒泡或者选择 , 而 是首先想到用 Collections 集合工具 。...age 倒序进行排 return o2.getValue().getAge()-o1.getValue().getAge(); } }); //创建一个有序

65000

Android面试知识笔记:那些年面试官常问知识点...(附详细解析)

image.png 有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你理解,例如Handler机制,这个是面试问之题。...Activity启动模式 standard:标准模式,默认启动模式,不管是否已经存在实例都会生成实例 singleTop:栈顶复用模式,如果发现有对应Activity实例正位于栈顶,则直接打开此页面...而Dialog则必须在一个Activity上面弹出(除非是System Alert类型Dialog),因此在这种场景下,我们只能使用Activity类型Context,否则将会出错。...从顶层父View向子View递归调用 layout 方法过程,即父View根据一步 measure 得到布局大小和布局参数,将子View放在合适位置。 第三步:onDraw 绘制视图。...非静态内部类创建实例引起创建静态实例 非静态匿名内部类引起: 将匿名内部类修改为静态 注册/反注册未成对使用引起内存泄漏 注册广播接受器、EventBus等,记得解绑 资源对象没有关闭引起内存泄漏

48200

oracle11g数据库导入导出方法教程

oracle11g数据库导入/导出,就是我们通常所说oracle数据还原/备份。...,降低难度,减少服务器操作也就 保证了服务器数据文件安全性。...2.expdp/impdp: 优点:导入导出速度相对较快,几个G数据文件一般在1~2小时左右。 缺点:代码相对不易理解,要想实现导入导出操作,必须在服务器创建逻辑目录(不是真正目录)。...三、特别强调: 目标数据库:数据即将导入数据库(一般是项目正式数据库); 源数据库:数据导出数据库(一般是项目测试数据库); 1.目标数据库要与源数据库有着名称相同表空间。...6.目标数据导入前,弄清楚是数据覆盖(替换),还是仅插入数据或替换部分数据表。 7.确定目标数据库磁盘空间是否足够容纳新数据,是否需要扩充表空间。

1.5K40

2019年全网最热门123个Java并发面试题总结

前言 并发编程几乎是所有互联网公司面试问题,并发编程是Java程序员最重要技能之一,也是最难掌握一种技能。...70、为什么 wait(), notify()和 notifyAll ()必须在同步方法或者同步块中被调用? 71、为什么 Thread sleep()和 yield ()方法是静态?...73、同步方法和同步块,哪个是更好选择? 74、如何创建守护线程? 75、什么是 Java Timer ?如何创建一个有特定时间间隔任务? Java 并发编程(二) 1、并发编程三要素?...有哪几种创建方式? 9、四种线程池创建: 10、线程池优点? 11、常用并发工具有哪些?...43、单例模式线程安全性 44、Semaphore 有什么作用 45、Executors 是什么? 46、线程构造方法、静态块是被哪个线程调用 47、同步方法和同步块,哪个是更好选择?

68700

同学你根本不懂 Builder 设计模式!

Builder 设计模式实现方法是在目标创建一个静态内部类 Builder,然后将目标参数都复制到Builder中。在目标创建一个私有的构造函数,参数为 Builder类型。...使用 Builder 设计模式,我们可以在 Computer创建一个静态内部类 Builder,然后在 Builder中提供设置各个属性方法,并返回当前对象。...} } 使用这种方式,我们可以灵活地创建不同配置 Computer 对象,例如: //创建一个只有cpu和ramComputer对象 Computer computer1 = new Computer.Builder...this.id = id; this.name = name; this.address = address; } // 省略其他方法 //builder()方法,创建构建器实例...Builder 设计模式好处不仅是链式编程,更重要是,可以通过 Builder 模式构造方法来控制传参数,还可以在设置参数方法或者在 build 方法中进行传参数和参数合法性校验等。

1.2K10

java工程师需要掌握技能_java软件工程师需要学什么

.静态代码块 final: 1.修饰属性,作用:修饰静态变量不可变,不建议修饰实例变量 2.修饰方法,作用:可以被继承,但不能重写 3.修饰,作用:不可以被继承 transient...3.被transient关键字修饰变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。...表,提高了性能 每个segment则是一个传统意义hashtable (2)ConcurrentHashMap是否要加锁,为什么 答:读大部分情况下不加锁。...代理模式是对被代理限制 当使用代理模式时候,我们常常在一个代理创建一个对象实例。 当我们使用装饰器模式时候,我们通常做法是将原始对象作为一个参数传给装饰者构造器。...return next; } } 多线程分析: 在使用中我们一般使用Executors静态方法来创建线程池,除非我们对于线程池非常理解才能自己去灵活规划线程池(可以用来继承ThreadPoolExecutor

35310

C++与对象(四):再谈构造函数(详解初始化列表)、Static成员

1.再谈构造函数 1.1构造函数体赋值 根据之前介绍内容:在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适初始值,我们之前使用构造函数都叫做函数体内赋初值 class Date...) 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时) 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化 成员变量在中声明次序就是其在初始化列表中初始化顺序...受访问限定符限制 实际静态成员函数和静态成员变量,本质是受限制全局变量和全局函数(专属这个,受域和访问限定符限制) #include using namespace...因此,静态成员函数可以直接访问静态成员变量,因为它们不依赖于特定对象实例,而是与整个相关联 静态成员变量必须在外定义,定义时不添加static关键字,中只是声明 静态成员即可用 名::静态成员...this指针,所以不能访问非静态成员变量 实际静态成员函数和静态成员变量,本质是受限制全局变量和全局函数(专属这个,受域和访问限定符限制) 这次就先到这里啦,下次与对象内容也要告一段落了

65310

AsyncTask 相关问题

什么是AsyncTask AsyncTask内部封装了Thread和Handler,可以让我们在后台进行计算或者把计算结果及时更新到UI。...sHandler 是一个静态 Handler 对象,为了能够将执行环境切换到主线 程,这就要求 sHandler 这个对象必须在主线程创建。...由于静态成员会在 加载时候进行初始化,因此这就变相要求 AsyncTask 须在主线 程中加载,否则同一个进程中 AsyncTask 都将无法正常工作。...使用AsyncTask规则 AsyncTask 须在 UI 线程加载(从 4.1 开始系统会帮我们自动完成)。AsyncTask 对象必须在 UI 线程创建。...execute(Runnable runnable),这是 AsyncTask 提供一个静态方法,方便我们直接执行一个 runnable。

55700
领券