自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

烧水匠

身高八尺,腰围也是八尺。

  • 博客(30)
  • 收藏
  • 关注

原创 Java Web 发展历史(一)静态页面时期和CGI时期

Java语言基础的学习暂时告一段落,接下来将进入Java WEB世界,WEB基于客户端服务端架构,客户端和服务端使用HTTP协议来通信。 在学习Java WEB开发之前有必要了解WEB发展史,通过学习WEB发展史我们可以知道每种技术为什么会出现以及为什么被取代,从而了解这些技术的使用场景,在以后工作中或许可以用到这些技术。本文将介绍静态网页和CGI时代。静态页面时期静态页面时期每一个页面都...

2019-11-01 14:28:32 871

原创 Java信号量基本使用

假设有两个线程分别为t1和t2,它们开始时分别执行一些相互独立的运算,当执行到一半时t2依赖t1的一个中间结果(如一个条件)才能继续往下执行。实现这种需求的一种简单方式是轮询,下面的代码展示了使用轮询的方式实现需求:package com.shaoshuidashi;import java.util.concurrent.ExecutorService;import java.util...

2019-10-18 20:54:08 2566

原创 Java多线程数据同步

当多个线程同时读写同一个份数据时其结果可能会和我们期望的结果不一致,例如两个线程对同一个变量做自增,得到的结果和我们想要的可能不一样,示例如下:package com.shaoshuidashi;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class...

2019-09-27 07:29:16 1281

原创 Java线程

线程是操作系统能够进行运算调度的最小单元,每个进程有多个线程组成,每个线程都有一个执行任务即我们编写的一段代码。进程默认启动一个线程来执行main函数,这个线程一般称为主线程。操作系统运算调度指的是CPU的调度,操作系统启动以后需要管理成百上千个线程,而CPU的数量是有限的,所以需要调度这些线程使每个线程都有机会执行。为什么使用线程现代计算机的CPU基本都有多个内核,通过Java线...

2019-09-19 07:37:47 168

原创 Java注解(二)源码注解处理器

上一篇学习了如何在运行时处理注解,本文将学习如何在编译期处理注解。自定义注解处理器AbstractProcessor是注解处理器的抽象类,我们通过继承AbstractProcessor类然后实现process方法来创建我们自己的注解处理器,所有处理注解的代码放在process方法里面。一个简单的处理器示例如下://AnnotationProcessor.javapac...

2019-09-11 07:17:05 472

原创 Java注解(一)基本使用

注解也称为元数据,它可以在代码中添加一些信息,我们可以通过编码的方式很方便地获取这些信息。注解可以分为三个部分:注解定义、注解使用、注解分析处理。注解定义注解的定义语法如下:package com.shaoshuidashi;public @interface TestAnnotation { int value() default 0; String ...

2019-09-07 10:27:42 211

原创 Java输入输出系统之nio(二)缓冲器基本数据类型存取、视图缓冲器和字节序

上一篇《Java输入输出系统之nio(一)通道和缓冲器》学习了通道和缓冲器的使用以及缓冲器的底层原理,本篇文章将学习缓冲器基本数据类型存取、视图缓冲器和字节序。缓冲器基本数据类型存取ByteBuffer除了可以存取字节以外还可以存取基本数据类型,存取基本数据类型的方法有:public ByteBuffer putChar(char value);public char ge...

2019-09-03 08:18:08 221

原创 Java输入输出系统之nio(一)通道和缓冲器

nio即new I/O是一种读写I/O的新类库,它有两个重要的概念:通道和缓冲器。通道表示数据的输入源或者输出目的地,本文只关注用来读写文件的FileChannel。缓冲器用来保存将要读写的数据,直接与通道交互的缓冲器是ByteBuffer。基本使用FileChannel只能通过FileInputStream、FileOutputStream以及用于即读又写的Random...

2019-08-30 06:50:37 196

原创 Java输入输出系统之Reader和Writer

Reader和Writer是另一种体系的I/O类,上一篇文章中学习的InputStream和OutputStream体系的类是按照字节(byte)读写数据,Reader和Writer体系的类则是使用字符(char)读写数据,Reader和Writer是体系的根类,它们都是抽象类。为什么需要Reader和WriterString底层使用char数组来存储数据,每个char占用两个...

2019-08-22 07:59:28 1230

原创 Java 输入输出系统之流

流是一个抽象的概念,它表示任何有能力产出数据的数据源对象或者是有能力接收数据的接收对象,它屏蔽了实际的I/O设备处理数据的细节。Java中InputStream是对有能力产出数据的数据源对象的抽象称为输入流,OutputStream则是对有能力接收数据的接收端的抽象称为输出流。InputStream和OutpuStream都是抽象类,所有的流都继承自它们。装饰器流和非装饰器流流...

2019-08-18 17:12:48 158

原创 Java运行时类型信息RTTI

应用程序在运行的时候获取一个对象的类型信息的技术称之为运行时类型信息RTTI(Run-Time Type Identification)。RTTI是C++的一个概念,Java中的RTTI是在《think in java》这本书中作者提出来的,官方文档里面并没有RTTI这个概念。作为学习者不应该纠结于一项技术的命名,而应该关注命名所指代的具体技术或者思想,RTTI指代的是一组在运行时获取对象类型信息...

2019-08-10 11:08:56 175

原创 Java正则表达式Pattern和Matcher

Java字符串支持使用正则表达式进行替换和分隔操作,字符串提供的正则表达式操作是有限的,比如打印正则表达式匹配到的每一个字符串就无法通过字符串提供的方法来实现。Java使用Pattern和Matcher两个类来支持正则表达式功能,字符串提供的正则表达式功能实际也是调用这两个类来实现的。 本文将介绍Pattern和Matcher的使用方法。PatternPattern用来表示一个...

2019-08-02 06:53:30 1435 1

原创 Java字符串

本文包含以下内容:String不可变 字符串连接 StringBuilder StringBuffer 使用正则表达式 可能出现的坑String不可变Java中字符串使用String对象表示,它是不可变的,调用String对象的任何方法都不会改变字符串的内容,但是它会返回一个全新的字符串来表示方法操作的结果。String original = "hel...

2019-07-29 14:57:24 128

原创 Java异常处理

传统面向过程的编程语言如C语言都是通过函数返回值来处理错误,这种方式有以下缺点:代码可读性差,需要对每个函数调用的返回值进行错误判断,如果出错了需要添加错误处理的逻辑,这种错误处理方式使正常业务逻辑和错误逻辑混在一起,降低了代码的可读性。 错误修复困难,如果想要通过这种方式修复错误是很困难的,因为出错点可能完全不知道怎么修复错误。 错误处理不是必须的,没有强制性,函数使用者可以不判...

2019-07-21 12:54:41 127

原创 Java中Set的数据结构及基本功能使用

Set是一个接口,它有两种实现分别是HashSet和TreeSet。 Set的特点是不保存重复的元素,它和数学概念上的集合相似,它支持交集、并集、差集操作。 本文将介绍HashSet和TreeSet使用的数据结构以及两种Set实现各自的应用场景,然后介绍交集、并集、差集的使用。HashSet vs TreeSetHashSet底层使用HashMap实现,使用了数组和散列算法实现,T...

2019-07-17 09:20:00 2362

原创 Java中TreeMap使用的数据结构及工作原理

TreeMap使用红黑树来存储数据,红黑树是一种平衡二叉查找树,它是一种高效的搜索算法,它的算法时间复杂度是O(lgn),本文不涉及红黑树的定义及操作细节,只涉及部分有助于理解TreeMap的内容。本文旨在从整体上理解TreeMap工作原理,不深入细节。 为了保持简洁凸出重点,本文的示例图中树的结点只显示键(key)不显示值(value)。二叉查找树二叉查找树是常用的搜索类算法,它有三个特...

2019-07-16 07:48:08 2506

原创 Java中HashMap容器使用的数据结构及算法

本文将学习HashMap容器的底层数据结构和算法。先通过一张结构图建立整体上的认识,然后描述涉及的数据结构及算法,接着描述常用的增加、删除、查询操作,最后描述它的应用场景。数据结构Java中HashMap使用链表、数组两种数据结构和散列算法来实现,下图是HashMap的结构:HashMap使用数组来存放一组链表,如上图的table,每个node表示链表的一个结点...

2019-07-09 06:48:54 543

原创 QtAV暂停或停止时一直重复一个声音,退出程序时崩溃

现象:现象如题环境:操作系统:Windows 7 系统版本:QtAV v1.12.0解决方法查看官网发现QtAV有运行时依赖XAudio2 for Windows7:运行时依赖: XAudio2 for Windows7 and older , VS2015 Redist for Win8.1 and older 32 / 64 bit, D3D11.1 update...

2019-06-27 09:38:53 415

原创 ArrayList和LinkedList的数据结构

本文将从实现的角度来描述ArrayList和LinkedList的数据结构及各自的应用场景ArrayList从名称就可以猜到ArrayList底层使用数组来实现List容器。数组是静态容器,即它不支持扩容或者删除数据,ArrayList在数组的基础上增加了动态扩容和删除,所以ArrayList也可以称之为动态数组。ArrayList有两个重要的变量:...

2019-06-27 07:38:36 759

原创 容器的基本使用

本文将介绍容器的基本使用方法,包括增加、删除、遍历、查询。Collection容器Collection容器可以通过Collection和Iterator接口来统一操作。容器只能存储对象,不能存储基本数据类型,可以使用基本数据类型的包装类来存储基本类型。容器有两种构造方法:构造空容器和非空容器。看下面的示例代码://构造空容器Collection<Int...

2019-06-27 07:36:50 309

原创 容器

容器和数组一样用来存放一组对象,和数组不同的是容器可以动态的增删元素,所以它比数组更灵活,Java容器可以分为两大类:Collection Map本文将介绍常用的Collection和Map容器及它们之间的关系,先在整体上了解Collection和Map容器,然后在后面的文章详细介绍每一种容器。CollectionCollection表示一个独立的对象...

2019-06-27 07:34:56 154

原创 数组

Java可以通过数组和容器来存放一组对象,数组的存储空间在初始化时已经确定且以后不能更改,因此数组不支持添加和删除操作,与之相反容器在创建以后可以动态的添加和删除。本文只讨论数组,容器将在后面的文章中讨论。数组创建数组既可以存放基本数据类型变量也可以存放对象。数组创建示例如下://数组创建示例class Phone{}public class Test{ public ...

2019-06-19 21:20:33 142

原创 Java类和对象(五)之内部类

在类内部定义的类称之为内部类, 内部类分为静态内部类和非静态内部类,为了方便下文描述,我们把非静态内部类称为普通内部类,把静态内部类称之为嵌套类,把包含内部类的类称之为外部类,本文将学习内部类的使用方法以及使用场景。普通内部类普通内部类创建简单,只需把类定义放到外部类的字段定义区域或方法体里面, 普通内部类相比普通类的定义有一个限制条件:普通内部类不能包含非常量的静态数据和方法,至于原因我...

2019-06-15 13:47:58 151

原创 Java类和对象(四)之抽象编程

本文将学习抽象编程概念进而引申出抽象类和接口,然后介绍抽象类和接口的使用,接着会介绍多重继承,最后会比较抽象类和接口以及各自的使用场景。抽象编程抽象编程就是把一组类的共有方法提取到一个基类里面,我们通过这个基类控制这组类而不用关心这组类的实现细节,我们以上一篇中移动NPC为例:package example;class Spirit{ public void move(){...

2019-06-08 15:37:27 264

原创 Java类和对象(三)

本文将关注面向对象的第三大要素:多态。文章开始先介绍多态的使用方法,然后介绍为什么使用多态。使用多态之前需要先知道三种技术继承 向上转型 复写(override)我们姑且把这三种技术称为多态的三要素吧,继承已经在Java类和对象(二)里面描述过了,这里不再赘述。向上转型向上转型就是把子类对象转换成父类对象。因为子类继承自父类,子类对象包含了父类对象的信息,所以可以把子类对象转换为...

2019-06-04 10:02:48 130

原创 WebService之样式(Style)和编码(Encode)

接上篇WebService原理浅析, SOAP编码有多种方式,我们在上一篇中使用的只是其中的一种,上一篇中我们介绍了WSDL的binding部分描述了WebService使用的协议及封装格式,其中封装格式是由样式( style )和编码(encode)控制的,本文将介绍样式和编码的组合是怎么影响SOAP封装,每种组合的优缺点以及使用建议。样式( style )WebSer...

2019-05-25 09:27:31 2685

原创 WebService原理浅析

WebService和编程语言中的类相似,它们都实现了一些功能,并且通过方法供给外部调用,不同的是WebService是部署在网络服务器上,而类在同一个进程空间里面。WebService部署在网络上,通过网络进行服务调用,只要遵循了访问协议,任何编程语言都可以访问服务,所以它是编程语言不相关的。我们可以通过类文件知道一个类提供了哪些方法,那怎么知道WebService提供了哪些服务供外部调用呢...

2019-05-19 07:24:55 1172 1

原创 Java类和对象(二)

继承是面向对象编程不可缺少的组成部分,继承语法简单,使用关键字extends来实现继承,示例如下:package com.shaoshuidashi.how;class Car{ public void startup(){ System.out.println('startup'); } public void stop(){ ...

2019-05-10 14:48:23 114

原创 Java类和对象(一)

怎么创建一个类?类是数据和方法的集合,创建类的语法很简单,如下:class ClassName{ int data; //数据 int method(){ //方法 return data; }}其中数据和方法可以包含多个。 创建类的难点在于给类命名,通常如果类的名字确定了,那么类所包含的数据和方法也基本确定了。怎么给类命名呢?首先类名需要是一...

2019-05-06 14:21:57 174

原创 Java基本数据类型

基本数据类型基本类型 大小 最小值 最大值 包装器类型 boolean -- -- -- Boolean char 8 bits -128 127 Character byte 16bits -2^15 2^15-1 Byte short 16bits -2^15 ...

2019-04-24 08:02:09 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除