深入了解Java
文章平均质量分 72
战争学院
祖国的花朵
展开
-
详解Java中的clone方法
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢? 1 使用new操作符创建一个对象 2 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程转载 2016-08-23 12:05:59 · 218 阅读 · 0 评论 -
java集合类深入分析之TreeMap/TreeSet篇
简介 TreeMap和TreeSet算是java集合类里面比较有难度的数据结构。和普通的HashMap不一样,普通的HashMap元素存取的时间复杂度一般是O(1)的范围。而TreeMap内部对元素的操作复杂度为O(logn)。虽然在元素的存取方面TreeMap并不占优,但是它内部的元素都是排序的,当需要查找某些元素以及顺序输出元素的时候它能够带来比较理想的结果。可以说,TreeMa转载 2016-07-25 16:44:54 · 240 阅读 · 0 评论 -
java并发之线程封闭
线程封闭实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发。避免并发最简单的方法就是线程封闭。什么是线程封闭呢?就是把对象封装到一个线程里,只有这一个线程能看到此对象。那么这个对象就算不是线程安全的也不会出现任何安全问题。实现线程封闭有哪些方法呢?1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的线程封闭完全靠实现者实现。也是最糟糕的转载 2016-07-25 15:41:41 · 354 阅读 · 0 评论 -
java并发之原子性与可见性
原子性原子是世界上的最小单位,具有不可分割性。比如 a=0;(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原子操作。再比如:a++; 这个操作实际是a = a + 1;是可分割的,所以他不是一个原子操作。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。一个操作是原子操作,那么我们称它具有原子性。java的转载 2016-07-25 15:20:34 · 237 阅读 · 0 评论 -
Java transient关键字使用小记
http://www.cnblogs.com/lanxuezaipiao/p/3369962.html#top 哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~好了,废话不多说,下面开始:1.转载 2016-07-23 16:10:58 · 209 阅读 · 0 评论 -
Java对象的序列化和反序列化
http://www.cnblogs.com/xdp-gacl/p/3777987.html一、序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。转载 2016-07-23 15:59:06 · 126 阅读 · 0 评论 -
java21个知识点重点
http://blog.csdn.net/jerroluo/article/details/520025851. JVM相关(包括了各个版本的特性)对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。JVM作为java运行的基础,很难相信对于JVM转载 2016-07-23 10:18:57 · 208 阅读 · 0 评论 -
Java序列化与反序列化
http://blog.csdn.net/wangloveall/article/details/7992448Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨。 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程转载 2016-07-23 10:16:05 · 134 阅读 · 0 评论 -
Java enum的用法详解
Java enum的用法详解用法一:常量在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch转载 2016-06-07 09:38:01 · 218 阅读 · 0 评论 -
Java基本数据类型
Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定。由于是statical typed,导致Java语言也是强类型(Strong typed)的。强类型意味着每个变量都具有一种类型,每个表达式具有一种类型,并且每种类型都是严格定义的,类型限制了变量可以hold哪些值,表达式最终产生什么值。同时限制了这些值可以进行的操作类型以及操作的具体方原创 2016-05-06 13:23:40 · 748 阅读 · 0 评论 -
JTA 深度历险 - 原理与实现
在 J2EE 应用中,事务是一个不可或缺的组件模型,它保证了用户操作的 ACID(即原子、一致、隔离、持久)属性。对于只操作单一数据源的应用,可以通过本地资源接口实现事务管理;对于跨数据源(例如多个数据库,或者数据库与 JMS)的大型应用,则必须使用全局事务 JTA (Java Transaction API)。JTA 为 J2EE 平台提供了分布式事务服务,它隔离了事务与底层的资源,实现了透转载 2016-05-04 18:34:41 · 194 阅读 · 0 评论 -
Java中反射机制(Reflection)学习
Java语言的反射机制初步学习首先看下基本概念: (一)在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。 Java 反射机制主要提供了以下功能: ①:在转载 2016-05-11 17:00:55 · 208 阅读 · 0 评论 -
StringBuilder、StringBuffer和String详解
StringBuilder、StringBuffer和String详解原创 2016-05-10 22:18:41 · 435 阅读 · 0 评论 -
Java NIO:NIO概述
Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题。NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题。本文下面分别从Java NIO的几个基础概念介绍起。 以下是本文的目录大纲: 一.NIO中的几个基础概念 二.Channel 三.Buffer 四.Selecto转载 2016-04-14 01:07:32 · 218 阅读 · 0 评论 -
java内存模型与多线程
现代计算机,cpu在计算的时候,并不总是从内存读取数据,它的数据读取顺序优先级是:寄存器-高速缓存-内存,线程计算的时候,原始的数据来自内存,在计算过程中,有些数据可能被频繁读取,这些数据被存储在寄存器和高速缓存中,当线程计算完后,这些缓存的数据在适当的时候应该写回内存,当多个线程同时读写某个内存数据时,由于涉及数据的可见性、操作的有序性,所以就会产生多线程并发问题。 Java作为平转载 2016-07-26 19:31:37 · 188 阅读 · 0 评论 -
Java 并发编程:核心理论
并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。在此基础上,我们会进一转载 2016-07-26 20:03:27 · 249 阅读 · 0 评论 -
Java 异步回调机制实例解析
什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道“就一个回调…”。此时千万个草泥马飞奔而过哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉。不妨总结总结。一、什么是回调回调,回调。要先有调用,才有调用者和被调用者之间的回调。所以在百度百科中是这样的:软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。转载 2016-09-11 07:55:41 · 319 阅读 · 0 评论 -
JVM三种垃圾收集算法思想及发展过程
JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程。所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的。1.标记-清除算法标记-清除(Mark-Sweep)算法是最基础的垃圾收集算法。正如其名字描述的那样,该算法分为两个阶段:“标记”和“清除”。首先标记出所有可以被回收的对象,然后经过一轮垃圾回收将所有被标记的对象的内存空间释放,即清转载 2016-08-19 11:44:07 · 277 阅读 · 0 评论 -
Java对象的创建 —— new之后JVM都做了什么?
Java对象创建过程1. 类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有则进行相应的类加载过程。(我之后会写一篇关于类加载顺序和过程的博客,并在此补充连接地址)2. 分配内存空间类加载检查通过之后,JVM将为新生对象在堆中分配内存。对象所需内转载 2016-08-19 11:43:09 · 429 阅读 · 0 评论 -
Java并发编程:阻塞队列
Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(L转载 2016-08-18 23:36:32 · 268 阅读 · 1 评论 -
Java内存泄露原因详解
一、Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方转载 2016-08-07 09:43:49 · 206 阅读 · 0 评论 -
Java多线程:线程状态
一. 线程状态类型1. 新建状态(New):新创建了一个线程对象。2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂转载 2016-08-06 14:10:08 · 171 阅读 · 0 评论 -
JUnit报initializationError错误
1.可能没有引入JUnit包2.JUni包冲突,解决冲突原创 2016-07-18 20:34:36 · 308 阅读 · 0 评论 -
Java BigDecimal和double
Java BigDecimal和doubleBigDecimal类对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。BigDecimal类的常用方法如表11-15所示。表11-15 BigDecimal类的常用方法转载 2016-06-21 11:53:32 · 323 阅读 · 0 评论 -
虚拟机中的锁优化简介(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
高效并发是JDK 1.6的一个重要主题,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁削除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、偏向锁(Biased Locking)等,这些技术都是为了在线程之间更高效地共享数据,以转载 2016-07-26 23:32:40 · 553 阅读 · 0 评论 -
Java 并发编程:volatile的使用及其原理
一、volatile的作用 在《Java并发编程:核心理论》一文中,我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用Synchronized来解决问转载 2016-07-26 23:25:10 · 190 阅读 · 0 评论 -
Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
一、线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。 New:新建状态,当线程创建完成时为新建状态,即new Thread(...),还没有调用start方法时,线程处于新建状态。 Runnable:就绪状态,当调用线程的的start方法后,线转载 2016-07-26 23:16:24 · 284 阅读 · 0 评论 -
Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
一、重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchron转载 2016-07-26 23:03:38 · 400 阅读 · 0 评论 -
Java并发编程:Synchronized及其实现原理
一、Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法: (1)修饰普通方法 (2)修饰静态方法转载 2016-07-26 22:31:37 · 330 阅读 · 0 评论 -
Java动态代理一——动态类Proxy的使用
Java动态代理一——动态类Proxy的使用1.什么是动态代理?答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。2.为什么使用动态代理?答:因为动态代理可以对请转载 2016-04-14 01:02:03 · 203 阅读 · 0 评论 -
JVM内存回收机制简述
http://www.cnblogs.com/lzrabbit/p/3826738.htmlJVM内存回收机制简述JVM内存回收机制涉及的知识点太多了,了解越多越迷糊,汗一个,这里仅简单做个笔记,主要参考《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》目前java的jdk默认虚拟机为HotSpot,因此本文涉及虚拟机相关内容都指HotSpot虚拟机转载 2016-04-12 21:26:32 · 254 阅读 · 0 评论 -
hashmap实现原理浅析
http://www.cnblogs.com/lzrabbit/p/3721067.htmlhashmap实现原理浅析看了下JAVA里面有HashMap、Hashtable、HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正HashMap和Hashtable的区别HashSet和HashMap、Hashtable的区别HashM转载 2016-04-12 21:19:13 · 233 阅读 · 0 评论 -
“快速失败”也就是fail-fast,Java集合的一种错误检测机制。
原文出自:http://cmsblogs.com/?p=1220,个人站点:http://cmsblogs.com 在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 Concur转载 2016-01-15 10:21:55 · 1184 阅读 · 0 评论 -
Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
文章出处:http://kentkwan.iteye.com/blog/739514Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨Part I没啥好说的,直接开始Part II吧。 Part II谈到了对象的克隆,就不得不说为什么要对对象进行克隆。Java中所有的对象都是保存在堆中,而堆转载 2016-01-14 21:02:47 · 232 阅读 · 0 评论 -
深入了解Java之六(JDBC)
1.什么是JDBC?解释下驱动(Driver)在JDBC中的角色。Class.forName()方法有什么作用?PreparedStatement比Statement有什么优势?JDBC是允许用户在不同数据库之间做选择的一个抽象层。JDBC允许开发者用JAVA写数据库应用程序,而不需要关心底层特定数据库的细节。 JDBC驱动提供了特定厂商对JDBC API接口类的实现,驱动必须要提供java.sq原创 2016-03-02 10:22:46 · 356 阅读 · 0 评论 -
Statement和PreparedStatement之间的区别
ref: http://www.cnblogs.com/raymond19840709/archive/2008/10/13/1309657.htmlStatement和PreparedStatement之间的区别1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement 对象。在对数据库只执行一次转载 2016-03-01 22:39:34 · 291 阅读 · 0 评论 -
深入了解Java之三(集合方面)
1.Enumeration接口和Iterator接口2.HashSet,LinkedHashSet和TreeSet区别原创 2016-01-29 11:03:33 · 232 阅读 · 0 评论 -
Java中equals和==的区别
Java中equals和==的区别java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,转载 2016-01-29 10:48:20 · 213 阅读 · 0 评论 -
Enumeration接口和Iterator接口
分析Enumeration接口和Iterator接口的区别。原创 2016-01-29 10:26:07 · 449 阅读 · 0 评论 -
深入了解Java之一
1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。![这里写图片描述](http://i原创 2016-01-11 20:28:51 · 359 阅读 · 0 评论