![](https://img-blog.csdnimg.cn/20200408160020523.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 52
java学习笔记
风萧水丶寒
Stay hungry Stay foolish
展开
-
JDBC Driver是如何自动注册的
总结下来就是:获取系统变量jdbc.drivers的值,该系统变量的值为java.sql.Driver实现类的权限定名称(多个实用:分隔),加载实现类(加载的时候自动将其注册到驱动管理器中);通过SPI机制,扫描jar包下的META-INF/services/java.sql.Driver配置文件,配置文件中为java.sql.Driver实现类的权限的名,加载该实现类(加载的时候自动将其注册到驱动管理器中)遍历注册的驱动,使用给定的url尝试建立数据库连接并返回。驱动管理器中被注册的驱动:原创 2021-08-09 23:42:44 · 620 阅读 · 0 评论 -
Java8——java.util.stream.Stream类方法总结
java.util.stream.StreamfilterStream<T> filter(Predicate<? super T> predicate)按给定Predicate过滤并返回一个steam,这是一个中间操作map<R> Stream<R> map(Function<? super T,? extends R> mapper)对每个元素都调用mapper.apply()方法,这是一个中间操作mapToIntIntStre原创 2020-08-30 17:20:07 · 1340 阅读 · 0 评论 -
从源码分析ThreadLocal的原理
本文参考并摘抄自java基础教程由浅入深全面解析threadlocal总结:1. 线程并发:在多线程并发的场景下2. 传递数据:我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量3. 线程隔离:每一个线程的变量都是独立的,不会相互影响基本使用package com.fxsh.ThreadLocal;import lombok.extern.slf4j.Slf4j;/* * 需求:线程隔离 * 在多线程并发的场景下,每个线程中的变.原创 2020-07-15 12:15:57 · 201 阅读 · 0 评论 -
使用两阶段终止模型优雅的中断线程
public class StopGenteelly { public static void main(String[] args) throws InterruptedException { TwoPhaseTermination tpt = new TwoPhaseTermination(); tpt.start(); Thread.sleep(100); tpt.stop(); }}class TwoPhaseTe原创 2020-07-04 08:09:33 · 165 阅读 · 0 评论 -
Java并发中偏向锁、轻量级锁和重量级锁的原理
重量级锁Java的对象头中的MarkWord32位操作系统:64位操作系统:Monitor当使用synchronized获得锁时:synchronized(obj){//重量级锁 //临界区代码}obj对象的MarkWord中的指针(ptr_to_heavyweight_monitor)指向一个 OS提供的 Monitor对象Monitor中的Owner记录谁是这个锁的主人。当另一个对象也要获取obj锁时:发现obj所指向的Monitor的所有者为Thread原创 2020-07-04 07:58:02 · 553 阅读 · 1 评论 -
核心技术(卷二)07、第11章-RMI远程方法调用
RMI远程方法调用客户与服务器角色所有的分布式编程思想都很简单:客户计算机产生一个请求,然后将这个请求通过网络发送到服务器。服务器处理这个请求并返回一个针对该客户端的相应,供客户端进行分析。我们想要的机制:客户端程序员以常规的方式进行方法调用,无需关心将数据发送到网络上或者解析响应之类的问题。解决办法是在客户端为远程对象安装一个代理。同样实现服务端的程序员也不需要考虑与客户端之间的通信。...原创 2020-04-28 10:49:17 · 220 阅读 · 0 评论 -
核心技术(卷二)06、第10章-脚本、编译和注解处理
脚本、编译和注解处理Java平台的脚本添加脚本引擎Java SE默认支持对JavaScript的解释。ScriptEngineManager manager = new ScriptEngineManager();//获取所有发现的引擎工长列表List<ScriptEngineFactory> factoryList = manager.getEngineFactories...原创 2020-04-26 09:11:27 · 162 阅读 · 0 评论 -
核心技术(卷二)05、第4章-数据库编程
数据库编程JDBCJDBC并非Java Database Connectivity的缩写,而是一个注册了商标的术语,它的命名体现了对ODBC(为C语言访问数据库提供了一套编程接口)的致敬。JDBC与ODBC有基于同一个思想:根据API编写的程序都可以与驱动管理器 进行通信,而驱动管理器则通过驱动程序与实际的数据库进行通信。JDBC的典型用法数据库URLJDBC URL的一般语法为:J...原创 2020-04-21 10:52:14 · 366 阅读 · 0 评论 -
核心技术(卷二)04、第3章-网络
网络连接到服务器//创建一个链接到本地8080端口的套接字。Socket socket = new Socket("localhost",8080);//获取输入流InputStream inputStream = socket.getInputStream();Scanner in = new Scanner(inputStream);whiel(in.hasNext()){ ....原创 2020-04-16 09:59:47 · 240 阅读 · 1 评论 -
核心技术(卷二)03、第2章-XML
XML文档对象模型(DOM)解析器/树型解析器我们通过DOM解析器来解析下面的XML文档:<?xml version="1.0" encodeing="utf-8"?><font> <name>Helvetica</name> <size unit="pt">36</size></font>通...原创 2020-04-14 10:31:29 · 192 阅读 · 0 评论 -
核心技术(卷二)02、第1章-正则表达式
正则表达式字符语法解释xThe character x\The backslash character\0nThe character with octal value 0n (0 <= n <= 7)\0nnThe character with octal value 0nn (0 <= n <= 7)\0mnn...原创 2020-04-08 16:07:55 · 210 阅读 · 0 评论 -
核心技术(卷一)01、第3章-Java的基本程序设计结构
Java的基本程序设计结构访问修饰符类名必须以字母开头,后跟字母和数字的组合驼峰命名法参数==实参数据类型Java:强类型语言,共8种基本类型。4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型(char)和1种用于表示真值的boolean类型。整数型类型存储要求取值范围int4字节-214748...原创 2020-03-05 22:00:28 · 120 阅读 · 0 评论 -
核心技术(卷一)02、第4章-对象与类
对象与类类构造对象的模板或蓝图封装(数据隐藏)实例域对象中的数据方法操纵数据的过程对象类之间的关系依赖(uses-a)一个类的方法操纵另一个类的对象聚合(has-a)一个对象包含另一个对象继承(is -a)对象与对象变量对象与对象变量的关系是:对象变量引用了一个对象。在Java中,任何对象变量的值都是对存储在另...原创 2020-03-05 22:02:00 · 133 阅读 · 0 评论 -
核心技术(卷一)03、第5章-继承
继承(inheritance)超类和子类使用关键字extends来继承类class Manager extends Employee{}Employee类被称为:超类、基类、父类Manager类被称为:子类、派生类、孩子类覆盖(override)父类的方法可能不适用于子类,需要对父类的方法进行重写。在重写的过程中,可能会涉及到对父类私有域的操作。但是子类...原创 2020-03-10 16:34:40 · 132 阅读 · 0 评论 -
核心技术(卷一)04、第6章-接口与内部类
接口与内部类接口接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。 public interface Comparable{ int comparTo(Object other); }接口中的所有方法自动的属于public接口中可以定义常量,但是不能含有实例域,也不能在接口中实现方法。提供实例域和方法实现的任务应该由实现该接口的那个...原创 2020-03-11 22:35:19 · 101 阅读 · 0 评论 -
核心技术(卷一)05、第11章-异常、断言、日志和调试
异常、断言、日志和调试异常分类Java程序设计语言中,异常对象都是派生于Throwable类的一个实例。Throwable类下面有Error和Exception两个直接子类Throwable类层次结构Error类层次结构描述了Java运行时系统内部错误和资源耗尽错误,应用程序不应该抛这种类型的对象Exception类层次结构又分为两个分支:一个...原创 2020-03-12 23:57:38 · 148 阅读 · 0 评论 -
核心技术(卷一)06、第12章-泛型程序设计
泛型程序设计为什么要使用泛型程序设计泛型程序设计(Generic programming)意味着编写的代码可以被很多不同类型的对象重用。定义简单泛型类public class Pair<T>{ //T:类型变量 private T first; private T second; public Pair(){ first = nul...原创 2020-03-20 19:00:18 · 118 阅读 · 0 评论 -
核心技术(卷一)07、第13章-集合
集合将集合的接口与实现分离集合的功能固定,但是有不同的实现方式,所以将集合抽象为一个接口是合理的。这样做还能带来一个好处://使用接口类型存放集合的引用List<String> list = new ArrayList<>();//一旦改变想法,可以轻松的使用另一种不同的实现方式,这只需要修改调用构造器的地方,而不必修改大量代码List&l...原创 2020-03-24 10:54:06 · 108 阅读 · 0 评论 -
核心技术(卷一)08、第14章-多线程
多线程线程与进程操作系统为进程分配系统资源,进程中的线程共享这些资源。线程是系统分配时间片的接受者。创建线程如果需要执行一个耗时的任务,就应该使用独立的线程。下面是一个单独的线程执行一个简单任务的过程:将任务代码移到实现了Runnable接口的类的run方法中。//该接口只有一个run方法public interface Runnable{ void ...原创 2020-03-31 10:51:01 · 136 阅读 · 0 评论 -
核心技术(卷二)01、第1章-流与文件
流与文件流在Java API中,可以从其中读入一个字节序列的对象称为输入流,可以向其中写入一个字节序列的对象称为输出流。抽象类InputStream和OutputStream构成了I/O类层次机构的基础。因为面向字节的流不便于处理以Unicode形式存储的信息(Unicode中每个字符都是由多个字节构成的),所以从抽象类Reader和Writer中继承出了一个专门处理Un...原创 2020-04-07 13:31:11 · 190 阅读 · 0 评论