
Java基础
文章平均质量分 91
JeffCoding
热爱移动互联网,热爱安卓,热爱Java
展开
-
String详解(一):如何理解String
引入问题:1. String和基本数据类型的区别:首先要理解String是一个对象,而不是基本数据类型。String是存放在char[]中的,char[]跟所有的对象一样存放在堆,而基本数据类型存放于堆栈中。2. 理解String不可变:String q = "hello";println(q);String qq = upcase(q);println(原创 2016-08-12 18:08:48 · 2139 阅读 · 2 评论 -
深入理解Java:注解(Annotation)--注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Anno转载 2017-02-17 17:12:09 · 447 阅读 · 0 评论 -
深入理解Java:注解(Annotation)自定义注解入门
元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所支持的类在java.lang转载 2017-02-17 17:10:24 · 550 阅读 · 0 评论 -
Java容器(五):LinkedHashMap实现原理
从之前的LinkedList源码分析来看,带有Linked的,其实就是和双链表相关,毫无疑问,LinkedHashMap就是HashMap再多加一个双向链表,其内部的存储规则和HashMap是一样的,但是在迭代中,HashMap是无序的,LinkedHashMap是有序的 LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映原创 2017-02-09 20:52:07 · 1029 阅读 · 0 评论 -
数组(二):ArrayList的实现和Arrays类的使用
一、数组是否可以变长?我们都知道,数组时定长的,初始化时一定要给定长度,由于这个长度的问题,我们在实际的开发中,会更倾向于使用容器,如ArrayList等,使用容器类时,无需考虑长度问题,因为容器已经帮我们处理了,那么数组就没有办法变长了吗?当然不是,ArrayList就是基于数组实现的,我们可以看看ArrayList是如何处理的二、ArrayList的实现原理ArrayList用一个Object数原创 2017-02-08 17:41:15 · 994 阅读 · 0 评论 -
Java容器(九):Map接口总结
直通车: 1. Java容器(四):HashMap(Java 7)的实现原理 2. Java容器(五):LinkedHashMap实现原理 3. Java容器(六):从容器出发探讨hashCode和equals 4. Java容器(七):TreeMap源码分析一、Map概述 首先先看Map的结构示转载 2017-02-12 11:29:07 · 726 阅读 · 0 评论 -
Java容器(十):subList的陷阱
我们经常使用subString方法来对String对象进行分割处理,同时我们也可以使用subList、subMap、subSet来对List、Map、Set进行分割处理,但是这个分割存在某些瑕疵。一、subList返回仅仅只是一个视图 首先我们先看如下实例:[java] view plain copy public st转载 2017-02-12 11:33:09 · 501 阅读 · 0 评论 -
数组(一):Java数组基础
一、定义数组数组的定义有三种方式:方式1:推荐 type[] a = new type[元素个数];方式2:c语言方式 type a[] = new type[元素个数];方式3:直接初始化 type[] a = new type[]{逗号分隔的初始化值}; 例如:int[] a = new int[]{1,2,3,4,5};当数组存放的元素不是基本数据类型时,数组内存放的是对象的引用二、数原创 2017-02-08 16:56:17 · 917 阅读 · 0 评论 -
Java容器(六):从容器出发探讨hashCode和equals
一、容器中的hashcode和euqals Java容器框架中有List和Set,其中List允许有重复元素,而Set则不允许有重复元素,Set是如何处理这里重复元素的?肯定是与equals相关,通过迭代来equals()是否相等,但是当数据量大的时候,假如我们往HashSet中添加10000个元素,equals()10000次,效率岂不是很低?我们来看看HashSet是如何实现的 publ原创 2017-02-10 13:22:12 · 814 阅读 · 0 评论 -
Java容器(七):TreeMap源码分析
TreeMap内部是使用红黑树的数据结构来实现的,同时,TreeSet的内部各方法的原理都是通过TreeMap来操作的,所以要想弄懂TreeMap,红黑树一定要要懂,懂了红黑树,再来看TreeMap的源码,还是很容易的! 看此篇文章前,请看我的另一篇红黑树文章:红黑树精讲一、红黑树的要点红黑树的4个规则:(必须牢记) 1.每个节点不是红色就是黑色的; 2.根节点总是黑色的; 3.原创 2017-02-11 23:30:25 · 962 阅读 · 0 评论 -
Java容器(八):List接口总结
直通车: 1. ArrayList的实现和Arrays类的使用 2. Java容器(二):强大的LinkedList 3. Java容器(三):LinkedList源码分析一、List接口概述 List接口,成为有序的Collection也就是序列。该接口可以对列表中的每一个元素的插入位置进行精转载 2017-02-12 11:24:54 · 1019 阅读 · 0 评论 -
Java 8系列之重新认识HashMap
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口j转载 2017-03-19 15:30:49 · 2247 阅读 · 0 评论 -
Effective Java 总结
前言读完了Effective Java,对这本书总结一下,结合自己在实际中的使用,这里只记录部分我觉得重点的点,顺便加上自己平时注意到的点一、对象创建和销毁1:考虑用静态工厂方法替换构造器静态工厂方法的惯用名称:valueOf——该方法返回的实例与它的参数具有相同的值,实际上是类型转换方法; getInstance——返回的实例是通过方法的参数来描述的,对于单例模式(Singleton)来说,该方原创 2017-03-12 21:15:32 · 9925 阅读 · 3 评论 -
java.io.InvalidClassException异常产生原因及解决方案
一、异常发生场景在使用Netty做Android消息推送时,发生了如下异常: io.netty.handler.codec.DecoderException: java.io.InvalidClassException: failed to read class descriptor很明显这是一个跟编解码相关的异常二、异常产生原因在整个推的项目中,消息是一个Message类,Message必须原创 2017-04-12 21:41:12 · 31127 阅读 · 0 评论 -
Java容器(四):HashMap(Java 7)的实现原理
一、HashMap的定义和构造函数public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap继承自AbstractMap,AbstractMap是Map接口的骨干实现,AbstractMap中实现了Map中最重要最常用和方法,这样Has原创 2017-02-09 13:48:08 · 35165 阅读 · 17 评论 -
Java容器(二):强大的LinkedList
前言——容器的类型容器从最大的概念来分:分为Collection和Map,区别就是Collection是一个槽的,Map是两个槽的(键值对) Collection划分为:List,Set,Queue List一般使用:ArrayList,LinkedListSet一般使用:HashSet,TreeSet,LinkedHashSetQueue一般使用:Queue,PriorityQueue原创 2016-08-16 13:20:07 · 2130 阅读 · 0 评论 -
Java容器(一):容器总结
Java容器家族图容器从最大的概念来分:分为Collection和Map,区别就是Collection是一个槽的,Map是两个槽的(键值对) Collection划分为:List,Set,Queue List接口常见有:ArrayList,LinkedList,AbstractList, CopyOnWriteArrayList, Vector,StackSet接口常见有:HashSet,T原创 2017-02-08 20:29:35 · 3027 阅读 · 2 评论 -
Class对象
RTTI我们要知道,Java让我们在运行时识别对象和类信息,主要通过两种方式,一种就是传统的RTTI,另一种是反射(Reflection)。两者的区别是,RTTI是在编译时就获得了所有类型信息,而反射是在运行时发现和使用类的信息。 RTTI分为三种形式: 1:传统的类型转换,例如经典的Animal的子类上转时类型转换。 2:Class对象,通过查询Class对象可以获得运行时所需的信息。 3原创 2016-08-17 10:52:29 · 719 阅读 · 0 评论 -
String详解(二):StringBuilder和StringBuffer的区别
问题引出:String,StringBuffer和StringBuilder的区分和使用场景?速度区别一般来说,三者的速度是:StringBuilder > StringBuffer > String。但是,在String a = "how" + "old" + "are" + "you"。这种直接拼接的情况下,String速度最高。这是因为jvm的优化问题,jvm会自动识别,把"原创 2016-08-12 19:07:17 · 850 阅读 · 0 评论 -
深入理解 抽象类和接口
使用场景当需要使得多个类看起来一样时,使用接口或者抽象类。 例如:当有四个类,分别为Basketball,Football,Baseball,Badminton。这四个类都有的方法为play(),stop(),pause(),这时可以把这些方法抽象出来,在抽象类中或者接口中声明,再让这四个类继承或实现。这样这四个类看起来就一样了。抽象类首先记住一句话,抽象类的存在是为了被继承,如果没有类继承它,它原创 2016-08-13 18:54:18 · 841 阅读 · 0 评论 -
深入理解 内部类
问题引出public class Outter{ private int a = 0; private class Inner{ public int getA(){ return ++a; } } private Inner getInner(){ return new Inner(); }原创 2016-08-15 13:23:43 · 799 阅读 · 0 评论 -
Java IO系列(一):File类
File类是一切IO之基础,要想学好IO,File类是一定要学好的,API一定要滚瓜烂熟得调用。接下来,将以项目实战中的经验来进行API的操作,这样会让各API的串联度更高。(为了更清晰得理解使用,所有的Exception将throw,不在代码列出)一:常规创建文件在路径“F:/io/hello.txt”创建名为hello的txt文件。File file = new File("F:" + File原创 2016-08-20 21:37:41 · 587 阅读 · 0 评论 -
Java IO系列(二):文件读取写入
写在前面 关于字符和字节,例如文本文件,XML这些都是用字符流来读取和写入。而如RAR,EXE文件,图片等非文本,则用字节流来读取和写入。读取文件文件读取,用到BufferdReader和FileReader,BufferdReader用于缓存加速,FileReader用于读取文件。public class BufferInputFile { public static void main(原创 2016-08-20 23:19:01 · 980 阅读 · 0 评论 -
Java IO系列(三):DataInputStream,DataOutputStream和RandomAccessFile
转载请注明出:http://blog.youkuaiyun.com/jeffleo/article/details/52266200有必要多看几遍的 关于字符和字节,例如文本文件,XML这些都是用字符流来读取和写入。而如RAR,EXE文件,图片等非文本,则用字节流来读取和写入。DataInputStream和DataOutputStream数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中原创 2016-08-21 10:37:54 · 1366 阅读 · 0 评论 -
Java IO系列(四):文件压缩GZIP、Zip
转载请注明出处:http://blog.youkuaiyun.com/jeffleo/article/details/52266360有必要多看几遍的 关于字符和字节,例如文本文件,XML这些都是用字符流来读取和写入。而如RAR,EXE文件,图片等非文本,则用字节流来读取和写入。压缩类有关压缩的类如下: DeflaterOutputStream:压缩类的基类 ZipOutputStream:将数据压缩成Z原创 2016-08-21 11:09:17 · 1234 阅读 · 0 评论 -
Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream
转载请注明出处:http://blog.youkuaiyun.com/jeffleo/article/details/52266577有必要多看几遍的 关于字符和字节,例如文本文件,XML这些都是用字符流来读取和写入。而如RAR,EXE文件,图片等非文本,则用字节流来读取和写入。读写对象,传输对象在Java中很常使用,在javaBean中就经常用到。一般来说,对象要能被对写,自身要实现特定的接口,Serial原创 2016-08-21 12:01:57 · 2164 阅读 · 0 评论 -
Java获取时间差(天数差,小时差,分钟差)
网上有很多博文是讲如何获取时间差的,我看了一下,多数是使用Calendar类来实现,但是都讲得比较乱,在这里我用SimpleDateFormat来实现,比较简单,我认为比较适合拿来用。首先我们先初始化我们的SimpleDateFormatSimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");//如2原创 2016-08-10 20:51:17 · 117651 阅读 · 11 评论 -
String详解(三):正则表达式Pattern和Matcher详解
(一)利用String的split()对字符串进行切割String text = "Hello, my name is liujianfeng";System.out.println(Arrays.toString(text.split("\\s")));//以空格为切割符System.out.println(Arrays.toString(text.split("\\W+")));//以原创 2016-08-12 23:19:38 · 16033 阅读 · 3 评论 -
泛型超详细解读(二):super和extend
一:擦除要理解super和extends的边界问题,首先要理解消除。 先看一个有趣的例子:public class Abrasion { public static void main(String[] args) { Class a = new ArrayList<Integer>().getClass(); Class b = new ArrayList原创 2016-08-19 14:58:14 · 27933 阅读 · 33 评论 -
Java NIO Selector详解(含多人聊天室实例)
一、Java NIO 的核心组件Java NIO的核心组件包括:Channel(通道),Buffer(缓冲区),Selector(选择器),其中Channel和Buffer比较好理解 简单来说 NIO是面向通道和缓冲区的,意思就是:数据总是从通道中读到buffer缓冲区内,或者从buffer写入到通道中。关于Channel 和 Buffer的详细讲解请看:Java NIO 教程二、Java NIO转载 2017-01-23 21:38:32 · 15275 阅读 · 6 评论 -
java爬虫入门实战
爬虫 百度百科:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。爬虫的实质,就是获取静态数据,并对此进行分析从而获取对我们有价值的数据,从中可见,最重要的就是分析数据这一部分。数据的格式有json,xml,html等等,在此我们就分析链家网原创 2016-11-11 22:57:18 · 20715 阅读 · 6 评论 -
泛型超详细解读(一):泛型基础
一:什么是泛型泛型是jdk5才引进的,泛型其实指得就是参数化类型,使得代码可以适应多种类型。像容器,List< T >,大量使用了泛型,它的主要目的之一就是用来指定容器要持有什么类型的对象。我认为,泛型的好处很多:1.保证了类型安全当没有使用泛型的情况下,创建了一个狗的列表,List dogs = new ArrayList,每次要往狗列表添加时,都要我们程序员去确定所添加的是不是狗。但是使用了泛型原创 2016-08-19 14:56:17 · 10413 阅读 · 2 评论 -
Java反射(Reflection)详解
认识反射前面说到,反射相对于RTTI的区别就是,反射是运行时发现和使用类的信息。 当我们使用一个位置类型的对象进行操作时,我们必须先加载那个类的Class对象,因此那个类的对象对于JVM来说,必须是可获取的,可以从本地,也可以从网络。然而,对于反射机制,.class在编译器是不可获得的,因此反射只能在运行时打开.class文件。所以,反射和Class是不可分割的。置于Class是什么,怎么获取,请看原创 2016-08-17 12:37:11 · 1560 阅读 · 0 评论 -
Java对象克隆——浅克隆和深克隆的区别
在Java中对象的克隆有深克隆和浅克隆之分。有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的。基本数据类型存储在栈中,引用数据类型存储在堆中。什么是克隆克隆就是依据已经有的数据,创造一份新的完全一样的数据拷贝。实现克隆有多种方式,可以手工的new出一个新的对象,然后将原来的对象信息一个一个的set到新的对转载 2017-08-06 00:51:35 · 22539 阅读 · 10 评论