
Java基础深化与提高
更加深入的介绍面对象机制,深入底层和数据结构、再剖析JDK源码底层,这些都是成为JAVA高手必经的磨练。同时,增加“并发编程”课程,高并发问题是大型互联网企业面对的核心问题之一
地球村公民
这个作者很懒,什么都没留下…
展开
-
Java 多线程和并发编程:(五)ThreadLocal
ThreadLocal1.ThreadLocal2.实现一个序列号的生成器程序3.ThreadLocal 的 API1.ThreadLocalThreadLocal 直译为“本地线程”,其实它就是一容器,用于存放线程的局部变量**作用:**为解决多线程程序的并发问题2.实现一个序列号的生成器程序测试代码:public class Text{ public static void main(String[] args){ //创建共享资源的对象 Sequen原创 2020-05-11 11:41:52 · 246 阅读 · 0 评论 -
Java 多线程和并发编程:(四)任务调度 Task_Timer
任务调度 Task_Timer1.什么是调度2.相关的类3.实现时间的动态刷新1.什么是调度任务:就是事情调度:在不同的时间点或者在指定的时间点或者间隔多长时间我去运行这个任务。就是生活中的闹钟2.相关的类Timer 类:位于 java.util 包中3.实现时间的动态刷新测试代码:import java.util.Date;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.*;原创 2020-05-11 11:34:50 · 336 阅读 · 0 评论 -
Java 多线程和并发编程:(三)线程池
线程池1.什么是线程池2.线程池的好处3.线程池的应用场合4.使用线程池执行大量的 Runnable 命令5.使用线程池执行大量的 Callable 任务1.什么是线程池创建和销毁对象是非常耗费时间的创建对象: 需要分配内存等资源销毁对象: 虽然不需要程序员操心,但是垃圾回收器会在后台一直跟踪并销毁对于经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大思路: 创建好多个线程,放入线程池中,使用时直接获取引用,不使用时放回池中。可以避免频繁创建销毁、实现重复利用生活案例:原创 2020-05-11 11:28:33 · 219 阅读 · 0 评论 -
Java 多线程和并发编程:(二)线程同步 Lock 锁
线程同步 Lock 锁1.Lock 锁2.步骤3.Lock 与 synchronized 的区别1.Lock 锁Lock 锁:对需要上锁的地方上锁JDK1.5 后新增的功能与 Synchronized 相比,Lock 可提供多种锁方案,更灵活Java.util.concurrent.locks 中的 Lock 是一个接口,它的实现类是一个 Java 类,而不是作为语言的特性(关键字)来实现**注意:**如果同步代码有异常,要将 unLock()放到 finally 中2.步骤测试代码:原创 2020-05-11 11:18:59 · 234 阅读 · 0 评论 -
Java 多线程和并发编程:(一)实现线程的第三种方式
实现线程的第三种方式1.实现线程前两种方式的缺点2.实现多线程的第三种方式1.实现线程前两种方式的缺点–实现线程的前两种方式–没有返回值不支持泛型异常必须处理2.实现多线程的第三种方式实现 Callable 接口,重写 call 方法Callable 功能更加强大Future 接口位于 java.util.concurrent 包中,可以对具体 Runnable、Callable 任务的执行结果进行取消(cancel 方法,尝试取消执行此任务)、查询是否完成(isDone 方法)、获原创 2020-05-11 11:10:18 · 232 阅读 · 0 评论 -
Java 反射技术:(六)自定义注解
自定义注解1.自定义注解的语法2.元注解3.@Target4.@Retention1.自定义注解的语法使用 @interface 定义自定义注解时,自动继承了 java.lang.annotation.Annotation 接口@interface 用来声明一个注解其中的每一个方法实际上是声明了一个配置参数1.方法的名称就是参数的名称2.返回值类型就是参数类型(返回值类型只能是基本类型、Class、String、enum)3.可以通过 default 来声明参数的默认值4.如果只有一个成员原创 2020-05-11 10:48:42 · 242 阅读 · 0 评论 -
Java 反射技术:(五)注解
注解1.注解的作用2.注解的格式3.注解在哪里使用4.内置的注解1.注解的作用不是程序本身,可以对程序作出解释。(这一点跟注释没什么区别)可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别,如果没有注解信息处理流程,则注解毫无意义)2.注解的格式注解是以”@注释名”在代码中存在,还可以添加一些参数值,例如@SuppressWarnings(value=”unchecked”)。、3.注解在哪里使用可以附加在 package,class,method,field原创 2020-05-11 10:07:48 · 210 阅读 · 2 评论 -
Java 反射技术:(四)反射操作泛型
反射操作泛型1.泛型2.Java 新增的数据类型1.泛型Java 中的泛型仅仅是给编译器 javac 使用的,确保数据的安全性和免去强制类型转换的麻烦,但是一旦编译完成,所有与泛型有关的类型全部擦除。使用泛型直接读取泛型,是读取不到的,因为反射是操作加载以后的类的。测试代码:import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;原创 2020-05-11 09:42:58 · 311 阅读 · 0 评论 -
Java 反射技术:(三)提高反射效率
提高反射效率1.如何提高反射的性能反射机制对程序的运行在性能上有一定的影响,速度慢1.如何提高反射的性能通过 setAccessible 提高性能1.setAccessible 启用和禁用访问安全检查的开关,值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查,值为 false 则指示反射的对象不实施 Java 语言访问检查,并不是为 true 就能访问为 false 就不能访问2.禁止安全检查,可以提高反射的运行速度测试代码:import java.lang.refl原创 2020-05-11 09:20:51 · 1020 阅读 · 0 评论 -
Java 反射技术:(二)反射机制动态操作_方法_属性_构造器
反射机制动态操作_方法_属性_构造器1.获取类的名字2.获得类的属性3.获得类的方法4.获得构造方法5.动态的操作属性、方法、构造方法1.获取类的名字序号方法描述1String getName()获得包名+类名2String getSimpleName()获得类的名字实体类:import java.io.Serializable;public class Person implements Serializable { private String原创 2020-05-11 09:16:18 · 260 阅读 · 0 评论 -
Java 反射技术:(一)反射机制介绍_Class 对象获取
反射机制介绍_Class 对象获取1.反射机制2.反射机制的常见作用3.获取 Class 对象的方式1.反射机制程序在运行的过程中加载一些“只知道相关名字”的类一个类被加载后,JVM 会创建一个对应类的 Class 对象,类的整个结构信息会被放到 Class 对象中这个 Class 对象就像镜子一样,通过这面镜子,可以得到对应类的全部信息2.反射机制的常见作用动态的加载类、动态的获取类的信息(属性,方法,构造器)动态构造对象动态调用类和对象的任意方法、构造器动态调用和处理属性获取泛型信原创 2020-05-11 08:46:06 · 257 阅读 · 2 评论 -
Java XML 技术:(七)XPATH 技术_快速获取节点
XPATH 技术_快速获取节点1.快速获取节点1.快速获取节点XML:<?xml version="1.0" encoding="UTF-8"?><persons xsi:noNamespaceSchemaLocation="{some.xsd}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <person id="1001"> <name>张三</name原创 2020-05-10 11:21:50 · 345 阅读 · 0 评论 -
Java XML 技术:(六)DOM4J 方式解析 XML 数据
DOM4J 方式解析 XML 数据1.DOM4J 解析 XML 的步骤2.四种解析 XML 的特点1.DOM4J 解析 XML 的步骤XML:<?xml version="1.0" encoding="UTF-8"?><persons xsi:noNamespaceSchemaLocation="{some.xsd}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <person id="1001"原创 2020-05-10 11:16:08 · 192 阅读 · 0 评论 -
Java XML 技术:(五)JDOM 解析 XML 数据
JDOM 解析 XML 数据1.JDOM 概述2.JDOM 解析 XML 的步骤1.JDOM 概述JDOM 是一种解析 XML 的 Java 工具包,它基于树型结构,利用纯 Java 的技术对 XML 文档实现解析。所以适合于 Java 语言2.JDOM 解析 XML 的步骤XML:<?xml version="1.0" encoding="UTF-8"?><persons xsi:noNamespaceSchemaLocation="{some.xsd}" xmlns:xsi原创 2020-05-10 10:28:02 · 263 阅读 · 0 评论 -
Java XML 技术:(四)SAX 方式解析 XML 数据
SAX 方式解析 XML 数据1.SAX 的概述2.SAX 解析 XML 的步骤1.SAX 的概述SAX,全称 Simple API for XML,是一种以事件驱动的 XMl API,SAX 与 DOM 不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析 XML 具有速度快,占用内存少的优点2.SAX 解析 XML 的步骤xml:<?xml version="1.0" encoding="UTF-8"?><persons xsi:noNamespaceSc原创 2020-05-10 10:18:17 · 280 阅读 · 0 评论 -
Java XML 技术:(三)DOM 方式解析 XML 数据
DOM 方式解析 XML 数据1.解析 XML 文件的方式2.DOM 解析 XML 的步骤1.解析 XML 文件的方式在 Java 程序中读取 XML 文件的过程称为解析 XMLDOM 解析 (java 官方提供)SAX 解析(java 官方提供)JDOM 解析(第三方提供)DOM4J 解析(第三方提供)2.DOM 解析 XML 的步骤XML:<?xml version="1.0" encoding="UTF-8"?><persons xsi:noNamespace原创 2020-05-10 10:12:31 · 222 阅读 · 0 评论 -
Java XML 技术:(二)Schema 技术
Schema 技术1.DTD 验证2.Schema 技术3.Schema 的文档结构4.使用 Schema 验证 XML 文档1.DTD 验证概念:DTD 文档类型定义作用:验证是否是“有效”的 XML图片来源百度PCDATA(Parsed Character DATA)的意思是被解析的字符数据CDATA(Unparsed Character Data)不应由 XML 解析器进行解析的文本数据使用 DTD 的局限性DTD 不遵守 XML 语法DTD 数据类型有限DTD 不可扩展DT原创 2020-05-10 10:07:11 · 656 阅读 · 0 评论 -
Java XML 技术:(一)XML 概念和体系以及基本语法
XML 概念和体系以及基本语法1.XML 概念2.XML 的特点3.XML 的作用4.XML 和 HTML 之间的差异5.一个XML 文档6.XML 文件的体系7.XML 的基本语法8.XML 元素9.XML 命名规则1.XML 概念XML 指可扩展标记语言(EXtensible Markup Language)XML 没有预定义标签,需要自行定义标签2.XML 的特点XML 数据以纯文本格式存储实现不同应用程序之间的数据通信实现不同平台间的数据通信实现不同平台间的数据共享使用 XML 将原创 2020-05-10 09:49:20 · 361 阅读 · 0 评论 -
Java 网络编程:(二)InetAddress 类_InetSocketAddress 类_URL 类
InetAddress 类_InetSocketAddress 类_URL 类1.InetAddress 类2.InetAddress 类常用的方法3.InetSocketAddress 类4.InetSocketAddress 类常用的方法5.URL 类6.URL 类常用方法1.InetAddress 类封装计算机的 IP 地址,不包含端口号2.InetAddress 类常用的方法序号方法描述1String getHostAddress()获得 IP 地址2Str原创 2020-05-10 09:12:19 · 534 阅读 · 0 评论 -
Java 网络编程:(一)网络编程基本概念_TCP 和 UDP 协议的区别
网络编程基本概念1.网络的概念2.网络连接的功能3.网络编程的三要素4.IP 地址5.端口号6.Socket 含义7.TCP 和 UDP 协议的区别1.数据的传输2.TCP 和 UDP 协议的区别8.TCP 通信原理9.UDP 协议数据传递细节1.网络的概念网络:一组相互连接的计算机,多台计算机组成,使用物理线路进行连接2.网络连接的功能3.网络编程的三要素IP 地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备有素端口号:计算机中应用的标号(代表一个应用程序),0-1024 系原创 2020-05-10 08:27:36 · 513 阅读 · 4 评论 -
Java 多线程技术:(六)生产者消费模式的实现
生产者消费模式的实现1.线程间通信的方法1.线程间通信的方法wait():调用了wait()方法的线程进入等待池进行等待,等待池中的线程不去竞争对象锁,直到其它的线程通知,才会进入锁池notify():随机唤醒一个在该对象上等待的线程,被唤醒的线程进行锁池,开始竞争该对锁上的锁notifyAll():唤醒所有在该对象上等待的线程,优先级高的线程有可能先竞争到对象锁,只能在同步方法和同步代码块中使用public class Text{ public static void main(St原创 2020-05-09 17:12:12 · 168 阅读 · 0 评论 -
Java 多线程技术:(五)死锁
死锁1.死锁产生的原因2.如何解决死锁3.死锁的避免1.死锁产生的原因多线程操作时,互相等待对方的资源线程 1: 有钱-买东西线程2:有水收钱获取“钱”的锁成功线程中断,等待下次被系统挑中执行获取“东西”成功线程中断,等待下次被系统挑中执行获取“东西”的锁:失败,继续等待获取“钱”的锁失败,继续等待2.如何解决死锁不要让两个对象同时持有对象锁,采用互斥方式来解决3.死锁的避免**银行家算法:**该算法需要检查申请者对资源的最大原创 2020-05-09 16:54:01 · 188 阅读 · 0 评论 -
Java 多线程技术:(四)获取线程基本信息_暂停线程_线程的优先级_多线程的安全性_线程同步-5000字匠心出品
获取线程基本信息_暂停线程_线程的优先级_多线程的安全性_线程同步1.线程操作的常用方法2.暂停线程执行 sleep_yield_join_stop3.线程的优先级问题4.多线程的安全性问题5.线程同步1.同步代码块2.同步方法1.线程操作的常用方法序号方法名称描述1static Thread currentThread()返回目前正在执行的线程2final String getName()返回线程的名称3final boolean isAlive()判断线原创 2020-05-09 16:23:14 · 294 阅读 · 0 评论 -
Java 多线程技术:(三)线程状态_线程的生命周期
线程状态_线程的生命周期1.线程状态1.新生状态2.就绪状态3.运行状态4.阻塞状态5.死亡状态1.线程状态1.新生状态用new 关键字建立一个线程后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start()方法进入就绪状态2.就绪状态处于就绪状态线程具备了运行条件,但还没分配到CPU, 处于线程就绪队列,等待系统为其分配 CPU。当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称为“CPU 调度”3.运行状态在运行状态的线程执行自己的 run原创 2020-05-09 15:27:06 · 367 阅读 · 0 评论 -
Java 多线程技术:(二)多线程的实现
多线程的实现1.通过继承 Thread 类实现多线程2.通过实现接口 Runnable 实现多线程1.通过继承 Thread 类实现多线程一定的缺点:Java 中的类是单继承的,一旦继承了 Thread 类,就不允许再去继承其它的类.import java.io.*;public class Text{ public static void main(String[] args) throws IOException { MyThread mt=new MyThread()原创 2020-05-09 15:21:49 · 459 阅读 · 0 评论 -
Java 多线程技术:(一)多线程基本概念_程序_进程_线程
多线程基本概念_程序_进程_线程1.程序、进程、线程2.进程与线程之间的区别1.程序、进程、线程程序: Program,是一个指令的集合进程: Process,(正在执行中的程序)是一个静态的概念 进程是程序的一次静态态执行过程, 占用特定的地址空间.每个进程都是独立的,由 3 部分组成 cpu,data,code缺点: 内存的浪费,cpu 的负担线程: 是进程中一个“单一的连续控制流程” (a singles Thread,equential flow of control)/执行路径线程又被原创 2020-05-09 14:57:28 · 208 阅读 · 0 评论 -
Java IO流技术:(十二)Apache IOUtils的使用_Apache FileUtils的使用
Apache IOUtils的使用_Apache FileUtils的使用1.IOUtils 与 FileUtils2.工具类操作的相关方法1.IOUtils 与 FileUtilsCommons IO 是 apache 的一个开源的工具包,封装了 IO 操作的相关类,使用 Commons IO 可以很方便的读写文件FileUtils 中提供了许多设计文件操作的 已封装好的方法IOUtils 则是提供了读写文件的方法2.工具类操作的相关方法import org.apache.commons.原创 2020-05-09 14:39:48 · 487 阅读 · 0 评论 -
Java IO流技术:(十一)字节数组流
字节数组流1.ByteArrayInutStream 和 ByteArrayOutputStream1.ByteArrayInutStream 和 ByteArrayOutputStream数据源或目的地为:字节数组只有字节流,没有字符流节点流import java.io.*;import java.util.Date;public class Text{ public static void main(String[] args) { byte [] buf=w原创 2020-05-09 14:33:41 · 230 阅读 · 0 评论 -
Java IO流技术:(十)文件夹的复制
文件夹的复制1.文件夹的复制1.文件夹的复制import java.io.*;import java.util.Date;public class Text{ public static void main(String[] args) { File srcDir=new File("F:\\MyEclipse\\01"); File targetDir=new File("C:\\Users\\Administrator\\Desktop");原创 2020-05-09 14:28:10 · 194 阅读 · 0 评论 -
Java IO流技术:(九)对象流_序列化与反序列化
对象流1.对象序列化 (Serialization)2.为什么序列化3.对象序列化的条件4.如何实现序列化5.如何实现反序列化6.序列化与反序列化7.对象序列化注意事项1.对象序列化 (Serialization)ObjectOutputStream -序列化-写对象,将对象以“二进 制/字节”的形式写到(文件)ObjectInputStream -反序列化 -读对象将 Java 对象转换成字节序列(IO 字节流)对象反序列化 (DeSerialization)从字节序列中恢复 Java 对象原创 2020-05-09 14:20:17 · 340 阅读 · 0 评论 -
Java IO流技术:(八)数据流
数据流1.数据流2.DataOutputStream3.DataInputStream1.数据流提供了可以存取所有 Java 基础类型数据(如:int,double等)和 String 的方法处理流,只针对字节流,二进制文件输入流链和输出流链注意:只要关闭上层流即可2.DataOutputStreamimport java.io.*;import java.util.Date;public class Text{ public static void main(String[原创 2020-05-09 13:47:17 · 229 阅读 · 0 评论 -
Java IO流技术:(七)打印流
打印流1.PrintStream2.PrintWriter1.PrintStreamPrintStream 提供了一系列的 print()和 println(),可以实现将基本数据类型格式化成字符串输出。对象类型将先调用 toString(),然后输出该方法返回的字符串System.out 就是 PrintStream 的一个实例,代表显示器System.err 也是 PrintStream 的一个实例,代表显示器PrintStream 的输出功能非常强大,通常需要输出文本内容,都可以将输出流包原创 2020-05-09 13:39:43 · 185 阅读 · 0 评论 -
Java IO流技术:(六)转换流
转换流1.InputStreamReader 和 OutputStreamWriter1.InputStreamReader 和 OutputStreamWriter处理流用于将字节流转化成字符流,字符流与字节流之间的桥梁InputStreamReader 的作用是把 InputStream 转换成 ReaderOutputStreamWriter 的作用是把 OutputStream 转换成 Writer存在将字节流转换成字符流的转换流,因为字符流操作文本更简单不存在把字符流转换成字节流的转原创 2020-05-09 13:28:35 · 202 阅读 · 0 评论 -
Java IO流技术:(五)缓冲字节流_缓冲字符流
缓冲字节流_缓冲字符流1.缓冲字节流2.缓冲字符流1.缓冲字节流BufferedInputStream 和 BufferedOutputStreamFileInputStream 和 FileOutputStream 是节点流BufferedInputStream 和 BufferedOutputStream是处理流(包装流)读文件和写文件都使用了缓冲区,减少了读写次数,从而提高了效率当创建这两个缓冲流的对象时时,会创建了内部缓冲数组,缺省使用32字节大小的缓冲区当读取数据时,数据按块读入原创 2020-05-09 13:20:43 · 229 阅读 · 0 评论 -
Java IO流技术:(四)文件字符流
文件字符流1.使用 Reader 读取文件内容2.使用 Writer 写内容到文件1.使用 Reader 读取文件内容import java.io.*;public class Text{ public static void main(String[] args) throws IOException { //搭桥 FileReader reader=new FileReader("C:\\Users\\Administrator\\Desktop\\tes原创 2020-05-09 13:09:02 · 121 阅读 · 0 评论 -
Java IO流技术:(三)IDEA jar包导入_文件字节流
文件字节流1.使用IDEA导入jar包2.使用 FileInputStream 读取文件内容3.使用 FileOutputStream 写内容到文件4.使用字节流实现文件复制1.使用IDEA导入jar包2.使用 FileInputStream 读取文件内容import java.io.FileInputStream;import java.io.IOException;public class Text{ public static void main(String[] args原创 2020-05-09 12:57:54 · 1775 阅读 · 0 评论 -
Java IO流技术:(二)流的细分和体系_四大抽象类
流的细分和体系_四大抽象类1.流的分类2.IO 流的体系1.InputStream 和 OutputStream2.Reader 和 Writer1.流的分类根据流的方向:输入流:数据源到程序(InputStream、Reader 读进来)输出流:程序到目的地(OutPutStream、Writer 写出去)处理数据单元:字节流:按照字节读取数据(InputStream、OutputStream)字符流:按照字符读取数据(Reader、Writer)**注意:**输入输出是相对于程序而言原创 2020-05-09 09:00:54 · 281 阅读 · 0 评论 -
Java IO流技术:(一)IO 流的基本概念
IO 流的基本概念1.流的原理2.流的概念1.流的原理在 Java 程序中,对于数据的输入/输出操作以“流”(stream) 方式进行J2SDK 提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据Java 的流类型一般位于 java.io 包中2.流的概念数据源data source. 提供原始数据的原始媒介。常见的:数据库、 文件、其他程序、内存、网络连接、IO 设备数据源就像水箱,流就像水管中流着的水流,程序就是我 们最终的用户。 流是一个抽象、原创 2020-05-09 08:53:50 · 246 阅读 · 0 评论 -
Java容器:(十二)Collections 工具类的使用
Collections 工具类的使用1.集合与数组的转换1.集合转换成数组2.数组转换成集合2.Collections工具类的使用1.Collections.addAll(list, "aaa","bbb","ccc","ccc")向集合中一次性添加多个元素2.排序3.二分搜索4.集合拷贝 注意:如果源集合.size()>目标集合.size() 就会出现IndexOutOfBoundsEcception5.填充6.最大7.最小8.逆序9.线程同步10.整合代码1.集合与数组的转换1.集合转换成数组原创 2020-05-08 19:01:04 · 539 阅读 · 0 评论 -
Java容器:(十一)迭代器_遍历 List_Set_Map
迭代器_遍历 List_Set_Map1.遍历 List2.遍历Set3.遍历Map1.遍历 Listimport java.util.ArrayList;import java.util.Iterator;public class Text{ public static void main(String[] args) { ArrayList al=new ArrayList(); al.add("hi"); al.add("hii");原创 2020-05-08 17:42:57 · 194 阅读 · 0 评论