07 2022 档案
摘要:HTML标签_图片标签 img:展示图片 属性: src:指定图片的位置 <!-- 相对路径 以.开头的路径 ./:代表当前目录 ./image/a2.jpg ../:代表上一级目录--> <!-- 展示一张图片 img --> <img src="../../image/a2.jpg" align
阅读全文
摘要:HTML标签_文本标签 <b>:字体加粗 <i>:字体斜体 <font>:字体标签 <center>:文本居中 属性: color:颜色 size:大小 face:字体 特殊字符集 注意:实体名称对大小写敏感! 属性定义: color: 1.英文单词:red,green,blue 2.rgb(值1,
阅读全文
摘要:HTML标签_文件标签 文件标签:构成html最基本的标签 >html:html文档的根标签 >head:头标签。用于指定html文档的一些属性。引入外部的资源 >title:标题标签。 >body:体标签 > <!DOCTYPE html>:html5中定义该文档是html文档 HTML文本标签
阅读全文
摘要:HTML概念介绍 1.概念:是最基础的网页开发语言 Hyper Text Markup Language 超文本标记语言 >超文本: 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。 >标记语言: 由标签构成的语言。<标签名称> 如 html,xml 标记语言不是编程语言 HT
阅读全文
摘要:软件架构 JavaWeb: 使用Java语言开发基于互联网的项目 >软件架构: 1.C/S:Client/Server 客户端/服务器端 >在用户本地有一个客户端程序,在远程有一个服务器端程序 >如:QQ,迅雷... >优点: 1.用户体验好 >缺点: 1.开发、安装、部署、维护 麻烦 2. B/S
阅读全文
摘要:JDBCTemplate_执行DML语句 JDBCTemplate_执行DQL语句 需求: 1.修改1001号数据的salary 为10000 2.添加一条记录 3.删除刚孑添加的记录 4.查询id为1001的记录,将其封装为Map集合。 5.查询所有记录,将其封装为List 6.查询所有记录,将其
阅读全文
摘要:JDBCTemplate_介绍 >Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发 >步骤: 1.导入jar包 commons-logging,spring-beans,spring-core,spring-jdbc,spring-tx 2.创建Jdbc
阅读全文
摘要:数据库连接池_druid_基本使用 Druid:数据库连接池实现技术,由阿里巴巴提供的 步骤: 1.导入jar包 druid-1.0.9.jar 2.定义配置文件: 是properties形式的 可以叫任意名称,可以放在任意目录下 3.加载配置文件。properties 4.获取数据库连接池对象:通
阅读全文
摘要:数据库连接池_c3p0基本使用 步骤: 1.导入jar包(两个):c3p0-0.9.5.2.jar,mchange-commons-java-0.2.12.jar,不要忘记导入数据库驱动jar包 2.定义配置文件: 名称:c3p0.properties 或者 c3p0-config.xml 路径:直
阅读全文
摘要:数据库连接池_概述 概念:其实就是一个容器(集合),存放数据库连接的容器。 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时, 从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器 好处: 1.节约资源 2.用户访问高效 数据库连接池_实现介绍 标准接口:Data
阅读全文
摘要:JDBC事务管理 PreparedStatement:执行SQL的对象 1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题 1.输入用户随便,输入密码:a' or 'a' = 'a 2.sql:select * from user where userna
阅读全文
摘要:JDBC工具类 目的:简化书写 分析: 1.注册驱动 2.抽取一个方法获取连接对象 1)需求:不想传递参数(麻烦),还得保证工具类的通用性 2)解决:配置文件 jdbc.properties url= user= password= 3.抽取一个方式释放资源 /* JDBC工
阅读全文
摘要:JDBC类详解_ResultSet_遍历结果集 Boolean next() : 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据), 如果是,则返回false,如果不是则返回true 注意: 使用步骤: 1.游标向下移动一行 2.判断是否有数据 3.获取数据 private static
阅读全文
摘要:JDBC练习_delete、DDL语句 /* account表 删除一条记录 */ private static void delete() { Connection conn = null; Statement stat = null; try { //注册驱动 Class.forName("co
阅读全文
摘要:JDBC练习_insert语句 /* * account表 添加一条记录 insert语句 * */ public static void insert(){ Connection conn = null; Statement stmt = null; try { //注册驱动 Class.forN
阅读全文
摘要:JDBC类详解_Connection 功能: 1.获取执行sql的对象 Statement createStatement() PreparedStatement PrepareStatement(String sql) 2.管理事务: 开启事务:setAutoCommit(boolean auto
阅读全文
摘要:JDBC类详解_DriverManager_注册驱动 DriverManager:驱动管理对象 功能: 1.注册驱动:告诉程序该使用哪一个数据库驱动jar static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager。 写代码使
阅读全文
摘要:JDBC的概念 JDBC: 概念:Java DataBase Connectivity Java 数据库连接,Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。 各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用 这套接口(J
阅读全文
摘要:DCL_管理用户_增删改 SQL分类: 1.DDL:操作数据库和表 2.DML:增删改表中数据 3.DQL:查询表中数据 4.DCL:管理用户,授权 DBA:数据库管理员 DCL:管理用户,授权 1.添加用户: CREATE USER '用户名'@'主机名' IDENTIFIED B
阅读全文
摘要:1.read uncommitted:读未提交 set global transaction isolation level read uncommitted; (每次事务1修改事务的时候,事务2需要关掉从新打开,才能生效事务1开启的事务) 事务一: mysql> use db2 Database
阅读全文
摘要:事务的四大特征 1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。 2.持久性:当事务提交或回滚后,数据库会持久化的保存数据。 3.隔离性:多个事务之间。相互独立。 4.一致性:事务操作前后,,数据总量不变。 事务隔离级别介绍 概念:多个事务之间隔离的,相互独立的。但是如果多个事务操
阅读全文
摘要:事务_基本演示 事务的基本介绍: 1.概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败 2.操作: 1.开启事务:start transaction; 2.回滚:rollback; 3.提交:commit; CREATE TABLE account( id
阅读全文
摘要:(表在上一个博客) 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置 3. 查询员工姓名,工资,工资等级 4.员工的姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级 5.查询部门编号、部门名称
阅读全文
摘要:多表查询_子查询情况3 3.子查询的结果是多行多列的: 子查询可以作为一张虚拟表参与查询 -- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息 -- 子查询 SELECT * FROM dept AS t1,(SELECT * FROM emp WHERE emp.join_dat
阅读全文
摘要:多表查询_子查询概 概念:查询中嵌套查询,称嵌套查询为子查询。 查询工资最高的员工信息 -- 查询最高的工资是多少 SELECT MAX(salary) FROM emp; -- 查询员工信息,并且工资等于9000的 SELECT * FROM emp WHERE emp.salary = 9000
阅读全文
摘要:多表查询_内连接 内连接查询: 1.隐式内连接:使用where条件消除无用数据 -- 查询所有员工信息和对应的部门信息 SELECT * FROM emp,dept WHERE emp.dept_id = dept.id; -- 查询员工表的名称,性别。部门表的名称 SELECT t1.`NAME`
阅读全文
摘要:数据库的备份和还原 1.命令行: 语法: 备份:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径 还原: 1.登录数据库 2.创建数据库 3.使用数据库 4.执行文件。 source 文件路径 2.图形化工具 先创建一个数据库在执行SQL文件 数据就还原成功了 多表查询_概述 查
阅读全文
摘要:范式概述 概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求。 设计数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系数据库有六种范式:第一范式(1NF)
阅读全文
摘要:多表关系_一对一关系实现 人和身份证 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。 多表关系_案例 -- 创建旅游线路分类表 tab_category -- cid 旅游线路分类主键,自动增长 -- cname 旅游线路分类名称非空,唯一,字符串 100 CREATE TA
阅读全文
摘要:多表关系_一对多关系实现 如:部门和员工 实现方式:在多的一方建立外键,指向一的一方的主键。 多表关系_多对多关系实现 如:学生和课程 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段, 这两个字段作为第三张表的外键,分别指向两张表的主键 搜索 复制
阅读全文
摘要:约束_外键约束_级联操作 1. 添加级联操作 -- 添加外键 -- 设置级联更新ON UPDATE CASCADE -- 设置级联删除ON DELETE CASCADE ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_
阅读全文
摘要:约束_主键约束_自动增长 1. 概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长 -- 创建表时添加约束 CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT, -- 给id添加主键约束,id自动增长 NAME
阅读全文
摘要:约束_唯一约束 -- 创建表时,添加唯一约束 CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束 ); 唯一约束不能一样如果一样会报错 -- 注意mysql中,唯一约束限定的列的值可以有多个null -- 删除唯一
阅读全文
摘要:约束_概述 概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。 分类: 1.主键约束:primary key 2.非空约束:not null 3.唯一约束:unique 4.外键约束:foreign key 约束_非空约束 非空约束:not null 1.创建表时添加约束 -- 创建表添
阅读全文
摘要:分组查询 1.语法:group by 分组字段; 2.注意: 分组之后查询的字段:分组字段、聚合函数 where 和 having 的区别: where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来 where 后不可以跟聚合函数
阅读全文
摘要:DQL_排序查询 语法:order by 字句 order by 排序字段1 排序方式1, 排序字段2 排序方式2... 排序方式: ASC:升序,默认的。 DESC:降序 注意: 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。 SELECT * FROM student ORDER
阅读全文
摘要:DQL基础查询 select * from 表名; 1. 语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定 2.基础查询 1.多个字段的抽象 select 字段名1,字段名
阅读全文
摘要:DML_添加数据 添加数据: 语法: insert into 表名(列名1,列名2,...列名n) values (值1,值2,...值n); 注意: 1.列名和值要 一 一对应。 2.如果表名后,不定义列名,则默认给所有列添加值 insert into 表名 values(值1,值2,...值n)
阅读全文
摘要:DDL_操作表_删除 D(Delete):删除 复制: 创建一个stu表和student表一样 表名 被复制的表名 create table stu like student; 删除表 drop table 表名; drop table if exists 表名; DDL_操作表_修改 U(Upda
阅读全文
摘要:DDL_操作表_查询 还是有 1.C(Create):创建 2.R(Retrieve):查询 3.U(Update):修改 4.D(Delete):删除 R(Retrieve):查询 查询某个数据库中所有的表名称 show tables; 查询表结构 desc 表名; DDL_操作表_创建 C(Cr
阅读全文
摘要:DDL操作数据库_创建&查询 DDL操作数据库、表 1.操作数据库:CRUD C(Create):创建 创建数据库: create database 数据库名称; 创建数据库,判断不存在,再创建: create database if not exists 数据库名称; 创建数据库,并指定字符集:
阅读全文
摘要:SQL通用语法 1.SQL 语句可以单行或多行书写,以分号结尾。 2.可使用空格和缩进来增强语句的可读性。 3.MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。 4. 3 种注释 单行注释:-- 注释内容 或 # 注释内容(mysql 特有) 多行注释:/* 注释 */ 1. 3
阅读全文
摘要:MySQL目录结构 在安装位置中,其中my.ini是MYSQL的配置文件 如果需要修改配置信息可以在my.ini中修改 bin:MySQL安装目录 docs:二进制的可执行文件 etc:数据目录 include:C语言的头信息 lib:MySQL需要的jar包 share:MySQL的错误信息 2.
阅读全文
摘要:MySQL服务启动和关闭 任务管理器->服务->找到MySQL右键 启动或者停止 使用管理员打开cmd >net start mysql:启动mysql的服务 >net stop mysql:关闭mysql服务 MySQL登录和退出 MySQL登录 1.mysql -uroot -p密码 2.mys
阅读全文
摘要:数据库的基本概念 1.数据库的英文单词:DataBase 简称:DB 2.数据库的组成 数据:描述事物的符号记录,包括数字,文字、图形、图像、声音、档案记录等以“记录”形式按统一格式进行存储 表:将不同的记录组织在一起,用来存储具体数据 数据库:表的集合,是存储数据的仓库以一定的组织方式存储的相互有
阅读全文
摘要:注解_案例_简单的测试框架 1.以后大多数时候,我们会使用注解,而不是自定义注解 2.注解给谁用? 1.编译器 2.给解析程序用 3.注解不是程序的一部分,可以理解为注解就是一个标签 public class Calculator { //加法 @Check public void add(){ S
阅读全文
摘要:注解_自定义注解_元注解 元注解:用于描述注解的注解 @Target:描述注解能够作用的位置 ElementType取值: TYPE:可以作用于类上 METHOD:可以作用于方法上 FIELD:可以作用于成员变量上 @Retention:描述注解被保留的阶段 @Retention(Retention
阅读全文
摘要:自定义注解_格式&本质 格式: 元注解 public @interface 注解名称{ 属性列表; } 本质:注解本质上就是一个接口,该接口默认继承Annotation接口 public interface MyAnno extends java.lang.annotation.Annotation
阅读全文
摘要:注解_概念 概念:说明程序的。给计算机看的 注释:用文字描述程序的。给程序员看的 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。 它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素
阅读全文
摘要:反射_案例 案例: 需求:写一个框架,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法 实现: 1.配置文件 2.反射 步骤: 1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中 2.在程序中加载读取配置文件 3.使用反射技术来加载类文件进内存 4.创建对象
阅读全文
摘要:反射_Class对象功能_获取Constructor Constructor:构造方法 >创建对象: T newInstance(Object...initargs) 如果使用空餐数构造方法创建对象,操作可以简化:Class对象的newInstance方法 public class ReflectD
阅读全文
摘要:反射_Class对象功能概述 Class对象功能: >获取功能: 1.获取成员变量们: >Field[] getFields(): 获取所有public修饰的成员变量 >Field getField(String name):获取指定名称的public修饰符的成员变量 >Field[] getDec
阅读全文
摘要:反射_概述 反射:框架设计的灵魂 >框架:半成品软件。可以在框架的基础上进行软件开发,简化编码 >反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 1.可以在程序运行过程中,操作这些对象。 2.可以解耦,提供程序的可扩展性。 射获取字节码Class对象的三种方式 >获取Class对象的
阅读全文
摘要:Junit使用步骤 Junit的使用步骤: 1.定义一个测试类 建议: 测试包名:被测试的类名Test *** 包名:XXX.XXX.XXX.test 2.定义测试方法:可以独立运行 建议: 方法名:test测试的方法名 返回值:void 参数列表:空餐 3.给方法上加上@Test 4.导入Juni
阅读全文
摘要:方法引用数组的构造器引用 数组也是Object的子类对象,所以同样具有构造器,只是语法稍有不同 /* 数组的函数式接口 */ @FunctionalInterface public interface ArrayBuilder { //定义一个int类型的数组,参数传递数组的长度 int[] bui
阅读全文
摘要:方法引用_通过this引用本类的成员方法 this代表当前对象,如果需要引用的方法就是当前类中的成员方法,那么可以使用“this : : 成员方法”的格式来使用方法引用 /* 定义一个富有的函数式接口 */ @FunctionalInterface public interface Richable
阅读全文
摘要:方法引用_通过类名引用静态成员方法 由于在java.lang.Math类中已经存在了静态方法abs,所以我们需要通过Lambda来调用该方法时,有两种写法 @FunctionalInterface public interface Calcable { //定义一个抽象方法,传递一个整数,对整数进行
阅读全文
摘要:方法引用的基本介绍 在使用Lambda表达式的时候,我们实际传递进去的代码就是一种解决方案:拿什么参数做什么操作。 那么要考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑? /* 定义一个打印的函数式接口 */ public interfac
阅读全文
摘要:题目: 现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环) 依次进行以下若干操作步骤: 1.第一个队伍只要名字为3个字的成员姓名﹔存储到一个新集合中。 2第一个队伍筛选之后只要前3个人;存储到一个新集合中。 3.第二个队伍只要姓张的成员姓名﹔存储
阅读全文
摘要:Stream流中的常用方法_skip Stream流中的常用方法_skip:用于跳过元素 如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流: Stream<T> skip(long n); 如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流。 private st
阅读全文
摘要:Stream流中的常用方法_count Stream流中的常用方法_count:用于统计Stream流中元素的个数 long count(); count方法是一个终结方法,返回值是一个long类型的整数 所以不能在继续调用Stream流中的其他方法了 private static void DoS
阅读全文
摘要:Stream流的特点_只能使用一次 Stream流属于管道流,只能被消费(使用)一次 第一个Stream流调用完毕方法,数据就会流转到下一个Stream上 而这时第一个Stream流已经使用完毕, 就会关闭了 所以第一个Stream流就不能在调用方法了 Stream流中的常用方法_map 如果需要将
阅读全文
摘要:Stream流中的常用方法_forEach 流模型的操作比较丰富,这些方法可以被分成两种: >延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方法均为延迟方法。) >终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似Strin
阅读全文
摘要:流式思想概述 拼接流式模型:建立一个生产线,按照生产线,来进行生产商品 当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个“模型”步骤 方案,然后在按照方案去执行。 上图中展示了过滤、映射、跳过、计数等多步操作,这是一种集合元素的处理方案,而方案就是一种“函数
阅读全文
摘要:使用传统的方式遍历集合,对集合中的数据进行过滤 在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。 传统集合的多步遍历代码 几乎所有的集合都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的 添加、删除
阅读全文
摘要:常用的函数式接口_Function接口_默认方法andThen Function接口中有一个默认的andThen方法,用来进行组合操作 该方法同样用于“先做什么,再做什么”的场景,和Consumer中的andThen差不多: 第一个操作是将字符串解析成为int数字,第二个操作是乘以10。两个操作通过
阅读全文
摘要:常用的函数式接口_Predicate接口练习_集合信息筛选 练习:集合信息筛选 数组当中有多条“姓名+姓别”的信息如下 String[] arr = {"张三请,女",“李四考勤,女”,"王五都是,女","赵六事务,男"} 需要同时满足两个条件: 1.必须为女生: 2.姓名为4个字 定义一个方法 方
阅读全文
摘要:常用的函数式接口Predicate接口默认方法and 逻辑表达式:可以连接多个判断的条件 &&:与运算符,有false则false // : 或运算符,有true则true ! : 非(取反)运算符,非真则假,非假则真 需求:判断一个字符串,有两个判断条件 1.判断字符串的长度是否大于5 2.判断字
阅读全文
摘要:常用的函数式接口_Consumer接口练习_字符串拼接输出 字符串数组当中存有多条信息,请按照格式“姓名:XX。性别:xx。”的格式将信息打印出来。 要求将打印姓名的动作作为第一个Consumer接口的L ambda实例, 将打印性别的动作作为 第二个consumer接口的Lambda实例,将两个c
阅读全文
摘要:常用的函数式接口_Consumer接口 java.util.function.Consumer<T>接口则正好与Supplier接口相反,它不是生产一个数据, 而是消费一个数据,其数据类型由泛型决定。 抽象方法:accept Consumer接口中包含抽象方法void accept(T t),意为消
阅读全文
摘要:常用的函数式接口_Supplier接口 常用的函数式接口 java.util.function.Supplier<T>接口仅包含一个无参的方法:T get()。用来获取一个泛型参数指定类型的对象数据。 Supplier<T>接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会
阅读全文
摘要:函数式接口作为方法的参数案例 public class DRunnable { //定义一个方法startThread,方法的参数使用函数式接口Runnable public static void startThread(Runnable run){ new Thread(run).start()
阅读全文
摘要:性能浪费的日志案例 函数式编程: 在兼顾面向对象特性的基础上,Java语言通过Lambda表达式与方法引用等,为开发者打开了函数式编程的大门。 Lambda的延迟执行: 有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延迟执行的, 这正好可以作为解决方案,提升性能
阅读全文
摘要:函数式接口的概念&函数式接口的定义 概念: 函数式接口在Java中指:有且仅有一个抽象方法的接口。 函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以 适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambd
阅读全文
摘要:分析 public class TCPBSTServer { public static void main(String[] args) throws IOException { //创建一个服务器ServerSocket,和系统要指定的端口号 ServerSocket server = new
阅读全文
摘要:文件上传案例阻塞问题 解决: void shutdownOutput() 禁用此套接字的输出流 对于TCP套接字,任何以前写入的数据都将被发送, 并且后跟TCP的正常连接终止序列。 文件上传案例优化 /* 文件上传客户端 */ public class TCPFileClient { public
阅读全文
摘要:TCP通信的文件上传案例: 原理:客户端读取本地的文件,把文件上传到服务器,服务器在把上传的文件保存到服务器的硬盘上 1.客户端使用本地的字节输入流,读取要上传的文件 2.客户端使用网络字节输出流,把读取到的文件上传到服务器 3.服务器使用网络字节输入流,读取客户端上传的文件 4.服务器使用本地字节
阅读全文
摘要:客户端 向服务器发送链接请求,给服务器发送数据,读取服务器回写的数据 表示客户端的类: java.net.Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。 套接字:包含了IP地址和端口号的网络单位 构造方法: Socket(String host, int
阅读全文
摘要:概述 TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务器(Server)。 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接。 2.客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。 在Java中,提供了两个类用于实现
阅读全文
摘要:IP地址 协议: > 协议:计算机网络通信必须遵守的规则 IP地址 >IP地址:指互联网协议地址,俗称IP。Ip地址用来给一个网络中的计算机设备做唯一的编号。 假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。 IP地址分类 >IPv4 :是一个32位的二进制数,通常
阅读全文
摘要:网络通信协议 网络通信协议:通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则, 在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信 双方必须同时遵守才能完成数据交换。 TCP/IP协议
阅读全文
摘要:打印流_概述和使用 java.io.PrintStream : 打印流 PrintStream 为其他输出流添加了功能, 使他们能够方便地打印各种数据值表示形式。 PrintStream特点: 1.只负责数据的输出,不负责数据的读取 2.与其他输出流不同,PrintStream 永远不会抛出 IOE
阅读全文
摘要:InvalidClassException异常原理和解决方案 每次修改类的定义,都会给class文件生成一个新的序列号 解决: 无论是否对类的定义进行修改,都不重新生成新的序列号 可以手动给类添加一个序列号 格式在Serializable接口规定: 可序列化类可以通过声明名为“serialVersi
阅读全文
摘要:对象的反序列化流_ObjectInputStream java.io.ObjectInputStream extends InputStream ObjectInputStream:对象的反序列化流 作用:把文件中保存的对象,以流的方式读取出来使用 构造方法: ObjectInputStream(I
阅读全文
摘要:序列化和反序列化的概述 java提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和 对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。对象的数据
阅读全文
摘要:InputStreamReader介绍&代码实现 java.io.InputStreamReader extends Reader InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。(解码:把看不懂的变成能看懂的) 有继承自父类的共
阅读全文
摘要:转换流的原理 InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。 它使用的字符集可以由名称指定或显示给定,或者可以接受平台默认的字符集 可以查询指定的编码表,再把字节转换为字符,解码 OutputStreamWrite是字符通向字节流的桥
阅读全文
摘要:字符编码和字符集 字符编码 计算机中存储的信息都是用二进制数表示的,我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。 按照某种规则,将字符存储到计算机中,称为编码。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码。 比如:按照A规则存储,同样按照A规则解
阅读全文
摘要:BufferedReader_字符缓冲输入流 java.io.BufferedReader extends Reader 构造方法: BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 BufferedReader(Reader in, int sz
阅读全文
摘要:缓冲流的效率测试_复制文件 单个读取字符的时间 private static void show06() throws IOException { long l = System.currentTimeMillis(); //创建字节缓冲输入流对象,构造方法中传递字节输入流 BufferedInpu
阅读全文
摘要:BufferedOutputStream_字节缓冲输出流 构造方法: BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 BufferedOutputStream(OutputStream out, int size)
阅读全文
摘要:Properties集合中的方法load 可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用 void load(InputStream inSream) void load(Reader reader) 参数: InputStream inStream
阅读全文
摘要:使用Properties集合存储数据,遍历取出Properties集合中的数据 java.util.Properties集合 extends Hashtable<k,v> implements Map<k,v> Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流
阅读全文
摘要:使用try_catch_finally处理流中的异常 JDK7的新特性 在try的后边可以增加一个(),在括号中可以定义流对象 那么这个流对象的作用域就在try中有效 try中的代码执行完毕,会自动把流对象释放,不用写finally 格式: try(定义流对象;定义流对象){ 可能会产出异常的代码
阅读全文
摘要:字符输出流写数据的其他方法 public static void main(String[] args) throws IOException { FileWriter wr = new FileWriter("F:\\a3.txt"); char[] cs = {'a','b','c','d','
阅读全文
摘要:字符输出流的基本使用_写出单个字符到文件 public static void main(String[] args) throws IOException { //创建FileWriter对象,构造方法中绑定要写入数据的目的地 FileWriter writer = new FileWriter(
阅读全文
摘要:字符输入流读取字符数据 public static void main(String[] args) throws IOException { //创建FileReader对象,构造方法中绑定要读取的数据源 FileReader fr = new FileReader("F:\\a3.txt");
阅读全文
摘要:使用字节流读取中文的问题 使用字节流读取中文文件 1个中文 GBK:占用两个字节 UTF-8:占用3个字节 读取中文会产生乱码问题! public static void main(String[] args) throws IOException { FileInputStream fis = n
阅读全文
摘要:字节输入流一次读取多个字节 字节输入流一次读取多个字节的方法: int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。 需要知道两件事情: 1.方法的参数byte[]的作用? 起到缓冲作用,存储每次读取到的多个字节 数组的长度一把定义为1024(1kb)或者1
阅读全文
摘要:字节输入流读取字节数据 读取数据的原理(硬盘-->内存) java程序-->JVM-->OS-->OS读取数据的方法-->读取文件 while循环结束条件,读取到-1的时候结束 布尔表达式(len=fis.read())!=-1 1.fis.read(): 读取一个字节 2.lne = fis.re
阅读全文
摘要:字节输出流的续写和换行 追加写/续写:使用两个参数的构造方法 FileOutputStream(String name, bookean append)创建一个向具有指定 name的文件中写入数据的输出文件流。 FileOutputStream(File file, boolean append)
阅读全文
摘要:文件存储的原理和记事本打开文件 字节输出流写多个字节的方法 写几个字节 写入字符的方法:可以使用String类中的方法把字符串,转换为字节数组 byte[] getBytes() 把字符串转换为字节数组 搜索 复制
阅读全文
摘要:字节输出流_OutputStream类&FileOutputStream类介绍 字节输出流【OutputStream】 java.io.OutputStream抽象类是表示字节输出流的所有类的超类,将指定的字节信息写入到目的。 它定义了字节输出流的基本共性功能方法。 public void vlos
阅读全文
摘要:什么是IO 在生活中编辑一个文本文件,忘记了ctrl+s,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。 那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。 我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入inp
阅读全文
摘要:FileFilter过滤器的原理 在上面搜索文件案例中还可以进行优化 可以使用过滤器来实现 在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器 File[] listFiles(FileFilter filter) java.io.FileFilter接口:用于抽象路径名
阅读全文
摘要:使用递归计算阶乘 n的阶乘:n!=n*(n-1)*...*3*2*1 定义方法使用递归计算阶乘 5的阶乘:5!=5*(5-1)*(5-2)*(5-3)*(5-4)=5*4*3*2*1 递归结束的条件 获取到1的时候结束 递归的目的 获取下一个被乘的数字(n-1) public static void
阅读全文
摘要:递归概念&分类&注意事项 >递归:指在当前方法内调用自己的这种现象。 >递归的分类: 递归分为两种,直接递归和间接递归。 直接递归称为方法自身调用自己 间接递归可以A方法调用B方法, B方法调用C方法, C方法调用A方法。 >注意事项: 递归一定要有条件限定, 保证递归能够停止下来, 否则会发生栈内
阅读全文
摘要:File类创建删除功能的方法 public boolean createNewFile() : 当且仅当具有该名称的文件尚不存在时, 创建一个新的空文件。 创建文件的路径和名称在构造方法中给出(构造方法的参数) 返回值:布尔值 true:文件不存在,创建文件,返回true false:文件存在,不会
阅读全文
摘要:File类获取功能的方法 getAbsolutePath() : 返回此File的绝对路径名字符串。 getPath() : 将此File转换为路径名字符串。(获取的构造方法中传递的路径) getName() : 返回由此File表示的文件或目录的名称。 (获取的就是构造方法传递路径的结尾部分(文件
阅读全文
摘要:绝对路径和相对路径 路径: 绝对路径:是一个完整的路径 以盘符(c:,D:)开始的路径 c:\\a.txt c:\\Users\\itcast\\IdeaProjects\\shungyuan\\123.txt D:\\demo\\b.txt 相对路径:是一个简化的路径 相对指定的是相对于当前项目的
阅读全文
摘要:File类的概述 java.io.File类 文件和目录路径名的抽象表示形式。 java把电脑中的文件和文件夹(目录)封装为了一个File类,我们可以使用FIle类对文件和文件夹进行操作 我们可以使用File类的方法 创建一个文件/文件夹 删除文件/文件夹 获取文件/文件夹 判断文件/文件夹是否存在
阅读全文
摘要:Lambda表达式有参数有返回值的练习(自定义接口) 给定一个计算器calculator接口,内含抽象方法calc可以将两个int数字相加得到和值 使用Lambda的标准格式调用invokeCalc方法,完成120和130的相加计算 public interface Calculator { //定
阅读全文
摘要:Lambda表达式的无参数无返回值的练习 public interface Cook { public abstract void makeFood(); } public class CookTest { public static void main(String[] args) { invok
阅读全文
摘要:编程思想转换&体验Lambda的更优写法 做什么, 而不是怎么做 是希望创建一个匿名内部类对象吗?只是为了做这件事情而不得不创建一个对象。 真正希望做的事情是:将run方法体内的代码传递给Thread类知晓。 传递一段代码--这才是我们真正的目的。而创建对象只受限于面向对象语法而不得不采取的一种手段
阅读全文
摘要:函数式编程思想概述 在数学中, 函数就是有输入量、输出量的一套计算方案,就是“拿什么东西做什么事情”。相对而言,面向对象过分 强调“必须通过对象的形式来做事情”,函数式思想则尽量忽略面向对象的复杂语法--强调做什么,而不是以什么形式做。 面向对象的思想: 做一件事情, 找一个能解决这个事情的对象,调
阅读全文
摘要:线程池的概念和原理 >线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无序 反复创建线程而消耗过多资源. 线程池 : 容器-->集合(ArrayList, HashSet, LinkedList<Thread>, HashMap) 当程序第一次启动的时候
阅读全文
摘要:等待唤醒机制需求分析 分析: 需要哪些类 资源类: 包子类 设置包子的属性(皮,馅,包子的状态:有true ,没有false) 生产者(包子铺)类:是一个线程类,可以继承Thread 设置线程任务(run):生产包子 对包子的状态进行判断 true: 有包子,包子铺调用wait方法进入等待状态 fa
阅读全文
摘要:线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作, 一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。 为什么要处理线程间通信: 多个线程并发执行时,在
阅读全文
摘要:等待唤醒案例代码实现 等待唤醒案例: 线程之间的通信 创建一个顾客线程(消费者):告知老板要的东西的种类和数量,调用wait方法,放弃cpu的执行,进入到WAITING状态(无限等待) 创建一个老板线程(生产者):花了5秒做东西,做好之后,调用notify方法,唤醒顾客吃东西 注意: 顾客和老板线程
阅读全文
摘要:线程状态概述 线程状态 导致状态发生条件 NEW 至今尚未启动的线程处于这种状态 RUNNABLE 正在Java虚拟机中执行的线程处于这种状态 BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态 WAITING 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态 TIMED_WAIT
阅读全文
摘要:静态同步方法 静态同步方法: 锁对象是谁? 不能是this, this是创建对象之后产生的,静态方法优先于对象 静态方法的锁对象是本类的class属性-->class文件对象(反射) 解决线程安全问题_Lock锁 线程安全问题的第三种方案: 使用Lock锁 java.util.concurrent.
阅读全文
摘要:同步技术的原理 同步技术的原理: 使用了一个锁对象,这个锁对象叫同步锁,也叫对象锁,也叫对象监视器 3个线程一起抢夺cpu的执行权,谁抢到了谁执行run方法进行卖票 t0抢到了cpu的执行权,执行run方法,遇到synchronized代码块 这时t0会检查synchronized代码块是否有锁对象
阅读全文
摘要:线程安全问题产生的原理 解决线程安全问题_同步代码块 解决线程安全问题的第一种方案:使用同步代码块 格式: synchronized(锁对象){ 可能会出现线程安全问题的代码(访问了共享数据的代码) } 注意: 1.通过代码块中的锁对象,可以使用任意的对象 2.但是必须保证多个线程使用的锁对象是同一
阅读全文
摘要:线程安全问题的概述 线程安全问题的代码实现 public class RunnableImpl{ public static void main(String[] args) { Runna run = new Runna(); new Thread(run).start(); new Thread
阅读全文
摘要:Thread和Runnable的区别 实现Runnable接口创建多线程程序的好处: 1.避免了单继承的局限性 一个类只能继承一个类(一个人只能有一个亲爹), 类继承了Thread类就不能继承其他的类 实现了Runnable接口,还可以继承其他的类,实现其他的接口 2.增强了程序的扩展性,降低了程序
阅读全文
摘要:Thread类的常用方法_sleep public static void sleep(long millis):使当前正执行的线程以指定的毫秒数暂停(暂时停止执行). 毫秒数结束之后,线程继续执行。 public static void main(String[] args) { for (int
阅读全文
摘要:Thread类的常用方法_获取线程名称的方法 获取线程的名称: 1.使用Thread类中的方法getName() String getName() 返回该线程的名称。 2.可以先获取到当前正在执行的线程,使用线程中的方法getName()获取线程的名称 static Thread currentTh
阅读全文
摘要:多线程原理_随机性打印结果 执行原理 多线程原理_多线程内存图解 搜索 复制
阅读全文
摘要:主线程 主线程:执行主(main)方法的线程 单线程程序:java程序中只有一个线程 执行从main方法开始,从上到下依次执行 public class DMainT { public static void main(String[] args) { Person p1 = new Person(
阅读全文
摘要:线程概念 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。 一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。 简单而言:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 线程调度 >分时调度 所有线程轮流使用CPU的使用权,平均分配每个
阅读全文
摘要:并发与并行 并发:指两个或多个事件在同一个时间段内发生。 并行:指两个或多个事件在同一时刻发生(同时发生)。 进程概念 进程:指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程, 进程也是程序的一次执行过程,是系统运行程序的基本单位; 系统运行一个程序即使一
阅读全文
摘要:自定义异常类 自定义异常类: java提供的异常类,不够完美使用,需要自己定义一些异常类 格式: public class XXXExcepiton extends Exception | RuntimeException{ 添加一个空参数的构造方法 添加一个带异常信息的构造方法 } 注意: 1.自
阅读全文
摘要:异常注意事项_finally有return语句 如果finally有return语句,永远返回finally中的结果,避免该情况 int a = getA(); System.out.println(a); //定义一个方法,返回变量a的值 public static int getA(){ int
阅读全文
摘要:finally代码块 finally:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转, 导致有些语句执行不到。而finally就是解决这个问题,在finally代码块中存放的代码都是一定会被执行的. 注意: 1.finally不能单独使用,必须和try一起使用 2.fin
阅读全文
摘要:try_catch异常处理 try...catch:异常处理的第二种方式,自己处理异常 格式: try{ 可能产生异常的代码 }catch(定义一个异常的变量,用来接收try中抛出的异常对象){ 异常的处理逻辑,异常对象之后,怎么处理异常对象 一般在工作中,会把异常的信息记录到一个日志中 } ...
阅读全文
摘要:Objects非空判断 objects类中的静态方法 requireNonNull(T obj): 查看指定引用对象不是null method(null); 如果判断是否为空就可以使用requireNonNull进行判断简化代码 public static void method(Object ob
阅读全文
摘要:异常的产生过程解析 public static void main(String[] args){ int[] arr={1,2,3}; int e = getElem(arr, 3); System.out.println(e); } public static int getElem(int[]
阅读全文
摘要:异常概念&异常体系 异常,就是不正常的意思。在程序执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 在java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。 Java处理异常的方式是中断处理 异常体系: 异常机制其实是帮助我们找到程序中的问题,
阅读全文
摘要:分析: 1.准备牌 特殊牌:大王,小王 52张牌: 循环嵌套遍历两个集合/数组,组装52张牌 List<String> colors = List.of(“♠”,"♥","♣","♦"); List<String> numbers = List.of("2","A","K"..."3"); 2.洗牌
阅读全文
摘要:Hashtable集合 Hashtable<K,V>集合 implements Map<K,V>接口 Hashtable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢 HashMap:底层Wie一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快 HashMap集合(之前学的
阅读全文
摘要:HashMap存储自定义类型键值 Map集合保证key是唯一的: 作为key的元素,必须重写hashCode方法和equals方法,保证key唯一. HashMap<String, Person3> map = new HashMap<>(); map.put("北京",new Person3("张
阅读全文
摘要:Entry键值对对象 Map.Entry<K,V>:在Map接口中有一个内部接口Entry 作用:当Map结合一创建,那么就会在Map集合中创建一个Entry对象, 用来记录键与值(键值对对象、键与值的映射关系) Map集合遍历键值对方式 Map集合中的方法: Set<Map.Entry<K,V>>
阅读全文
摘要:Map接口中的常用方法 put(k key, v value): 把指定的键与指定的值添加到Map集合中。 返回值: v 存储键值对的时候,key不重复,返回值V是null 存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值 public sta
阅读全文
摘要:Map集合概述 Map可以理解为双列集合,元素是成对存在的。每个元素由键与值两部分组成,通过键可以找对所对应的值。 特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value) 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同 3.Map集合中的元素
阅读全文
摘要:Collections集合工具类的方法_sort sort(List<T> list):将集合中元素按照默认规则排序。 public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list
阅读全文
摘要:可变参数 可变参数:是JDK1.5之后出现的新特性 使用前提: 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。 使用格式:定义方法时使用 修饰符 返回值类型 方法名(数据类型...变量名){} 可变参数的原理: 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同
阅读全文
摘要:HashSet存储自定义类型元素 给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法, 建立自己的比较方式,才能保证HashSet集合中的对象唯一: 存储的元素,必须重写hashCode方法和equals方法 同名同年龄的人,视为同一个人,只能存储一次 pub
阅读全文
摘要:HashSet集合存储数据的结构(哈希表) HashSet集合存储数据的结构(哈希表) jdk1.8版本之前:哈希表=数组+链表 jdk1.8版本之后:哈希表=数组+链表; 哈希表=数组+红黑树(提高查询的速度) 哈希表的特点:速度快 Set集合存储元素不重复的原理 给HashSet中存放自定义类型
阅读全文
摘要:Set接口 Set接口和List接口一样,同样继承自Collection接口,他与Collection接口中的方法 基本一致,与List接口不同的是:Set接口中元素无序,会以某种规则保证存入的元素不出现重复。 Set集合多个子类,为HashSet、LinkedHashSet两个集合 HashSet
阅读全文
摘要:LinkedList集合 LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。 还是一个双链表, 使用LinkedList集合特有的方法,不能使用多态 常用的方法: addFirst(E e):将指定元素插入此列表的开头。 addLast(E e):将指定元素添加到此列表的结
阅读全文
摘要:数据结构_红黑树 二叉数: binary tree,是每个节点不超过2的有序数(tree)。 就是一种类似于我们生活中树的结构,只不过每个节点上都最多只能 有两个子结点。 二叉树是每个节点最多有两个子树的树结构。顶上的叫根节点,两边被称作“左子树”和“右子树”。 红黑树 特点:趋*于*衡树,查询的速
阅读全文
摘要:数据结构_数组 特点:查询快,增删慢。 数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间, 并在此空间中存放元素。 >查找元素快:通过索引,可以快速访问指定位置的元素 增删元素慢: >指定索引位置增加元素:需创建一个新数组,将指定新元素存储在指定索引位置, 在把元素根据索引,复制
阅读全文
摘要:数据结构_栈 先进后出 数据存储的常用结构有:栈、队列、数组、链表和红黑树。 栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作, 不允许在其他任何位置进行添加、查找、删除等操作。 采用该结构的集合,对元素的存取的特点: >先进后出(即,存进去的元素,要在它后
阅读全文
摘要:分析 1、准备牌:54张牌,存储到一个集合中 特殊牌:大王,小王 其他52张牌: 定义一个数组/集合,存储4种花色:♠,♥,♣,♦ 定义一个数组/集合,存储13个序号:2,A,K...3 循环嵌套遍历两个数组/集合,组装52张牌 ♠2,♠A,♠K...♠3,♥2,♥A,♥K...♥3 .... 2.
阅读全文
摘要:定义和使用含有泛型的接口 含有泛型的接口,第一种使用方式:定义接口的实现类,实现接口,指定接口的泛型 publlc interface Iterator<E>{ E next(); } 第一种方式: 创建接口 public interface GenericInterface<I> { public
阅读全文
摘要:定义和使用含有泛型的类 定义一个含有泛型的类,模拟ArrayList集合 泛型是一个未知的数据类型,当我们不确定什么什么数据类型的时候,可以使用泛型 泛型可以接收任意的数据类型,可以使用Integer,String,Student... 创建对象的时候确定泛型的数据类型 public class G
阅读全文
摘要:泛型的概念 泛型:是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型 泛型也可以看出是一个变量,用来接收数据类型 E e:Element 元素 T t:Type 类型 ArrayList集合在定义的时候,不知道集合中都会存储什么类型的数据,所以类型使用泛型 E:未知的数据类型 使
阅读全文
摘要:迭代器的实现原理 增强for循环 底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写 在遍历的过程中,不能对集合中的元素进行增删操作 格式: for(集合/数组的数据类型 变量名 : 集合名/数组名){ sou(变量名); } 新for循环必须有被遍历的目标。目标只能是Collectio
阅读全文
摘要:Collection集合常用功能 add(E e):把给定的对象添加到当前集合中。 clear() : 清空集合中所有的元素。 remove(E e) : 把给定的对象在当前集合中删除. contains(E e): 判断当前集合中是否包含给定的对象。 isEmpty() : 判断当前集合是否为空
阅读全文
摘要:1、集合概述 >集合:集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组既然都是容器 >数组的长度是固定的。集合的长度是可改变的。 int[] arr = new int[10]; Student[] arr = new Student[3]; >数组中存储的是同一类型的元素,可以存
阅读全文
摘要:StringBuilder的toString方法 StringBuilder和String可以互相转换 String->StringBuilder:可以使用StringBuilder的构造方法 StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。 S
阅读全文
摘要:StringBuilder的原理 String类 字符串是常量;他们的值在创建之后不能更改。 字符串的底层是一个被final修饰的数组,不能改变,是一个常量 private final byte[] value; 可以进行字符串相加,内存中就会有多个字符串,占用空间多,效率低下 StringBuil
阅读全文
摘要:日期相关类 1、Date类 >构造方法 Date(); 根据当前系统时间创建日期对象 Date(long time);根据传入的毫秒值时间创建日期对象 >成员方法 long getTime(); 获取当前日期对象的毫秒值时间 String toLocaleString(); 根据本地格式转换日期对象
阅读全文
摘要:Calendar类介绍 Calendar类:日历类 Calendar类为一个抽象类,里面提供了很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR) Calendar类无法直接创建对象使用,里边有一个静态方法叫getInstance(),该方法返回了Calendar类的子
阅读全文
摘要:请使用日期时间相关的API,计算出一个人已经出生了多少天。 public static void main(String[] args) throws ParseException { //1.使用Scanner类中的方法next,获取出生日期 Scanner sc = new Scanner(Sy
阅读全文
摘要:java.text.DateFormat:是日期/时间格式化子类的抽象类 作用: 格式化(也就是日期 -> 文本)、解析(文本 -> 日期) 成员方法: String format(Date date)按照指定的模式,把Date日期,格式化为符合模式的字符串 Date parse(String so
阅读全文
摘要:java.Date:表示日期和时间的类 类:Date表示特定的瞬间,会精确到毫秒。 毫秒:千分之一秒 1000毫秒=1秒 特定的瞬间:一个时间点,一刹那时间 2022-07-04 09:55:33:333瞬间 毫秒值的作用:可以对时间和日期进行计算 2044-07-04到2022-01-01中间一共
阅读全文
摘要:Object类 1、Object类介绍 Object类是所有类的父类,一个类都会直接或间接的继承自该类 该类中提供了一些非常常用的方法! 2、toString()方法 >作用:打印对象的信息 >重写前:打印的是包名类名@地址值 >重写后:打印的是对象中的属性值 3、equals()方法 >作用:比较
阅读全文
摘要:Object类的equals方法默认比较的是两个对象的地址值,没有意义 所以我们需要重写equals方法,比较两个对象的属性值(name,age) 会隐含着一个多态 会有一个弊端:无法使用子类特有的内容(属性,方法) 使用向下转型可以进行解决 @Override public boolean equ
阅读全文
摘要:Object类的toString方法 public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = n
阅读全文
摘要:红包发出去之后,所有人都有红包,抢完之后,最后一个红包给群主自己。 大多数代码都是现成的,我们需要做的就是填空题。 我们自己要做的事情有: 1.设置一下程序的标题,通过构造方法的字符串参数 2.设置群主名称 3.设置分发策略:平均,还是随机 红包分发策略: 1.普通红包(平均):余额放在最后一个红包
阅读全文
摘要:接口作为成员变量类型 public class Hero { private String name; private SKill sKill; public Hero() { } public Hero(String name, SKill sKill) { this.name = name; t
阅读全文
摘要:概念 final关键字代表最终、不可改变的。 常见的四种用法: 可以修饰类、方法、局部变量、成员变量。 final修饰类 当final关键字用来修饰一个类的时候,格式: public final class 类名称{ ... } 含义:当前这个类不能有如何的子类。(可以有父类) 不能使用一个fina
阅读全文
摘要:instanceof关键字进行类型判断 如何知道一个父类引用的对象,本来是什么子类 格式: 对象 instanceof 类名称 这将会得到一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例。 public class Cat extends Animal{ @Override p
阅读全文
摘要:多态中成员变量的使用特点 访问成员变量的两种方式: 1. 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。 2. 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。 public class Fu { int num = 10; public void sh
阅读全文
摘要:继承父类并实现多个接口 使用接口的时候需要注意: 1.接口是没有静态代码块或者构造方法的。 2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。 格式: public class MyInterfaceTest implements MyInterfaceA,MyInterfaceB{ /
阅读全文
摘要:接口的常量定义 接口当中也可以定义“成员变量“,但是必须使用public static final 三个关键字进行修饰。 从效果上看,这其实就是接口的【常量】。 格式: public static final 数据类型 常量名称 = 数据值; 一旦使用final关键字进行修饰,说明不可改变。 注意事
阅读全文
摘要:发红包案例 分析: 用户类:(姓名和余额) 群主类:继承用户类(发红包的方法) 普通成员类:继承用户类(收红包的方法) 发红包的逻辑: 返回值类型:ArrayList<Integer> 方法名称: send 参数列表: 1.总共发多少钱 int totalMoney 2.分成多少份 int coun
阅读全文
摘要:public class Fu { int num = 10; public void method(){ System.out.println("父类方法"); } } public class Zi extends Fu{ int num = 20; @Override public void
阅读全文
摘要:继承中方法覆盖重写_应用场景 比如有一个老款的手机里面功能只有:打电话,发短信, 来电显示只显示个号码 几年过去 出来了个新款手机里面功能还是有:打电话,发短信而来电显示多了两个功能(显示号码,显示姓名,显示头像) 老的手机不动,出一个新的子类继承父类覆盖重写方法进行添加那两个功能 //老手机 pu
阅读全文
摘要:概念: 重写(Override) 概念:在继承关系当中,方法的名称一样,参数列表也一样。 重写(Override):方法的名称一样,参数列表【也一样】。(覆盖、重写)。 重载(Overload):方法的名称一样,参数列表【不一样】。 方法覆盖重写注意事项 1.必须保证父子类之间方法的名称相同,参数列
阅读全文
摘要:继承中成员变量的访问特点 在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访间有两种方式: 直接通过子类对象访问成员变量: 等号左边是谁,就优先用谁,没有则向上找。 间接通过成员方法访问成员变量: R该方法属于谁,就优先用谁,没有则向上找。 public class Fu { int n
阅读全文