java
新助锦鹏
这个作者很懒,什么都没留下…
展开
-
JAVA设计模式之观察者模式
一、简介当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。二、实现1、抽象被观察者(Observable)public abstract class Observable { List<Observer> observers = new ArrayList<>(); public void add(Observer observer){ observers.a原创 2020-05-18 15:21:08 · 232 阅读 · 0 评论 -
Java多线程(二)之Thread
一、创建线程的方式1、扩展Thread类 public static class MyThread extends Thread{ @Override public void run() { super.run(); System.out.println("I am extends Thread"); } }2 继承runnable public static class MyRun原创 2020-05-10 20:00:53 · 303 阅读 · 0 评论 -
Java多线程(一)之基本概念
CPU核心数和线程数的关系目前主流CPU有双核、三核和四核,六核等。增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的。一般情况下它们是1:1对应关系,也就是说四核CPU一般拥有四个线程。但 Intel引入超线程技术后,使核心数与线程数形成1:2的关系。比如常见的双核四线程,就是使用了超线程技术。CPU时间片轮转机制平时在开发的时候,感觉并没有受cpu核心数的限制,想启动线程就启动线程,这是因为操作系统提供了一种CPU时间片轮转机制。又称RR调度。时间片轮转算法的基本思想是:根据先进原创 2020-05-10 19:26:47 · 260 阅读 · 0 评论 -
JAVA设计模式之生产者-消费模式
一、简介生产者消费者模式并不是GOF提出的23种设计模式之一,23种设计模式都是建立在面向对象的基础之上的,但其实面向过程的编程中也有很多高效的编程模式,生产者消费者模式便是其中之一,它是我们编程过程中最常用的一种设计模式。拿生活中的例子来说,工厂生产出来的产品总是要输出到外面使用的,这就是生产与消费的概念。在软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负...原创 2019-07-15 17:11:49 · 284 阅读 · 0 评论 -
JAVA设计模式之模板模式
一、定义定义一个操作中的骨架,而将一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。二、概述类中的方法用以表明该类的实例所具有的行为,一个类可以有许多方法,而且类中的实例方法也可以调用该类中的其他方法。在开发过程中,可能需要将类的许多方法集成到一个实例方法中,以此来表示一个算法的骨架。比如车站安排上车都需要进行安检、验票、选择候车室等步骤。因此就可...原创 2019-07-15 17:04:32 · 165 阅读 · 0 评论 -
JAVA设计模式之代理模式
一、定义为其他对象提供一种代理以控制对这个对象的访问。二、概述当用户与某个对象打交道时,但程序可能不希望用户直接访问对象,而是提供一个特别的对象,这个特别的对象就被称为代理对象。在代理模式中,代理的特点是:代理对象与目标对象实现了相同的接口,以达到透明地替换原来的对象。代理可能会需要验证某些信息或检查它所代理的对象是否可用,之后才会让所代理的对象调用同样的方法。比如秘书是老板的代理,老板...原创 2019-07-15 16:53:37 · 256 阅读 · 0 评论 -
Java学习之http协议缓存
一、简介http协议缓存分为强制缓存和协商(对比)缓存。区别:1、强缓存命中的话不会发请求到服务器2、协商缓存一定会发请求到服务器,通过资源的请求首部字段验证资源是否命中协商缓存,如果协商缓存命中,服务器会将这个请求返回,但是不会返回这个资源的实体,而是通知客户端可以从缓存中加载这个资源。两类缓存规则可以同时存在,强制缓存优先级高于对比缓存,也就是说,当执行强制缓存的规则时,如果缓存生效...原创 2019-07-15 16:30:24 · 361 阅读 · 0 评论 -
Java基础之反射
一、简介Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。二、反射的三种方式1、第一种方式 getClass() Test test = new Test(); Class ts = test.getClass();2、第二种方式 .class Class ts =...原创 2019-07-04 10:26:26 · 119 阅读 · 0 评论 -
JAVA设计模式之策略模式
一、定义定义一些列算法,把它们一个一个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。二、概述方法是类中最重要的组成部分,一个方法的方法体是由一些列语句组成,也就是说一个方法的方法体是一个算法。在开发过程中,经常遇到,由于用户需求的变化,需要经常修改类中某个方法的方法体,即需要不断变化算法。比如说排队,就有好几种方式:从小到大、从大到小或者是按照号码排队等等,像这...原创 2019-07-02 16:31:58 · 590 阅读 · 0 评论 -
Java线程同步之volatile
一、Java内存模型中的可见性、原子性、有序性可见性:是指线程间的可见性,一个线程修改的状态对另一个线程是可见的。也就是说一个线程修改的结果,另一个线程马上就能看到。原子性:指的是一个程序的操作是不可分割的,那么这个操作是原子操作。即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不...原创 2019-07-02 16:07:13 · 222 阅读 · 0 评论 -
Java线程同步之synchronize
一、java多线程产生的问题:Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突。因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。两种锁分别是:synchronized和ReentrantLock二、synchronized关键字Synchronzied实现同步的表...原创 2019-07-02 15:45:40 · 196 阅读 · 0 评论 -
阻塞队列
一、概述:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。1、支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2、支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景:生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就...原创 2019-07-01 17:29:36 · 121 阅读 · 0 评论 -
枚举
一、简介JDK1.5引入了新的类型——枚举。使用enum关键字。枚举enum是和class,interface同一级别的特性。可以把enum看作一个抽象类,但是它又有它的不同之处,enum不能被继承。二、使用1、定义public enum TestEnum { MON, TUE, WED, THU, FRI, SAT, SUN;} 这段代码实际上内部调用了7次 Enum(St...原创 2019-07-01 17:11:50 · 392 阅读 · 0 评论 -
Java基础之泛型
一、简介泛型就是参数化类型,就是将具体的类型参数化。只在编译阶段有效。二、使用泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法1、泛型类基本写法:class 类名称 <泛型标识:可以随便写任意标识号,标识指定的泛型的类型,比如T,E,K>{ private 泛型标识 /*(成员变量类型)*/ var; .....}举例:public clas...原创 2019-07-01 17:03:50 · 121 阅读 · 0 评论 -
Java两种比较机制Comparable与Comparator区别
一、Comparable1、Comparable 自然排序 它对每个实现它的类的对象强加了排序规则。该排序称之为自然排序在java.lang包下,是一个接口。compareTo 方法的返回值有三种情况: <1> e1.compareTo(e2) > 0 即 e1 > e2 <2> e1.compareTo(e2) = 0 即 e1 = e...原创 2019-06-11 18:51:25 · 550 阅读 · 0 评论 -
运算符
Java中位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”1、 与运算符,也叫位与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0。比如 有两个整数int a = 128, int b = 129, 则 a & b = 128;分析这个程序:“a”的值是128,转换成二进制就是10000000,...原创 2019-06-11 18:40:47 · 348 阅读 · 0 评论 -
二进制
1、十进制转二进制方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。比如5的二进制算法:2、二进制转十进制方法为:把二进制数按权展开、相加即得十进制数。比如上面的二进制10010110的十进制算法:3、负数的二进制方法:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。比如-42的二进制算法:...原创 2019-06-11 18:23:34 · 680 阅读 · 0 评论 -
Android studio创建Java测试类
首先创建Android项目,然后点击项目右键new——》Module,如下图: 弹出一个New Module页面,选择Java Library,如下图: 点击next,输入library名和类名A,最后点击finish,就可以创建成功了。如下图: 在创建的类A中,写main函数,即可。 public static void main(String[] args){原创 2017-05-12 16:52:32 · 3818 阅读 · 0 评论