
Java编程
文章平均质量分 69
lingzhm
好记性不如烂博客,浸淫Java若干年
展开
-
Java利用 AES/ECB/PKCS5Padding 算法加解密
Java利用 AES/ECB/PKCS5Padding 算法加解密。 package com.newland.njwpayment.utils; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import Decoder.BASE64...转载 2018-06-22 16:39:28 · 37186 阅读 · 1 评论 -
Java提高篇(三四)-----fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失转载 2015-08-09 14:56:47 · 665 阅读 · 0 评论 -
Java生成MD5摘要(MD5 SHA-1)
MD5 (Message Digest Algorithm 5 信息—摘要算法5 ) 的一些体会 一、若我们定义一个函数 ,原型为: String MD5 ( Information info) 其中Information 表示任意长度的信息,注意是任意长度的。 实现这个函数的最终要求: 1、对于不同的输入信息,产生的返回值 结果不同 且必须唯一 2. 改算法不转载 2015-04-27 10:38:45 · 3417 阅读 · 0 评论 -
深入理解Java的接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,转载 2015-04-16 20:38:15 · 572 阅读 · 0 评论 -
Java中的Set集合接口实现插入对象不重复的原理
在java的集合中,判断两个对象是否相等的规则是:1)、判断两个对象的hashCode是否相等 。 如果不相等,认为两个对象也不相等,完毕 如果相等,转入2)(这一点只是为了提高存储效率而要求的,其实理论上没有也可以,但如果没有,实际使用时效率会大大降低,所以我们这里将其做为必需的。后面会重点讲到这个问题。) 2)、判断两个对象用equals运算是否相等原创 2015-04-02 13:54:40 · 4414 阅读 · 0 评论 -
Servlet的生命周期
Servlet的生命周期是由Servlet的容器来控制的,它可以分为3个阶段;初始化,运行,销毁。初始化阶段:1,Servlet容器加载servlet类,把servlet类的.class文件中的数据读到内存中。2,然后Servlet容器创建一个ServletConfig对象。ServletConfig对象包含了Servlet的初始化配置信息。3,Servlet容器创建一个s转载 2015-04-16 20:49:11 · 735 阅读 · 0 评论 -
Java8 十大新特性详解
本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API“Java is still not dead—and people are starting to figure that out.”本教程将用带注释的简单代转载 2015-04-08 21:21:02 · 2383 阅读 · 0 评论 -
Java 多线程实现生产者消费者问题(wait/notify)
本文参考网上一些例子,使用synchronized及对象的wait/notify方法实现。首先定义3个类,一个是容器类,属性有容器最大容量和当前容量;另外两个分别是生产者和消费者类,二者分别有生产方法和消费方法(均在各自的run方法中实现,实际上最好抽离出来成为一个单独的方法)package test3;class Container{ public int max; /原创 2015-04-08 20:59:32 · 1233 阅读 · 0 评论 -
Java NIO 进程间通信
传统的进程间通信的方式有大致如下几种:(1) 管道(PIPE) (2) 命名管道(FIFO) (3) 信号量(Semphore) (4) 消息队列(MessageQueue) (5) 共享内存(SharedMemory) (6) SocketJava如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的转载 2015-04-13 15:14:46 · 2958 阅读 · 0 评论 -
Java8 Arrays.sort VS Arrays.parallelSort
所有的开发者都会用到Arrays.sort来进行对象和原生数组进行排序,这个API会使用归并排序或者Tim排序来进行排序,源码如下所示:123456public static void sort(Object[] a) { if (LegacyMergeSort.userRequested) legacyMergeSo转载 2015-04-16 16:53:13 · 1507 阅读 · 0 评论 -
Java对象的序列化和反序列化Serializable
对象的序列化对象序列化就是把一个对象变为二进制数据流的一种方法。一个类要想被序列化,就行必须实现java.io.Serializable接口。虽然这个接口中没有任何方法,就如同之前的cloneable接口一样。实现了这个接口之后,就表示这个类具有被序列化的能力。先让我们实现一个具有序列化能力的类吧:1234567891转载 2015-04-14 21:02:32 · 4347 阅读 · 0 评论 -
彻底理解ThreadLocal
ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,转载 2016-05-17 20:01:29 · 702 阅读 · 0 评论 -
集群间Session共享问题解决方案
1.背景随着互联网的日益壮大,网站的pv和uv成线性或者指数倍的增加.单服务器单数据库早已经不能满足实际需求。目前大多数大型网站的服务器都采用了分布式服务集群的部署方式,所谓集群,就是让一组计算机服务器协同工作,解决大并发,大数据量瓶颈问题。但是在服务集群中,session共享往往是一个比较头疼的问题。因为session是在服务器端保存的,如果用户跳转到其他服务器的话,session就会丢失,转载 2015-07-20 10:14:06 · 15313 阅读 · 0 评论 -
Java中finalize()用法
垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能(这 里面涉及到很多东西,比如对象空间树等内容)。不过用Java以外的代码编写的Class(比如JNI,C++的new方法分配的内存),垃圾回收器并不能对这些部分进行正确的回收,这转载 2015-09-26 16:22:30 · 910 阅读 · 0 评论 -
java中遍历MAP的几种方法
java中遍历MAP的几种方法 Java代码Map map=new HashMap(); map.put("username", "qq"); map.put("passWord", "123"); map.put("userID", "1"); map.put("email", "qq@qq.com"); Map map=new HashM转载 2015-09-01 15:25:02 · 666 阅读 · 0 评论 -
Java位运算
/* 位运算 * java使用补码来表示2进制数,最高位为符号位,正数为0,负数为1,补码规定: * 整数,最高位是0,其余是本身,如 +42的补 码 为 00101010 * 负数,最高位是1,将其余的决定值按位取反,最后+1,即为负数的补码; * 如 -42的 补 码 为 11010110 (00101010 按位 取 反 11010101 +1=1101011转载 2015-08-31 10:33:21 · 803 阅读 · 0 评论 -
java类加载全过程
一个java文件从被加载到被卸载这个生命过程,总共要经历5个阶段: 加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载 其中加载(除了自定义加载)+链接的过程是完全由jvm负责的,什么时候要对类进行初始化工作(加载+链接在此之前已经完成了),jvm有严格的规定(五种情况): 1.遇到new,getstatic,putstatic,invokestatic这4条字转载 2015-07-31 20:39:05 · 729 阅读 · 0 评论 -
Java泛型详解
一. 泛型概念的提出(为什么需要泛型)?首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list = new ArrayList(); 5 list.add("qqyumidi");转载 2015-04-24 20:48:31 · 1124 阅读 · 0 评论 -
Java中FileInputStream,FileReader等的区别
1. File类 1)File类介绍File类封装了对用户机器的文件系统进行操作的功能。例如,可以用File类获得文件上次修改的时间移动,或者对文件进行删除、重命名。换句话说,流类关注的是文件内容,而File类关注的是文件在磁盘上的存储。 File类的主要方法有:getName(),getCanonicalFile(),lastModified(),isDerector(),isFil转载 2015-08-25 18:12:22 · 3032 阅读 · 1 评论 -
try catch finally return
结论:任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。 如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的, 编译器把finally中的return实现为一个warning。但是需要注意的是,经过测试表明:在tr原创 2015-08-19 16:59:56 · 994 阅读 · 0 评论 -
serialVersionUID作用
原文出处:未知Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。 Eclipse中The serializable c转载 2015-04-23 13:08:16 · 651 阅读 · 0 评论 -
Java中的深拷贝和浅拷贝
Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念。并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。本文会让你了解什么是影子clone与深度clone,认识它们的区别、优点及缺点。 看到这个标题,是不是有点困惑:Java语言明确说明取消了指针转载 2015-04-23 13:05:20 · 756 阅读 · 0 评论 -
Java HashMap Hashtable 的区别
两者都实现了Map接口,基本特性相同- 对同一个Key,只会有一个对应的value值存在- 如何算是同一个Key? 首先,两个key对象的hash值相同,其次,key对象的equals方法返回真内部数据结构Hashtable和HashMap的内部数据结构相似 其基本内部数据结构是一个Entry数组 (transient E转载 2015-04-12 15:38:51 · 778 阅读 · 0 评论 -
关于Java重载方法匹配优先级
写出以下程序的输出: ?12345678910111213141516171819202122232425public class Overload { publicstatic void say(long arg)转载 2015-03-07 12:52:59 · 1919 阅读 · 0 评论 -
java方法的重载与覆盖的条件
java多态的2种表现形式 方法重载和方法覆盖方法重载:同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载。方法覆盖:子类重新实现了父类中的方法。 方法重载[java] view plaincopy/** * 方法重载满足的条件 * 同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载 * 参数列表不同指参数的类型,参转载 2015-03-07 18:48:16 · 4354 阅读 · 0 评论 -
java 动态绑定及成员变量、构造方法,static方法,private,final方法前期绑定
动态绑定意味着:目前正在调用的方法正是最适用于要操作对象的那个方法。然而它并不意味着对所有的参数都执行最佳匹配。在Java中,一个方法的参数在编译阶段常被静态地绑定。一个例子:class Base{ public void foo(Base x){ System.out.println("Base.Base"); }转载 2015-03-07 14:05:00 · 2298 阅读 · 0 评论 -
深入理解JAVA的多态性
Java的多态性表现在2个方面,1方法的覆盖、2方法的重载。 ?12345678910111213141516171819202122232425262728293031323334353637383940转载 2015-03-06 19:27:15 · 782 阅读 · 0 评论 -
java的继承机制及不足
使用继承时要记住的3句话:1、子类拥有父类非private的属性和方法;2、子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;3、子类可以用自己的方式实现父类的方法;构造方法:子类不能继承父类的构造方法,但可以通过super()调用,声明子类对象时,自动调用父类构造方法,前提是父类存在默认构造方法存在,但如果手动写了带参的其他构造方法,编译器将不会生成默认构造方法,这转载 2015-03-07 19:54:02 · 741 阅读 · 0 评论 -
Java中String 操作及前期绑定与后期绑定例子
class X{ public static String strX="hello";}class Y{ public static String strY="hello";}class Z{ public static String strZ="hell"+"o";}class Test{ public static void main(String[]转载 2015-03-07 21:50:40 · 676 阅读 · 0 评论 -
java成员变量的前期绑定例子
class A{int count = 20;}class B extends A{int count = 200;}public class Test{public static void main(String[] args){A a = new A();System.out.println(a.count);B b = new B();System.out.println(b.cou转载 2015-03-07 14:40:37 · 927 阅读 · 0 评论 -
java中四种访问权限
pubicprotecteddefaultprivate同一类中的成员是是是是同一包中的成员是是是否不同包的子类是是否否不同包的非子类是否否否转载 2015-03-06 18:27:59 · 623 阅读 · 0 评论 -
Java方法中引用类型的形参传递问题
众所周知,Java方法的形参如果是基本类型,是值传递,也就是说实参将数值传递给形参后,形参对值的操作跟实参变量毫无关系,举例:public static void change(int a, int b){ a = a + b; }int c = 1, d = 2;change(c , d);这时输出c, 其值还是1。假如是引用类型作为形参:public sta原创 2015-03-26 15:59:39 · 4507 阅读 · 0 评论 -
深入理解Java的方法调用
众所周知Java的参数传递也分为值传递和引用传递 值传递 ?123456789101112131415161718public class MethodAndParam { staticvoid swap(inta,int b){ in转载 2015-03-06 19:40:47 · 680 阅读 · 0 评论 -
String,StringBuffer与StringBuilder的区别
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常转载 2015-03-11 21:37:31 · 457 阅读 · 0 评论 -
Java反射机制详解
首先,我们在开始前提出一个问题:1.在运行时,对于一个java类,能否知道属性和方法;能否去调用它的任意方法? 答案是肯定的。本节所有目录如下:什么是JAVA的反射机制JDK中提供的Reflection APIJAVA反射机制提供了什么功能获取类的Class对象获取类的Fields获取类的Method获取类的Constructor新建类的转载 2015-04-18 15:54:20 · 627 阅读 · 0 评论 -
C/C++/Java不使用临时变量实现两个数的交换
方法一、加减减 a = a + b; b = a - b; a = a - b;方法二、异或运算(只能用于整数) a = a ^ b; b = a ^ b; a = a ^ b;方法一好理解,加加减减就出来了,关于方法二,个人目前还不是很理解,如果有懂数学证明的不妨留言交流一下。异或运算就原创 2015-03-25 15:18:23 · 2040 阅读 · 0 评论 -
深入理解Java异常处理机制
目录(?)[-] 1 引子 2JAVA异常 4处理异常机制1 捕获异常trycatch 和 finallytry-catch语句trycatch-finally语句try-catch-finally 规则异常处理语句的语法规则trycatchfinally语句块的执行顺序2 抛出异常throws抛出异常使用throw抛出异常4 Throwable类中的常用方转载 2015-03-31 21:54:12 · 669 阅读 · 0 评论 -
Java中的Map List Set等集合类
一、概述在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系:+Collection 这个接口extends自 --java.lang.Iterable接口 ├+List(接口 代表有序,可重复的集合。列表) │├ ArreyList (Class 数组,随机访问,没有同步,线程不安全) │├ Vecto转载 2015-04-02 11:01:49 · 1051 阅读 · 0 评论 -
Java中ListIterator和Iterator详解与辨析
在使用java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的时候可以使用。这两种迭代器有什么区别呢?下面我们详细分析。这里有一点需要明确的时候,迭代器指向的位置是元素之前的位置,如下图所示:这里假设集合List由四个元素List1、List2、List3和List4组转载 2015-04-01 14:55:34 · 1102 阅读 · 0 评论 -
为什么list最好=new arraylist
List list = new ArrayList()1、这是一个好的编程习惯,代码有更大的灵活性因为List只是接口,实现List接口的不只是ArrayList,还有其他容器类,例如Vector。如果你用ArrayList list = new ArrayList(),那就失去了通用性,使用List,你就可以不必关注用的是ArrayList,还是Vector。例如在下转载 2015-04-02 10:38:19 · 2742 阅读 · 1 评论