JAVA高级编程系列
文章平均质量分 80
WotChin
Hello world!
展开
-
Java高级技术第二章——Java的反射机制
前言Java高级技术系列前言点击此处JAVA 反射Java让我们在运行时识别对象和类的信息,主要有2种方式: 一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。RTTIRTTI (Run-Time Type Information),通过运行时类型信息程序能够使用引用来检查这些引用所指的对象的实际派生原创 2018-02-04 14:10:38 · 742 阅读 · 1 评论 -
Java高级技术第四章——Java容器Collection之List详解
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195CollectionListList是一种有序的Collection,使用此接口能够精确地控制每个元素插入的位置。用户能够使用索引来访问List中的元素,每个元素的索引是固定的,我们可以认为List是一种动态的数组。 实现List接...原创 2018-03-21 10:34:07 · 775 阅读 · 0 评论 -
Java高级技术第四章——Java容器类之Set从源码开始详解
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195SetSet的特点就是每个元素都是唯一的,Set集合内两两元素之间进行equals()对比,结果都为false.Set集合也可以包含null元素。HashSetHashSet是常用的一种实现了Set接口的类,其底层实现原理是基于哈希表的,...原创 2018-03-21 10:38:40 · 740 阅读 · 0 评论 -
Java高级技术第四章——容器类之Queue概述
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195QueueQueue是一个接口,这个接口继承自Collection接口,同时还有四个接口直接继承自该接口,分别是: BlockingDeque BlockingQueue Deque TransferQueue其中...原创 2018-03-21 10:41:12 · 791 阅读 · 0 评论 -
Java高级技术第四章——Java容器类Queue之从小顶堆到优先队列PriorityQueue
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195PriorityQueuePriorityQueue是基于堆数据结构的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的Comparator(比较器)在队列实例化的时排序。优先队列不允许加入空值(null),或者其他不可比较的对象,...原创 2018-03-21 10:44:55 · 1635 阅读 · 0 评论 -
Java高级技术第四章——Java容器类Queue之体验双端队列ArrayQueue设计之妙
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195ArrayDequeArrayDeque的数据结构要比PriorityQueue要简单得多,是通过数组来实现的。但是,ArrayDeque的特点是一个双端队列,既可以实现FIFO的Queue,也可以实现LIFO的Stack. ArrayDequ...原创 2018-03-21 10:48:23 · 1578 阅读 · 0 评论 -
Java高级技术第四章节——容器类Map之来自红黑树的TreeMap
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195MapMap接口有几个实现的类,常用的是HashMap和TreeMap,这两个都不是线程安全的。Hashtable也是实现了Map接口的一个类,是线程安全的。 Map接口定义了一个名为Entry的内部接口,该接口封装了对一个K-V对的操作,一般...原创 2018-03-21 10:51:26 · 788 阅读 · 0 评论 -
Java高级技术第四章——Java容器类Map之快速的HashMap
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195HashMapJava的HashMap实现的数据结构是一个哈希表,其解决哈希冲突的方法是拉链法,使用的哈希函数是取模法。与常规的直接取模法不同,HashMap是通过位运算来实现取模的。这部分思想与ArrayDeque的实现原理是类似的。 Has...原创 2018-03-21 10:53:16 · 950 阅读 · 0 评论 -
Java高级技术第五章——高并发之CountDownLatch等同步器
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195Wait&Notify引出一个问题: 实现一个容器,提供两个方法,add,size. 写两个线程,线程A添加10个元素到容器中,线程B实现监控元素的个数,当容器元素个数到5个时,线程B给出提示并结束。这实际上是让我们手...原创 2018-04-23 11:35:17 · 475 阅读 · 0 评论 -
Java高级技术第五章——高并发之Lock及Condition
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195ReentrantLock使用ReentrantLock可以完成synchronized同步的功能,需要注意的是,必须要手动释放锁! 这个类封装在java.util.concurrent.locks中,是lock接口的唯一实现。 lock和...原创 2018-04-23 11:37:57 · 974 阅读 · 0 评论 -
Java高级技术第五章——高并发之读写锁(ReadWriteLock)
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195ReadWriteLockReadWriteLock也是一个接口,在它里面只定义了两个方法:public interface ReadWriteLock { /** * Returns the lock used fo...原创 2018-04-23 11:40:00 · 833 阅读 · 0 评论 -
Java高级技术第五章——高并发之ThreadLocal线程局部变量
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195ThreadLocal线程局部变量ThreadLocal是线程局部变量,使用空间换时间,而synchronized是使用时间换空间。比如在hibernate中session就存在于ThreadLocal中,避免了synchronized的使用。 ...原创 2018-04-23 11:47:34 · 400 阅读 · 0 评论 -
Java高级技术第五章——高并发之常用的线程安全的单例模式
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195线程安全的单例模式单例模式就是说系统中对于某个类只能有一个实例,多线程下面单例模式的线程安全问题是一个典型应用场景。一般常用单例模式做资源控制与调配,例如使用单例模式做一个线程池,数据库链接池等等。饿汉模式饿汉模式是在该类被加载的时候,就已...原创 2018-04-23 11:50:35 · 395 阅读 · 0 评论 -
Java高级技术第五章——高并发之同步容器
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195同步容器问题引出: 有N张火车票,每张票都有一个编号,同时有10个窗口对外售票,写一个模拟程序。public class TicketSeller { static List<String> tick...原创 2018-04-23 11:52:29 · 385 阅读 · 0 评论 -
Java高级技术第五章——高并发之并发容器详解
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195并发容器ConcurrentHashMap:在上面已经提到过ConcurrentHashMap,ConcurrentHashMap相比Hashtable能够进一步提高并发性,其原理图如下: HashMap,Hashtable与Conc...原创 2018-04-23 11:54:46 · 2963 阅读 · 0 评论 -
Java高级技术第五章——高并发之线程池
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195线程池线程的开启和回收是要消耗系统性能的,对于大量使用线程的场景,使用线程池来进行管理,实现单个线程的复用,提高并发效率。Callable对Runnable进行了扩展,相对于Runnable接口,Callable的调用是可以有返回值的。...原创 2018-04-23 11:59:34 · 5438 阅读 · 0 评论 -
Java高级技术第五章——高并发编程之从synchronized关键字到事务并发的若干问题
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195synchronized关键字通过该关键字的使用,保证可见性和原子性。 synchronized锁定的是一个对象而不是一个变量,由于保证每个经过synchronized修饰后的代码区域只能由一个线程来占有,这种锁也成为互斥锁。这个具体锁定的对象...原创 2018-04-19 17:41:30 · 1306 阅读 · 1 评论 -
Java高级技术第五章——聊聊volatile关键字
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195Volatile关键字volatile 关键字,使一个变量在多个线程间可见,即保证了线程间的可见性。这与C/C++中的同名关键字存在区别,在面试的时候,不要弄混了。 A、B线程都用到一个变量,JAVA默认是A线程中保留一份copy作为缓冲,这样...原创 2018-04-19 17:47:45 · 294 阅读 · 0 评论 -
Java高级技术第四章——Java的容器类概述
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195Java的容器类Java的集合类主要包括两部分,实现了Collection接口和实现了Map接口的实现类。 Collection接口的继承树类图如下所示: 可以看到,Collection接口可以分为三类:List,Set和Queue. ...原创 2018-03-21 10:30:37 · 730 阅读 · 0 评论 -
Java高级技术第三章——java.net包中的TCP/UDP/HTTP及其代理的实现
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195java.net定义了很多Java网络功能相关的功能,如socket、URI与URL相关、cookies等。TCP通信一个普通的socket通信写法很简单,如下: public static void main(Stri...原创 2018-02-12 10:43:01 · 1156 阅读 · 0 评论 -
Java高级技术第二章——JAVA的注解(annotation)
前言Java高级技术系列前言点击此处JAVA的注解注解是一种趋势,现在已经有不少的人开始用注解了,注解是JDK1.5之后才有的新特性。例如JDK1.5之后内部提供的三个经常使用的注解: @Deprecated 意思是“废弃的,过时的”,标记已过时,编译器不主张使用 @Override 意思是“重写、覆盖”,限制父类重写 @SuppressWarnings 意思是“压缩警告”,原创 2018-02-04 14:13:39 · 848 阅读 · 0 评论 -
Java高级技术系列之前言
Java高级技术系列之前言写的是什么? Java高级技术系列主要写有关Java编程中的一些高级特性,难点和技巧性内容,算是对即有知识的一个总结与梳理。大致内容从比较简单的反射,注解,高并发,设计模式等,再到JVM调优,JNI等稍微深入一点的内容。还涉及到微服务,RPC等比较热门的技术。同时还包括Java 编程规约,思想理念与JavaDoc等相关知识。为什么要写? 本着极客精神,原创 2018-01-20 11:51:48 · 2130 阅读 · 0 评论 -
Java高级技术第一章——JAVA基础精要
JAVA基本数据类型Java语言提供了八种基本类型: 六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 byte 数据类型是8位、有符号的,以二进制补码表示的整数;-128(-2^7) short 数据类型是 16 位、有符号的以二进制补码表示的整数;-32768(-2^15) int 数据类型是32位、有符号的以二进制补码表示的整数;-2,147,483,648原创 2018-01-20 13:53:14 · 1313 阅读 · 0 评论 -
Java高级技术第一章——你不知道的Java异常处理
前言Java高级技术系列前言点击此处JAVA的异常Java的异常类型: Throwable有两个子类:Error与Exception Exception有RuntimeException与IOException两个子类异常中finally与return finally语句是在try的return语句执行之后,return返回具体执行结果之前执行的。 例如下面的代码:原创 2018-01-20 14:03:19 · 753 阅读 · 0 评论 -
Java高级技术第一章之Java的泛型
前言Java高级技术系列前言点击此处Java的泛型泛型边界,参见下面的代码:public class Main { public static void main(String[] args) { FX ex_num = new FX(100); FX ex_int = new FX(200); FX ex_str = n原创 2018-01-20 14:07:51 · 684 阅读 · 1 评论 -
Java高级技术第一章——JAVA的动态绑定与静态绑定
前言Java高级技术系列前言点击此处JAVA的动态绑定与静态绑定 在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。动态绑定是将一个过程调用与相应代码链接起来的行为,是指与给定的过程调用相关联的代码,只有在运行期才可知的一种绑定,他是多态实现的具体形式。 静态绑定发生在编译时期,动态绑定发生在运行时。 使用private或stati原创 2018-01-20 14:10:55 · 1252 阅读 · 0 评论 -
Java高级技术第一章——Comparable接口
前言Java高级技术系列前言点击此处Comparable接口Comparable接口仅定义了一个方法,其源代码为:public interface Comparable public int compareTo(T o); //如果 this比 o 小,则返回一个负数,如果this比o大,则返回正数,否则返回0.}该接口常被用在: Collections.原创 2018-01-20 14:12:14 · 730 阅读 · 0 评论 -
Java高级技术第一章——equals方法与哈希编码(hashCode)
前言Java高级技术系列前言点击此处equals方法与哈希编码(hashCode)hashCode()方法和equals()方法是在Object类中就已经定义了,原始的equals()方法用来比较两个对象的地址值,而原始的hashCode()方法用来返回其所在对象的物理地址。equals()方法在Object中的默认实现是:public boolean equals(Obj原创 2018-01-20 14:13:38 · 831 阅读 · 0 评论 -
Java高级技术第一章——JAVA序列化与反序列化
前言Java高级技术系列前言点击此处JAVA序列化与反序列化Java序列化是指将Java的一个对象序列化为二进制数据,可以存储到文件中,也可以在网络中进行传输,使用时只需进行反序列化即可还原成一个具体的对象。 被序列化的类需要实现Serializable接口,使用ObjectInputStream()和ObjectOutputStream()方法进行对象序列化后二进制流的读写。 在原创 2018-01-20 14:15:10 · 777 阅读 · 0 评论 -
Java高级技术第二章——Java的四种引用类型,强引用,若引用,虚引用,软引用详解..
Java的引用机制有四种,强引用,弱引用,软引用和虚引用。 Java对比Cpp的一个典型的特征就是避免了手动去管理内存,不用自己去写析构函数。这在很大程度上降低了语言的难用程度,降低了内存泄漏和OOM情况的发生的概率。 但是,由于JVM回收对象的方式对程序员来讲是透明的,如果想要手动去调控某些对象的声明周期,可能不太容易操作。自从JAVA2之后,Java就将引用细分为原创 2018-02-05 15:04:01 · 833 阅读 · 0 评论 -
Java高级技术第三章——Java核心类库
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195Java自带很多实用的包,这些包中定义了很多类库,可以很方便地进行代码重用。 常用的Java核心包及其功能是: 包名 主要功能 java.applet 提供了创建applet需要的所有类 java.awt.* ...原创 2018-02-12 10:24:47 · 6566 阅读 · 0 评论 -
Java高级技术第三章—— Java的"万类之祖"Object类详解
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195Object类Java是单根继承的,故而Obeject类是所有类的父类。其JDK1.8中定义的源代码为:public class Object { private static native void registerNatives(...原创 2018-02-12 10:28:56 · 812 阅读 · 0 评论 -
Java高级技术第三章——Java的基本类型的包装类
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195基本类型的包装类基本类型的包装类也叫类型包容器,也叫打包类型(Wrapper Types),其包括10种,分别为: Integer 、Long、Short、Byte、Character、Double、Float、Boolean、BigIntege...原创 2018-02-12 10:32:38 · 695 阅读 · 0 评论 -
Java高级技术第三章——Java的String字符串类实现原理
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195字符串类String类型在Java中是不可变的类型,因为其在底层实现的是一个char类型的数组,利用该数组来存储String对象中数组的值,而数组是不可变的。 String类在JDK代码的实现中,引入了正则表达式来完成replace,split等...原创 2018-02-12 10:34:07 · 960 阅读 · 0 评论 -
Java高级技术第三章——Java的System类详解
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195System类概述System类是Java.lang包定义的一个静态的类,内部的方法都是静态的,且构造器是被private关键字修饰的,不可以被实例化。其内部定义了三个静态的属性,分别是:public final static In...原创 2018-02-12 10:35:15 · 936 阅读 · 0 评论 -
Java高级技术第三章——Java的Runtime类详解
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195Runtime类Java的Runtime类可以用来获取当前Java进程的运行时信息,诸如内存使用情况,加载动态库,获取CPU核心数,以及一些虚拟机相关的功能。运行shell利用Runtime类可以实现很多功能,例如执行shell,获取C...原创 2018-02-12 10:38:34 · 847 阅读 · 0 评论 -
Java高级技术第三章——Java处理时间的方法,详解Date,DateFormat,Calendar类
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195Java处理时间Java为我们提供了用于处理时间的类,通过这些类能够方便地进行时间方面的计算,包括获取某个时间的时间戳,根据时区对时间的转换等等。 这些类中往往都重写了compareTo()方法,能够通过该方法来对时间之间的先后顺序进行比较,非常...原创 2018-02-12 10:40:07 · 783 阅读 · 0 评论 -
Java高级技术第五章——高并发之AtomXXX系列
前言前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195AtomXXX类该类封装在java.util.concurrent.atomic包中,包中包括了AtomicInteger,Atomicboolean,AtomicIntegerArray等等类型。 这为我们提供了解决同样的加锁的问题的更高效的...原创 2018-04-19 18:08:31 · 1720 阅读 · 0 评论