反编译
文章平均质量分 57
煮汤的那个人
这个作者很懒,什么都没留下…
展开
-
java字符串拼接真的很简单吗?
java提供利用"+"进行字符串直接拼接的功能,如以下示例:String provice = "Jiang Su";String city = "Nan Jing";String address = provice + city; 那么代码第三句,究竟做了什么呢?我们利用vim编写一个StringConcat类,代码如下:public class StringConcat {...原创 2018-07-28 15:54:51 · 2216 阅读 · 0 评论 -
从java反编译学习字节码指令(一)
最近沉迷于java反编译,经常看到iconst_1指令,见得多了,也让我对它感到很好奇,它是不是就是固定代表int 1啊?做个小测试,从11到0,看看它们分别对应字节码什么?public class Bytecode { public void ByteCode() { int eleven = 11; int ten = 10; ...原创 2018-07-31 21:51:35 · 2270 阅读 · 0 评论 -
从kafka源码阅读中看出了问题之abstract interface
今天在看到kafka的源码类org.apache.kafka.common.network.SslTransportLayer时,看到这个类引用了javax.net.ssl.SSLSession这个类,点进去看了一下这个类,着实让我吃惊了一把。public abstract interface javax.net.ssl.SSLSession见惯了abstract class,还真没...原创 2018-08-03 22:09:21 · 199 阅读 · 0 评论 -
从反编译的角度看abstract class与interface的区别
abstract class与interface傻傻分不清,今天我打算从反编译角度来看看二者的区别。先写这么一个abstact class 一个空的虚基类。public abstract class AbstractClass {}再写这么一个interface 一个空的接口。public interface Interface {}在JDK1.8.0_151的环境下,...原创 2018-08-03 21:28:25 · 459 阅读 · 0 评论 -
java枚举编译后是什么样子?
在java中,我们经常使用枚举来表示有限值的集合。像下面的这个枚举类:public enum Level { HIGH, MIDDLE, LOW;}那么,枚举类编译之后,是个什么样子呢?在JDK1.8.0_152环境下,我们使用javac编译这个枚举类,得到Level.class字节码文件。利用javap我们反编译Level.class字节码文...原创 2018-07-29 22:02:35 · 3388 阅读 · 1 评论 -
java TWR是怎么优雅我们的代码的?
我们在编写IO代码的时候,有的时候真的是对对java IO那种模板化的代码感到厌倦,而且写出来的代码,很臃肿丑陋。像下面这样的代码: public void readFile(String filePath) { FileInputStream fis = null; InputStreamReader inReader = null; B...原创 2018-07-29 19:16:06 · 2358 阅读 · 0 评论 -
java装箱拆箱时都发生了什么?
一、装箱我们先看装箱,有如下代码:public class Box { public void packing() { Integer i = 1; Float f = 2.0f; Long L = 3L; Boolean b = true; Short s = 5; Double ...原创 2018-07-29 16:14:41 · 397 阅读 · 1 评论 -
java变长参数,是怎样变长的?
java方法支持变长参数。这样能够极大地简化我们的编程。我们看这样一段代码:public class Args { public static void main(String[] args) { String two = stringConcat("A", "B"); String three = stringConcat("A", "B", "C"...原创 2018-07-29 13:20:41 · 2916 阅读 · 0 评论 -
java switch是如何支持String类型的?
我们知道自java 1.7以后, java switch开始支持String类型。那有没有同学思考过,java是如何支持String类型的?我们看下面这段代码:public class SwitchString { public static void main(String[] args) { switch (args[0]) { case "A" :...原创 2018-07-29 09:46:33 · 18359 阅读 · 2 评论 -
java10 var关键字浅析
2018年3月20日,Oracle发布java10。java10为java带来了很多新特性,其中让人眼前一亮的便是var关键字的引入。从今以后我们可以这样写java代码了。public class Example { public static void main(String[] args) { var eg = new Example; eg....原创 2018-07-29 11:03:36 · 17410 阅读 · 1 评论 -
java boolean研究
我们在使用java的基本类型boolean时候,有没有思考过,以下这两种方式有什么区别呢?boolean sign = true;if (sign) { //TODO}if (sign == true) { //TODO}它们一样吗?我们编写一个类,命名为BaseTypeBoolean.java,然后利用javac工编译为BaseTypeBoolean.cl...原创 2018-07-28 21:55:36 · 1096 阅读 · 0 评论 -
从java构造函数看出点什么
我们先建立一个父类,名为Father.java,类中代码如下:public class Father{}再建立一个子类,名为Son.java,类中代码如下:public class Son extends Father {}我们知道,如果在类中没有声明构造函数,javac编译时,会自动的为我们加上一个公开的无参构造函数。Windows7 cmd下JDK1.8.0_151环...原创 2018-07-28 18:06:07 · 237 阅读 · 0 评论 -
从反编译角度看看接口中的域
接口除了表示方法的集合之外,经常被用来作为常量类。因为接口做常量类更加简洁。只需要像下面这样:public interface StringConsts { String EMPTY_STRING = "";}我们可以看见EMPTY_STRING只需要声明类型即可,形式非常简洁。今天,我打算从反编译角度看看,我们在接口中只声明类型的域,在编译后是个什么样子。这是编译...原创 2018-08-07 21:34:34 · 450 阅读 · 0 评论