中小型教育网站的开发与建设,自己主机做网站服务器吗,在线app开发平台,博客网站开发框架面试问题背景
面试官询问自定义String类#xff0c;包名为java.lang#xff0c;是否能编译和运行。
结论
编译#xff1a;能成功编译。运行#xff1a;会报错#xff0c;因为JDK中的String类会被优先加载。
知识点涉及
Java代码的编译过程Java代码的运行过程类加载器…面试问题背景
面试官询问自定义String类包名为java.lang是否能编译和运行。
结论
编译能成功编译。运行会报错因为JDK中的String类会被优先加载。
知识点涉及
Java代码的编译过程Java代码的运行过程类加载器
Java代码的编译过程
定义将.java源文件转换为.class字节码文件。方法 使用IDEA的BUILD按钮。命令行javac xx.java。 查看字节码 使用文本工具打开显示二进制。使用javap工具反汇编查看。
Java代码的运行过程
加载JVM在首次使用类时加载包括加载、连接、初始化三个阶段。连接包括验证、准备、解析三个子阶段。初始化执行clinit()方法。
类加载过程详解
加载 通过全类名获取字节流。转换静态存储结构为运行时数据结构。生成Class对象。 连接 验证确保符合JVM规范。准备为静态变量分配内存并初始化。解析符号引用转换为直接引用。 初始化执行clinit()方法。
运行时错误示例
自定义String类中写main方法运行时报错找不到main方法。尝试调用自定义String类方法时实际调用JDK中的String类方法。
代码运行案例分析
MainApp类加载通过命令行启动JVM加载MainApp.class。Animal类加载在main函数中创建Animal对象时触发加载。
参考文章
Java代码编译和执行的整个过程。Java类加载机制。JVM成神之路类的加载。
总结
自定义String类虽然能编译但由于JVM的类加载机制特别是双亲委派模型实际运行时会加载JDK中的String类导致自定义类无法被使用。