![](https://img-blog.csdnimg.cn/20200822115724354.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java的边边角角
本专栏用于收录Java中某些语法点的原理分析
AnEra
厚积薄发, 天道酬勤
展开
-
匿名内部类引用的局部变量为什么需要final修饰, 而引用外部类的成员变量就不需要final修饰?
为什么匿名内部类引用的局部变量需要final修饰?在JDK1.8之前, 编写以下代码public class Test { public static void main(String[] args) { String str = "Hello World"; new Thread(){ @Override public void run() { System.out.print原创 2020-08-20 20:43:02 · 563 阅读 · 3 评论 -
JDK动态代理实现原理
java中动态代理主要有JDK和CGLIB两种方式。 区别主要是JDK是代理接口,而CGLIB是代理类。JDK的动态代理调用了Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 方法。通过该方法生成字节码,动态的创建了一个代理类,interfaces参数是该动态类...原创 2019-08-07 10:44:00 · 263 阅读 · 0 评论 -
CGLIB动态代理实现原理
一、CGLIB介绍CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(Persistent Object 持久化对象)字节码的动态生成。CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP为他...原创 2019-09-24 11:03:32 · 586 阅读 · 0 评论 -
从字节码角度分析Java异常实现原理
目录一、异常在字节码层面的实现二、throw捕获异常解析三、Java异常处理中的return和throw命令解析一、异常在字节码层面的实现示例:public class ExceptionParse { public static void main(String[] args) { int a,b,c,d; try { ...原创 2020-01-29 12:36:30 · 588 阅读 · 0 评论 -
JVM系列_从JVM角度分析finally块中程序到底在return之前执行还是return之后执行
对于finally的作用相关内容不再陈述,网上有很多本博文着重分析finally块中程序到底在return之前执行还是return之后执行?没有了解过JVM指令的可以看这篇博客:JVM操作指令集解析先看一个程序示例:public class AtomicDemo{ public static int test(int i){ try { i=9; return i; ...原创 2019-07-29 16:18:07 · 339 阅读 · 0 评论 -
为什么对象被new 以后在执行dup操作?
为什么对象被new 以后在执行dup操作?今天有个朋友问我,为什么一个new一个对象的指令在new后面紧跟的是dup操作?他说搜了可能找到的搜索引擎都找不到答案,包括翻了<<深入JAVA虚拟机指令>>这本书也没有任何说明.我们先来看看为dup指令的作用,dup指令可以复制栈顶的一个字再压入栈,也就是把栈顶的内容做个备份.大家知道,JAVA/CLR是完全基于栈的实现,...转载 2019-08-01 10:22:24 · 291 阅读 · 0 评论 -
字符串之间的 “+“ 操作会发生什么?
先来看四个示例:思考:看着不太相同的程序, jvm在底层实现时是怎样的操作呢? 在程序运行过程中会创建几个对象呢?示例1:public static void main(String[] args) { String str = "456"; String str2 = "abc"+"123"+str; }反编译结果:Code: stack=3, locals...原创 2019-08-01 11:00:28 · 375 阅读 · 0 评论 -
Java中什么是bridge method(桥接方法)
什么是桥接方法桥接方法是 JDK 1.5 引入泛型后,为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容,由编译器自动生成的方法。我们可以通过Method.isBridge()方法来判断一个方法是否是桥接方法,在字节码中桥接方法会被标记为ACC_BRIDGE和ACC_SYNTHETIC,其中ACC_BRIDGE用于说明这个方法是由编译生成的桥接方法,ACC_SYNTHET...原创 2019-10-29 09:44:28 · 286 阅读 · 0 评论 -
Java基础_引用数据类型的强制类型转换
在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上转型的...原创 2019-05-23 20:01:07 · 5976 阅读 · 8 评论