Java基础知识日常总结
文章平均质量分 78
该专栏是本人在日常工作中对Java的基础知识的学习和总结。每篇博客会针对Java中的一个具体点进行分析和总结,这样的点积累多了,对Java的基础知识就慢慢掌握了。随着本人对Java学习的深入,文章涉及的技术深度也会增加。但基础是深入的前提,开通此专栏也是想激励自己不断进步。
Rainnnbow
这个作者很懒,什么都没留下…
展开
-
Java中使用long类型实现精确的四则运算
引子Effective Java 2nd Edition 第48条建议:如果需要精确的答案,请避免使用float和doble。float和double类型主要是为了科学计算和工程计算而设计的。他们执行二进制制浮点运算(binary floating-point arithmetic),这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的。然而,他们并没有提供完全精确的结果,所以不应该被用原创 2016-08-22 16:42:46 · 27474 阅读 · 0 评论 -
JUnit单元测试教程(翻译自Java Code Geeks)
本教程翻译自Java Code Geeks,原文网址:https://www.javacodegeeks.com/2014/11/junit-tutorial-unit-testing.html#suite_tests。翻译的过程中,有少部分内容是译者添加的解释说明和对原文章中错误地方的修正。水平有限,如果有错误的地方,希望能在我的博客里告诉我,谢谢。翻译 2016-08-16 09:28:58 · 5428 阅读 · 2 评论 -
我为什么放弃使用MyBatis3的Mapper注解
最近在使用MyBatis3做项目。在使用注解实现Mapper的时候遇到了比较奇葩的问题:在实现数据的batch insert的时候总是报错。好不容易可以正常插入了,但是又不能返回自增的主键id到实体bean中了。而这些问题在XML配置中都不存在。一方面可能是我能力有限,没有找到合适的解决方案;另一方面可能与MyBatis自身对Java中注解的支持不够给力有关系。以下是MyBatis官网对Mapper翻译 2016-08-02 09:55:40 · 5882 阅读 · 1 评论 -
Eclipse调试(2)——各种类型断点设置
本文是 Eclipse调试(1)——基础篇 的提高篇。分两个部分: 1) Debug视图下的3个小窗口视图:变量视图、断点视图和表达式视图 2) 设置各种类型的断点变量视图、断点视图和表达式视图1. variable:变量视图显示debug过程中程序中出现的所有的变量以及其值。我们也可以通过该视图手动设置变量的value。手动设置变量值的作用在于,当debug到该变量处时,没有得到我们预期的值,原创 2016-07-26 13:39:08 · 3032 阅读 · 0 评论 -
Eclipse调试(1)——基础篇
作为使用Eclipse的程序员都会使用它的Debug。但是有不少人只会用F6、F8,其他功能知之甚少。今天我就来总结一下我在使用eclipse的debug时的一些个人经验。水平有限,不足之处还请赐教。测试代码学东西能够学以致用才是关键。所以我使用示例代码的形式讲解每一个点。在下面的代码中,我打了两个断点(代码中注释位置)public class DebugTest { public stati原创 2016-07-25 16:26:06 · 1024 阅读 · 2 评论 -
ArrayList中的modCount与ConcurrentModificationException
在看ArrayList源码时,看到了一个字段modCount。在add、remove、clear等方法中都有modCount++的操作。不明白什么意思。点进去看了看该字段的解释,总算明白了。modCount是在AbstractList抽象类中定义的。该字段的解释如下所示。 /** * The number of times this list has been <i>structur翻译 2016-05-13 11:25:43 · 4314 阅读 · 1 评论 -
永远不要在循环之外调用wait方法
1. 前言随着摩尔定律的失效,Amdahl定律成为了多核计算机性能发展的指导。对于现在的java程序员们来说,并发编程越来越重要和习以为常。很惭愧和恐慌的是我对java的并发编程一直是只知道概念,入门都不算。最近工作需要,开始认真学习java并发编程。先找了一本简单的电子书《Java7并发编程实战手册》开始看。刚刚看到简单的生产者消费者问题,在书中给出的代码中,有一点不理解:为什么wait()语句要原创 2016-03-03 12:53:51 · 3918 阅读 · 4 评论 -
JVM三种垃圾收集算法思想及发展过程
JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程。所有的垃圾收集算法的具体实现都是遵循着三种算法思想而实现的。1.标记-清除算法 标记-清除(Mark-Sweep)算法是最基础的垃圾收集算法。正如其名字描述的那样,该算法分为两个阶段:“标记”和“清除”。首先标记出所有可以被回收的对象,然后经过一轮垃圾回收将所有被标记的对象的内存空间释放,即清除可被回收的对原创 2016-02-18 11:18:06 · 1564 阅读 · 3 评论 -
JVM内存区域划分(JDK6/7/8中的变化)
前言Java程序的运行是通过Java虚拟机来实现的。通过类加载器将class字节码文件加载进JVM,然后根据预定的规则执行。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些内存区域被统一叫做运行时数据区。Java运行时数据区大致可以划分为5个部分。如下图所示。在这里要特别指出,我们现在说的JVM内存划分是概念模型。具体到每个JVM的具体实现可能会有所不同。具原创 2016-01-19 10:57:44 · 7585 阅读 · 5 评论 -
Java编程思想阅读收获
15年8月份买了一本Java编程思想第四版中文版。之所以买中文版是因为我试读了同事的英文版发现自己英语水平还是有限,单词虽然认识,但对很多句子把握不准,这样看书太慢了,要理解英文还要理解技术有些hold不住。买了之后断断续续的看到现在,看了400多页了,看到了泛型一章。从15年8月份到元旦,中间还看了本周志明著的《深入理解java虚拟机-JVM高级特性与最佳实践》对JVM有了初步的了解。对于内存布原创 2016-01-14 10:11:40 · 3442 阅读 · 0 评论 -
Java异常处理机制难点解惑-用代码说话
是否需要看这篇文章?下面的例子中,如果正常执行返回值多少? 如果出现了ArithmeticException返回值多少? 如果出现非ArithmeticException(如NullPointerException)返回值多少? 如果你了解这个例子说明的问题,并了解例子中三种情况下的执行细节,这篇文章你就不用浪费时间看了。 例子: public int testException_fina原创 2016-01-08 09:20:01 · 2470 阅读 · 0 评论 -
java自动装箱拆箱总结
对于java1.5引入的自动装箱拆箱,之前只是知道一点点,最近在看一篇博客时发现自己对自动装箱拆箱这个特性了解的太少了,所以今天研究了下这个特性。以下是结合测试代码进行的总结。测试代码: int a = 1; Integer b = 1; Integer c = 1; Integer d = 2; Integer e =原创 2016-01-06 09:45:41 · 2503 阅读 · 0 评论 -
String放入运行时常量池的时机与String.intern()方法解惑
运行时常量池概述Java运行时常量池中主要存放两大类常量:字面量和符号引用。字面量比较接近于Java语言层面的常量概念,如文本字符串、声明为final的常量值等。 而符号引用则属于编译原理方面的概念,包括了下面三类常量: - 类和接口的全限定名(包名+类名) - 字段的名称和描述符 - 方法的名称和描述符运行时常量池位置运行时常量池在JDK1.6及之前版本的JVM中是方法区的一部分原创 2016-01-05 11:28:40 · 4974 阅读 · 9 评论 -
Java继承时的初始化顺序
Java程序在启动和运行时,需要首先完成初始化的工作。在涉及到继承、static成员变量等因素时,初始化的顺序就复杂起来。下面以一个例子说明继承时的Java初始化顺序。例子:class Insect{ private int i = 9; protected int j; Insect(){ System.out.println("i = "原创 2015-10-22 11:14:48 · 1145 阅读 · 0 评论 -
Java的多态及注意事项
什么是多态: 多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序。在Java中,所有的方法都是通过动态绑定实现多态的。将一个方法调用同一个方法主体关联起来被称作绑定。动态绑定的含义是在运行时根据对象的类型进行绑定。动态绑定也叫作后期绑定或运行时绑定。Java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定。这意味着通常情原创 2015-10-22 13:32:25 · 1498 阅读 · 1 评论 -
Java遍历时删除List、Set、Map中的元素(源码分析)
在对List、Set、Map执行遍历删除或添加等改变集合个数的操作时,不能使用普通的while、for循环或增强for。会抛出ConcurrentModificationException异常或者没有达到删除的需求。在遍历时删除元素,需要使用迭代器的方式,代码示例如下:public class CollectionRemoveDemo { public static void mai原创 2015-09-07 18:12:13 · 2403 阅读 · 0 评论 -
ArrayList、HashMap、HashSet源码总结
ArrayList:1. ArrayList是List接口的大小可变数组的实现,此实现是不同步的。2. ArrayList内部使用类型为Object[]的数组存储元素。3. ArrayList默认的数组长度为10, 当需要扩大容量时,扩大后的容量为:newCapacity = (oldCapacity * 3)/2 + 1;4. ArrayList的clone方法为浅拷贝(shal原创 2015-09-09 14:33:25 · 1122 阅读 · 0 评论 -
java.util.Arrays类详解(源码总结)
概述Arrays类位于java.util包下,是一个对数组操作的工具类。今天详细的看了看Arrays类的4千多行源码,现将Arrays类中的方法做一个总结(JDK版本:1.6.0_34)。Arrays类中的方法可以分为八类:sort(对数组排序)binarySearch(二分法查找数组中的元素)equals(比较两个数组是否相等)fill(对数组中的指定位置填充相同的内容)copyOf(数原创 2015-12-21 14:48:57 · 3458 阅读 · 0 评论