
Java
文章平均质量分 59
义臻
你可以通过知乎ID找到我:义臻
转摘文章请注明出处。
展开
-
阿里云开放平台企业IT治理团队火热招聘
广而告之,欢迎转发!!!团队简介:用户对阿里云OpenAPI的每一次调用,都需要我们团队产品的深度参与,包括身份产品、认证产品、权限产品、审计产品、资源管理产品、网关产品、SDK产品、API生态等等。团队高速发展中,有意者知乎上私信我 @义臻阿里云开放平台-企业IT治理团队招聘研发JAVA、C++都要,根据面试情况定级P6,P7,P8等你来拿。...原创 2020-11-08 10:01:58 · 380 阅读 · 0 评论 -
compareTo
以前,一直使用compareTo的从小到大排序,实际上compareTo可以选择从小到大还是从大到小:设接口I,T是实现了接口I的类,则类T实现Comparable的话,如下//从小到大排序:当前比外来户小返回负值,当前比外来户大返回正值public int compartTo(I i){ T t=(T)i; if(age<t.getAge())原创 2016-08-11 14:04:22 · 503 阅读 · 0 评论 -
一个常用的log4j日志文件
#根Logger,指定把INFO级别及以上的日志信息输出到D输出地和ERROR输出地log4j.rootLogger=INFO,D,ERROR#定义D输出地的相关信息log4j.appender.D=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File=/D.loglog4j.appender.D.Append=t原创 2016-11-21 21:59:55 · 1145 阅读 · 0 评论 -
Java中的嵌套类
最近在读《Effective Java第二版》,因为笔者之前学过一些设计模式,所以对书中的多数内容可能感受不大(但这丝毫不影响这是一本好书哈)。倒是今天读到第22条——优先考虑静态成员类感觉归纳的很好,特此发博。嵌套类(nested class)是指定义在另一个类内部的类,它存在的意义就是为它的外部类提供服务。嵌套类有四种:静态成员类(static member class)非静...原创 2016-12-13 20:16:42 · 1740 阅读 · 0 评论 -
判断Ip是否在某个地址段内
public class IpTest { public static void main(String[] args) { System.out.println(isInRange("192.168.1.127", "192.168.1.64/26")); System.out.println(isInRange("192.168.1.2",转载 2016-12-27 12:02:58 · 3772 阅读 · 0 评论 -
Java中的可变参数
Java在1.5之后允许方法使用可变参数,可变参数的好处在于:它允许传递0个或者多个参数。比如原来有一段代码如下: public class Test { public static void main(String[] args) { test(); test(new String[]{"a"}); test(new String...原创 2016-12-31 10:42:15 · 11142 阅读 · 2 评论 -
HashMap和IdentifyHashMap
HashMap和IdentifyHashMap是Java中两个常见的Map类,对这两个类感兴趣的可以去看他们的源码。在这里只说他们的区别。 HashMap类判断键k1和k2相等的条件为 (k1==null?k2==null:k1.equals(k2))==trueIdentifyHashMap判断k1和k2相等的条件是(k1==k2) 来看下面的代码: import ...原创 2017-03-28 17:13:20 · 9836 阅读 · 0 评论 -
Java异常中的异常链机制
一.异常链常常会再捕获一个异常后跑出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链。 在JDK1.4以前,程序员必须自己编写代码来保存原始异常信息, 现在所有Throwable的子类子构造器中都可以接受一个cause对象作为参数,这个cause就异常原由,代表着原始异常,即使在当前位置创建并抛出行的异常,也可以通过这个cause追踪到异常最初发生的位置。 Throwable...转载 2017-04-01 17:18:55 · 5643 阅读 · 1 评论 -
JAVA的四种引用类型
Java四种引用类型1.引用的基本概念强引用:当我们使用new创建对象时,被创建的对象就是强引用,如Object object = new Object(),其中的object就是一个强引用了。如果一个对象具有强引用,JVM就不会去GC它,JVM宁可会报OOM来终止程序,也不回收该对象。软引用: 如果一个对象只具备软引用,如果内存空间足够,那么JVM就不会GC它,如果内存空间不足了,就会GC该对象...原创 2016-08-11 14:16:54 · 6541 阅读 · 0 评论 -
深入理解JAVA序列化
关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制。 1. 什么是Java对象序列化Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能...转载 2017-05-05 15:51:59 · 354 阅读 · 0 评论 -
序列化代理模式
我们知道,实现了序列化的类。在反序列化时,实例的创建是由readObject方法来完成的。由于这是一个不同于构造函数的创建类实例的通道,因此在构造函数中的状态约束条件在readObjetc中也得一条不落下的实现。这很让人头大,因此这里介绍一种模式,将实例的反序列化也交给改造函数来完成,即序列化代理模式。要想稳健的将带有重要约束条件的对象序列化时,这种模式可能是最容易的方法。代码如下:import ...原创 2017-05-18 14:21:41 · 755 阅读 · 0 评论 -
一个demo,让你的开发周期缩短一半
先上github地址点击打开链接由于现在java后端开发经常使用SSM框架,SpringMVC+Spring+MyBatis。因此作者维护了一个开源小demo,此demo中采用了JAVA项目常用的分层结构,从上到下依次是表现层(controller)业务层(service)数据访问层(dao)。另外,client包是需要暴露给第三方调用的接口所在的包,可以被独立的打包发布。common包是项目...原创 2017-07-26 20:07:39 · 2331 阅读 · 1 评论 -
学习Java,我建议这样做
很多同学向我邀答,想要学习Java,却不知道该学什么,也不知道该学到什么深度?也有些外包的同学,想在技术上提升,却不知怎么做?本次 Live专为想学习和提高Java的人定制,给出了详细的学习路线,适合想要系统的专业的学习Java的人。尤其是:想要从事Java开发工作的大学生,想要转行当Java程序员的在职人员,想要提升Java水平却不知如何入手的小白等。30天从入门到精通? 那是宣传的...原创 2018-01-04 20:10:23 · 1110 阅读 · 2 评论 -
hashCode和equals
最近在复习的时候,又重新的理解了下equals()和hashCode().equals()用于判断两个对象是否相等,这是大家公认的。hashCode()被设计是用来使得哈希容器能高效的工作。为什么这么说?在java中,有一些哈希容器,比如Hashtable,HashMap等等。当我们调用这些类的诸如get(Object obj)方法时,容器的内部肯定需要判断一下当前对象obj在容器中是否存在,...原创 2016-08-11 14:11:58 · 13850 阅读 · 0 评论 -
SimpleDateFormat的线程安全性
SimpleDateFormat 是线程不安全类,在定义为static时可能出现线程安全问题;推荐使用DateUtils工具类。下面的示例将给出错误的和正确的代码。首先是错误的代码,执行Demo会发现,在某些竞态条件下报错。 package wrong;import java.text.ParseException;import java.text.SimpleDateForma...原创 2016-11-01 19:19:38 · 5881 阅读 · 0 评论 -
玩转PriorityQueue
要理解优先级队列PriorityQueue的家底,还得从完全二叉树说起。完全二叉树是一种特殊的二叉树,若假设它有N层,除第N层外,其它各层 (1~N-1)的结点数都达到最大个数2^(N-1),第N层所有的结点都连续集中在最左边,这就是完全二叉树。有图有真相:那么问题来了,完全二叉树在计算机上怎么存储呢?答案是从上层到下层按照顺序依次存储在数组中。有图有真相,图中的红字代原创 2016-10-27 20:42:11 · 503 阅读 · 0 评论 -
基于反射+配置文件动态选择数据库
通过修改const.xml中database的值就可以选择数据库import org.apache.commons.configuration.XMLConfiguration; //引入这个包 database=(new XMLConfiguration("const.xml")).getString("database"); //database是希望访问的内容 //con原创 2016-08-11 14:01:09 · 414 阅读 · 0 评论 -
java连接SqlServer2008
最近写了个WEB应用,需要走使用sql server2008数据库,遇到了好多问题,题词与大家分享。见附件。 java连接sql2008数据库.zip (420.9 KB) 下载次数: 3原创 2016-08-11 14:01:03 · 379 阅读 · 0 评论 -
中英文混合排序
好久没有写博客了,期间在做桌面云,被要求保密哈。不过最近在写一个android程序,需要实现一个中英文混合排序。不说了,直接代码;HanYuUtil.javaimport net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import ne原创 2016-08-11 14:08:13 · 483 阅读 · 0 评论 -
反射机制实现方法调用
import java.lang.reflect.*;class Person{ public void sayBye(){System.out.println("bye bye");} public void sayHello(String name){System.out.println("hello "+name);} public void sayWelcome(Str原创 2016-08-11 14:04:43 · 429 阅读 · 0 评论 -
一个自定义注释的例子
import java.lang.annotation.*;import java.lang.reflect.*;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)@interface MyAnn { String name() ; String event(); // 方法执行前的事原创 2016-08-11 14:04:36 · 282 阅读 · 0 评论 -
SAX
java中提供了一系列的接口用于自定义解析xml的文件,中DefaultHandler是SAX事件处理程序的基类,通过重写SAX类,可以自定义对xml文件的解析。在重写defaultHandler类时候,有一个重点是设立tag标记位,这个标记为用于记录当前处理的元素是哪一个,因为xml解析是一个嵌套的结构,character中可能还会调用startElement,因此必须设立一个标记位teg用原创 2016-08-11 14:04:29 · 203 阅读 · 0 评论 -
DelayQueue
DelayQueue就是一个优先级队列,他的优先级按照里面元素的延迟时间来决定,延迟时间小的(也就是时间先到的)放在队列头(这与add的顺序无关),与元素本身的属性值有关。DelayQueue中的元素必须是实现了Delayed接口的,而Delayed接口又是Comparable的子接口,因此DelayQueue中的元素必须覆盖Delayed接口的getDelay(TimeUnit)方法和Com原创 2016-08-11 14:04:13 · 193 阅读 · 0 评论 -
JAVA IO常用总结
最近复习java,于是就对java的IO进行一个总结:在Java中,存在着流这种概念,所谓流,可以理解为数据的流动(实际上为字节的流动)。在java中,存在字节流与字符流,但实际上,字符流在传递过程中也是传递的字节流,字节流与字符流唯一的区别是:字符流使用了缓冲区,而字节流没用使用缓冲区。流的另外一种分类方法是可以分为节点流(node stream)与过滤流(filter)在理解原创 2016-08-11 14:02:25 · 363 阅读 · 0 评论 -
ConcurrentModificationException
最近写代码竟然烦了一个很低级的错误,写出来供大家参考:在涉及到map或者list删除的时候,我们经常写出如下错误代码:LinkedHashMap lhm=new LinkedHashMap(); lhm.put("a","a"); lhm.put("b","b"); lhm.put("c","c"); lhm.put("d","d"); Iterator原创 2016-08-11 14:05:07 · 305 阅读 · 0 评论 -
Java正则表达式用例
import java.util.regex.Matcher;import java.util.regex.Pattern;public class A { public static void main(String[] args) { //字符串替换的三种方案 fun1(); fun2(); fun3();原创 2016-10-09 15:38:28 · 548 阅读 · 0 评论 -
Java中的对象拷贝
Java的对象拷贝是通过重写clone方法来实现的,具体使用时,你会发现有点奇怪。开发者首先需要为类实现Cloneable接口,然后重写clone方法。常见的代码如下: class A implements Cloneable { public Object clone() { Object o = null; try { ...原创 2016-10-22 10:17:33 · 1878 阅读 · 0 评论 -
java实现简单AOP(二)
用java实现AOP主要用到了java反射机制,java动态代理,java注释。分别对应java.lang.reflect;java.lang.annotation包。关于自定义注释这里不再讲,请看代码:定义Aop注释import java.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy原创 2016-08-11 14:04:50 · 336 阅读 · 0 评论 -
Java实现简单的AOP(一)
AOP编程是面向切面编程,说白了,一段代码的执行归根结底是方法的执行,当一个系统写好之后,往往需要新的功能或者添加一些新的操作,这些新的功能又是一些方法,这些方法需要嵌入到原来的系统中,让他们在系统原有方法的执行前或者后等等位置执行,这个时候,有两种方案,修改原来的代码,违背了OCP,方案二,使用AOP;AOP编程就是在程序的执行过程中找到一些切入点,嵌入一些新的方法,以改变程序原来的执行过程原创 2016-08-11 14:02:33 · 389 阅读 · 0 评论 -
Time33算法与位运算
最近不是很忙,阅读了下《大型网站技术架构》一书。在4.3.4代码优化小节有这样的一句话:“目前比较好的字符串hash算法有Time33算法”。Time33算法,就是hash(i)=33*hash(i-1)+str[i]。在jdk源码中String类的hashCode()方法使用的是Time31算法。源码如下: public int hashCode() { int h =原创 2016-08-11 14:12:23 · 532 阅读 · 0 评论