Java学习笔记
java学习
一角残叶
人生如逆旅,我亦是行人
展开
-
JDK8新特性(5)—— 方法引用
1 方法引用在使用 lambda 表达式的时候,实际上传递进去的代码就是一种解决方案:用什么参数做什么操作。考虑一种情况:在lambda 表达式中所指定的操作方案,已经有地方存在相同的方案,是否有必要再写重复的逻辑?package com.tzb.methodrefer.demo01;@FunctionalInterfacepublic interface Printable { public abstract void print(String s);}public clas原创 2020-12-03 09:14:27 · 269 阅读 · 0 评论 -
JDK8新特性(4)—— stream 流
1 对集合元素进行过滤public class Demo01Stream { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("赵子龙"); list.add("曹孟德"); list.add("金毛狮王"); list.add("令狐飞雪"); l原创 2020-12-02 08:39:34 · 290 阅读 · 0 评论 -
JDK8新特性(3)—— 常用函数式接口
JDK提供大量函数式接口,在 java.util.function1 Supplier 接口生产型接口,指定接口的泛型是什么类型,那么接口中的 get 方法就会生产什么类型的数据package com.tzb.funinterface.demo04;import java.util.function.Supplier;/** * @Description TODO * @Author tzb * @Date 2020/12/1 9:36 * @Version 1.0 **/pu原创 2020-12-01 15:00:53 · 208 阅读 · 0 评论 -
JDK8新特性(2)—— 函数式编程
1 函数式编程有些场景的代码执行之后,结果不一定被使用,从而造成性能的浪费。而 lambda 表达式是延迟执行的1.1 性能浪费的日志案例第二个参数是一个拼public class Demo01Logger { // 根据日志的级别显示日志信息的方法 public static void showLog(int level, String msg) { // 对日志的等级进行判断,如果1,输出 if (level == 1) {原创 2020-12-01 09:26:31 · 207 阅读 · 4 评论 -
JDK8新特性(1)—— 函数式接口
1 函数式接口有且仅有一个抽象方法的接口格式修饰符 interface 接口名称{ public abstract 返回值类型 方法名称(可选参数信息); // 其他非抽象方法内容}由于接口中的 public abstract 是可以省略的,所以函数式接口可以定义为public interface MyInterface{ void myMethod();}/** * @FunctionalInterface 检测接口是否为函数式接口 * 是:编译成功 */@Fu原创 2020-11-30 19:49:03 · 219 阅读 · 0 评论 -
java 多线程(2)——并发包
1 java并发包介绍JDK5.0 以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发应用程序。主要包含原子量、并发集合、同步器、可重入锁,并对线程池的构造提供了强力的支持。2 线程池线程池的5中创建方式 1. Single Thread Executor:...原创 2018-07-13 23:22:33 · 527 阅读 · 0 评论 -
JMS 技术
1 JMS 介绍JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。 JMS是一种与厂商无关的 API,用来访问消息收发系统消息。它类似于JDBC(Java D...原创 2018-07-14 10:58:24 · 633 阅读 · 0 评论 -
Java反射
1 Class 类在java中,静态的成员和普通数据类型不是对象。类是 java.lang.Class的实例对象package com.tzb.reflect;public class ClaasDemo1 { public static void main(String[] args) { //Foo 的实例对象 Foo foo1 = ...原创 2018-07-14 17:18:13 · 128 阅读 · 0 评论 -
Java NIO
1 RPC介绍RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC采用客...原创 2018-07-14 21:39:21 · 143 阅读 · 0 评论 -
jvm 技术
1 内存模型Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁,我们可以将这些区域统称为Java运行时数据区域。 Java虚拟机运行时数据区域被分为五个区域:堆(Heap)、栈(Stack)、本地方法栈(Native Stack)、...原创 2018-07-15 12:13:12 · 161 阅读 · 0 评论 -
Java300学习笔记(1)——内存分析,栈(stack)+堆(heap)+方法区(method are)
1 栈栈描述方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口)JVM 为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量)栈属于线程私有,不能实现线程间的共享;栈的存储特性:先进后出,后进先出栈是由系统自动分配,速度快;栈是一个连续的内存空间;2 堆用于存储创建好的对象和数组(数组也是对象)JVM 只有一个堆,被所有的线...原创 2019-01-13 10:52:18 · 237 阅读 · 0 评论 -
Java300学习笔记(2)—— 垃圾回收
1 垃圾回收相关算法1.1 引用计数法堆中每个对象都有一个引用计数,被引用一次,计数加 1 ,被引用变量值变为 null ,直到计数为 0 ,则表示变成无用对象。优点是:算法简单;缺点: 循环引用的无用对象无法识别1.2 引用可达法(根搜索法)程序把所有的引用看做一张图,从一个节点GC ROOT 开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用...原创 2019-01-13 11:15:51 · 207 阅读 · 0 评论 -
java 多线程(1)
1 线程实现的两种方式1.1 继承 Threadpackage testThread;import java.util.Random;public class MyThreadWithExtends extends Thread { private String flag; public MyThreadWithExtends(String flag){ ...原创 2018-07-13 15:41:03 · 168 阅读 · 0 评论 -
类的加载、反射
1 类加载器1.1 类的加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。加载,就是指将class文件读入内存,并为之创建一个Class对象(字节码对象)连接,验证是否有正确的内部结构,并和其他类协调一致。准备 负责为类的静态成员分配内存,并设置默认初始化值。解析将类的二进制数据中的符号引用替换为直接引用。初始化,就...原创 2018-05-14 22:48:58 · 274 阅读 · 0 评论 -
JDBC
1 JDBC介绍JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。2 JDBC开发步骤注册驱动....原创 2018-04-29 10:23:09 · 149 阅读 · 0 评论 -
网络编程
1 InetAddress类表示互联网中的IP地址1.1 静态方法static InetAddress getLocalHost(),返回本地主机地址;static InetAddress getByName(String hostName),传递主机名,获取IP地址对象; - 1.2 非静态方法String getHostAddress() 获取主机IP地址...原创 2018-05-11 14:32:06 · 183 阅读 · 0 评论 -
SQL语句
1 登录格式1:cmd> mysql –u用户名 –p密码例如:mysql -uroot –proot格式2:cmd> mysql --host=ip地址 --user=用户名 --password=密码例如:mysql --host=127.0.0.1 --user=root --password=root2 SQL语句结构化查询语言(Str...原创 2018-04-26 14:37:10 · 326 阅读 · 0 评论 -
连接池
1 连接池实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池1.1 连接池概述用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Con...原创 2018-05-03 14:09:22 · 191 阅读 · 0 评论 -
DBUtils工具类
1 DBUtils介绍如果只使用JDBC进行开发,会发现冗余代码过多,为了简化JDBC开发,采用apache commons组件一个成员:DBUtils。 DBUtils是java编程中的数据库操作实用工具,小巧简单实用。 DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 Dbutils三个核心功能介绍: 1. QueryRunner中提供对sql语句操作的A...原创 2018-05-03 10:32:10 · 8300 阅读 · 1 评论 -
JDBC工具类
1 封装数据库连接“获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils。提供获取连接对象的方法,从而达到代码的重复利用。public class JDBCUtils { private JDBCUtils(){} private static Connection con; static{ try { ...原创 2018-05-02 11:18:05 · 222 阅读 · 0 评论 -
打印流特性
1 打印流PrintStreamPrintWriter1.1 打印流特点此流不负责数据源,只负责数据目的;为其他输出流添加了功能;永远不会抛出IOException,但是可能抛出其他异常;两个打印流方法完全一致;1.2 两个流的构造方法有区别构造方法,就是打印流的输出目的端。 - PrintStream,构造方法,接收File类型,接收字符串文件名,...原创 2018-04-13 09:06:42 · 405 阅读 · 0 评论 -
Java300学习笔记(3)—— this , static,参数值传递,多态
1 this本质就是 创建好的对象的地址不能用于 static方法中1.1 创建对象的步骤分配对象空间,并将对象成员变量初始化为 0 或 空;执行属性值的显式初始化;执行构造方法;返回对象的地址给相关变量;3 static在类中,用 static 声明的成员变量是静态成员变量,也叫类变量。它的生命周期和类相同,在整个应用执行期间都有效;4 参数值传递Java 中...原创 2019-01-13 15:53:47 · 273 阅读 · 0 评论 -
Java300学习笔记(9)—— Map 和 HashMap
1 HashMap 和 HashTable用法一样;HashMap 效率高,线程不安全;HashTable效率低,线程安全;原创 2019-01-24 08:49:31 · 195 阅读 · 0 评论 -
Java300学习笔记(11)—— 冒泡排序普通版本和改进版本
1 冒泡排序简易版本:简单优化版:减少每趟次数最终版:考虑有序,减少趟数1.1 冒泡初级版package day04.sort;import java.util.Arrays;public class BubbleSort1 { public static void main(String[] args) { int[] arr = {9, 8, ...原创 2019-01-25 21:13:09 · 273 阅读 · 0 评论 -
Java300学习笔记(20)— 容器的同步控制和只读设置
1 同步控制(多线程并发访问集合的线程安全)常用容器 ArrayList,HashSet,HashMap 等都是线程不安全的;Collections 提供了 synchronizedXxx() 方法,将指 定容器包装成同步;* synchronizedList()* synchronizedSet()* synchronizedMap()package day04.synread...原创 2019-01-30 12:28:48 · 239 阅读 · 0 评论 -
Java300学习笔记(19)—— 引用(强软虚弱),WakeHashMap,IdentityHashMap 与 EnumMap
1 引用分类强引用,StrongReference: 引用指向对象,GC 运行时不回收;软引用,SoftReference,GC运行时可能回收(JVM内存不够);弱引用,WeakReference,GC 运行时立即回收;虚引用,PhantomReference 类似于无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列联合使用;目的: 避免对象长期驻留在内存中,解决垃圾...原创 2019-01-30 11:50:14 · 639 阅读 · 0 评论 -
Java300学习笔记(18)—— Hashtable ,子类 Properties
1 Hashtable2 Hashtable 子类 Properties读写资源配置文件要求 键 和 值都是字符串;原创 2019-01-30 10:35:49 · 229 阅读 · 0 评论 -
Java300学习笔记(17)—— Enumeration 接口, 子类 StringTokenizer
1 Enumeration 接口比较古老的接口;作用和 Iterator 类似,都是输出数据;方法: hasMoreElements(),nextElement()package day04.en;import java.util.Enumeration;import java.util.Vector;public class Demo1 { public stati...原创 2019-01-29 22:32:36 · 337 阅读 · 0 评论 -
Java300学习笔记(16)—— Queue 接口
1 队列1.1 Queue(单向)队列通常 FIFO (先进先出)优先级队列和堆栈 LIFO (后进先出)1.2 Deque (双向,双端访问)1.3 测试(模拟银行业务)package day04.que;import java.util.ArrayDeque;import java.util.Queue;/* * 使用队列模拟银行存款业务 * */public...原创 2019-01-29 18:12:49 · 162 阅读 · 0 评论 -
Java300学习笔记(15)—— Collectios 工具类
1 工具类 Collections 常用方法binarySearch(List<? extends Comparable<? super T>> list, T key),前提是容器要有序;sort()reverse()shuffle(List<?> list)swap(List<?> list, int i, int j)1.1 测...原创 2019-01-29 15:23:59 · 323 阅读 · 0 评论 -
Java300学习笔记(14)——排序容器 TreeSet 和 TreeMap
1 TreeMap确保 key 可以排序提供 key 比较器public TreeMap(Comparator &lt;? super K&gt; comparator)2 TreeSet确保元素实体可以排序且不可重复public TreeSet(Comparator&lt;? super E&gt; comparator)TreeSet 在添加数据时排序,数据更改不会影响原来...原创 2019-01-29 15:09:50 · 458 阅读 · 0 评论 -
Java300学习笔记(8)—— 容器 LinkedList
1原创 2019-01-23 11:03:11 · 184 阅读 · 0 评论 -
Java300学习笔记(13)—— 引用类型,自定义数据排序
1 自定义数据排序新闻信息排序:时间排序、点击量、标题原创 2019-01-28 19:24:40 · 227 阅读 · 0 评论 -
Java300学习笔记(12)——Comparable 和 Comparator排序工具类实现
1 java.lang.Comparable1.1 引用类型之内置类比较大小整数、小数等直接比较基本数据类型的大小;字符: 比较 Unicode 码之差字符串* 如果其中一个是另外一个起始开始的子串,返回长度之差* 否则返回 第一个不相等的 Unicode 码之差java.util.Date ,根据日期的长整型比较1.1.1 字符串数组比较案例package day0...原创 2019-01-28 15:49:06 · 280 阅读 · 0 评论 -
Java300学习笔记(6)——时间、日期类
1 Date 类Date类,它的对象表示一个特定的瞬间,精确到毫秒;Java 中的时间也是数字,是从标准纪元1970-1-1 0 点开始到某个时刻的毫秒数,类型是 longimport java.util.Date;public class TestDate { public static void main(String[] args) { Date d ...原创 2019-01-15 20:14:47 · 239 阅读 · 0 评论 -
Java300学习笔记(5)—— 包装类
1 Integerpublic class Test2 { public static void main(String[] args) { Integer i = new Integer(1); System.out.println(Integer.MAX_VALUE); System.out.println(Integer.toHex...原创 2019-01-15 11:52:48 · 220 阅读 · 0 评论 -
Java300学习笔记(4)—— 可变字符序列StringBuilder 和 StringBuffer
1 StringBuilder 和 StringBufferStringBuilder,线程不安全,效率高;StringBuffer,线程安全,效率差;1.1 测试 StringBuilderpublic class Test { public static void main(String[] args) { StringBuilder sb = new St...原创 2019-01-15 10:58:02 · 223 阅读 · 0 评论 -
Java300学习笔记(10)——泛型
1 泛型泛型就是参数化类型,使用广泛的类型;接口中泛型只能用在方法中,不能使用在全局常量1.1 起因数据类型不明确装入数据的类型都被当做 Object 对待,从而丢失自己的实际类型;获取数据时往往需要转型,效率低,容易产生错误1.2 作用安全:在编译的时候检查类型安全省心:所有的强制转换都是自动和隐式的,提高代码的重用率;...原创 2019-01-25 10:16:15 · 195 阅读 · 0 评论 -
Java300学习笔记(7)—— 容器 ArrayList
1 CollectionCollection 接口是 Collection 层次结构中的根接口,它定义了一些最基本的访问方法;原创 2019-01-18 23:01:17 · 158 阅读 · 0 评论 -
Properties 类
1 Properties 类介绍这个类表示一个持久的属性集。它可以保存到流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 特点: 1. Hashtable的子类,实现map接口,map集合中的方法都可以用; 2. 该集合没有泛型,键值都是字符串; 3. 它是一个可以持久化的属性值,键值可以存储到集合中,也可以存储到持久化的设备(硬盘等)。键值的来源也可以是持久化的设备。...原创 2018-04-12 22:25:06 · 207 阅读 · 0 评论