【无标题】 矫情吗;* 2024-03-26 14:36 50阅读 0赞 **一、描述一下JVM 加载class文件的原理机制?** 答:JVM 中类的装载是由类加载器(ClassLoader) 和它的子类来实现的,Java中的类加载器是一个重要的Java 运行时系统组件,它负责在运行时查找和装入类文件中的类。 补充: 1.由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2如果类中存在初始化语句,就依次执行这些初始化语句。 2.类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。从JDK 1.2开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明: a)Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar); b)Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap; c)System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。 **二、char 型变量中能不能存贮一个中文汉字?为什么?** 答:char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16bit),所以放一个中文是没问题的。 补充:使用Unicode意味着字符在JVM内部和外部有不同的表现形式,在JVM内部都是Unicode,当这个字符被从JVM内部转移到外部时(例如存入文件系统中),需要进行编码转换。所以Java中有字节流和字符流,以及在字符流和字节流之间进行转换的转换流,如InputStreamReader和OutputStreamReader,这两个类是字节流和字符流之间的适配器类,承担了编码转换的任务;对于C程序员来说,要完成这样的编码转换恐怕要依赖于union(联合体/共用体)共享内存的特征来实现了。 **三、抽象类(abstract class)和接口(interface)有什么异同?** 答:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。 **四、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?** 答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。 **五、Java 中会存在内存泄漏吗,请简单描述。** 答:理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收也会发生内存泄露。一个例子就是Hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象。
相关 【无标题】 C 语言接口如何定义和继承? 在 C 语言中,接口通常通过定义结构体来实现,结构体中包含一些函数指针,这些函数指针定义了接口所需的所有函数。 下面是一个示例代码: 谁践踏了优雅/ 2024年03月26日 11:40/ 0 赞/ 104 阅读
相关 【无标题】 -------------------- springboot web项目框架结构 -------------------- SpringBoot 是一个基于 Spr 女爷i/ 2024年03月25日 20:00/ 0 赞/ 66 阅读
相关 【无标题】 大家可以回想一下,当初我们最开始学习Java的时候,搭建一个Web所需要的步骤。。。 1、配置web.xml,加载spring和spring mvc 2、配置数据库连接、配 深藏阁楼爱情的钟/ 2024年03月23日 18:43/ 0 赞/ 57 阅读
相关 【无标题】 铜三铁四已经结束了,但还是有很多Java程序员没有找到工作或者成功跳槽,跳槽成功的也只是从一个坑中,跳入另一个坑中…… ![4cf6db4c14b524cd5c2d29fdd 曾经终败给现在/ 2023年10月10日 23:52/ 0 赞/ 47 阅读
相关 【无标题】 铜三铁四已经结束了,但还是有很多Java程序员没有找到工作或者成功跳槽,跳槽成功的也只是从一个坑中,跳入另一个坑中…… ![4cf6db4c14b524cd5c2d29fdd r囧r小猫/ 2023年10月10日 23:52/ 0 赞/ 50 阅读
相关 【无标题】 铜三铁四已经结束了,但还是有很多Java程序员没有找到工作或者成功跳槽,跳槽成功的也只是从一个坑中,跳入另一个坑中…… ![4cf6db4c14b524cd5c2d29fdd 电玩女神/ 2023年10月10日 23:51/ 0 赞/ 47 阅读
相关 【无标题】 铜三铁四已经结束了,但还是有很多Java程序员没有找到工作或者成功跳槽,跳槽成功的也只是从一个坑中,跳入另一个坑中…… ![4cf6db4c14b524cd5c2d29fdd 谁践踏了优雅/ 2023年10月10日 23:51/ 0 赞/ 59 阅读
相关 【无标题】 注意事项 int 宽度是显示宽度,如果超过,可以自动增大宽度 int底层都是4个字节 时间的方式多样 '1256-12-23' "1256/12/23" "1256.12. 朴灿烈づ我的快乐病毒、/ 2023年09月27日 14:57/ 0 赞/ 147 阅读
相关 【无标题】 3.5.1 闭包的基本技能点 闭包的定义: 闭包就是一段代码块,用\{\}括起来: def c = { println 'hi groovy'} ![d5c9c 以你之姓@/ 2023年09月27日 14:51/ 0 赞/ 151 阅读
相关 【无标题】 昨晚和知识星球的一位同学 1对1 沟通,聊了很多关于团队管理、质量体系构建和个人职业发展的话题。 这位同学本身就具有多年的大厂背景,在技术实践、团队管理管理方面有丰富的经验。 待我称王封你为后i/ 2023年09月25日 19:00/ 0 赞/ 164 阅读
还没有评论,来说两句吧...