Java
文章平均质量分 63
青葱岁月
个性开朗大方,从事互联网开发,擅长Java。喜欢唱歌,打篮球
展开
-
java.util.ConcurrentModificationException
在使用增强for循环遍历List时如果在循环中执行remove会报 java.util.ConcurrentModificationException异常。有两种解决办法:1.在循环遍历时先将需要删除的元素用另一个List包装起来,等遍历结束再remove掉。示例如下:List<Group> delList = new ArrayList<Group>...原创 2012-05-22 12:08:41 · 82 阅读 · 0 评论 -
JVM学习笔记(三):JVM的垃圾回收
注:本文根据《深入理解Java虚拟机》第3章部分内容整理而成。 一.如何判断对象是否需要回收? 堆中几乎放着java世界中的所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是要确定这些对象哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。而如何判断对象是否应该回收,存在两个算法:引用计数算法(Reference Counting)和根搜索算法(GC...2012-07-12 21:06:50 · 89 阅读 · 0 评论 -
JVM学习笔记(四):Class文件结构
本文根据《深入理解Java虚拟机》第6章内容整理 一、Java的语言无关性 到今天为止,或许大部分的程序员都还认为Java虚拟机执行Java程序是一件理所当然和天经地义的事情。但在Java发展之初,设计者们就考虑过了在Java虚拟机上运行其它语言的可能性。时至今日商业机构和开源机构以及在Java语言之外发展出一大批在Java虚拟机上运行的语言,如Clojure,Gro...2012-07-17 18:29:21 · 138 阅读 · 0 评论 -
JVM学习笔记(五):根据字节码指令介绍方法执行流程
在上一篇博客中介绍了《Class文件结构》,其中就提到了一个例子,下面我们依然根据该例子的字节码来对方法的执行流程进行讲解。 java类源码如下: public class TestClass{ private int num; public int inc(){ for(int i=0; i<10; i++){ num = i;...2012-07-17 19:48:34 · 118 阅读 · 0 评论 -
JVM学习笔记(六):类加载的时机
本文根据《深入理解java虚拟机》第7章部分内容整理 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)...2012-07-18 14:58:46 · 185 阅读 · 0 评论 -
JVM学习笔记(七):类加载的过程
本文根据《深入理解java虚拟机》第7章部分内容整理 在我的上一篇文章《JVM学习笔记(六):类加载的时机》中提到了java类从加载到卸载过程包括了加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和卸载(Unloading)七个阶段。下面我们来详...2012-07-19 18:59:43 · 119 阅读 · 0 评论 -
JVM学习笔记(八):类加载器以及双亲委派模型介绍
本章内容根据《深入理解Java虚拟机》第7章部分内容整理 1.什么是类加载器? 在类加载阶段,有一步是“通过类的全限定名来获取描述此类的二进制字节流”,而所谓的类加载器就是实现这个功能的一个代码模块,这个动作是在Java虚拟机外部实现的,这样做可以让应用程序自己决定如何去获取所需要的类。 类加载器的作用:首先类加载器可以实现最本质的功能即类的加载动作。同时,它还能...2012-07-19 21:02:41 · 106 阅读 · 0 评论 -
使用maven插件对java工程进行打包
现在基本上都是采用maven来进行开发管理,我有一个需求是需要把通过maven管理的java工程打成可执行的jar包,这样也就是说必需把工程依赖的jar包也一起打包。而使用maven默认的package命令构建的jar包中只包括了工程自身的class文件,并没有包括依赖的jar包。我们可以通过配置插件来对工程进行打包,pom具体配置如下:maven-assembly-plugin<p...2012-10-26 17:30:30 · 710 阅读 · 0 评论 -
JVM学习笔记(九):基于栈的解释器执行过程
本文根据《深入理解java虚拟机》第8章部分内容整理 根据一个代码实例来介绍虚拟机中解释器的执行过程,代码如下所示: public int calculate(){ int a = 100; int b = 200; int c = 300; return (a + b) * c;}由上面的代码可以看出,该方法的逻辑很简单,就是进行简单的四则运算加减乘除,我...2012-07-26 00:37:37 · 306 阅读 · 0 评论 -
kaptcha验证码组件使用简介
Kaptcha是一个基于SimpleCaptcha的验证码开源项目。官网地址:http://code.google.com/p/kaptcha/ kaptcha的使用比较方便,只需添加jar包依赖之后简单地配置就可以使用了。kaptcha所有配置都可以通过web.xml来完成,如果你的项目中使用了Spring MVC,那么则有另外的一种方式来实现。 一、简单的jsp-ser...2013-12-10 11:53:33 · 423 阅读 · 0 评论 -
判断一个请求是否为Ajax请求
这几天在写一个网站的登录判断拦截器,需要对请求进行拦截,在拦截器中我需要判断HttpServletRequest是否为Ajax异步请求。我们可以通过X-Requested-With="XMLHttpRequest"来判断这个请求是否为Ajax请求!/** * isAjaxRequest:判断请求是否为Ajax请求. <br/> * * @author chenzh...2012-03-09 10:30:08 · 98 阅读 · 0 评论 -
JVM学习笔记(二):JVM中对象访问的两种方式
由于Reference类型在Java虚拟机规范里面只规定了一个指向对象的引用,并没有定义这个引用应该通过哪种方式去定位,以及访问到Java堆中的对象的具体位置,因此不同虚拟机实现的对象访问方式会有所不同,主流的访问方式有两种:使用句柄和直接指针:如果使用句柄访问方式,Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型...2012-07-11 18:32:48 · 132 阅读 · 0 评论 -
JVM学习笔记(一):运行时数据区
运行时数据区 java虚拟机定义了若干种程序运行时使用到的运行时数据区1.有一些是 随虚拟机的启动而创建,随虚拟机的退出而销毁2.第二种则是与线程一一对应,随线程的开始和结束而创建和销毁。java虚拟机所管理的内存将会包括以下几个运行时数据区域 PC寄存器也叫程序计数器(Program Counter Register)是一块较小的内存空间,它的...2012-07-11 17:31:59 · 123 阅读 · 0 评论 -
JDBC连接执行MySQL存储过程报权限错误
在java中通过JDBC连接MySQL执行存储过程时报错: java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connectio...原创 2012-05-28 14:40:05 · 268 阅读 · 0 评论 -
常用的JDBC各种数据库连接
1、Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String user="test"; String pass...原创 2012-06-04 18:15:32 · 98 阅读 · 0 评论 -
Spring拦截器中通过request获取到该请求对应Controller中的method对象
背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置。我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Controller中的目标method方法对象。Controller和拦截器代码如下: AdminController @Controller@RequestMapping("/admin")...2012-10-21 16:51:35 · 1257 阅读 · 0 评论 -
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
在项目中用到了bonecp连接池,启动tomcat时报异常:java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder具体报错信息如下:Error creating bean with name 'bonecp' defined in class path resource [config/sp...原创 2012-06-18 10:24:21 · 1081 阅读 · 0 评论 -
java.lang.NoClassDefFoundError: org/aspectj/weaver/BCException
在项目中使用了Spring管理和配置事务,在启动tomcat时报错:nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/BCException具体报错信息如下:Error creating bean with name 'c3p0' defined in class path re...原创 2012-06-18 10:27:56 · 150 阅读 · 0 评论 -
自定义Annotation
定义简单的Annotation Annotation的定义格式: [public] @interface Annotation名称{ 数据类型 变量名称();} 定义一个简单的Annotation public @interface MyDefaultAnnotationNoneParam {} 之后就可以直接在程序中使用”@Ann...2012-02-19 20:59:18 · 96 阅读 · 0 评论 -
Maven聚合与继承
Maven聚合与继承一、聚合为了能够使用一条命令就能构建 account-email和 account-persist两个模块,我们需要建立一个额外的名为 account-aggregator的模块,然后通过该模块构建整个项目的所有模块。 account-aggregator本身也是个 Maven项目,它的 POM如下<project> <m...原创 2012-07-08 23:22:26 · 226 阅读 · 0 评论 -
Maven依赖管理
Maven提供dependencyManagement 元素既能让子模块继承到父模块的依赖配置,又能保证自模块依赖的使用灵活性。(有选择的继承)可在accout-parent 中加入: <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema...2012-07-08 23:35:26 · 102 阅读 · 0 评论 -
MyBatis批量插入数据
在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用MyBatis批量插入,由于之前没用过批量插入,在网上找了一些资料后最终实现了,把详细过程贴出来。 实体类TrainRecord结构如下: public class TrainRecord implements Serializable {...原创 2012-07-10 08:50:26 · 6050 阅读 · 0 评论 -
由缓存导致的一个java序列化问题
背景描述:项目是普通的java服务,以jar包的形式部署,前几天升级了一下服务,部署运行后跟踪日志发现时不时抛异常信息。具体报错信息如下:[2013-09-22 17:30:53,653] - [pool-3-thread-3] - ERROR - Caught IOException decoding 1061 bytes of datajava.io.InvalidClas...原创 2013-09-24 22:38:53 · 548 阅读 · 0 评论