10 2022 档案
摘要:ResultSet:结果集对象 封装查询结果 next():游标向下移动一行 判断当前行是否是最后一行末尾(是否有数据) 如果是 则返回false 如果不是则放回true getxxx(参数):获取数据 xxx:代表数据类型 如:int getInt(),String getString() 参数:
阅读全文
摘要:2、Connection:数据库连接对象 功能: 1.获取执行sql的对象 Statement createStatement() PreparedStatement prepareStatment(String sql) 2.管理事务: 开启事务:setAutoCommit(boolean aut
阅读全文
摘要:详细各个对象: 1、DriverManager:驱动管理对象 功能: 1.注册驱动:告诉程序该使用哪一个数据库驱动jar static void registerDriver(Driver driver) :注册与给定的驱动程序DriverManager 。 写代码使用:class.forName(
阅读全文
摘要:JDBC概念 概念:java DataBase Connectivity java 数据连接 java语法操作数据库 JDBC本质 其实是官方(sun公司)定义的一套操作所有关系系数据库的规则 即接口 各个数据库厂商去实现这套接口 提供数据库驱动jar包 我们可以使用 这套接口(JDBC)编程 真正
阅读全文
摘要:1、查询权限: -- 查询权限: SHOw GRANTS FOR '用户名'@'主机名'; SHOw GRANTS FOR 'lisi'@'%'; 2、授予权限: -- 授予权限 grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';-- 给张三用户授予所有权限,在任意数据库任意
阅读全文
摘要:DCL-管理用户-增删查 SQl分类: 1、DDL:操作数据库和表 2、DML:增删表中数据 3、DQL:查询表中数据 4、DCL:管理用户、授权 DBA:数据库管理员 DCL:管理用户,授权 1、管理用户 1.添加用户: 语法:CREATE USER ' 用户名 '@' 主机名 ' IDENTIF
阅读全文
摘要:事务-四大特征 1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。 2.持久性:当事务提交或回滚后,数据库会持久化的保存数据。 3.隔离性:多个事务之间。相互独立。 4.一致性:事务操作前后,数据总量不变 事务-隔离级别介绍 概念∶多个事务之间隔离的,相互独立的。但是如果多个事务操作
阅读全文
摘要:1、概念∶ 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 2、操作: 1. 开启事务:start transaction; 2.回滚:rollback; 3. 提交:commit; 3、案例: -- 创建表 CREATE TABLE account ( id
阅读全文
摘要:子查询不同情况 1.子查询的结果是单行单列的: 子查询可以作为条件,使用运算符去判断。运算符∶> >= < <= = -- 查询员工工资小于平均工资的人 SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp); 2.子查询
阅读全文
摘要:多表查询-外链接 1、左外链接: 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件; 查询的是左表所有数据以及其交集部分。 例子: -- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称 SELECT t1.*,t2.'n
阅读全文
摘要:多表查询概述 多表查询分类: 1、内链接查询 2、外链接查询 3、子查询 课外知识点: 笛卡尔积: 有两个集合A,B .取这两个集合的所有组成情况 要完成多表查询,需要消除无用的数据 多表查询内链接 1、隐式链接:使用where条件消除无用数据 例子: -- 查询所有员工信息和对应的部门信息 SEL
阅读全文
摘要:泛型概述 概念:设计数据库时 需要遵循的一些规范。要遵循后边的范式要求 必须先遵循前边的所有范式要求 设计关系数据库时 遵从不同的规范要求 设计出合理的关系型数据库 这些不同的规范要求被称为不同的范式 各种范式呈递次 越高的范式数据库冗余越小 目前关系数据库有六种范式:第一范式(1NF)、第二范式(
阅读全文
摘要:多表之间的关系: 分类: 1、—对一(了解)︰ 如∶人和身份证 分析:一个人只有一个身份证,一个身份证只能对应一个人 2、一对多(多对一): 如:部门和员工 分析:一个部门有多个员工,一个员工只能对应一个部门 3、多对多∶ 如:学生和课程 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选
阅读全文
摘要:数据表 department employe 如果我们想要将 department里的id进行改变 不可以直接改id 因为我们已经创建外键约束 是不可以删除的 比如 错误:不能删除或更新父行:外键约束失败(' videoppractice ')。' employee ', CONSTRAINT 'd
阅读全文
摘要:外键约束:foreign key 让表于表产生关系 从而保证数据的正确性 数据表的创建和数据添加 sql语句 -- 创建emp表 CREATE TABLE emp( id int PRIMARY KEY auto_increment, name VARCHAR(30), age int, -- 部门
阅读全文
摘要:自动增长 1、概念:如果某一列是数值类型的,使用auto_increment可以来完成值得自动增长 2、在创建表时,添加主键约束,并且完成主键自增长 create table stu( -- 给id添加主键约束name id int primary key auto_increment, name
阅读全文
摘要:约束-唯一约束 唯一约束:unique,值不能重复 1、创建表时,添加唯一约束 CREATE TABLE stu( id INT, -- 添加了唯一约束 phone_number VARCHAR(20) UNIQUE ); 注意:MySQL中,唯一约束限定的值可以有多个null 2、删除唯一约束 A
阅读全文
摘要:约束-概述 概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性 分类: 1、主键约束:primary key 2、非空约束:not null 3、唯一约束:unique 4、外键约束:foreign key 约束-非空约束 1、创建表时添加约束 2、创建表完后,添加非空约束
阅读全文
摘要:1、where子句后跟条件 2、运算符 >、<、<=、>=、=、<> BETWEEN...AND IN(集合) LIKE:模糊查询 占位符: _:单个任意字符 * %:多个任意字符 IS NULL and 或 && or 或 || not 或 ! 条件查询 模糊查询
阅读全文
摘要:DQL:查询表中的记录 select * from 表名; 1、语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定 2、基础查询 1.多个字段的查询 select 字段名1,
阅读全文
摘要:DQL-分组查询 语法:group by 分组字段; 注意: 1、分组查询之后查询字段:分组字段、聚合函数 2、where 和 having 的区别? 1.where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来 2.where后不
阅读全文
摘要:DQL-排序查询 语法:order by 子句 order by 排序字段1 排序方式1,排序字段2 排序方式2... 排序方式: ASC:升序,默认的 DESC:降序 注意: 如果有多个排序条件,则当前的条件值一样时,才会判断第二条件 DQL-聚合函数 将一列数据作为一个整体,进行纵向的计算。 1
阅读全文
摘要:DML-添加数据 语法: insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); 注意: 1、列名和值要一一对应 2、如果表名后,不定义列名,则默认给所有列添加值 3、出来数字类型,其他类型需要使用引号(单双都可以)引起来 案例: DML-删除数据 语
阅读全文
摘要:操作数据库:CRUD 1.C(Create):创建 语法格式: create table 表名( 列名1 数据类型1, 列名2 数据类型2, ...... 列名n 数据类型n ); 注意最后一列,不需要加逗号(,) 数据库类型: 1、int:整数类型: age int, 2double:小数类型 s
阅读全文
摘要:DDL-操作数据库-创建查询 1、操作数据库:CRUD 1.C(Create):创建 创建数据库:create database 数据名称; 创建数据库,判断不存在,在创建:create database if not exist 数据库名称; 创建数据库,并知道字符集:create databas
阅读全文
摘要:SQL通用语法 1、SQL语句可以单行或多行书写,以分号结尾 2、可以使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写 4、3中注释 单行注释: 注释内容 或 # 注释内容(mysql特有) 多行注释:/* 注释 */ SQL分类 1)DDL(Dat
阅读全文
摘要:MySQL目录结构 1、MySQL安装记录: 配置文件 my.ini 2、MySQL数据目录: 数据库:文件夹 表:文件 数据:数据 结构图: MySQL基本概念 什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据
阅读全文
摘要:MySQL服务启动和关闭 配置 MySQL服务启动 1、手动 2、cmd —> services.msc 打开服务的窗口 3、使用管理员打开cmd net start mysql:启动mysql的服务 net stop mysql:关闭mysql服务 默认是自动 如果不想自动可以改为手动 直接输入w
阅读全文
摘要:注解_解析注解 在程序使用(解析)注解:获取注解中定义的属性值 1.获取注解定义的位置的对象(class,Method,Field) 2.获取指定的注解 getAnnotation(class) 3.调用注解中的抽象方法获取配置的属性值 数据库的基本概念 1.数据库的英文单词: DataBase简称
阅读全文
摘要:自定义注解_属性定义 格式: 元注解 public @interface 注解名称 { 属性列表; } 本质︰ 注解本质上就是一个接口,该接口默认继承Annotation接口 public interface MyAnno extends java.lang.annotation.Annotatio
阅读全文
摘要:自定义注解的格式和本质 先进入注解看一下注解是如何定义的 上面这两个注解先不管他 先看一下是如何写这种注解的 格式很简单: public @interface 注解名{} public @interface MyAnno { } 这样就是一个注解 这种注解我们称为源注解 注解本质上就是一个接口 该接
阅读全文
摘要:注解概述 概念:说明程序的 给计算机看的 注释:用文字描述程序 给程序员看的 定义:注解(Annotation),也叫元数据 一种代码级别的说明 它事JDK1.5及以后版本引入的一种特性 与类、接口、枚举是在同一个包、类、字段方法、 局部变量 方法参数等的前面 用于这些元素进行说明 注解 感念描述:
阅读全文
摘要:练习-反射 需求:写一个“框架”,不能改变类的任何代码的前提下,可以帮我们创建任意类的对象 并且执行其中任意方法 实现: 1.配置文件 2.反射 步骤: 1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中 2.在程序中加载读取配置文件 3.使用反射技术来加载类文件内存 4.创建对象 5.
阅读全文
摘要:反射—Class对象功能_获取Constructor 获取构造方法们 Constructor<?>[] getConstructors():获取所有的构造方法 Constructor<T> getConstructor(类<?>... parameterTypes):获取指定的构造方法 Constr
阅读全文
摘要:class对象功能概述 获取功能: 1、获取成员变量们 Fileld[] getFields() Fileld getFileld(String name). Fileld[] getDeclaredFilds() Filed getDeclaredField(String name) 2、获取构造
阅读全文
摘要:反射概述 反射:将类的各个组成部分封装为其他对象 这就是反射机制 反射的框架设计灵魂 框架:半成品软件 可以在框架的基础上进行软件开发 简化编码 class类对象这个阶段可以看作为反射 反射好处: 1.可以在程序运行过程中 操作这些对象 2.可以解耦 提高程序的可扩展性 获取字节码class对象的三
阅读全文
摘要:Junit单元测试 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值 百盒测试:需要写代码的,关注程序具体的执行流程 图例: 类: /** * 计算器类 */ public class Calculator { // 加法 public int add(int a, int
阅读全文
摘要:类的构造器(构造方法)引用 由于构造器的名称与类名完全一样,并不固定。所以构造器引用使用类名称:∵new的格式表示。首先是一个简单的Person类: public class Person { private String name; // get public String getName() {
阅读全文
摘要:通过super引用父类 如果存在继承关系,当Lambda中需要出现super调用时,也可以使用方法引用进行替代。首先是函数式接口: /** * 定义见面的函数式接口 */ @FunctionalInterface public interface Greeable { // 定义一个见面的方法 vo
阅读全文
摘要:通过对象名引用成员方法 这是最常见的一种用法,与上例相同。如果一个类中已经存在了一个成员方法︰ public class Method { // 定义一个成员方法,传递字符串,把字符串按照大写输出 public void prints(String s){ System.out.println(s.
阅读全文
摘要:在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案∶拿什么参数做什么操作。那么考虑一种情况:如果我们在Lambda中 所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑? 冗余的Lambda场景 public class Demo1Printable { //
阅读全文
摘要:如果有两个流,希望合并成为一个流,那么可以使用stream接口的静态方法 concat: static <T> Stream<T> concat(Stream < ? extends T> a,Stream < ? extends T> b); /** * 如果有两个流,希望合并成为一个流,那么可以
阅读全文
摘要:取用前几个:limit limit方法可以对流进行截取,只取用前n个。 方法签名∶ stream<T> limit (long maxsize) ; 参数是一个long型,如果集合当前长度大于参数则进行截取;否则不进行操作。基本使用: /** * Stream流中的常用方法_Limit:用于截取流中
阅读全文
摘要:如果需要将流中的元素映射到另一个流中,可以使用map方法。方法签名∶ <R> Stream<R> map(Function < ? super T, ? extends R > mapper); 该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的流。 Fun
阅读全文
摘要:延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(处终结方法外,其余方法均为延迟方法) 终结方法:返回值类型不再是Steam接口自身类型的方法,因此不再支持类似StringBuilder那样的链式调用。本小节中, 终结方法包括 count 和 forEach 方法。 逐一
阅读全文
摘要:当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个"模型"步骤方案,然后再按照方案去执行它。 这张图中展示了过滤、映射、跳过、计数等多步操作,这是一种集合元素的处理方案,而方案就是一种"函数模型”。图中的每一个方框都是一个"流”, 调用指定的方法,可以从一个流
阅读全文
摘要:使用Stream流的方式,遍历集合,对集合中的数据进行过滤Stream流是JDK1.8之后出现的关注的是做什么,而不是怎么做 Stream的更优写法 public static void main(String[] args) { // 创建一个List集合,存储姓名 ArrayList<Strin
阅读全文
摘要:Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"I0流"呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念, 用于解决已有集合类库既有的弊端。 传统集合的多步遍历代码 几乎所有的集合(如collection 接
阅读全文
摘要:常见函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供 Function接口 Function<T,R>接口用于根据一个类型的数据得到另一个类型的数据 前者称为前置条件,后置条件 抽象方法:apply Functio
阅读全文
摘要:常见函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供 Predicate接口 有时候我们需要对某种类型的数据进行判断 从而得到一个boolean值结果 这时可以使用Predicate<T>接口 抽象方法:test
阅读全文
摘要:常见函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供 Consumer接口 Consumer<T>接口则正好与Supplier接口相反 它不是生成一个数据 而是消费一个数据 其数据类型由泛型决定 抽象方法:acce
阅读全文
摘要:常见函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供 Supplier接口 Supplier<T>接口仅包含一个无参的方法:T get() 用来获取一个泛型参数指定类型的UI对象数据 由于这是一个函数式接口 这也意
阅读全文
摘要:使用Lambda作为参数和返回值 如果抛开实现原理不说 java中的Lambda表达式可以被当作式匿名内部类的替代品 如果方法的参数是一个函数式接口 那么就可以使用lambda表达式进行替代 使用lambda表达式作为方法参数 其实就是使用函数式接口作为方法参数 例如java.lang.Runnab
阅读全文
摘要:函数式编程 在兼顾面向对象特性的基础上 java语言通过Lambda表达式与方法引用等 为开发者打开了函数式编程的大门 Lambda的延迟执行 有些场景的代码执行后 结果不一定会被使用 从而造成性能浪费 而Lambda表达式是延迟执行的 这正好可以解决方法 提升性能 性能浪费的日志案例 注:日历可以
阅读全文
摘要:函数式接口概念 函数式接口在java中是指:有且仅有一个抽象方法的接口 函数式接口 即适用于函数式编程场景的接口 而java中的函数式编程体现实Lambda 所以函数式接口就是说可以适用于Lambda使用的接口 只有确保接口中有且仅有一个抽象方法 java中的Lambda才能顺利的进行推导 备注:“
阅读全文
摘要:在JDK1.7之前使用try catch finally处理流中的异常 格式: try{ 可能会产生异常的代码 }catch(异常类变量 变量名){ 异常的处理逻辑 }finally{ 一定会指定的代码 资源释放 } 代码: public static void main(String[] args
阅读全文
摘要:1.写出字符数组:write(char[] cbuf)每次可以写出字符数组中的数据 代码: public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("D:\\file\\b.
阅读全文
摘要:字符流 当使用字节流读取文本文件时 会出现一些小问题 就是当我们遇到中文字符时 可能不会显示完成的字符 那时以为一个中文字符可能占用多个字节存储 所以java提供一些字符流类 以字符为单位读写数据 专门用于处理文本文件 字节输入流(Reader) Reader抽象类是表示用于读取字符流的所有类的超类
阅读全文
摘要:字节输入流一次读取多个字节 字节输入流一次读取多个字节的方法: int read(byte[] b)从输入流中读取一定数量的字节 并将其存储在缓冲区数字b中 明确两件事情: 1.方法的参数byte[]的作用 起到缓冲作用 存储每次读取到的多个字节 数组的长度一把定义为1024(1kb)或者1024的
阅读全文
摘要:字节输出流 InputStream抽象类是表示字节输出流的所有类的超类 可以读取字节信息到内存中 它定义了自己输入流的基本共性功能方法 InputStream是隶属于java.io包下 public void close():关闭此输入流并释放资源与此流相关联的任何系统资源 public abstr
阅读全文
摘要:数据追加续写 经过以上的演示 每次程序运行 创建输出流对象 都会清空目标文件中的数据 如果保留目标文件中数据 还能继续添加新的数据 构造方法 public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示文件 publ
阅读全文
摘要:字节输出流写多个字节的方法 public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流 一次写入多个字节: 如果写的第一个字节是正数(0-127)那么显示的时候回查询ASCII表 如果写的第一个字节是负数,那第一个字节会和第二个字节 两个字节组成一个中
阅读全文
摘要:OutputStream抽象类是表示字节输出流的所有类的超类 将指定的字节信息写出到目的地 它定义了字节输出流的基本共性功能方法 OutputStream是隶属于java.io包下 常用方法 public void close():关闭此输出流并释放与此流相关的任何系统资源 public void
阅读全文
摘要:io概述 生活中 肯定经历过这样的场景 当你编辑一个文本文件 忘记了ctrl+s 可能文件就白白编辑了 当你电脑上插入一个U盘 可以把一个视频 拷贝到你的电脑硬盘里 我们把这种数据的传递 可以看做是一种数据的流动 按照流动的方向 以内存为基准 封为输入input和输出output,即流向内存的输入流
阅读全文
摘要:FileFilter是一个接口 是File的过滤器 该接口可以传递给File类的listFiles(FileFilter)作为参数 FileFilter隶属于java.io包下 接口中只有一个方法: boolean accept(File pathname):测试pathname是否应该包含在当前F
阅读全文
摘要:练习递归求阶乘 阶乘:所有小于及等于该数的正整数的积 n的阶乘:n!=n*(n-1) *..... *3 * 2 * 1 分析:这与类和类相似 只不过换成了乘法运算 学员可以自己练习 需要注意阶乘值符合int类型的范围 推理得出:n!=n*(n-1)! 代码: public static void
阅读全文
摘要:使用递归计算1-n直接的和 分析:num的类和=num+(num-1)的类和 所以可以把类和的操作定义成一个方法 递归调用 代码: public static void main(String[] args) { int n=3; System.out.println(method(n));}/*使
阅读全文
摘要:递归概述 递归:指在当前方法内调用自己的这种现象 递归的分类: 递归分为两种,直接递归和间接递归 直接递归称为方法自身调用自己 间接递归可以A方法调用B方法 B方法调用C方法调用A方法 注意事项 递归一定要有条件限定 保证递归能够停止下来 否则会发生栈内存溢出 在递归中虽然由限定条件 但是递归次数不
阅读全文
摘要:File常见方法 public String getAbsolutePath():返回次File的绝对路径名称字符串 public String getPath():将此File转换为路径名字符串 public String getName():返回由此File表示的文件或目录的名称 public
阅读全文
摘要:file类的路径介绍 路径分为两个:绝对路径和相对路径 绝对路径 是一个完整的路径 是以盘符(“c:”,"D:")开始的的路径 例如:E:\\file D:\Html课件内容\HTML基础\HTML代码 这些都是绝对路径 相对路径 是一个简化的路径 相对指的是相对于当前项目的根目录 如果使用当前项目
阅读全文
摘要:File类的概述 File类是文件和目录路径名的抽象表示 主要用于文件和目录的创建 查找和删除等操作 File类是java.io包下 java把电脑中的文件和文件夹(目录)封装为了一个File类 我们可以使用File类对文件和文件夹进行操作 我们可以使用File类的方法: 创建文件/文件夹 删除文件
阅读全文
摘要:使用Lambda标准格式(有参有返回) 题目:给定一个计算器Calculator接口 内包含抽象方法calc可以将两个int数字相加得到和值 代码 接口 public interface Calculator { public abstract int calc(int a,int b);} 测试类
阅读全文
摘要:使用Lambda标准格式(无参无返回值) 题目:给定一个厨子Cook接口 内含唯一的抽象方法makFoodd 且无参数 无放回在 使用Lambda的标准格式盗用invokeCooK方法 打印输出“吃饭啦!”字样: 代码 接口 public interface Cook { public abstra
阅读全文
摘要:编程思想转换 我们希望创建一个匿名内部类对象 我们只是为了做这件事情而不得不创建一个对象 我们真正希望做的事情:将run方法体内的代码传递给Thread类知晓 传递一段代码--这才是我们真正的目的 而创建对象只是受限于面向对象语句而不得不采取的一种手段方式 如果我们将关注点从“怎么做”回归到“做什么
阅读全文
摘要:函数式编程思想概述 在数学中 函数就是有输入量 输出量的一套计算方案 也就是“拿什么东西做什么事情” 相对而言 面向对象过分强调 必须通过对象的形式来做事情 而函数思想则尽量忽略面向对象的复杂语句--强调做什么 而不是以什么形式做 面向对象的思想: 做一件事情 找一个解决这个事情的对象 调用对象的方
阅读全文
摘要:线程池概念和原理 我们使用线程的时候去创建一个线程,这样实现起来非常简便 但是出现了一个问题:如果并发的线程数量很多 并且每个线程都是执行一个时间很多的任务就结束了 这样频繁创建线程就会大大降低洗的效率 因为频繁创建线程和销毁线程需要时间 而线程池就可以解决这个问题 线程池:其实就是一个容纳多个线程
阅读全文
摘要:线程通讯 概念:多个线程在处理同一个资源 但是处理的动作 (线程的任务)却不相同 比如:线程A用来生产包装的 线程B用来吃包子的 包子可以理解为同一资源 线程A于线程B处理的动作 一个是生产 一个是消费 那么线程A与线程B之间就存在线程通信问题 多个线程并发执行时 在默认情况下CPU是随机切换线程的
阅读全文
摘要:等待唤醒 Wating状态在API中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态 做一个案例来演示 案例分析 创建一个顾客线程(消费者):告知老板要的包子的种类和数量 调用wait方法 放弃cpu的执行 进入到WAITING状态(无限等待) 创建一个老板线程(生产
阅读全文
摘要:lock锁 lock机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作 同步代码块/同步方法具有的功能lock都有 除此之外更强大 更体面面向对象 lock隶属于java.util.concurrent.locks包下 lock锁也称为同步锁 加锁与释放锁方法化
阅读全文
摘要:同步方法 使用synchronized修饰的方法 就叫做同步方法 保证A线程执行该方法的时候 其他线程只能在方法外等着 格式: public synchronized void method(){ 可能会产生线程安全问题的代码 } 使用步骤: 1.把访问了共享数据的代码抽取出来 放到一个方法中 2.
阅读全文
摘要:线程安全问题产生的原理 出现了线程安全问题 卖票出现了重复的票 图解 线程同步 当我们使用多个线程访问同一个资源的时候 且多个线程对资源有写的操作 就容易出现线程安全问题 要解决上诉多线程并发访问一个资源的安全性问题 也就是解决重复票 java中提供了同步机制 (synchronized)来解决 有
阅读全文
摘要:线程安全 如果有多个线程在同时运行 而这些线程可能会同时运行这段代码 程序每次运行结果和单线程运行的结果是一样的 而且其他的变量的值也和预期的是一样的 就像线程安全的 演示线程的安全问题: 电影院要买票 我们模拟电影院的卖票过程 本次电影的座位共100个(背场电影只能卖100张票) 我们来模拟电影院
阅读全文
摘要:使用线程的匿名内部类方式 可以方便的实现每个线程执行不同的线程任务操作 匿名:没有名字 内部类:写在其他类内部的类 匿名内部类作用:简化代码 把子类继承父类 重写父类的方法 创建子类对象合一步完成 把实现类实现类接口 重写接口中的方法 创建实现类对象合成一步完成 匿名内部类的最终产物:子类/实现类对
阅读全文
摘要:创建线程的第二种方式 采用Runnable也是非常常见的一种 我们只需要重写run方法即可 它是隶属于java.lang包下 Runnable类的构造方法 Thread(Runnable target) 分配新的Thread对象 Thread(Runnable target,String name)
阅读全文
摘要:多线程图解 Thread类的使用 我们在操作Thread类 API中该类中定义了有关线程的一些方法 具体如下 构造方法: public Thread():分配一个新的线程对象 public Thread(String name):分配一个指定名字的新的线程对象 public Thread(Runna
阅读全文
摘要:java使用Thread类代表线程 所有线程对象都必须时Thread类或者其子类的实例 每个线程的作用是完成一定的任务 实际上就是执行一段程序流即一端顺序执行的代码 java使用线程执行来代表这段程序流 Thread是隶属于java.lang包下 创建并启动多线程的步骤: 1.定义Thread类的子
阅读全文
摘要:线程的概念 cpu:中央处理器 对数据进行计算 指挥电脑中的软件和硬件干活 cpu的分类 AMD Inter Inter Core(核心) i7 8866 4核心8线程 8线程:同时执行8个任务 图解: 线程调度 分时调度 所有线程轮流使用CPU的使用权 平均分配每个线程占用CPU的时间 抢占式调度
阅读全文
摘要:并发和并行 并发:指两个或者多个事件在同一个时间段内发生 并行:值两个或者多个事件在同一时刻发生(同时发生) 更详细的图解: 线程和进程 进程基本介绍 是指一个内存中运行的应用程序 每个进程都有一个都有一个独立的内存空间,一个应用程序可以同时运行多个进程 进程也是程序的一次执行过程 是系统运行程序的
阅读全文
摘要:自定义异常 java中不同的异常类,分别表示着某一种具体的异常情况 那么在开发中总是有些异常情况是SUN没有定义好的 此时我们根据自己业务的异常情况来定义异常类 例如年龄负数,考试成绩负数的问题等 在JDK内部定义好的 但是实际开发中也会出现很多异常 这些异常很有可能在JDK中 没有定义过 我们可以
阅读全文
摘要:多个异常使用捕获又该如果处理 1.多个异常分别处理 2.多个异常一次捕获 多次处理 3.多个异常一次捕获一次处理 格式: try{ 编写可能会出现异常的代码 }catch(异常类型A e){当try中出现A类型异常 就用该catch来捕获 处理异常的代码}catch(异常类型B e){当try中出现
阅读全文
摘要:抛出异常throw 在编写程序时 我们必须要考虑程序出现的问题的情况 比如 在定义方法时 方法需要接受 在java中 提供了一个thow关键字 它用来抛出一个指定的异常对象 1.创建一个异常对象 封装一些提示信息(信息可以自己编写) 2.需要将这个异常对象告知调用者 throw关键字: 作用: 可以
阅读全文
摘要:我们平常说的异常是指Exception 因为这类异常一旦出现 我们就是对代码进行更正 修复程序 异常(Exception)的分类:根据在编译时期还是运行时期去检查异常 编译时期异常:checked异常 在编译时期 就会检查 如果没有处理异常 则编译失败(如日期格式化异常) 运行时期异常:runtim
阅读全文
摘要:案例分析: 牌从大到小的顺序进行排列 图解: 代码: public static void main(String[] args) { //创建一个Map集合存储牌的索引和组装好的牌 HashMap<Integer, String> map = new HashMap<>(); //创建一个集合用于
阅读全文
摘要:Debug调式程序 可以让代码逐行执行 查看代码执行的过程 调试程序中出现的bug 使用方式: 在行号的右边 鼠标左键单击 添加断点(每个方法的第一行 哪里有bug添加到哪里) 右键 选择Debug执行程序 程序就会停留在添加的第一个断点处 如: 这就是断点也是声明程序从这一步开始走 右键选择Deb
阅读全文
摘要:案例分析图: 代码: public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入一个字符串"); String next = sc.nextLine(); c
阅读全文
摘要:HashMap存储自定义类型键值 Map集合保证key是唯一的:作为key的元素 必须重写hashCode方法和equals方法 以保证key唯一 代码: 自定义的类: package demo18.Student;public class perpon { private String name;
阅读全文
摘要:Map中存储的是两种对象 一种称为key键 一种称为value值 它们在Map中是一一对应关系 这一对对象又称做Map中的一个Entry(项) Entry将键值对的对应关系封装成了对象 即键值对对象 这样我们遍历Map集合时 就可以从每一个键值对(Entry)对象中获取对应的键与对应的值 图解: 既
阅读全文
摘要:Map接口中定义了很多方法 常见的如下: 1.public v put(k key,v Value):把指定的键与指定的值添加到Map集合中 2.public v remove(Object key):把指定的键 所对应的键值对元素在Map集合中删除 返回被删除的元素的值 3.public v ge
阅读全文
摘要:Map集合概述 将键映射到值对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 现实生活中 我们常会看到这样的一种集合:IP地址与主机名 身份证号与个人 系统用户名与系统用户对象等 这种—对应的关系就 叫做映射 java通过了专门的集合类用来存放这种对象关系的对象 就是Map接口 它是隶属于
阅读全文
摘要:Collections工具类常用功能 Collections是集合工具类 用来集合进行操作 常用方法如下 1.public static <T> boolean addAll(Collection c,T elements):往集合中添加一些元素 2.public static void shuff
阅读全文
摘要:代码: public static void main(String[] args) { HashSet<String> set = new HashSet<>(); String s1 =new String("abc"); String s2 =new String("abc"); set.ad
阅读全文
摘要:set接口 set接口和List接口一样 同样继承自Collection接口 它与Collection接口中的方法基本一致 并没有对Collection接口进行功能上的补充只是比Collection接口更加严格了 与List接口不同的是 set接口中元素无序 并且都会以某种规则存入的元素不出现重复
阅读全文
摘要:LinkedList集合 LinkedList集合数据存储的结构是链表结构,方便元素添加 删除集合 LinkedList集合特点: 1.底层是一个链表结构:查询慢,增删快 2.里边包含了大量操作首尾元素的方法 注意:使用LinkedList集合特有的方法,不能使用多态 LinkedList常用方法
阅读全文
摘要:List集合介绍 List接口继承自Collection接口 是单列集合的一个重要分支 习惯将实现了list接口的对象称为List集合 在List集合中允许出现重复的元素 所有元素是以一种线性存储的 在程序中可以通过索引来访问集合中的指定元素 List接口特点: 1.有序的集合 存储元素和取出元素的
阅读全文
摘要:红黑树 二叉树:binary tree,是每个节点不超过2的有序树(tree) 简单的理解 就是一种类似于我们生活中树的结构 只不过每个结点上都最多只能有两子结点 二叉树是每个节点最多有两个子树的树结构 顶上的叫根结点 两边被称作左子树和右子树 图:
阅读全文
摘要:数组 数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间 并在此空间存储元素 就像是一排出租屋,从001到100每个房间都有固定编号 通过编号就可以快速找到租房子的人 简单的数 采用该结构的集合 对元素的存储有如下的特点: 查找元素快:通过索引 可以快速访问指定位置的元素 数组的特
阅读全文
摘要:现实世界的存储 我们使用的工具和建模 每种数据结构有自己的优点和缺点 想想如果Google的数据用的是数组的存储 我们还能方便地查询到所需要的数据吗?而算法 在这么多的数据中如何做到最快的插入,查找,删除 也是在追求更快 数据存储的常用结构有:堆栈、队列、数组、链表和红黑树 栈 栈stack:又称堆
阅读全文
摘要:案例介绍 按照斗地主的规则 完成洗牌发牌的动作 具体规则: 使用54张牌打乱顺序 三个玩家参与游戏,三个人交替摸牌,每人17张牌,最后三张留作底牌 案例分析 准备牌 牌可以设置为一个ArrayList<String>,每个字符串为一张牌 张牌由花色数字两部分组成 我们可以使用花色集合与数字集合嵌套迭
阅读全文
摘要:含有泛型的方法 定义格式: 修饰符 <泛型> 返回值类型 方法名(参数){} 含有泛型的方法 在调用方法的时候确定泛型的数据类型传递什么类型的参数 泛型就是什么类型 代码: 方法类: public class DemoMethod { public <m>void method(m str){ Sy
阅读全文
摘要:泛型的概述 泛型是一种未知的数据类型 当我们不知道使用什么数据类型的时候 可以使用泛型 泛型也可以看出是一个变量 用来接收数据类型 当我们创建集合是就确定泛型类型 使用泛型的好处 我们都知道集合中是可以存放任意对象的 只要把对象存储集合后 那么这时他们都会被提升成Object类型 当我们在取出每个对
阅读全文
摘要:增强for循环的概述 增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组的集合的 它的内部原理其实是个Iterator迭代器 所以在遍历的过程中 不能对集合中的元素进行增删操作 格式: for(元素的数据遍历 遍历:Collection集合or数组
阅读全文
摘要:Iterator迭代器的概述 Iterator接口也是java集合中的一员 但他与Collection、map接口有所不同 所属与java.util包下 Collection接口与Map接口主要用于存储元素而Iterator主要用于迭代访问(即遍历)Colection中的元素 因此Iterator对
阅读全文
摘要:集合的概述 集合:集合是java中提供一种容器 可以用来存储多个数据 数组的长度是固定的 集合的长度是可变的 数组中存储是同一类型的元素 可以存储基本数据值 集合存储的都是对象 而且对象的类型可以不一致 在开发中一般当对象多的时候 使用集合进行存储 集合框架 集合按照其存储结构可以分为两大类 分别是
阅读全文
摘要:StringBuilder的原理 字符串是常量;它们的值在创建之后不能更改 字符串的底层是一个被final修饰的数组 不能改变 是一个常量 进行字符串的相加 内存中就会有多个字符串 占用空间多 效率低下 如: 而StringBuilder是字符串缓冲区 可以提供字符串的操作效率(看成一个长度可以变化
阅读全文
摘要:System:可以获取与系统相关的信息或系统级操作 属于java.lang包下 常用方法: 1.public static long currenTimeMillis():返回以毫秒为单位的当前时间 代码: /*public static long currenTimeMillis():返回以毫秒为
阅读全文
摘要:1.Date类 构造方法 Date();根据当前系统的时间创建日期对象 Date(long time);根据传入的毫秒值时间创建日期对象 成员方法 long getTime();获取当前日期对象的毫秒值时间 String toLocaleString();根据本地格式转换日期对象 代码: publi
阅读全文
摘要:Calendar类 Calendat类是日历类 它是基于java.util包下 它是一个抽象类 里面提供了很多操作日历字段的方法 无法直接创建对象使用 里面有一个静态方法叫getInstance() 该方法返回了Calendat类的子类对象 static Calendar getInstance()
阅读全文
摘要:DateForma类 java.text.DateFormat是日期/时间格式化子类的抽象类 我们通过这个类可以帮我们完成日期和文本之间的转换 也就是可以在Date对象与String对象之间进行来回转换 作用:解析文本->日期 成员方法: String format(Date date) 按照指定的
阅读全文
摘要:毫秒值的概念和作用 Date表示特定的瞬间 精确到毫秒 毫秒:千分之一 1000毫秒=1秒 特定的瞬间:一个时间点 一刹那时间 比如:2022年 09:55:45:333 瞬间 毫秒值的作用:可以对时间和日期进行计算 比如:2022-01-02到2023-05-07进行计算一共有多少天 注意:中国属
阅读全文
摘要:Object类 object是所有的类父类 也是虽有变量的父类 全部都是有object类管理的 object类可以用于数组 集合 它可以说是万能的 object如果是变量就可以定义整数 字符 或者浮点数 案例 Object a="张三";Object b=10;Object c=10.5;Syste
阅读全文
摘要:throws关键字异常处理第一种方式 声明异常︰将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常, 而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。 关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处
阅读全文
摘要:Object非空判断 声明异常∶将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常, 而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。 关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常
阅读全文
摘要:红包案例 群主发普通红包 某群有多名成员 群主给成员发普通红包 普通红包的规则: 1.群主的一笔金额 从群主余额里扣除 平均分成n等份 让成员领取 2.成员领取红包后 保存到成员余额中 请根据描述 完成案例中所有类的定义以及制定类之间的继承关系 并完成发红包的操作 分析图 代码 父类: public
阅读全文
摘要:抽象方法和抽象类的注意事项 1.抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。 理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。 2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。 理解:子类的构造方法中,有默
阅读全文