从JVM理解Java
文章平均质量分 90
myllxy
欢迎关注知乎专栏:https://www.zhihu.com/column/c_1274036496291827712
展开
-
实例构造器深入理解
Java语言中,实例构造器只能在new表达式(或别的构造器)中被调用,不能通过方法调用表达式来调用。new表达式作为一个整体保证了对象的创建与初始化是打包在一起进行的,不能分开进行;但实例构造器只负责对象初始化的部分,“创建对象”的部分是由new表达式本身保证的。构造器自身返回值类型是void,并不是“构造器返回了新创建的对象的引用”,而是new表达式的值是新创建的对象的引用。对应的,在JVM...转载 2018-09-25 15:40:15 · 1608 阅读 · 0 评论 -
从字节码看泛型擦除问题
Java泛型是jdk1.5引入的新特性,但并不是由Java所引入的新概念,在Java正式使用泛型之前如果要实现类型泛化,都是通过直接在参数类型处使用Object,因为Object是所有类的父类,所以编译期都不会报错,可是一旦到了运行期,你不太可能确定真实的类型能够正确转换成你想要的类型。在没有泛型之前:/** * Son extends Father * * @author myllxy...原创 2019-12-16 23:28:51 · 490 阅读 · 0 评论 -
关于String str1="123"与String str2=new String("123")类问题详解
要彻底弄明白这个问题,我们需要清楚一些基本概念:Class文件中的常量池 运行时常量池(runtime constant pool) 全局字符串池(StringTable) Java heap 一些常用字节码以及常量池中的常量类型等 jvm 的知识Class 文件常量池:JVM 会为我们每个类对应生成一个常量池,常量池可以理解为 Class 文件之中的资源仓库,它是 Class文件...原创 2018-10-01 19:53:13 · 7404 阅读 · 1 评论 -
java中final属型及初始化问题
1.被final修饰而没有被static修饰的类成员变量只能在三种情况下初始化:/*1.创建的时候立即初始化2.创建之后由构造方法初始化3.创建之后由代码块初始化*/class Test { final int b = 2; final int c; public Test() { c = 3; } final int ...原创 2018-08-19 17:47:34 · 9610 阅读 · 6 评论