Java
puppylpg
渣渣,努力加油中~
(2019年12月7日13:07:18)以后我的博客就发在个人网站https://puppylpg.github.io/了,欢迎围观
展开
-
Eclipse设置Courier New字体
使用Eclipse我们会发现在字体设置里找不到钟爱的Courier New字体。其实这个字体不是没有,只是没有显示而已,它其实隐藏起来了,只需几步便可让其现原形——1.找到Eclipse设置字体的地方(找不到位置的请自行百度),会发现没有Courier New(我截的图有这个字体,因为我已经设置过了,等你设置完也会看到这个字体),左下角有个“显示更多字体”,单击;2.在弹出来的系统原创 2015-03-14 11:57:38 · 1241 阅读 · 0 评论 -
使用枚举实现单例模式
前言单例模式的实现方式有多种,从最基础的非LazyLoad的懒汉式,到LazyLoad但需要双重检查的饿汉式,再到比较简单实现LazyLoad的静态内部类方式,均可实现单例模式。(忘了的可以查查资料:D 友情链接:http://blog.51cto.com/devbean/203501)不过使用枚举实现单例模式,可称之为实现单例模式最简单的方法。实现public enum MyS...原创 2017-08-10 11:32:20 · 1258 阅读 · 1 评论 -
Java异常处理
Java的异常处理有两种方式: - 默默解决。使用try...catch。 - 甩锅。使用throw和throws。通常,我们喜欢用try/catch捕获异常,然后对异常进行处理。但是有时候,我们也会不予理会,直接将异常扔出去,让调用者自己去处理异常。当然对调用者来说,它也有两种同样的选择:自己处理掉,或者再往外扔,交给自己的调用者,由新的调用者继续背锅。以下是几种正常与不正常的异常处理方式示例原创 2017-07-28 14:02:35 · 336 阅读 · 0 评论 -
Java Map初始化的一个错误:new HashMap().put("a", "b");
今天在使用PowerMock进行代码测试用例编写的时候,需要新建一个map,当时脑一抽,写成了:Map<String, Object> testMap = new HashMap().put("a", "b");然后收到了IDE的友善提醒:Incompatible types. Required: java.util.Map<java.lang.String, java.lang.Object>原创 2017-09-16 19:34:53 · 14472 阅读 · 2 评论 -
Spring xml配置文件头解析
最简洁xml文件头详解命名空间头解析模式内容Spring的xml配置虽然比较繁琐,不如推荐使用的注解方式简介,但是能读懂xml配置文件还是很重要的,尤其是对于一些老系统的维护,几乎不可避免要面对xml配置文件的问题。现在我们就从默认的xml文件头说起。最简洁xml文件头以下可谓是最简洁的spring文件头的内容,然而看起来依旧一大坨,令人眼花缭乱。其实细细分析,就会觉得东西其实并不多。<?x原创 2017-10-20 03:17:42 · 1033 阅读 · 2 评论 -
mock
mock的由来一开始,没有mock的时候,人们测试的时候只能自己mock。比如需要一个PersonDao类的对象,其中有连接数据库查询数据库当前存储人数的方法getPersonNum()。但是可能因为数据库不存在等问题,其中的操作并不能正确执行,这时候一般:public PerSonDaoMock extends PersonDao{ @Override public int get原创 2017-10-25 22:45:02 · 2348 阅读 · 0 评论 -
DelayQueue实现的Comparable接口
DelayQueueComparable接口和Delayed接口外话-线程池外话-静态内部类DelayQueueDelayQueue是JDK对BlockingQueue接口的一种实现类。对于DelayQueue的介绍,可以参考一篇很不错的文章。Comparable接口和Delayed接口DelayQueue队列保存的元素必须实现Delayed接口,而Delayed接口又实现了Comparabl原创 2017-11-28 02:31:34 · 761 阅读 · 1 评论 -
Java解析json——Jackson
在Java下,想要解析json文件,已经有了现成的Jackson框架。有几个关于Jackson的基础例子,或者也可以看本文最后的附录。看过之后也就大致了解Jackson的基本用法了。至少Java对象和json的直接转化还是比较简单的。在这里,我主要记录一下自己使用readTree从服务器接收json并解析的过程。需求写一个客户端程序,客户端从服务器接收json,并解析为Java自己的对象,进行处理。原创 2016-08-29 18:33:01 · 3505 阅读 · 0 评论 -
对Java8中distinct()的思考
list的转map的另一种猜想使用distinct给list去重直接使用distinct失败原因distinct依赖于equals重写equals的注意事项引申结论list的转map的另一种猜想Java8使用lambda表达式进行函数式编程可以对集合进行非常方便的操作。一个比较常见的操作是将list转换成map,一般使用Collectors的toMap()方法进行转换。一个比较常见的问原创 2017-11-16 23:59:34 · 25648 阅读 · 7 评论 -
Java IO的实现
从一个方法看javaIO: public byte[] compress(IWritable value) { if (value == null) return null; try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Da...原创 2018-04-20 14:44:01 · 813 阅读 · 0 评论 -
ThreadLocal原理及内存泄露预防
前言原理为什么key使用弱引用内存泄露线程池参阅:http://www.importnew.com/22039.html前言ThreadLocal提供了线程独有的局部变量,可以在整个线程存活的过程中随时取用,极大地方便了一些逻辑的实现。常见的ThreadLocal用法有: - 存储单个线程上下文信息。比如存储id等; - 使变量线程安全。变量既然成为...原创 2018-05-24 13:38:21 · 74353 阅读 · 70 评论 -
Java并发编程:并发任务执行及结果获取
Executor:任务执行ExecutorExecutorService任务生命周期管理对任务提交方法的拓展Future:未来对任务结果的获取CompletionService:及时获取已完成任务的结果Executor:任务执行关系:Executor &amp;amp;lt;- ExecutorService =&amp;amp;gt; AbstractExecutorService =&原创 2018-06-13 17:54:25 · 4203 阅读 · 0 评论 -
Java处理InterruptedException
机制在Java中,一个线程是不能终止另一个线程的,除非那个线程自己想退出,或者JVM退出了。比如:Thread loop = new Thread( new Runnable() { @Override public void run() { while (true) { } } });loop.start();这个线...原创 2018-06-14 00:04:19 · 31689 阅读 · 6 评论 -
google protobuf 生成的Java对象结构
介绍.protoJava对象中的方法methods in interfacemethods in objectmethods in Builder示例介绍介绍日后再补,总之想要了解protobuf的工作原理,需要首先知道编程中的“Builder模式”——由于类属性过多而出现的一种较好的解决方式。没有共有构造函数,设置属性仅能通过Builder的set类方法等等。...原创 2018-06-28 01:56:44 · 10103 阅读 · 3 评论 -
Future/FutureTask & Callable/Runnable & Executor/ExecutorService/Executors
用途:笔记。 各类具体方法参阅JDK API。Callable/Runnable接口Runnable用于实现线程。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的原创 2017-07-31 17:03:01 · 379 阅读 · 0 评论 -
工厂的模式们
DIYSimpleFactoryFactoryMethodAbstractFactory1.DIY没有工厂的年代,客户需要自己造打印机:public class PrinterLgl { private String name = null; public PrinterLgl(String name) { this.name = name; Sy原创 2016-08-09 13:51:28 · 533 阅读 · 0 评论 -
Java中equals和==的区别
Java中equals和==的区别java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的原创 2014-11-17 22:58:14 · 830 阅读 · 0 评论 -
String是一个对象,定义字符串有两种方法——它们的区别和联系
String 是一个字符串类类的定义方法:String str = new String ("hello");只不过它也可以: String str = "hello";基本类型就8个byte、 short、 int、 lang float、 doublebooleanchar追问谢谢,顺便问一下,两种定义类的方法有什么区别吗?回答有原创 2014-11-17 20:50:06 · 2455 阅读 · 0 评论 -
全局变量 锁
public class GlobFlag { private Integer timerFlag = 1; //Integer的话timeFlag就变成了对象,在外部就可以Synchronized了 private GlobFlag(){} //私有化构造函数,防止在外部实例化 private static GlobFlag instance = new GlobFlag(原创 2015-04-29 17:06:40 · 2051 阅读 · 1 评论 -
取出System的Properties内容的方法
System的getProperties()方法返回Properties类型对象,其中Properties类属于Hashtable的子类,属于Map集合的一个子类对象,所以可以通过key和value取值。Properties的key和value实际上都是String类型的。这一点是其和Hashtable不同的地方。我们可以查看Properties.java得到这个信息—— public原创 2015-05-09 19:49:19 · 1131 阅读 · 0 评论 -
Java IO异常的处理方式
我们想往一个文件里写东西,初始版本:import java.io.*;class FileWriterDemo{ public static void main(String[] args) { FileWriter fw = new FileWriter("demo.txt"); //创建流,打开(如果不存在,新建)文件 fw.write("abcdefg");原创 2015-05-09 21:34:28 · 3586 阅读 · 0 评论 -
上士闻道,勤而行之
回头看看,掐指一算,从刚开学写第一次的OO作业开始至今,已经半个学期了。这半个学期以来,OO作业已经写了五六次了,每一次好像在拿到作业之后心里面只有满满的不想开始写......而且每一次写的时候好像都是那么的困难,毫无头绪,扎耳挠腮,通宵达旦,直至最后到了deadline,大部分情况下都惊险飘过,当然也有一次最终还是功败垂成,至今想起来都感觉太可惜。记得刚开学的时候,我自己对写Ja原创 2015-05-06 19:53:01 · 1184 阅读 · 0 评论 -
Java装饰者模式
问题提出关于日志消息,我们需要将其输出到屏幕或者是日志文档内,于是我们会写几个类:接口ILogger类ConsoleLogger负责将信息输出到Console类 FileLogger负责将信息输出到文件中但是问题在于,如果我们要对这两个输出类增加条件,比如“将信息转为大写”,“将信息转换成html格式输出”,那么两个类都要被该写成四个类才满足需求。如果要求更多,那么类的数目增加的会非常快。此原创 2015-06-10 16:29:27 · 918 阅读 · 0 评论 -
写OO作业过程中现学的东西
获取后缀名——String latter = name.substring(name.lastIndexOf(".") + 1);//不包括".",比如"java",而不是".java"将文件中的内容读入到String数组中—— BufferedReader br = null; try{ br = new BufferedReader(new File原创 2015-05-20 19:41:48 · 763 阅读 · 0 评论 -
Java: Collection & Collections; Array & Arrays
在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。例如Map,Set,List等。并且Java用面向对象的设计对这些数据结构和算法进行了封装,这就极大的减化了程序员编程时的负担。程序员也可以以这个集合框架为基础,定义更高级别的数据抽象,比转载 2015-05-24 01:55:15 · 723 阅读 · 0 评论 -
Java 字节流 字符流 转换流
我们知道Java中的流分为字符流和字节流,其中字符流主要针对字符文本进行处理,而字节流处理范围更为广泛,毕竟图片、电影等只要是文件都是以二进制的形式存在的,而不是字符。字符流:FileReaderFileWriter。BufferedReaderBufferedWriter字节流:FileInputStreamFileOutputStream原创 2015-05-10 13:55:16 · 17009 阅读 · 2 评论 -
Java中的clone() 深拷贝 浅拷贝
上图展示了浅拷贝:对于非基本数据类型,clone过后,结果两个指针指向了同一块儿内存空间,所以仅仅是浅拷贝,这样的话如果对一个对象进行操作,另一个内容也会变,这显然是不合理的,应该每个对象分别保存自己的数据。所以我们要进行深拷贝!浅拷贝和深拷贝例子:import java.util.Vector;public class Student implements Cloneable{原创 2015-05-14 01:29:24 · 3075 阅读 · 0 评论 -
Java中的equals()和hashCode()
概述在我们使用类集框架(比如使用hashMap、hashSet)的时候,经常会涉及到重写equals()和hashCode()这两个方法。 这两个方法的联系是: 1. 如果两个对象不同,那么他们的hashCode肯定不相等; 2. 如果两个对象的hashCode相同,那么他们也未必相等。所以说,如果想在hashMap里面让两个不相等的对象对应同一个值,首先需要让他们的hashCod原创 2015-07-18 16:34:17 · 1031 阅读 · 0 评论 -
archlinux的JDK默认安装路径
JDK在archlinux的默认安装目录是/usr/lib/jvm/java-8-jdk(根据JDK版本不同而改变目录名),当然,我们可以将JDK安装路径设置为JAVA_HOME。 其实,在/usr/lib/jvm下共有三个文件夹,准确的说,是一个文件夹和两个文件夹的链接:lgl@pArch /usr/lib/jvm $ ls -l总用量 4lrwxrwxrwx 1 root root 1原创 2016-01-19 15:36:44 · 5107 阅读 · 0 评论 -
Java打log日志
最近写Java工程,需要在客户端打上log,以便进行出错追踪。刚开始试了一些log4j之类的包,想着功能强大点儿。但是由于配置、版本不兼容、傻叉Windows等一系列问题,最终放弃,干脆直接采用Java自带的log好了。关于Java内置Logger的介绍,比较好的有这篇,可以学习一下其基本用法。但是如果按照那篇博客的“(六)如何使用JDK内置logger ”写一个LogUtil的话,在我的需求下会出原创 2016-08-31 17:37:42 · 28505 阅读 · 0 评论