Java
文章平均质量分 77
Amos H
这个作者很懒,什么都没留下…
展开
-
int 与 Integer 的区别
int和Integer的区别Integer是int的包装类,int则是java的一种基本数据类型Integer变量必须实例化后才能使用,而int变量不需要Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值Integer的默认值是null,int的默认值是0延伸由于Integer变量实际上是对一个Integer对象...原创 2019-02-24 22:47:32 · 298 阅读 · 0 评论 -
设计模式之过滤器模式——Java语言描述
过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来实现创建一个Person对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。创建一个Person类public class...原创 2019-01-11 10:49:48 · 111 阅读 · 0 评论 -
设计模式之原型模式——Java语言描述
原型模式是用于创建重复对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的方式这种模式实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则适合采用这种模式。应用实例:细胞分裂Java中的Object.clone()方法优点:性能较高逃避构造函数的约束缺点:配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类...原创 2019-01-05 10:35:50 · 113 阅读 · 0 评论 -
Java多线程中避免在多生产者和多消费者场景中出现假死
在多线程编程中,如果所有线程全部都经由wait()方法进入等待状态,那么程序就进入了假死状态程序示例考虑这个例子,来自《Java多线程编程核心技术》:生产者类P://生产者public class P { private String lock; public P(String lock) { super(); this.lock = lock; } publi...原创 2018-12-25 16:54:29 · 518 阅读 · 2 评论 -
设计模式之建造者模式简明示例
建造者模式将一个复杂对象的创建和它的表示分离,使用同样的创建过程可以创建不同的表示应用实例在Java中,建造者模式是一种常见的设计模式,StringBuilder以及okhttp3.Request都应用了建造者模式:OkHttpClient client = new OkHttpClient();Request request = new Request.Builder() ...原创 2019-01-04 11:44:41 · 276 阅读 · 0 评论 -
JVM常用调优案例
在本文中会介绍一些常用的JVM调优思路以及调优方法,这些方法是为了解决某个具体问题,提高某个局部性能而特别设置的。 使用它们可能会对其他性能指标产生不良的影响,应该在实际应用中,根据具体情况进行折中和权衡。总结自《Java程序性能优化》原创 2018-12-19 12:37:25 · 911 阅读 · 0 评论 -
MyBatis中映射器Mapper概述
MyBatis真正强大之处在于它的映射器。因为它异常强大并且编写相对简单,不仅比传统编写SQL语句做的更好并且能节省将近95%的代码量XML中顶级元素汇总cache: 给定命名空间的缓存配置cache-ref: 其他给定命名空间缓存配置的引用resultMap: 最复杂也是最强大的元素,用来描述如何从数据库结果集中加载对象sql: 可以被其他语句引用的重复语句块insert: 映...原创 2019-01-03 20:52:56 · 233 阅读 · 0 评论 -
log4j2结构浅析以及入门示例
log4j2是Java的日志工具log4j的升级版,它继承了log4j的优点的同时对API进行了一些改变结构log4j2的主要类图:logger的层次和普通的System.out.println相比,日志工具的首要优点就在于它能够禁用某些日志语句的同时允许其他日志语句不受阻碍的输出。这在log4j1.x中是通过各个logger之间的关系维持的,而在log4j2.x中则是通过logg...原创 2018-12-21 22:26:12 · 303 阅读 · 0 评论 -
Java中final修饰符对不同变量的不同影响
final修饰符可以用来修饰类、方法和变量,用于表示它修饰的类、方法和变量不可改变。final修饰变量时,表示该变量一旦获得了初始值就不可被改变。由于final变量获取初始值之后就不能重新赋值,所以final修饰成员变量和局部变量时有一定程度的不同。final成员变量成员变量是随类初始化或者对象初始化而初始化的。在初始化时,系统会为类变量或者实例变量分配内存并分配默认值。对于final...原创 2018-12-27 14:02:34 · 283 阅读 · 0 评论 -
设计模式之代理模式——Java语言描述
代理模式是一种常见的设计模式,它使用代理对象完成用户请求,屏蔽用户对真实对象的访问原创 2018-12-16 21:18:31 · 159 阅读 · 0 评论 -
Junit中的一些重要API
Junit中的重要代码都包含在四个核心类中:Assert、TestCase、TestRunner和TestSuite原创 2018-12-06 17:16:51 · 653 阅读 · 0 评论 -
Java内存模型浅析与volatile关键字
在Java中,每一个线程有一块工作内存区,其中存放着被所有线程共享的主内存中的变量的值的拷贝。当线程执行时,它在自己的工作内存中操作这些变量。原创 2018-12-06 17:01:45 · 221 阅读 · 0 评论 -
Java多线程控制——公平锁与非公平锁
所谓的公平锁与非公平锁的区别在于等待的各个线程是否是公平的原创 2018-12-06 16:56:42 · 1215 阅读 · 0 评论 -
设计模式之组合模式——Java语言描述
组合模式又叫做部分整体模式,适用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次介绍意图将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性优点高层模块调用简单节点自由增加缺点在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口类,违反了依赖导致的原则实现创建一个Em...原创 2019-01-11 11:20:54 · 165 阅读 · 0 评论 -
设计模式简介
设计模式代表了最佳实践,是开发人员在开发过程中面临的一般问题的解决方案。这些解决方案是众多开发人员经过相当长的一段时间的试验和错误总结出来的历史设计模式是一套被反复使用,经过考验的设计经验的总结。使用设计模式是为了重用代码,增强代码的可读性。1994年,由Gang of Four在《设计模式-可复用的面向对象软件元素》中首次提到了软件开发中的设计模式的概念。他们所提出的设计模式主要是基于...原创 2019-01-02 13:33:54 · 125 阅读 · 0 评论 -
Mybatis入门实例
MyBatis 简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。构建项目使用gr...原创 2019-01-02 19:26:30 · 117 阅读 · 0 评论 -
Java 平台无关性的基石
Java 在刚刚诞生之初就提出过一个非常著名的口号:“一次编写,到处运行”, 这句话充分表达了软件开发人员对冲破平台界限的渴望在竞争激烈的 IT 领域,各种不同的硬件体系结构和不同的操作系统肯定会长期并存发展。“平台无关性” 的理想最终实现在操作系统的应用层上: Sun 公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从...原创 2019-02-18 12:00:14 · 461 阅读 · 0 评论 -
Java异常实战——OutOfMemoryError
在Java虚拟机规范描述中,除了程序计数器外,虚拟机内存的其他几个运行区域都有发生 OOM 异常的可能。在这里,用代码验证各个运行时区域存储的内容并讨论该如何进行处理Java堆溢出Java 堆用于存储对象实例,只要不断创建对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么对象数量达到最大堆的容量限制之后就会产生内存溢出异常。异常再现代码采用如下虚...原创 2019-01-30 11:00:09 · 142 阅读 · 0 评论 -
Spring 中 IoC 容器简介
IoC 是一种通过描述来生成或者获取对象的技术,可以说 Spring 是一种基于 IoC 容器编程的框架在一个系统中可以生成各种对象,并且这些对象都需要进行管理。为了描述这些对象关系,我们需要一个容器。在 Spring 中把每一个需要管理的对象称为 Spring Bean ,而管理这些 Bean 的容器就被称为 Spring IoC 容器。IoC 容器需要具备两个基本的功能:通过描述管...原创 2019-02-02 16:29:19 · 370 阅读 · 0 评论 -
HotSpot 虚拟机垃圾回收算法实现
作为使用范围最广的虚拟机之一HotSpot,必须对垃圾回收算法的执行效率有严格的考量,只有这样才能保证虚拟机高效运行枚举根节点从可达性分析中从 GC Roots 节点找引用链这个操作为例,可以作为 GC Roots 的节点主要在全局性的引用(例如常量或者类静态属性)与执行上下文(例如栈帧中的本地变量表)中。但是现在很多应用仅仅方法区就有数百兆,如果要逐个检查这里面的引用,那么必然会消耗很...原创 2019-02-01 20:18:00 · 182 阅读 · 0 评论 -
多线程死锁的产生原因以及如何避免
多线程以改善了系统资源的利用率并且提高了系统的处理能力。但是,并发执行同时也带来了新的问题——死锁。所谓的死锁就是多个线程因竞争资源而造成的一种互相等待,如果没有外力作用,这些线程都将无法继续执行死锁产生的原因系统资源的竞争通常系统中拥有的不可剥夺资源,其数量不足以满足多个线程运行的需要,使得线程在 运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争 才可能...原创 2019-02-01 20:16:04 · 506 阅读 · 0 评论 -
设计模式之桥接模式——Java语言描述
桥接适用于把抽象化和实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构性模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦这种模式设计到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可以被结构化改变而不互相影响。介绍设计模式意图: 将抽象部分和实现部分分离,使得它们可以独立变化。优点:抽象和实现的分离优秀的拓展能力缺点: 桥接模式的...原创 2019-01-10 11:53:59 · 135 阅读 · 0 评论 -
Java运行时数据区概述
Java 虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,如图所示:程序计数器程序计数器是一块比较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型中(仅是概念模型,各种虚拟机可能会通过一些更加高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、...原创 2019-01-20 20:00:30 · 134 阅读 · 0 评论 -
设计模式之迭代器模式——Java语言描述
迭代器模式是Java和.NET编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示原创 2019-01-14 10:27:18 · 126 阅读 · 0 评论 -
设计模式之解释器模式——Java语言描述
解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等介绍意图给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。应用实例编译器、运算表达式计算等优点可拓展性比较好,灵活增加了新的解释表达式的方法易于实现简单文法缺点可利用...原创 2019-01-14 09:56:43 · 120 阅读 · 0 评论 -
设计模式之责任链模式——Java语言描述
责任链模式为请求创建了一个接受者对象的链。这种模式给予请求的类型,对请求的发送者和接受者进行解耦。这种类型的设计模式属于行为模式。在这种模式下,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该对象,那么它会把相同的请求传给下一个接收者,以此类推介绍意图避免请求发送者和接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处...原创 2019-01-13 17:51:38 · 133 阅读 · 0 评论 -
设计模式之工厂模式——Java语言描述
工厂模式是Java中常见的设计模式之一,该设计模式属于创建型模式,提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象介绍应用实例当我们需要购买一辆汽车时,只需要从工厂提货而不需要知道汽车是如何制造出来的以及这个汽车的具体实现。优点调用者只需要知道对象的名称就可以创建一个对象拓展性高屏蔽产品的具体实...原创 2019-01-03 14:43:32 · 149 阅读 · 0 评论 -
设计模式之外观模式——Java语言描述
外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它想现有的系统添加了一个接口,以隐藏系统的复杂性介绍意图为子系统中的一组接口提供了一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用应用实例电脑只要按下开机键,就会自动执行开机的程序Java的三层开发模式优点减少系统相互依赖提高灵活性提高安全性缺点不符合开闭原则,...原创 2019-01-12 14:37:38 · 105 阅读 · 0 评论 -
六种主要的垃圾回收算法和思想
Java语言的一大特点就是可以自动进行垃圾回收处理,无需开发人员过于关注系统资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。一个不合适的垃圾回收方法和策略将会对系统性能造成不良影响。原创 2018-12-13 16:00:06 · 727 阅读 · 0 评论 -
JVM内存分配参数对程序性能的影响(二)
JVM内存分配参数对程序性能的影响(二),包括设置新生代、持久代以及线程栈原创 2018-12-13 14:41:55 · 527 阅读 · 0 评论 -
详解Java中对象的软、弱和虚引用的区别
对于大部分的对象而言,程序里会有一个引用变量来引用该对象,这是最常见的引用方法。除此之外,java.lang.ref包下还提供了3个类:SoftReference、WeakReference和PhantomReference。它们分别代表了系统对对象的另外3中引用方式:软引用、弱引用 和虚引用。原创 2018-09-28 11:24:19 · 123 阅读 · 0 评论 -
深入浅出Java中的Lambda表达式,更加简洁的编程之道
Lambda表达式是Java8的重要更新,也是被广大开发者寄予厚望的新特性Lambda表达式支持将代码块作为方法参数,允许用更加简洁的代码来创建只有一个抽象方法的接口的实例原创 2018-09-27 13:41:16 · 199 阅读 · 0 评论 -
Java8中的匿名内部类及内部类的二三事
匿名内部类是没有名字的内部类,一般用于简化程序代码 匿名内部类适合创建那些只需要使用一次的类,它的语法有些奇怪,创建匿名内部类会立即创建一个该类的实例,这个类定义立即消失,且不能重复使用。 定义匿名类的格式如下:new 实现接口() |父类构造器(实参列表){//匿名内部类的类体部分}&n...原创 2018-09-25 21:54:46 · 2250 阅读 · 1 评论 -
Java面向接口编程,低耦合高内聚的设计哲学
接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性。原创 2018-09-23 21:16:19 · 582 阅读 · 0 评论 -
Java中“==”运算符、equals()方法和常量池的关联
Java中测试两个变量是否相等可以使用两种方式:一种是利用“==”运算符,一种是使用equals()方法。 使用“==”运算符来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相等),则只要两个变量的值相等,则返回true。对于两个引用变量来说,只有当它们指向同一个对象时,“==”运算符才返回true,且...原创 2018-09-18 18:06:49 · 259 阅读 · 0 评论 -
Java填坑手册
Java-填坑手册一些基础的、简单的东西你都会错?其实这些并不是难,而是缺乏一个系统的总结。在这里找到那些学习java时留下的坑,填上它们!持续跟新中……基础知识    1. Java程序的运行机制和JVM、JDK及JRE的关联    2. 浅析Java的垃圾回收机制&a原创 2018-09-18 13:57:04 · 182 阅读 · 0 评论 -
Java使用继承时需要注意的二三事
继承是实现类复用的重要手段,它能够有效减少重复代码的数量,但同时也带来一个最大的坏处:破坏封装。 子类拓展父类时,子类从父类继承得到了成员变量和方法,如果访问权限允许,子类可以直接访问父类的成员变量和方法,相当于子类可以直接复用父类的成员变量和方法,十分便利。 但是在继承关系中,子类可以直接访问父类的内部信息和方法,导致了父类和子类的严重耦合。从这个角度看,父类的实...原创 2018-09-16 18:00:43 · 1314 阅读 · 0 评论 -
[JAVA/C++](PAT)1011 WORLD CUP BETTING (20)
With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excited as the best players from the best teams doing battles for the World Cup trophy in South Africa. Si...原创 2018-08-25 21:55:19 · 160 阅读 · 0 评论 -
[JAVA/PYTHON](PAT)1006 SIGN IN AND SIGN OUT (25)
At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door. Given the records of signing in’s and out’s, you...原创 2018-08-24 21:25:40 · 200 阅读 · 0 评论 -
[JAVA/C++](PAT)1004 COUNTING LEAVES (30)
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.InputEach input file contains one test case. Each case starts with a line co...原创 2018-08-24 18:02:31 · 288 阅读 · 0 评论