Java
_解牛_
阅读,练习,测试,总结,分享
展开
-
Push dev to origin/dev was rejected by remote
最近在 push 代码到 github 时,IDEA报错Push rejected: Push to origin/master was rejected在网友找了一圈,发现都不是想要的答案于是在命令行敲了一遍 git push,报错信息如下remote: error: GH007: Your push would publish a private email address....转载 2020-02-29 23:13:23 · 16103 阅读 · 1 评论 -
Adapter(适配器)模式
一、定义将一个的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。二、背景有时,为复用而设计的工具类不能被复用的原因恰恰是因为它的接口和专业领域现有的接口不匹配。如果遇到了接口无法兼容的问题,我们可以改掉工具类的接口使之适应于现有的接口,但前提是你拥有修改工具类的权限;即使你拥有的修改工具类源代码的权限,我们仅仅为了一个应用就...原创 2019-06-03 22:39:08 · 442 阅读 · 0 评论 -
设计模式
最近在重构现有系统的代码,其中有不少地方都用到了设计模式。虽然之前也看过一些设计模式相关的书籍,但总感记忆模糊,因此最近又重温了GOF的23种设计模式。GOF把设计模式分为三大类,分别是创建性模式、结构型模式和行为模式。接下来一段时间我将一一对这些模式做整理和学习,并分享在博客中。一、创建型模式Abstract Factory(抽象工厂)模式 Builder(生成器)模式 Fact...原创 2019-06-03 22:36:20 · 140 阅读 · 0 评论 -
Bridge(桥接)模式
一、目的将抽象部分与它的实现部分分离,使它们都可以独立地变化。二、背景现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体...原创 2019-06-15 00:15:55 · 7022 阅读 · 0 评论 -
如何更好对系统进行测试
TDD(测试驱动开发)的三项法则: 在编好失败单元测试之前,不要编写任何产品代码。 只要有一个单元测试失败了,就不要再写测试代码;无法通过编译也是一种失败情况。 产品代码恰好能够让当前失败的单元测试成功通过即可,不要多写。 测试代码的一个问题是必须隔离出待测试的代码。如果一个函数调用了其他函数,单独测试它通常会比较困难。为了编写测试,你必须找出将这个函数和其他函数解耦...原创 2019-03-21 23:20:25 · 2334 阅读 · 0 评论 -
volatile变量使用姿势
Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。在访问volatile变量时不会执行加...原创 2019-03-21 23:11:37 · 269 阅读 · 0 评论 -
如何合理设置Java线程池大小
《Java并发编程实战》一书中,Brian Goetz和合著者们为线程池大小的优化提供了不少中肯的建议。这非常重要,如果线程池中线程的数量过多,最终它们会竞争稀缺的处理器和内存资源,浪费大量的时间在上下文切换上。反之,如果线程的数目过少,正如你的应用所面临的情况,处理器的一些核可能就无法充分利用。Brian Goetz建议,线程池大小与处理器的利用率之比可以使用下面的公式进行估算:Nt...原创 2019-03-21 23:07:57 · 1390 阅读 · 0 评论 -
Java的类加载步骤
1、Java虚拟机(JVM)和类的关系在Java中,启动某个Java程序时,会启动一个JVM进程,无论Java程序多么复杂,是单线程还是多线程,它们都是在JVM进程中运行的。在不同的JVM中运行的同一个类是不同的,两个JVM进程之间并不会共享数据,所有的JVM内存共享都是指同一个JVM内存共享。public class JVMTest { public static void m原创 2016-05-05 17:57:19 · 820 阅读 · 0 评论 -
Strnig str = new String("123");究竟创建了几个String对象?
今天在面试的时候被问到标题上的问题,今天回来看了Java API中关于String对应构造方法的文档描述,如下:初始化一个新创建的,和参数的字符序列相同的String对象,换句话说,新创建的String对象是传入的String类型参数的副本。由于String对象是不可变的,因此除非需要一个显式的字符串对象副本,否则无需使用该构造方法。通过new String(String original原创 2016-05-03 21:50:58 · 1827 阅读 · 0 评论 -
Java类加载器介绍
本文介绍类加载器概念,类加载器的分类,类加载器加载类的机制,最后实现一个自定义类加载器。原创 2016-05-09 23:27:49 · 6612 阅读 · 1 评论 -
Struts2中加载国际化资源文件的顺序
详细介绍了在Action类中和JSP中使用国际化资源文件加载消息时,根据key查找消息的顺序。原创 2015-11-28 22:55:35 · 2190 阅读 · 0 评论 -
JavaScript中对象的创建方式
面向对象的语言有一个标志,那就是都有类的概念,通过类可以创建任意多个具有相同属性和方法的对象。在JavaScript中,没有类的概念,因此JavaScript中的对象和基于类的语言中的对象也是不同的。在JavaScript中,对象是“无序属性的集合,其属性可以包含基本值、对象或者函数”。对象本质是值,就是一组没有特定顺序的值。其中值可以是数据,也可以是函数。每个对象都是基于一个引用类型原创 2015-06-06 13:52:25 · 1140 阅读 · 0 评论 -
Java匿名内部类
在Java程序中,如果我们希望在调用某方法时,传入一个某个接口类型或者某个抽象类类型的引用变量作为参数,而这个引用变量的应用场合通常只有这一个地方,并且只运用一次,那么我们可以考虑创建匿名内部类。以如下代码为例:/** * 创建匿名内部类。 * Created by Administrator on 2015/2/5 0005. *///定义JobsApple接口,原创 2015-02-05 21:23:53 · 560 阅读 · 0 评论 -
Java接口的命令模式用法
在Java中,接口是一种特殊的存在,它体现的是一种规范和实现分离的设计哲学,充分利用接口可以极好地降低程序各个模块之间的耦合,从而提高系统的可扩展性和可维护性。基于这种规则,很多软件架构设计理念都倡导“面向接口编程”,而不是面向实现类编程,下面介绍的命令模式则是面向接口编程的一种。考虑这一场景,摸个方法需要完成一个行为,但是这个行为举行的实现逻辑无法确定,必须等到执行该方法的时候才能确定,转载 2015-02-01 22:18:52 · 580 阅读 · 0 评论 -
Java学习笔记之Java方法值传递
在Java中,方法的参数传递方式是值传递,基本类型参数的传递方式是复制该基本类型参数,把该基本类型数值的复制品传给方法做参数,该基本类型数值和它的复制品之间没有关联关系,互不影响。我们看以下的例子:public class PrimtiveTransferTest { public static void wrap(int a,int b){ System.ou原创 2015-01-24 09:32:20 · 500 阅读 · 0 评论 -
Java中Object类的clone()(克隆)方法
Java提供了一个projected修饰的clone()方法,该方法用来实现对象的“自我克隆”,即得到当前对象的一个副本,并且两个对象之间完全隔离。需要注意的是,由于该方法使用projected修饰,因此该方法只能被子类重写或者调用。自定义类实现克隆的步骤如下:1、首先自定义类需要实现Cloneable接口,该接口只是一个标记性接口(接口中没有定义任何方法),表明实现该接口的类可以实现“自原创 2015-02-11 23:04:41 · 4811 阅读 · 0 评论 -
Windows系统下Java环境变量配置详解
Java语言的初学者安装完JDK之后,在命令行中键入"java","javac"命令时通常会看到如下输出:"java"不是内部或外部命令,也不是可运行的程序或批处理文件。"javac"不是内部或外部命令,也不是可运行的程序或批处理文件。这是安装好jdk之后没有正确配置PATH环境变量的结果。通常情况下安装jdk时会出现PATH、CLASSPATH、JAVA_HOME等概念,接下原创 2015-04-17 23:46:11 · 3390 阅读 · 0 评论 -
利用数组作为缓存池实现对象的缓存
首先在此介绍不可变类的概念,不可变类是指创建了该类的实例以后,该实例的实例变量是不可改变的。在Java中,常见的不可变类有8个基本类型的包装类,以及String类。不可变类的实例状态不可改变,可以很方便地被多个对象所共享。在日常的工作,如果我们需要使用相同的不可变类实例,那么反复的创建将会加大系统的开销,因此我们可以缓存需要经常用到的对象,以此来节省因重复创建而带来的系统开销。缓存是软件中转载 2015-01-31 22:21:40 · 2041 阅读 · 0 评论