JavaSE
城南 旧事
这个作者很懒,什么都没留下…
展开
-
转换流
InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流。比如,如下场景: System.in是字节流对象,代表键盘的输入,如果我们想按行接收用户的输入时,就必须用到缓冲字符流BufferedReader特有的方法readLine(),但是经过观察会发现在创建BufferedReader的构造方法的参数必须是一个Reader对...原创 2019-07-30 08:07:53 · 72 阅读 · 0 评论 -
死锁及解决方案
死锁的概念 “死锁”指的是: 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。 因此, 某一个同步块需要同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。下面案例中,“化妆线程”需要同时拥有“镜子对象”、“口红对象”才能运行同步块。那么,实际运行时,“小丫的化...原创 2019-07-29 10:00:58 · 157 阅读 · 0 评论 -
线程同步
一、线程同步的概念 处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。 这时候,我们就需要用到“线程同步”。 线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面的线程使用完毕后,下一个线程再使用。【示例】多线程操作同一个对象(未使用线程同步)import javax.management.Desc...原创 2019-07-29 09:51:17 · 110 阅读 · 0 评论 -
线程的优先级
1. 处于就绪状态的线程,会进入“就绪队列”等待JVM来挑选。 2. 线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5。 3. 使用下列方法获得或设置线程对象的优先级。 int getPriority(); void setPriority(int newPriority); 注意:优先级...原创 2019-07-25 20:38:08 · 201 阅读 · 0 评论 -
获取线程基本信息的方法
方法 功能 isAlive() 判断线程是否还“活”着,即线程是否还未终止 getPriority() 获得线程的优先级数量 setPriority() 设置线程的优先级数量 getName(0 获得线程的名字 setName() 设置线程的名字 currentThread(0 取得当前正在运行的线程对象,也就是取得...原创 2019-07-25 20:34:14 · 256 阅读 · 0 评论 -
线程的联合join()
线程A在运行期间,可以调用线程B的join()方法,让线程B和线程A联合。这样,线程A就必须等待线程B执行完毕后,才能继续执行。如下面示例中,“爸爸线程”要抽烟,于是联合了“儿子线程”去买烟,必须等待“儿子线程”买烟完毕,“爸爸线程”才能继续抽烟。【示例】package com.xut.Thread;import javax.management.relation.R...原创 2019-07-25 20:25:18 · 494 阅读 · 0 评论 -
暂停线程执行sleep/yield
暂停线程执行常用的方法有sleep()和yield()方法,这两个方法的区别是: 1. sleep()方法:可以让正在运行的线程进入阻塞状态,直到休眠时间满了,进入就绪状态。 2. yield()方法:可以让正在运行的线程直接进入就绪状态,让出CPU的使用权。一、sleep方法package com.xut.Thread;import jav...原创 2019-07-25 20:14:13 · 489 阅读 · 0 评论 -
终止线程的方式
终止线程我们一般不使用JDK提供的stop()/destroy()方法(它们本身也被JDK废弃了)。通常的做法是提供一个boolean型的终止变量,当这个变量置为false,则终止线程的运行。【代码】package com.xut.Thread;/*终止线程1、线程正常执行完毕-->次数2、外部干涉-->加入标识不要使用stop destory *...原创 2019-07-25 20:07:40 · 142 阅读 · 0 评论 -
线程状态
▪ 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。▪就绪状态(Runnable) 处于就绪状态的线程已经具备了运行条件,但是还没有被分配到CPU,处于“线程就绪队列”,等待系统为其分配CPU。就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象...原创 2019-07-25 19:54:21 · 136 阅读 · 0 评论 -
线程并发协作(生产者/消费者模式)
多线程环境下,我们经常需要多个线程的并发和协作。这个时候,就需要了解一个重要的多线程并发协作模型“生产者/消费者模式”。Ø 什么是生产者? 生产者指的是负责生产数据的模块(这里模块可能是:方法、对象、线程、进程)。Ø 什么是消费者? 消费者指的是负责处理数据的模块(这里模块可能是:方法、对象、线程、进程)。Ø 什么是缓冲区? 消费者不能直接...原创 2019-07-29 10:13:44 · 383 阅读 · 0 评论 -
基本概念和IO入门
对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能。程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库、其他程序、网络、IO设备等等。外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象、屏蔽外部的差异,从而实现更加便捷的编程。 输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是“读”...原创 2019-07-29 10:22:55 · 112 阅读 · 0 评论 -
利用流读取文件内容(经典代码)
当程序需要读取数据源的数据时,就会通过IO流对象开启一个通向数据源的流,通过这个IO流对象的相关方法可以顺序读取数据源中的数据。我们要注意以下几点: 1. 当我们读取的文件内容是已知的,可以使用固定次数的“int s= fis.read();”语句读取内容,但是在实际开发中通常我们根本不知道文件的内容,因此我们在读取的时候需要配合while循环使用。 2...原创 2019-07-29 10:32:18 · 1558 阅读 · 0 评论 -
对象流
我们前边学到的数据流只能实现对基本数据类型和字符串类型的读写,并不能读取对象(字符串除外),如果要对某个对象进行读写操作,我们需要学习一对新的处理流:ObjectInputStream/ObjectOutputStream。 ObjectInputStream/ObjectOutputStream是以“对象”为数据源,但是必须将传输的对象进行序列化与反序列化操作。【...原创 2019-07-30 08:07:32 · 115 阅读 · 0 评论 -
数据流
数据流将“基本数据类型与字符串类型”作为数据源,从而允许程序以与机器无关的方式从底层输入输出流中操作Java基本数据类型与字符串类型。 DataInputStream和DataOutputStream提供了可以存取与机器无关的所有Java基础类型数据(如:int、double、String等)的方法。 DataInputStream和DataOutput...原创 2019-07-30 08:07:08 · 163 阅读 · 0 评论 -
字节数组流
ByteArrayInputStream和ByteArrayOutputStream经常用在需要流和数组之间转化的情况! 说白了,FileInputStream是把文件当做数据源。ByteArrayInputStream则是把内存中的”某个字节数组对象”当做数据源。【示例】简单测试BytrayInputStream 的使用import java.io.ByteA...原创 2019-07-30 08:06:48 · 177 阅读 · 0 评论 -
缓冲字符流
BufferedReader/BufferedWriter增加了缓存机制,大大提高了读写文本文件的效率,同时,提供了更方便的按行读取的方法:readLine(); 处理文本时,我们一般可以使用缓冲字符流。【示例】使用BufferedReader与BufferedWriter实现文本文件的复制import java.io.BufferedReader;import java...原创 2019-07-29 15:03:59 · 161 阅读 · 0 评论 -
文件字符流
前面介绍的文件字节流可以处理所有的文件,但是字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。【示例】import java.io.*;public class TestReader { public static void main(String[] args) { ...原创 2019-07-29 11:40:29 · 199 阅读 · 0 评论 -
文件字节流
FileInputStream通过字节的方式读取文件,适合读取所有类型的文件(图像、视频、文本文件等)。Java也提供了FileReader专门读取文本文件。 FileOutputStream 通过字节的方式写数据到文件中,适合所有类型的文件。Java也提供了FileWriter专门写入文本文件。【示例】将文件内容读取到程序中public class IoTes...原创 2019-07-29 11:05:58 · 676 阅读 · 0 评论 -
四大IO抽象类
InputStream/OutputStream和Reader/writer类是所有IO流类的抽象父类,我们有必要简单了解一下这个四个抽象类的作用。然后,通过它们具体的子类熟悉相关的用法。·InputStream 此抽象类是表示字节输入流的所有类的父类。InputSteam是一个抽象类,它不可以实例化。 数据的读取需要由它的子类来实现。根据节点的不同,它派生了不同的节...原创 2019-07-29 10:59:01 · 177 阅读 · 0 评论 -
Java中流的概念细分
按流的方向分类: 1. 输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)。 2. 输出流:数据流向是程序到目的地(以OutPutStream、Writer结尾的流)。按处理的数据单元分类: 1. 字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,如FileInputStream、FileOutp...原创 2019-07-29 10:51:30 · 523 阅读 · 0 评论 -
多线程的两种实现方式
1 通过继承Thread类实现多线程 继承Thread类实现多线程的步骤: 1. 在Java中负责实现线程功能的类是java.lang.Thread 类。 2. 可以通过创建 Thread的实例来创建新的线程。 3. 每个线程都是通过某个特定的Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。 ...原创 2019-07-25 19:51:52 · 192 阅读 · 0 评论 -
程序 进程 线程的概念
一、程序 “程序(Program)”是一个静态的概念,一般对应于操作系统中的一个可执行文件,比如:我们要启动酷狗听音乐,则对应酷狗的可执行程序。当我们双击酷狗,则加载程序到内存中,开始执行该程序,于是产生了“进程”。二、进程 1. 进程是程序的一次动态执行过程, 占用特定的地址空间。 2. 每个进程由3部分组成:cpu、data、code。每个进程都...原创 2019-07-25 19:32:24 · 265 阅读 · 0 评论 -
冒泡排序和二分法查找
一、冒泡排序冒泡排序算法的运作如下: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒...原创 2019-07-19 11:20:54 · 775 阅读 · 0 评论 -
构造方法
构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。声明格式:[修饰符] 类名(形参列表){ //n条语句}要点: 1. 通过new关键字调用!! 2. 构造器虽然有...原创 2019-07-16 20:08:27 · 213 阅读 · 0 评论 -
方法
一 方法的命名 方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。 方法用于定义该类或该类的实例的行为特征和功能实现。 方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。方法声明格式[修饰符1 修饰符2 …] ...原创 2019-07-16 19:55:36 · 108 阅读 · 0 评论 -
循环结构
循环结构分两大类,一类是当型,一类是直到型。当型: 当布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环,比如:while与for循环。直到型: 先执行某语句, 再判断布尔表达式,如果为true,再执行某语句,如此反复,直到布尔表达式条件为false时才停止循环,比如do-while循环。一、while循环语法结构:...原创 2019-07-16 19:41:40 · 3459 阅读 · 0 评论 -
选择结构
选择结构用于判断给定的条件,然后根据判断的结果来控制程序的流程。主要的选择结构有:if选择结构和switch多选择结构。有如下结构: if单选择结构 if-else双选择结构 if-else if-else多选择结构 switch结构 一、if单选择语句语法结构if(布尔表达式){ 语句块}if语句...原创 2019-07-16 19:10:58 · 6253 阅读 · 0 评论 -
类型转换
一、自动类型转换 自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图所示,实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。可以将整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。二、强制类型转换 强制类型转换,又被称为造型,用...原创 2019-07-16 17:59:08 · 124 阅读 · 0 评论 -
运算符
运算符的分类算术运算符 二元运算符 +,-,*,/,% 一元运算符 ++,-- 赋值运算符 = 扩展运算符 +=,-=,*=,/= 关系运算符 >,<,>=,<=,==,!= instanceof 逻辑运算符 &&,||,!,^ 位运算符 &,|,^,~ , >>...原创 2019-07-16 17:48:15 · 128 阅读 · 0 评论 -
Java注释和标识符
一、注释 为了方便程序的阅读,Java语言允许程序员在程序中写上一些说明性的文字,用来提高程序的可读性,这些文字性的说明就称为注释。 注释不会出现在字节码文件中,即Java编译器编译时会跳过注释语句。 在Java中根据注释的功能不同,主要分为单行注释、多行注释和文档注释。 单行注释: 使用“//”开头,“//”后面的单行内容均为注释。 多行注释: 以“/*”开头以“*/...原创 2019-07-15 21:14:17 · 271 阅读 · 0 评论 -
Java基本数据结构
Java是一种强类型语言,每个变量都必须声明其数据类型。 Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。Java中定义了3类8种基本数据结构 数值型- byte、 short、int、 long、float、 double 字符型- char 布尔型-bo...原创 2019-07-15 21:07:22 · 253 阅读 · 0 评论 -
关键字
一、this对象创建的过程和this的本质 构造方法是创建Java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四步: 1. 分配对象空间,并将对象成员变量初始化为0或空 2. 执行属性值的显示初始化 3. 执行构造方法 4. 返回对象的地址给相关的变量 this的本质就是...原创 2019-07-17 17:51:59 · 162 阅读 · 0 评论 -
封装
封装的具体优点: 1. 提高代码的安全性。 2. 提高代码的复用性。 3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。 4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。 Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、...原创 2019-07-17 18:05:36 · 102 阅读 · 0 评论 -
继承
继承能够更好地实现类的扩展【示例】public class TextExtends { public static void main(String[] args) { Student s=new Student("高淇",172,"Java"); s.study(); s.rest(); }}class Person{...原创 2019-07-17 19:22:09 · 68 阅读 · 0 评论 -
Math类
java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。如果需要更加强大的数学运算能力,计算高等数学中的相关内容,可以使用apache commons下面的Math类库。Math类的常用方法: 1. abs 绝对值 2. acos,asin,atan,cos,sin,tan 三角函数 3....原创 2019-07-19 10:53:02 · 293 阅读 · 0 评论 -
Date类
Date类 在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。 1. Date() 分配一个Date对象,并初始化此对象为系统当前的日期和时间,可以精确到毫秒)。 2. Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:...原创 2019-07-19 10:36:06 · 151 阅读 · 0 评论 -
StringBuffer和StringBuilder
StringBuffer和StringBuilder的区别 1.StringBuffer JDK1.0版本提供的类,线程安全,做线程同步检查, 效率较低。 2. StringBuilder JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高。 建议采用该类。· 常用方法列表: 1. 重载的public StringBuilder a...原创 2019-07-19 09:54:34 · 106 阅读 · 0 评论 -
String类的常用方法
String类的常用方法列表【示例】public class TestString { public static void main(String[] args) { String str01="abcdefg"; String str...原创 2019-07-17 20:20:04 · 108 阅读 · 0 评论 -
数组
数组的定义 数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点: 1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 2. 其元素必须是相同类型,不允许出现混合类型。 3. 数组类型可以是任何数...原创 2019-07-17 20:09:10 · 181 阅读 · 0 评论 -
接口
声明格式[访问修饰符] interface 接口名 [extends 父接口1,父接口2…] {常量定义; 方法定义;}定义接口的详细说明: 1. 访问修饰符:只能是public或默认。 2. 接口名:和类名采用相同命名机制。 3. extends:接口可以多继承。 4. 常量:接口中的属性只能是常量,总是:pub...原创 2019-07-17 19:48:34 · 96 阅读 · 0 评论