![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 54
煮汤的那个人
这个作者很懒,什么都没留下…
展开
-
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 · 2192 阅读 · 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 · 188 阅读 · 0 评论 -
Java源码阅读之HashSet
HashSet是我们常用的一种数据结构。用来存储值唯一的集合。本文基于JDK1.8.0_151的Java源代码。先来看看HashSet的类定义: /** * @author Josh Bloch * @author Neal Gafter * @see Collection * @see Set * @see TreeSet * @see ...原创 2018-08-05 11:13:42 · 210 阅读 · 0 评论 -
一张图看懂java HashMap继承关系
这是JDK1.8.0_151下的HashMap类定义:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {根据类定义,追根刨底,看看HashMap的继承结构图:...原创 2018-08-05 12:34:20 · 4632 阅读 · 0 评论 -
java源码阅读接口篇之java.util.Collection
java.util.Collection是个接口,很容易和工具类java.util.Collections弄混淆。今天我就抽丝剥茧来研究一下这个接口。这里我基于JDK1.7.0_80的Collections接口进行研究,以避免JDK1.8引入的StreamAPI和函数式编程接口。一、接口定义:public interface Collection<E> extends I...原创 2018-08-05 13:05:43 · 348 阅读 · 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 · 2239 阅读 · 0 评论 -
从链表的迭代遍历看java lambda表达式效率
随着JDK1.8的发布,lambda和函数式编程终于进入到java世界。在用了一段时间,甚至可以说是在硬往lambda和流API上靠。有一天,在跟着大牛学习java时,一句“lambda拖慢程序”突然让我意识到了什么,于是我做了个测试。现在,静下心来,回顾一下那个测试。一个很简单的测试,就是一个List的遍历,我们看看这段代码:import java.util.List;import ...原创 2018-07-31 23:32:33 · 974 阅读 · 1 评论 -
两张图看懂java集合中的接口继承关系
java集合用到了很多的接口,今天抽空整理了一下,集合中的接口继承关系图:原创 2018-08-05 20:30:09 · 1498 阅读 · 0 评论 -
java源码阅读之小数缓存
在谈小数缓存之前,我们先来看看这两行代码有什么区别:Long a = new Long(1L);Long b = Long.valueOf(1L);要区分他们有什么区别,免不了要去看看java源码了。这里我以JDK1.8.0_151的源码做解析:先看Long的构造函数:private final long value;public Long(long value) { ...原创 2018-08-05 21:00:53 · 227 阅读 · 0 评论 -
从kafka源码阅读中看出了问题之除零不异常
最近在看kafka源码,看到一个让我感到很陌生的地方,也引起了我深深地思考。竟然还有可以除0合法的地方:在org.apache.kafka.common.metrics.stats.Max类中,看到了构造函数: public Max() { super(Double.NEGATIVE_INFINITY); }我忍不住F3了一下Double.NEG...原创 2018-08-01 22:31:42 · 297 阅读 · 0 评论 -
从反编译角度看看接口中的域
接口除了表示方法的集合之外,经常被用来作为常量类。因为接口做常量类更加简洁。只需要像下面这样:public interface StringConsts { String EMPTY_STRING = "";}我们可以看见EMPTY_STRING只需要声明类型即可,形式非常简洁。今天,我打算从反编译角度看看,我们在接口中只声明类型的域,在编译后是个什么样子。这是编译...原创 2018-08-07 21:34:34 · 430 阅读 · 0 评论 -
java源码阅读接口篇之java.util.Queue
Queue接口继承自Collection接口。接口中的方法如下:一、接口定义:/** * @since 1.5 * @author Doug Lea * @param <E> the type of elements held in this collection */public interface Queue<E> extends Collecti...原创 2018-08-12 20:41:10 · 311 阅读 · 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 · 446 阅读 · 0 评论 -
java源码阅读之java.lang.Enum
之所以要研究这个类,因为它是java中所有枚举的父类,本文基于JDK1.9.0的java源码进行展开。一、类定义:public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {可以看到Enum是一个虚基类,并且实现了Comp...原创 2018-07-29 23:53:44 · 1288 阅读 · 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 · 215 阅读 · 0 评论 -
java判断奇偶数注意点
如果让我们用java写一个方法来判断一个整数是奇数还是偶数,相信很多人很快能写出来,而其中可能就会有下面这种:public boolean isOddNumber(int i) { return i % 2 == 1;}这样写有没有什么问题呢?初步看,没什么问题,不过,真没问题吗?输入-1试试看:结果为false诶,难道-1不是奇数?赶紧换成-3在试试,结果还是fa...原创 2018-07-28 20:43:14 · 4083 阅读 · 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 · 1072 阅读 · 0 评论 -
java中反射是否能够改变String的值?
我们知道java的字符串类型String被设计成不可变的。那么我们还有办法改变它的值吗?先来看一下,截取自jdk1.8.0_151的java.lang.String类的声明:public final class String implements java.io.Serializable, Comparable<String>, CharSequence Stri...原创 2018-07-28 22:18:21 · 3819 阅读 · 12 评论 -
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 · 17299 阅读 · 1 评论 -
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 · 18187 阅读 · 2 评论 -
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 · 2896 阅读 · 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 · 379 阅读 · 1 评论 -
java源码阅读之java.util.Objects
之所以写这篇文章,是因为工作中接触到一个开源项目代码,而这个开源代码使用到了这个类。同时如果不是前面的包名java.util,都很容易看错成java超类java.lang.Object。java.util.Objects是java1.7新增的一个类。下面这篇文章将基于1.7.0_80版本的类库源码展开。一、类定义:package java.util;/** * @since 1...原创 2018-07-29 18:42:10 · 808 阅读 · 1 评论 -
java TWR是怎么优雅我们的代码的?
我们在编写IO代码的时候,有的时候真的是对对java IO那种模板化的代码感到厌倦,而且写出来的代码,很臃肿丑陋。像下面这样的代码: public void readFile(String filePath) { FileInputStream fis = null; InputStreamReader inReader = null; B...原创 2018-07-29 19:16:06 · 2318 阅读 · 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 · 3337 阅读 · 1 评论 -
两个线程交替打印奇偶数-学习笔记
前段时间看到阿里一个大哥讲述自己阿里面试的经验时,被面试官要求写一个“两个线程交替打印奇偶数”的程序。而前天刚好看见阿里大哥专门讲这个程序的博客《多线程技术: 两个线程交替打印奇数和偶数 - 明志健致远 - 博客园》。主要是看到安徽建筑大学的字样,回想到那篇文章里大哥的自我介绍,觉得肯定就是那大哥。看了博客,今天写一篇学习笔记。实现“两个线程交替打印奇偶数”。本质上,还是利用了隐式锁s...原创 2018-08-15 22:26:28 · 4721 阅读 · 0 评论