
Java
gary0917
这个作者很懒,什么都没留下…
展开
-
+= 与 = 的区别
package 测试;public class Test { /* * += 会把后面的数值自动强制转换为前面的类型,然后修改前面的变量的数值。 * = 是先检测右边的类型与前面的是否相同(不会自动强制转换),若右边的精度比左边的高 * 则会报错,我们需要手动强转。 */ public static void main(String[] args) { shor...原创 2018-03-31 13:29:02 · 331 阅读 · 0 评论 -
Java设计模式—建造者模式(build)
目录目的应用实例代码 目的 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 应用实例 JAVA 中的 StringBuilder。 商品不同的套餐实际为不同的单件通过组合模式组合成的。 代码 package com.gary.designpattern.build;public class Person { p...原创 2018-10-03 23:52:12 · 830 阅读 · 0 评论 -
Java设计模式—抽象工厂模式(factory)
目录 目的应用实例代码 目的 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂模式是最常用的设计模式之一。这种类型的设计模式输出创建型模式,提供了一种创建对象的最佳方式。在工厂模式中创建对象是通过使用一个共同 的接口来指向新创建的对象。 应用实例 一个框架或者系统要由多个子工具系列的一个工具来配置时候。 提供一个产品类库,只显...原创 2018-10-04 00:07:06 · 165 阅读 · 0 评论 -
关于RMI的简单理解
RMI(Remote Method Invocation) 即远程方法调用; 涉及两个网络端,其核心思想是:一个端可以通过调用另外一个端的方法,实现相关功能; 一个端“执行”一个方法,而这个方法实际是在另外一端进行的; 当然,两个端都应该有相同的类,自然会拥有相同的方法。 一个端‘执行’这个方法,其实是通过调用这个类的代理对象的方法,在其中拦截这...原创 2018-10-25 15:55:51 · 375 阅读 · 0 评论 -
尝试模拟实现RMI(一)
关于RMI的基础理解在我之前的文章中有所介绍。点我这次是根据RMI的基础理解从而想到尝试模拟实现RMI。大体思路:我们的目标是建立RpcServer以及RpcClient后,从RpcClient中得到相应接口或类的代理对象,并且执行接口中的方法。 而这的执行是通过代理机制,把需要执行的方法和参数在通过RpcClientExecutor发送到RpcServerExecutor中执行。...原创 2018-10-28 02:14:02 · 226 阅读 · 0 评论 -
Java堆中的新生代和老年代以及相应的垃圾收集算法
新生代 主要是用来存放新生的对象,会频繁创建对象,所有垃圾收集会频繁进行回收。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。复制算法将内存分为三个区:一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活的对象一次...原创 2018-11-02 01:30:31 · 1690 阅读 · 0 评论 -
Java集合类小结
本文摘自 https://www.jianshu.com/p/589d58033841目录 Collection接口Set集合HashSetLinkedHashSetTreeSetEnumSetList集合ArrayListLinkedListArrayList与LinkedList性能对比Queue集合Map集合Java的集合类主要由Col...转载 2018-11-04 01:49:49 · 177 阅读 · 0 评论 -
关于Java中Socket通信时使用ObjectInputStream与ObjectOutputStream的顺序问题
在Java中使用Socket与ServerSocket建立客户机和服务器时,若采用ObjectInputStream与ObjectOutputStream建立通信,则需要注意两个流的顺序。否则会发生两方互相等待导致死锁。下面通过一个例子来证明:服务器:package com.gary;import java.io.IOException;import java.io.Objec...原创 2018-11-02 15:40:56 · 3410 阅读 · 1 评论 -
Java泛型中extends和super的区别
<? extends Fruit>代表的是上界通配符,也就是说这个List中存放的对象都是Fruit以及其子类的对象,这样我们就不用因为输入的List中类型的不同而改变代码了。上界通配符有一个特点,就是程序只知道List<? extends Fruit>中的对象是Fruit的子类的对象,但是如果Fruit的子类有很多个,那个在使用add方法的时候,就可能出现本来是List...原创 2018-11-08 00:29:03 · 364 阅读 · 0 评论 -
Java中对于模态框的使用以及在多线程中的应用
模态框可以通过继承JDialog并且设置构造参数boolean modal = true即可。但是 当此模态框setVisible(true)时候,会导致当前线程阻塞。那么问题来了:现有一需求是点击登陆按钮,则会向服务器发送登陆请求以及获取数据的请求,待服务器成功返回响应即可登陆主界面。但是由于如果有人多次点击登陆按钮,就会发很多次请求,这样服务器的压力就会变大。如何改进程序较少服务器的压...原创 2018-11-20 16:15:10 · 493 阅读 · 0 评论 -
Java中移位运算以及int、long和byte的转化
移位运算符运算符 含义 << 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) >> "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. >>> "无符号"右移运算 符,将运算符左边的对象向右...原创 2018-12-27 17:27:06 · 980 阅读 · 0 评论 -
Java设计模式—中介模式(Mediator)
目录目的应用实例代码 目的 利用一个中介处理不同类间的交互,松耦合。 应用实例 MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介。 代码 /** * describe:中介 * * @author gary * @date 2018/12/27 */public class Mediator { public ...原创 2018-12-27 19:02:51 · 160 阅读 · 0 评论 -
Java设计模式—职责链模式(Chain of Responsibility)
目录目的应用实例代码 目的 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将他们连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。 应用实例 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。 Servlet的过滤器Fileter。 代码 package com.gar...原创 2018-12-23 11:59:25 · 219 阅读 · 0 评论 -
HashMap、ConcurrentHashMap、Hashtable简单分析以及简单实现HashMap
HashMap分析:1.根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度。2.HashMap非线程安全(并发情况下put操作可能会引起死循环,因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形,Entry的next节点永远不为空,就会产生死循环获取Entry)。Hashtable分析:1.使用synchroniz...原创 2019-01-29 17:07:09 · 210 阅读 · 0 评论 -
Java内存模型
文章摘自:Java并发编程的艺术 方腾飞 魏鹏 程小明 著 Java内存模型基础 线程通信与同步:在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型中,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。而同步是显示进行的。即程序猿必须显示指定某个方法或者某段代码需要在线程之间互斥执行。在消息传递的并发模型中,线程直接没有公共状...原创 2019-02-23 23:18:15 · 1624 阅读 · 0 评论 -
scheduleAtFixedRate与schedule区别
schedule和scheduleAtFixedRate的区别:如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行(追赶性)而下一次执行的时间是参考上一次执行结束的时间,而schedule不会把过去的时间算上,会立即执行一次,下一次执行时间以上一次开始的时间作为参考。/** * describe:不延时追赶性测试 *...原创 2019-02-20 20:15:19 · 2962 阅读 · 0 评论 -
Java设计模式—单例模式(single)
目录 目的应用实例代码 目的 保证一个类仅有一个实例,并提供一个访问它的全局访问点。(菜鸟教程) 应用实例 一个国家有一个首都 Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 代码 第一种:package com.gary.design...原创 2018-10-03 23:45:05 · 2258 阅读 · 0 评论 -
Java设计模式—观察者模式(IListenner、ISpeaker)
目录目的应用实例代码 目的 定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时候,所有依赖于它的对象都得到通知并被自动更新。 应用实例 接水的时候,接水的人观察水位,当水位到一定程度时候便停止接水; 老师一布置任务,学生听到都得做。 代码 package com.gary.designpattern.observe;...原创 2018-10-03 23:36:53 · 391 阅读 · 0 评论 -
面向对象三大特性之多态
package 测试;public class A { public void show() { System.out.println("A"); }}package 测试;public class B extends A { public void show() { System.out.println("B"); }}package 测试;public cl...原创 2018-03-31 13:31:43 · 109 阅读 · 0 评论 -
Java中关于static
1.static成员是在定义它的类被‘加载’之初就申请了空间;2.static成员仅被加再一次;3.static成员的加载过程在该类能被正常使用之前;(等于是说任何该类对象无论其有或没、申请不申请空间<new不new>都与static成员没关系)4.正确引用static成员的方法:类名.静态成员名。5.静态方法是为了适应静态成员的特点,是在普通方法前面增加static关键字;6调用静态...原创 2018-03-31 13:49:01 · 156 阅读 · 0 评论 -
Java 中的接口
关键字:interface接口中的成员都具有联合修饰:public static final方法: public abstract接口中只能出现常量和抽象方法;接口中所呈现出来的基本意义:规定原则,但是不涉及实现;普通类通过implements关键字后跟一个或者多个接口;所有实现了某接口的类的实例,都是这个接口是实例。即实现了接口的类,其实可以堪称是这个接口的派生类。extends和impleme...原创 2018-03-31 14:07:33 · 131 阅读 · 0 评论 -
Java装配模式
package com.gary.people.core;import com.gary.people.interfaces.IHeight;import com.gary.people.interfaces.IWeight;public class People { private String name; private IHeight height; private IW...原创 2018-03-31 14:14:30 · 1508 阅读 · 0 评论 -
Java中的”==“和”equals()“区别
一、java中的数据类型”==“的含义:8大基本数据类型:byte short char int long float double boolean 他们之间的比较应使用==,比较的是他们的值。复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址。(除非是同一个new出来的对象,比较结果为true,否则位false)因为每次new会新开辟内存空间。eg:int i=0...转载 2018-03-31 15:41:18 · 130 阅读 · 0 评论 -
值传递、指针传递、引用传递
值传递:形参是实参的一个拷贝,改变形参的值不会影响外部实参的值。引用传递:是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。因为所占用同一个内存单元。c++中有引用传递。指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。在Java中,对于基本数据类型是值传递,对其他数据类型也是值传递,相当于...原创 2018-03-31 15:51:15 · 312 阅读 · 0 评论 -
Java中final、finalize()、finally三者的区别
Java中final为修饰词,用于修饰类、变量和方法。被final修饰的类不能再有派生类。被final修饰的变量是不可变的。被final修饰的方法不能重写。 Java中的finalize()是java垃圾回收机制回收对象前调用的最后一个函数。可以重写finalize()方法从而实现对资源的回收。通常是在这个方法中需要释放这个对象所申请的其他系统资源。finalize()类似于c+...原创 2018-03-21 21:55:23 · 319 阅读 · 0 评论 -
Java中HashMap遍历几种方式
目录一、使用迭代器二、for each 遍历一、使用迭代器第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key...转载 2018-04-02 00:46:51 · 117486 阅读 · 3 评论 -
Java正则表达式
正则表达式可以简化对字符串的复杂操作。一、匹配import java.util.Scanner;/**/public class check { public static void main(String[] args) { Scanner input = new Scanner(System.in); String x = input.nextLine(); chec...原创 2018-04-02 01:28:26 · 139 阅读 · 0 评论 -
Java类加载过程
JVM将类加载过程分为三个步骤:装载(load),链接(Link)和初始化(Initialize)。1.装载:查找并加载类的二进制数据;2.链接: 1)验证:确保被加载类的正确性;(安全考虑) 2)准备:为类的静态变量分配内存,并将其初始化为默认值;(比如private static int x = 10,给x分配内存,因为static, a等于int类型的默认初始值0) 3)解...转载 2018-04-21 10:15:40 · 131 阅读 · 0 评论 -
Java类初始化
类在什么时候被初始化: 1)创建类的实例,也就是new一个对象时候 2)访问某个类或接口的静态变量,或者对该静态变量赋值 3)调用类的静态方法 4)反射 5)初始化一个类的子类(会首先初始化子类的父类) 6)JVM启动时候标明的启动类,即文件名和类名相同的那个类类的初始化步骤: 1)如果这个类还没有被加载和链接,那先进行加载和链接 2)如果这个类存在...转载 2018-04-21 10:51:21 · 162 阅读 · 0 评论 -
如何获取web工程下的资源
//1.创建属性对象 Properties properties = new Properties(); //2.指定载入的数据源 /** * 此处,如果想获得web工程下的资源,用普通的FileInputStream写法是不行的 * 因为路径不对了。这里相对的路径其实是根据jre来确定的。但是我们这个是web工程 * jre后面会由tomcat管理,所有这里真...原创 2018-05-22 00:48:00 · 281 阅读 · 0 评论 -
监听器的内部机制-接口回调
package com.gary.test;/** * A执行循环,循环到5的时候通知B * 需求:A是很久之前写的,B是后来写的 * 解决方法:事先把一个对象传递给A,A执行到5时候通知这个对象,并调用这个对象中的方法。 * 但是这个对象是一个接口的实例而不是直接传递的B的实例。 * @author gary * */public class A { public voi...原创 2018-06-03 14:48:00 · 488 阅读 · 0 评论 -
Hibernate中查询方法get和load的区别
/** * get方法 * *采用立即加载,执行到这行代码的时候就会马上发送sql语句去查询。 * *查询后返回的是真实对象本身 * *查询一个找不到的对象的时候返回null * * load方法 * *采用的是延迟加载(lazy懒加载)执行这行代码的时候,不会发生SQL语句,当真正使用这个对象的时候才会发送sql语...转载 2018-06-25 01:36:49 · 214 阅读 · 0 评论 -
Java设计模式—适配器模式(adapter)
目录目的应用实例代码 目的 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 应用实例 三角插座到双角插座的转换需要一个适配器。 音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。 代码 public interface Three {...原创 2018-10-04 00:13:59 · 335 阅读 · 0 评论 -
EventBus简析
一、概述EventBus 是Google.Guava提供的消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。二、观察者设计模式1、目的定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时候,所有依赖于它的对象都得到通知并被自动更新。2、应用实例接水的时候,接水的人观察水位,当水位到一定程度...原创 2019-07-18 23:17:38 · 388 阅读 · 0 评论