java
文章平均质量分 69
西楚小羽的窝窝
奔跑吧,程序猿
展开
-
深入理解Java对象序列化
1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。 使用Java对象序列化,在保存对象原创 2015-03-17 16:34:40 · 773 阅读 · 0 评论 -
类加载器详解
首先来了解一下字节码和class文件的区别:我们知道,新建一个java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的bin目录下)指定的目录下的.class文件,类加载需要将.class文件导入到硬盘中,经过一些处理之后变成字节码在加载到内存中。下面来看一下简单的例子:package com.转载 2016-04-08 00:00:00 · 787 阅读 · 0 评论 -
探索 ConcurrentHashMap 高并发性的实现机制
简介ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型。同时,ConcurrentHashMap 的源代码会转载 2015-03-22 21:01:06 · 638 阅读 · 0 评论 -
java泛型(一)
Java泛型(Generics)是JDK5开始引入的一个新特性,允许在定义类和接口的时候使用类型参数(Type Parameter)。声明的类型参数在使用时用具体的类型来替换,现在泛型最主要的应用是在JDK5中的新集合类框架中,Map, List均有用到。其中的优点不言而喻,我们可以横向扩展更多的类,缺点呢,其实也就是他的优点,因为这需要我们在使用泛型类的时候,要很清楚自己的代码目地,不能使用错误原创 2016-01-04 15:40:51 · 569 阅读 · 0 评论 -
如何正确的姿势获取totalPage
今天项目中一个分页小需求,已经能够知道数据总条数total,和每页的数据条数size,计算总页数的情况:一开始是这样子算的:total /size +1,但是这种情况下如果total = 8 size = 8 的情况就是2页了,这是不对的。然后开始尝试这样子的:Math.ceil(total / size) 但是这种结果也是不对的。凑整:Math.ceil(2)=2凑整:M原创 2016-08-04 18:33:29 · 3229 阅读 · 0 评论 -
探索 JUnit 4.4 新特性
随着当前 Java 开发的越发成熟,Agile 和 TDD 的越发流行,自动化测试的呼声也越来越高。若想将单元测试变得自动化,自然 JUnit 这把利器必不可少,这也是 JUnit 自 1997 年诞生以来在 Java 开发业界一直相当流行的原因。JUnit 是针对 Java 语言的一个单元测试框架,它被认为是迄今为止所开发的最重要的第三方 Java 库。 JUnit 的优点是整个测试过程无需转载 2016-08-03 11:01:53 · 692 阅读 · 0 评论 -
Bean Validation 技术规范特性概述
概述 Bean Validation 规范Bean 是 Java Bean 的缩写,在 Java 分层架构的实际应用中,从表示层到持久化层,每一层都需要对 Java Bean 进行业务符合性验证,如图 1 所示。然而对于同一个 Java Bean 的对象,在每一层都需要实现同样的验证逻辑时,这将是一项耗时且容易诱发错误的做法。Bean Validation 规范的目标就是避免多层验证的重复性。转载 2016-08-08 19:48:23 · 713 阅读 · 0 评论 -
Iterable接口和Iterator迭代器
iterator接口定义如下public interface Iterator { boolean hasNext(); E next(); void remove();}该接口仅仅包含了三个函数,hasNext()和next()方法在我们常用的集合遍历中出现。 三个函数的作用:使用next()获得序列中的下一个元素。使用hasNext()检查序列中是否原创 2016-08-31 10:40:51 · 758 阅读 · 0 评论 -
使用POI导入数据到Excel数据量过大报错解决方案
导出excel报不能超过4000行错误 POI操作Excel中,导出的数据不是很大时,则不会有问题,而数据很多或者比较多时,就会报以下的错误,是由于cell styles太多create造成,故一般可以把cellstyle设置放到循环外面 报错如下:java.lang.IllegalStateException: The maximum number of cell styles w原创 2016-08-12 09:47:43 · 9317 阅读 · 2 评论 -
poi的使用以及简单介绍
最近在做项目的过程中需要将页面信息转换成excel表格输出,在多方面选择之下,最后使用了开源框架poi,使用过程中遇到过一些问题和总结了一些经验,记录下来,方便日后查阅。一、导入jar包要使用一个框架,首先要导入相应的jar包,poi的jar包去网上搜索就可以了,因为本人是使用Maven构建的项目,所以将pom文件中的引用贴出: org.apache.poi转载 2016-08-12 10:48:40 · 3717 阅读 · 0 评论 -
Java 日期字符串date与数字long之间的转换
public class SimpleDateUtil { // 短日期格式 public static String DATE_FORMAT = "yyyy-MM-dd"; // 长日期格式 public static String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; /** * 将日期格式的字符串转换为长整型 * * @原创 2016-08-12 11:36:51 · 19013 阅读 · 0 评论 -
构造函数、静态语句块、非静态语句块的执行顺序
1.用来测试的父类package staticConstruct;public class TestFather { public TestFather() { System.out.println("我是无参数构造,父类"); } public TestFather(String a) { System.out.println("我是有参数构造,父类,参数是" + a);原创 2015-03-01 19:11:06 · 833 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间区别
java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。它们的异同点:* 1) 都是 final 类, 都不允许被继承;* 2) String 长度是不可变的, StringBuffer、StringBuilder 长度是可变的;* 3) StringBu原创 2016-01-05 21:57:44 · 539 阅读 · 0 评论 -
String源码分析之Java中的String为什么是不可变的以及replace方法源码分析
什么是不可变对象?众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。区分对象和对象的引用对于Java初学原创 2015-06-18 16:55:16 · 1131 阅读 · 0 评论 -
Java 中正确使用 hashCode 和 equals 方法
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。 虽然,每个Java类都包含hashCode() 函数。但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说转载 2016-07-19 17:15:47 · 654 阅读 · 0 评论 -
FastJSON、Jackson和Gson用法
一、JSON规范JSON是一个标准规范,用于数据交互,规范的中文文档如下:http://www.json.org/json-zh.html参看规范,来对比JSON类库处理结果。 二、fastjson的一些简要说明Fastjson是一个Java语言编写的JSON处理器。1、遵循http://json.org标准,为其官方网站收录的参考实现之一。2、功能qiang打,支原创 2016-03-31 16:06:15 · 4187 阅读 · 0 评论 -
intellij idea导入极验验证码官方demo以及在Tomcat中部署
1、官方下载源码http://docs.geetest.com/install/server/java/2、导入项目找到项目目录3、选择Create project from existing sources4、删除out文件夹(如果存在先删除)5、找到Project Structure6、删除lib7、删除Web8、构建Artifacts9、部署到Tomcat取个名称添加Artifact添加成功...原创 2017-09-05 12:52:37 · 1495 阅读 · 0 评论 -
java中字节流与字符流的区别详解
字节流与字符流先来看一下流的概念:在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。字节流与字符流在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是原创 2015-03-01 18:04:20 · 1475 阅读 · 0 评论 -
再谈Java反射机制
一、基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的。 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制。二、Java反射机制主要提供了以下功能: 1.在运行时判断任意一个对象所属的类。 2.在运行时构造任意一个类原创 2016-04-06 14:48:07 · 466 阅读 · 0 评论 -
ArrayList的实现原理
1. ArrayList概述: ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自原创 2015-03-17 19:58:56 · 805 阅读 · 0 评论 -
LinkedList的实现原理
1. LinkedList概述: List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以原创 2015-03-17 20:49:56 · 676 阅读 · 0 评论 -
HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的原创 2015-03-17 21:41:22 · 600 阅读 · 0 评论 -
深入理解Java注解
什么是注解(Annotation):Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息或者任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。 Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档原创 2015-06-07 16:25:51 · 902 阅读 · 0 评论 -
四道Java基础题
一、==符的使用首先看一段比较有意思的代码Integer a = 1000,b=1000; Integer c = 100,d=100;System.out.println(a==b); System.out.println(c==d);首先公布下答案, 运行代码,我们会得到 false true。我们知道==比较的是两个对象的引用,这里的abcd都是新建出来的对象,按理原创 2016-01-03 15:20:28 · 541 阅读 · 0 评论 -
Java回调机制(异步)
所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式:1)Class A实现接口CallBack callback——背景12)class A中包含一个class B的引用b ——背景23)class B有一个参数为callback的方法f(CallB原创 2016-01-03 16:22:21 · 602 阅读 · 0 评论 -
Arrays.asList() 返回的list不能add,remove以及慎用java.util.Collections.copy()方法
今天在搜索数组和集合对象相互转化的问题时,发现了一些有趣的问题,在此和大家进行共勉~如有不合适的地方望更正。1、如果只是想将数组转换成List,可以用JDK中的java.util.Arrays类:import java.util.Arrays; String[] strArray = {"aaa", "bbb", "ccc"}; List strList = Array原创 2016-01-04 21:48:15 · 4800 阅读 · 0 评论 -
java泛型(二)? super T 和 ? extends T 消费者和生产者
经常发现有List、Set的声明,是什么意思呢?表示包括T在内的任何T的父类,表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。extendsList foo3的通配符声明,意味着以下的赋值是合法的:// Number "extends" Number (in this context)List foo3 = new ArrayList();//转载 2016-01-04 23:09:41 · 2864 阅读 · 0 评论 -
Java中的clone方法详解
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1 使用new操作符创建一个对象2 使用clone方法复制一个对象那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行原创 2015-06-18 13:53:20 · 1112 阅读 · 0 评论 -
邮件的发送与接收原理
一、 邮件开发涉及到的一些基本概念1.1、邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。 电子邮箱(E-M转载 2016-01-06 15:37:16 · 1205 阅读 · 0 评论 -
JavaMail邮件传输
QQ邮箱服务器网易邮箱服务器一、发送一封只包含文本的简单邮件import java.util.Properties;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetA原创 2016-01-06 23:32:50 · 779 阅读 · 0 评论 -
使用Cookie进行会话管理
一、会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这称之为有状态会话。二、会话过程中要解决的一些问题? 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。三原创 2016-01-07 16:07:20 · 524 阅读 · 0 评论 -
Session
一、Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。二、Session和Cookie的转载 2016-01-07 17:10:57 · 487 阅读 · 0 评论 -
使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交。一、表单重复提交的常见应用场景有如下的form.jsp页面 Form表单 用户名: form表单转载 2016-01-07 23:53:17 · 725 阅读 · 0 评论 -
集合的遍历(多线程)及ConcurrentModificationException
为了保证线程安全,在迭代器迭代的过程中,线程是不能对集合本身进行操作(修改,删除,增加)的,否则会抛ConcurrentModificationException的异常。public class TestConcurrent { public static void main(String[] args) { Collection num = new ArrayList(); num原创 2016-03-31 21:40:41 · 3791 阅读 · 0 评论 -
Java反射机制详解
一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。 二、哪里用到反射机制 有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码, Class.forName("com.mysql.jdbc.原创 2015-06-14 13:53:37 · 747 阅读 · 0 评论 -
深入分析动态代理
Java作为动态语言的特点,这里要做的就是,通过代码来把一个存有java代码的简单的小程序写入到一个java文件中,然后调用java的CompilationTask对其进行编译,然后实例化,接下来自然就是调用运行了。 大体流程: 1)组织字符串,也就是要生成的java的代码 2)写入到文件中去,名字暂时定为:TankTimeProxy.java,package为dhp.proxy.co原创 2016-01-15 17:00:31 · 546 阅读 · 0 评论