- 博客(32)
- 收藏
- 关注
原创 设计模式--装饰者模式
装饰者模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 现给出以下需求:某个类A其中的方法m1里面的功能不够用,需要升级,也就是扩展; 怎样在不改变A类功能的前提下实现功能的扩展? 1.通过继承实现 重新定义一个类B,让类B继承类A,然后重写A中的方法,在保证A类功能的前提下,增加扩展功能 注意:该方法虽然能实
2017-09-20 22:17:51
243
原创 Java笔记--09
以下是SUN提供的反射机制中的类 java.lang.Class; java.lang.reflect.Construct; java.lang.reflect.Filed; java.lang.reflect.Modifier; 反射机制的作用: 1.反编译:.class–>.java 2.通过反射机制访问java类的属性,方法,构造方法等 获取Cl
2017-09-20 20:38:22
331
原创 Java笔记--08
IO需要掌握的16个流 FileInputStream FileOutputStream FileReader FileWriterBufferedReader BufferedWriter BufferedInputStream BufferedOutputStreamDataInputStream DataOutputStreamObjectInputStream Object
2017-09-12 23:38:17
348
原创 Java笔记--07
Collection集合的常用方法 boolean add(Object element);向集合中添加元素 int size();获取集合中元素的个数 void clear();清空集合 boolean contains(Object o);判断集合中是否包含某个元素 boolean remove(Object o);删除集合中某个元素
2017-09-11 07:40:24
204
原创 随机数Random
Math.random()产生[0.0,1.0)不包括1.0的double随机数。 下列代码产生[1,10)的随机数:1+Math.random()*10; 产生[m,n)的随机数代码:m+(n-m)*Math.random(); Java系统还提供了一个更强大的Random类,Math.random函数内部实现就是使用的Random类。Random类中实现的随机算法是伪随机,也就是有规则的随
2017-09-08 19:32:11
457
原创 Java笔记--06
常用类详解 String类 1.字符串一旦创建不可再改变。”abc”字符串对象一旦创建,不可再改变成”abcd” 2.提升字符串的访问效率:在程序中使用了”缓存”技术。 所以在java中所有使用”“括起来的字符串都会在”字符串常量池”中创建一份,字符串常量池在方法区中被存储。 3.在程序执行过程中,如果程序用到某个字符串,那么程序会先去字符串常量池中搜索该字
2017-09-08 16:43:09
175
转载 IntelliJ Idea 常用快捷键
IntelliJ Idea 常用快捷键列表Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾Ctrl+F12,可以显示当前文件的结构Ctrl+F7,可以查询当前元素在当前文件中的引用,然后按 F3 可
2017-09-05 08:07:44
167
原创 Java--05
数组 1.数组是一种引用类型 2.数组是一种简单的数据结构,线性的结构 3.数组是一个容器,可以用来存储其他元素,数组可以存储任意数据类型的元素 4.数组分为:一维数组、二维数组和多维数组 5.数组中存储的元素类型是统一的 6.数组长度不可改变,数组一旦创建长度是固定的,不可变的 7.数组的查找和修改元素效率较高,增删效率较低,具
2017-09-03 19:43:23
306
原创 Java笔记--04
1.异常是什么? 第一、异常模拟的是现实世界中”不正常的”事件 第二、java中采用”类”来模拟异常 第三、异常类也是可以创建对象的 NullPointException e=0x1234; e是引用,e中保存的内存地址指向堆中的”对象” 这个对象一定是NullPointException类型 这个对象就表示真实存在的异常事件
2017-09-02 20:27:07
114
原创 Java笔记--03
面向过程与面向对象的区别?(盖饭、蛋炒饭) 采用面向过程必须了解整个过程,每个步骤都有因果关系,每个因果关系都构成了一个步骤,多个步骤就构成了一个系统,因为存在因果关系每个步骤很难分离,非常紧密,当任何一个步骤出现问题,将会影响到所有的系统。高耦合:代码和代码之间的联系程度高。 面向对象会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起来就可以。
2017-09-02 20:24:24
505
原创 Java笔记--02
java语言中的字面值 1.什么是字面值? 一眼看上去就知道是多少的数据,就是字面值 2.字面值的本质 字面值是有数据类型的: 整形 100 浮点型 3.14 布尔型 true/false 字符型 ‘中’ 字符串型 “ABC” 字面值就是内存中的一块空间,这块空间有类型,有值。 缺点:只有字面值内存无法得到重复利用。Jav
2017-08-31 16:45:48
179
原创 Java笔记--01
1.Java中常用windows命令 切到d盘 d: cd后面跟路径名(可以是绝对路径或相对路径) 绝对路径:带盘符的命令 例如:E:\BaiduNetdiskDownload\Cache 相对路径:不带盘符,相对的是当前路径,只有当前目录下有该文件,才能直接cd 用dir可以查看当前目录下的所有文件 cd.. 回到上一级 cd. 当前目录 exit 退出 ipconfig
2017-08-31 16:24:39
155
原创 线程同步--synchronized详解
在Java的多线程中有两种编程模型:异步编程模型和同步编程模型。 假设t1和t2为两个线程,则 异步编程模型: t1线程执行t1的,t2线程执行t2的,两个线程之间谁也不等谁 同步编程模型:t1线程和t2线程执行,当t1线程必须等t2线程之行结束之后,t1线程才能执行,这是同步编程模型。为什么要引入同步呢? 为了数据的安全。尽管应用程序的使用率降低,但是为了保证数据是安全的,必须加入线
2017-08-16 19:57:09
346
原创 守护(Daemon)线程
在Java线程中有两种线程,一种是用户线程,另一种就是守护(Daemon)线程。 什么是守护线程?守护线程是一种特殊的线程,它的特性有陪伴的含义,当进程中不存在非守护线程了,则守护线程自动销毁。守护线程的作用是为其他线程的运行提供便利服务,最典型的应用就是GC(垃圾回收器),它是一个很称职的守护者。 下面通过一个示例演示守护线程随用户线程的结束而销毁。/*守护线程 * 其它所有的用户线程结束,
2017-08-16 11:40:37
335
原创 如何正确的更好的停止一个线程?
前面提到过三种停止线程的方式,这三种方式不是被废弃就是可能造成return污染,最后虽然建议用抛异常法,但抛异常法依靠的是异常处理机制,下面介绍一种更常用的的停止线程的方法:通过在实现Runnable接口的类里面(或者是在继承Thread类的类里面)定义一个boolean类型的变量(标记),然后对变量(标记)进行判断处理,从而达到停止线程的目的。 下面是简单示例:/* * 如何正常终止一个线程
2017-08-15 20:11:28
1453
原创 schedule方法和scheduleAtFixedRate方法的区别
schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行且都会按顺序执行,因此不需要考虑非线程安全的情况。它们的主要区别只在于有没有追赶特性。其中,schedule方法不具有追赶特性,而scheduleAtFixedRate方法具有追赶特性。下面以实示例演示什么是追赶特性。 首先验证schedule方法不具有追赶执行性:import java.util.Ca
2017-08-11 19:58:52
3259
原创 TimerTask类和Timer类的cancel()方法详解
无论是TimerTask类还是Timer类,其cancel()方法都是为了清除任务队列中的任务。虽然都是清除任务队列中的任务,却有一些不同:TimerTask类中的cancel()方法侧重的是将自身从任务队列中清除,其他任务不受影响,而Timer类中的cancel()方法则是将任务队列中全部的任务清空。下面以具体示例进行演示。 TimerTask类中的cancel()方法测试:import jav
2017-08-11 17:43:30
30884
原创 定时器--Timer
在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务。Timer类的主要作用是设置计划任务,但封装任务的类却是TimerTask类。执行任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类。 下面以一个示例演示如何使用定时器:public class TimerTest01 { public static void main(Str
2017-08-10 21:27:14
182
转载 Java枚举使用详解
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法。package com.ljq.test;/** * 枚举用法详解 * * @author jiq
2017-08-09 16:20:33
137
原创 对象序列化(Object Serialization)
程序运行时可能有需要保存的数据,对于基本数据类型如int、float、char等,可以简单的保存到文件中,程序下次启动时,可以读取文件中的数据初始化程序。但是对于复杂的对象类型,如果需要永久保存,使用上述方法就会复杂一些,需要把对象中不同的属性分解为基本数据类型,然后分别保存到文件中。当程序再次运行时,需要建立新的对象,然后从文件中读取与对象有关的所有数据,再使用这些数据分别为对象的每个属性进行初始
2017-08-08 20:31:54
2120
原创 单例模式与多线程(二)
在单例模式与多线程(一)中,介绍了四种在多线程环境下实现的单例模式:饿汉模式、懒汉模式、静态内部类实现方式和static代码块实现方式。下面介绍使用enum枚举数据类型实现单例和使用序列化与反序列化实现单例。 下面先介绍使用enum枚举数据类型实现单例: 枚举enum和静态代码块的特性相似,在使用枚举类时,构造方法会被自动调用,因此可以应用这个特性实现单例设计模式。 具体示例如下:packag
2017-08-08 15:27:30
159
原创 单例模式与多线程(一)
在标准的23个设计模式中,单例设计模式在应用中是比较常见的。但在常规的该模式教学资料介绍中,多数没有结合多线程技术作为参考,这就造成在使用多线程技术的单例模式时会出现一些意想不到的情况,这样的代码如果在生产环境中出现异常,有可能造成灾难性的后果。 在学习多线程技术的单例模式时,只需要考虑一件事,那就是:如何使单例模式遇到多线程是安全的、正确的。下面就不同方式实现多线程中的单例进行介绍: 一、“饿
2017-08-07 20:30:49
301
转载 设计模式之--单例模式(Singleton)的常见应用场景
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了),如果对单例模式不了解的可以先看下:http://blog.csdn.net/qq
2017-08-06 14:53:17
272
原创 单例模式
在讲单例模式之前首先要知道什么是设计模式,那么什么是设计模式呢? 百度百科是这样解释的:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单地说,设计模式是可以重复利用的解决方案。 设计模式的提出是在1995 人,是由4 为作者提出的,称为GoF,也就是“四人组”。 设计模式从结构上分为三类:创建型结构性行为型 其中最简单的设
2017-08-06 14:39:13
234
原创 线程的优先级
在操作系统中,线程可以划分优先级,优先级高的线程得到的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务。 设置线程优先级有助于帮助“线程规划器”确定在下一次选择哪一个线程来优先执行。 设置线程优先级使用setPriority()方法,此方法在JDK的源码如下:public final void setPriority(int newPriority) { Thre
2017-08-05 09:37:15
327
转载 interrupt、interrupted和isInterrupted的区别
今天在看到Thread类的isInterrupted方法可以获取线程的中断状态:于是写了个例子想验证一下:public class Interrupt { public static void main(String[] args) throws Exception { Thread t = new Thread(new Worker()); t.start(
2017-08-05 07:04:07
429
原创 停止线程的三种方法
在Java中有以下3种方法可以终止正在运行的线程: 1. 抛异常法; 2. 使用stop方法强行终止线程 3. 使用interrupt方法中断线程 下面分别对它们进行介绍: 一、抛异常法 抛异常法:顾名思义就是通过抛出一个异常,然后再捕获异常,从而跳过后面要继续执行的语句,达到终止线程的目的。使用抛异常法首先要判断该线程是否是停止状态,只有是停止状态才抛异常。 下面是具体
2017-08-04 17:50:56
1732
原创 关于i--与System.out.println()联合使用时可能出现的异常情况
println()方法与i--联合使用时“有可能”出现异常,虽然println()方法在内部是同步的,但i--的操作却是在进入println()之前发生的,所以有发生非线程安全问题的概率,如图 1-4所示。 图 1-4 println内部同步示例代码如下:package com.vhqimk.thread;/* * 测试i--与println()联合使用时可能出现异常 */public c
2017-08-04 16:27:58
1283
原创 多线程-实例变量与线程安全
自定义线程类中的实例变量针对其他线程有共享和不共享之分,这在多个线程之间进行交互时是一个很重要的技术点。不共享数据的情况下面通过一个示例来看下数据不共享的情况。package com.vhqimk.thread;/* * 测试数据不共享的情况 */public class Test { public static void main(String[] args) {
2017-08-04 11:32:39
461
原创 多线程-进程和线程概述以及如何使用多线程
1.什么是进程? 进程是操作系统结构的基础;是一次程序的执行; 是一个程序及其数据在处理机上顺序执行时所发生的活动; 是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 2.什么是线程? 线程是进程中独立运行的子任务。 3.多线程的优点:可以大大提升系统的运行效率。 4.多线程的特点:多线程是异步的,不能把Eclipse里代码的顺序当做线程的执行顺序,线程被调
2017-08-04 10:23:52
257
原创 Java拾遗-标识符及其命名规则
Java语言中的类名、对象名、方法名、常量名和变量名统称为标识符。 为了提高程序的可读性,在定义标识符时,要尽量遵循“见名知意”的原则。Java标识符的具体命名规则如下:一个标识符可以由几个单词连接而成,以表明它的意思;标识符由一个或多个字母、数字、下划线(_)和美元符号($)组成,没有长度限制;标识符中的第一个字符不能为数字;标识符不能是关键字;标识符不能是true,false和nul
2017-08-04 09:49:31
329
原创 Java拾遗-编程风格
一门编程语言,如果没有自己的编程风格,那么编写的代码会变得难以阅读,给后期的维护带来很多影响。而良好的编程风格不仅让人们阅读起来容易,还能提高编程效率。在编写Java程序时,很多时候都会涉及使用一对大括号,比如类体、方法体、循环体等都会用一对大括号括起若干代码,也就是“代码块”都是用一对大括号括起来的若干代码。“代码块”有两种流行的写法:一种是“独行”风格,一种是“行尾”风格。下面分别介绍:
2017-08-04 07:54:16
847
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人