type
status
date
slug
summary
tags
category
icon
password

IDEA

便捷操作

commanf + / =单行注释
control + shift + / =多行注释

模块操作

  • 新建,删除,导入模块
  • 新建- File - Project Structure - Moudles - + - new Moudle - java - next (更改名称)-finish
  • 删除 - 选择moudle - Remove moudle- ok
 

Debug

  • 选择要设置断点的代码行,在行号的区域后单击鼠标即可
  • 代码区域右键Debug执行
  • Console能看到执行结果
  • 点击Step into(F7),也可以直接按F7
  • 选择要删除的断点,单击左键即可
  • 多个删除时,如图所示,点击Java Line Breakpoints前的勾,再点击减号即可
notion image
 

运算符

逻辑运算符

  • &(逻辑与) 有false则为false(有一个错的就是错的)
  • |(逻辑或) 有true则为true(有一个对的就是对的)
  • ^(逻辑异或) 相同为true,不相同为false
  • !(逻辑非) 将false改为true,反之亦然
 

短路逻辑运算符

  • 可以和逻辑运算符通用,但是逻辑运算符无论真假都要运行
  • && (短路与) 左边为true,执行右边,左边为false,就不执行右边
  • || (短路或) 左边为false,执行右边,左边为true,就不执行右边
 

三元运算符

关系表达式?表达式1 : 表达式2
先判断关系表达式,如果正确,将表达式1赋值,如果错误,将表达式2赋值
 

三种循环的区别

  • for和while先判断条件是否成立再循环,do-while不论条件是否成立都先循环一次
  • 条件控制语句所控制的自增变量,归属于for循环的语法结构,for循环结束后不能再被访问,while循环后还可以继续使用
  • 三种循环的死循环格式
 

跳转控制语句

  • continue和break都要基于循环体使用
  • 下面这个例子遇到偶数不会输出
 

Random

  • 导包(导包的创建必须在类定义的上面)
  • 创建对象
  • r是变量名,可变,其他的为固定格式
  • 获取随机数
  • number是变量名,数字是变量,都可变,其他为固定格式
  • 举例
  • Random r=new Random(n),范围可以取0但是取不到n
  • 如果想要输出1—100的随机数,方法如下
 

数组

  • 记住数组中从0开始计数
  • 数组变量访问 格式:数组名
  • 数组内部保存数据访问访问 格式:数组名[索引]
  • 索引是数组中数组名的编号方式
左边:
  • int:说明数组中的元素类型
  • []:说明这是一个数组
  • arr:数组名称
右边:
  • new:为数组申请内存空间
  • int:说明数组中的元素类型
  • 3:数组长度,实际为数组的元素个数
  • [I@29453f44:内存空间地址值
 

java内存分配

notion image
  • 表示给数组arr中的第n个元素赋值x
当两个数组指向相同的时候,任何一个数组修改了堆内存的数组,另一个数组访问的时候,元素值也会发生改变
 

数组初始化之静态初始化

  • 格式
  • 初始化时决定每个数组元素的初始值,由系统决定初始长度
  • 简化格式(推荐)
常见问题
  • 索引越界-假如开始输入的数值只有三个,如果让它表示第四个或之后的数值就会报错
  • ArrayIndexOutOfBoundsException(索引越界)
  • 空指针异常-访问的数组已经不再指向堆内存的数组
  • NullPointerException (空指针异常)
  • 等于把null赋值给数组,改变了数组的内存地址,那么再去访问原来的地址就是无效操作
  • null-空值,引用数据类型的默认值,表示不指向任何有效对象
 

遍历

  • 方法遍历
 

获取最大值

 

方法

方法的定义和调用

  • 方法必须先定义后调用
  • 方法调用格式-方法名()
  • 练习
 

带参方法的定义和调用

  • 带参方法的定义
  • 数据类型和变量名中缺少任何一个都会报错
  • 带参方法调用
  • 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配
 

方法调用练习

 

形参和实参

  • 形参:方法定义中的参数(数据类型和变量名)
  • 下行代码中的int number就是形参
  • 实参:方法调用中的参数(常量或变量名)
  • 下行代码中的9和number就是实参
 

带参方法调用练习

 

带返回值方法的定义和调用

  • 方法定义格式
  • 方法定义时return后面的返回值要与方法定义上的数据类型相匹配
  • 方法调用格式
  • 方法的返回值通常使用变量接收
  • 实例说明
 

带返回值方法练习

 

方法的通用格式

  • 方法名-调用方法时使用的标识
  • 参数-由数据类型和变量名组成,多个参数之间用逗号隔开
  • return-用于将返回数据返回给调用者
  • 明确返回值类型和参数
  • 调用方法时,void类型直接调用,非void类型推荐使用变量接收调用
 

方法重载

  • 定义-指同一类中定义的多个方法之间的关系,满足以下条件
  1. 多个方法在同一类中
  1. 多个方法具有相同的方法名
  1. 多个方法的参数不同,类型不同或者数量不同
  • 重载只对应方法的定义,与方法的调用无关
  • 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关
  1. 第一个参数是相同的,虽然返回值一个是void一个是int,它们并不相同,但是方法重载和返回值无关
  1. 第四个分别属于两个方法
    1. notion image
  • 实例
  • 在调用的时候会通过参数的不同来区分同名的方法
 

方法重载练习

 

方法的参数传递

基本类型

  • 对于基本类型的参数,形式参数的改变,不影响实际参数的值
  • 最后输出的结果还是100
  • 在实例中,change方法中的改变量相当于形式参数,外围的main相当于实际参数
    • notion image
 

引用类型

  • 对于基本类型的参数,形式参数的改变,影响实际参数的值
  • 最后输出的结果是200
    • notion image

练习-数组遍历

 

方法注意事项

  • 方法不能嵌套使用
  • void表示无返回值,可以省略return,也可以单独写return,但是return后面不能跟任何类型的数值
  • return表示方法结束,后面语句不执行
 

练习

  • 逢七过
  • 不死神兔
  • 百钱百鸡
  • 数组元素求和
  • 数组内容相同
  • 查找指定数据在数组中的索引
  • 反转
  • 当调用方法没有返回值的时候,不需要sout指令
  • 评委打分

面向对象基础

类和对象

类是对象的抽象,对象是类的实体
  • 类是对现实生活中一类具有共同属性和行为的事物的抽象
  • 类的特点
  1. 类的对象是数据类型
  1. 类是具有相同属性和行为的一组对象的集合
  • 属性的定义-对象具有的各种特征,每个对象的每个属性都拥有特定的值
  • 行为的定义——对象能够执行的操作
  • 类和对象的关系-类是事物的抽象,对象是能够接触的真实存在的实体
 

类的定义

  • 类是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象会拥有的属性和行为
类的组成-属性和行为
属性-在类中通过成员变量来体现(类中方法外的变量)
行为-在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
类的定义步骤
  1. 编写成员变量
  1. 编写类的成员方法
    1. notion image

对象的使用

创建对象
格式-类名 对象名 = new 类名();
使用对象
格式-对象名.变量名
使用成员方法
格式-对象名.方法名()
  • 要有另一个文件定义了phone,不然系统会报错
 

练习

  • 学生类
  • 学生测试类
 

对象内存图

notion image
notion image

成员变量和局部变量

notion image
notion image
 

封装

private

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • 保护成员不被别的类使用,被private修饰的成员只在本类中才能访问
  • 针对private修饰的成员变量,需要提供相应的操作
    • get变量名(),用于获取成员变量的值,方法用public修饰
    • set变量名(),用于设置成员变量的值,方法用public修饰

private的使用

  • 直接调用方法,可以自定义输出格式

this的使用

  • 用this能将方法变量的值赋值给同名的成员变量

封装

notion image

构造方法

构造方法是一种特殊的方法
作用:创建对象
格式:
功能:主要是完成对象数据的初始化
  • 后面跟着括号的一般是方法

构造方法的注意事项

构造方法的创建
  • 如果没有定义构造方法,系统将给出一个默认的无参构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法
构造方法的重载
  • 如果自定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法
推荐使用方法
  • 无论是否使用,都手写无参数构造方法
  • 与方法重载原理相同
 

标准类制作

 

字符串

API

String

notion image
String构造方法
String对象的特点
  • s4的内容与s3相同,所以s3的地址被赋给s4
notion image
 

字符串的比较

notion image
 

练习

  • 用户登录
  • 遍历字符串
  • 统计字符次数
  • 字符串拼接
  • 字符串反转
 

String Builder

  • StringBuilder是一个可变字符串类,可以看做容器,可变指的是String Builder对象中的内容可变
  • String不可变,StringBuilder内容可变

StringBuilder的构造方法

StringBuilder的添加和反转

 

StringBuilder和String相互转换

 

练习(进阶)

  • 字符串拼接
  • 字符串反转
 

集合

  • 集合类的特点:提供一种存储空间可变的存储模型,存储的数据类型容量可以发生改变

ArrayList

notion image
 

ArrayList构造方法和添加方法

notion image
 

ArrayList常用方法

notion image
 

练习

  • 遍历集合
  • 添加学生类
  • 输入添加学生类
  • 输入添加学生类(简化)
 

学生管理系统

  • Student
  • StudentManger
 

继承

extends

  • 实例
notion image
  • 继承中变量的访问特点
    • 在子类方法中访问一个变量
      • 子类局部范围查找
      • 子类成员范围查找
      • 父类成员范围查找
      • 没有就报错
 

super

notion image
notion image
 
继承中变量的访问特点
  • 在子类方法中访问一个变量
    • 子类局部范围查找
    • 子类成员范围查找
    • 父类成员范围查找
    • 没有就报错
notion image
方法重写
  • 概述:子类中出现和父类一样的方法声明
  • 当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类中的方法,既沿袭了父类的功能,又定义了子类特有的内容
notion image
方法重写注意事项
  • 似有方法不能被重写(父亲私有成员子类不能继承)
  • 子类方法访问权限不能更低(public>默认>私有)
    • notion image
练习
  • 快捷键打开Generate(创建方法)
 

练习

  • 老师和学生
  • 猫和狗
 

修饰符

notion image
 

导包

使用不同包下的类时,使用的时候要写类的全路径,为了简化带包的操作提供了导包功能
导包格式
  • 格式:import包名
  • 范例:import cn.itcast.Teacher
 

修饰符

  • 权限修饰符
  • 状态修饰符
    • notion image
 

final

  • final关键字是最终的意思,可以修饰成员方法,成员变量,类
  • final修饰的特点
    • 修饰方法:表明该方法是最终方法,不能被重写
    • 修饰变量:表明该变量是常量,不能再次被赋值
    • 修饰类:表明该类是最终类,不能被继承
  • final修饰局部变量
    • 变量是基本类型:final修饰符指的是基本类型的数据值不能发生改变
    • 变量是引用类型:final修饰符指的是引用类型的地址不能发生改变,但是地址里面的内容可以发生改变
 

static(静态)

  • static关键字是静态的意思,可以修饰成员变量,成员方法
  • static修饰的特点
    • 被类的所有对象共享,这也是判断是否使用静态关键字的条件
  • static访问的特点
    • 非静态的成员方法
      • 访问静态的成员变量
      • 能访问非静态的成员变量
      • 能访问静态的成员方法
      • 能访问非静态的成员方法
    • 静态成员方法
      • 能访问静态的成员变量
      • 能访问静态的成员方法
    • 总结:静态成员方法只能访问静态成员
 

多态

多态对象

  • 同一个对象,在不同时期表现出的不同形态
    • 举例:猫
      • 我们可以说猫是猫:猫 cat = new 猫();
      • 也可以说猫是动物:动物 animal = new 猫();
      • 如果猫在不同的时期表现出了不同的形态就是多态
    • 多态的前提和体现
      • 有继承/实现方法
      • 有方法重写
      • 有父类引用指向子类对象
 

多态中的成员访问特点

  • 成员变量:编译看左边,执行看左边
  • 成员变量:编译看左边,执行看右边
  • 成员方法有重写,成员变量没有
  • a.age和a.weight表示的就是成员变量,因为animal里没有weight,所以无法调用,而调用方法的时候用的是cat里的方法
 

多态的好处和弊端

  • 多态的好处:提高了程序的扩展性
    • 具体体现:定义方法的时候,使用父类作为参数,将来在使用的时候,使用具体的子类参与操作
  • 多态的弊端:不能使用子类的特有功能
 

多态中的转型

  • 向上转型,从子到父,父类引用指向子类对象
  • 向下转型,从父到子,父类引用转为子类对象
 

练习

  • 猫和狗(多态)
 

抽象类

  • 在Java中,一个没有方法体的方法应该定义为抽象方法,类中如果有抽象方法,该类必须定义为抽象类

抽象类的特点

notion image
 

抽象类的成员特点

notion image
 

练习

  • 猫和狗(抽象)
 

接口

接口概述

  • 接口就是一种公共的规范标准,只要符合标准,更多体现在对行为的抽象
 

接口的特点

notion image
 

接口的成员特点

  • object中只有无参构造方法,所有子类默认访问父类的无参构造方法
    • notion image
 

练习

  • 猫和狗(接口)
 

类和接口的关系

  • 类和类的关系
    • 继承关系,只能单继承,但是可以多层继承
  • 类和接口的关系
    • 实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
  • 接口和接口的关系
    • 继承关系,可以单继承,也可以多继承
  • 抽象类和接口的区别
    • 抽象类是对事物的抽象,而接口就是对行为的抽象
      • notion image
 

练习

  • 运动员和教练

接口组成更新

更新概述

  • 接口的组成
    • 常量 public static final
    • 抽象方法 public abstract
    • 默认方法(Java8)
    • 静态方法(Java8)
    • 私有方法(Java9)
 

接口中的默认方法

  • 格式: public default 返回值类型 方法名(参数列表){}
  • 注意事项
    • 默认方法不是抽象方法,不强制重写,但是可以被重写,重写的时候去掉default关键字
    • public可以省略,default不能省略
 

接口中的静态方法

  • 格式:public static 返回值类型 方法名(参数列表){}
  • 注意事项
    • 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
    • public可以省略,static不能省略
 

接口中的私有方法

notion image
 

函数式接口

概述

notion image
  • 接口
  • 操作类
 

函数式接口作为方法的参数

  • 如果方法的参数是一个函数式接口,可以使用Lambda表达式作为参数传递
 

函数式接口作为方法的返回值

notion image
 

常用的函数式接口

supplier接口

notion image
  • 练习
 

Consumer接口

notion image
  • 练习
 

Predicate接口

notion image
  • 练习
 

Function接口

notion image
  • 练习
 

形参和返回值

类名作为形参和返回值

  • 方法的形式参数是类名,需要的是该类对象
  • 方法的返回值是类名,需要的是该类对象

接口名作为行参和返回值

  • 方法的形式参数是接口名,需要的是该接口的实现类对象
  • 方法的返回值是接口名,需要的是该接口的实现类对象

内部类

notion image

成员内部类

  • 按照内部类再类中定义的位置不同,分为两种形式,成员内部类和局部内部类
  • 成员内部类使用对象
    • 外部类名.内部类名 对象名 = 外部类对象.内部类对象
 

局部内部类

  • 局部内部类是在方法中定义的类,外界无法访问,需要在方法内部创建对象并使用该类可以直接访问的外部类的成员,也可以访问方法内的局部变量

匿名内部类

 

常用API

Math

notion image
 

System

 

Object

  • Oobject中的toString()给出的默认信息没有意义,建议子类覆盖,就是重写的意思。
    • notion image
 

Arrays

基本包装类型

notion image
 

integer

notion image
 

练习

自动装箱和自动拆箱

notion image
 

日期类

SimpleDateFormat

 

练习

 

Calendar

  • Calendar为某一时刻和一组日历字段之间的转换提供了一些方法
  • Calendar提供了一个类方法getinstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化
    • notion image
 

练习

 

异常

概述

notion image
 

JVM默认处理方法

  • 程序出现问题没有处理,JVM会做默认的处理
    • 把异常名称,状态和一场出现的位置等信息输出在控制台
    • 程序停止执行
 

异常处理 try-catch

notion image
 

Throwable的成员方法

notion image
 

异常处理 throws

notion image
 

throw和throws的区别

notion image
 

练习

 

集合体系结构

Collection

  • 提供一种存储空间可变的存储模型,存储的数据容量可以随时改变
 

集合类体系结构

notion image
 

集合概述和使用

  • Collection集合概述
    • 是单例集合的顶层接口,表示一组对象,这些对象也称为Collection的元素
    • JDK不提供此接口的任何直接实现,它提供更具体的子接口实现
  • 创建Collection集合的对象
    • 多态的方式
    • 具体的实现类ArrayList
 

集合常用方法

notion image
  • 快速查看方法
notion image
 

集合遍历

  • iterator:迭代器,集合的专用遍历方法
    • iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator方法得到
    • 迭代器是通过集合的iterator方法得到的,依赖于集合存在
  • iterator中的常用方法
    • E next():返回迭代中的下一个元素
    • boolean hasNext():如果迭代有更多元素就返回true
 

练习

 

List

List集合概述和特点

  • List集合概述
    • 有序集合(也被称为序列),用户可以精确控制列表中每个元素的插入,可以通过整数索引访问元素,并搜索列表中的元素
    • 与Set集合不同,列表中允许有重复元素
  • List集合的特点
    • 有序:存储和取出的元素方向一致
    • 可重复:存储的元素可以重复
 

List集合的特有方法

notion image
 

练习

 

并发修改异常

  • 并发修改异常
    • ConcurrentModificationException
  • 产生原因
    • 迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判断预期修改值和实际修改值不一致
  • 解决方法
    • 用for循环遍历,用集合对象对应操作
 

Listlterator

notion image
 

增强for循环(简化遍历)

notion image
 

练习

 

常见数据结构

notion image
notion image
 
notion image
notion image
 

List集合的子类特点

  • List集合常用子类
    • ArrayList:底层数据结构是数组,查询快,增删慢
    • LinkedList:底层数据结构是链表,查询慢,增删快
 

子类练习

 

LinkedList集合的特有功能

notion image
 

Set

Set集合概述和特点

  • Set集合是接口,需要通过实现类创造对象
    • 不包含重复元素的集合
    • 没有带索引的方法,不能使用普通for循环遍历
 

哈希值

哈希值:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
  • public int hashCode():返回对象的哈希码值
  • 哈希值特点
    • 同一个对象多次调用hashCode方法返回的哈希值是相同的
    • 默认情况下,不同对象的哈希值不同,重写hashCode方法可以让不同对象哈希值相同
  • HashSet集合特点
    • 底层数据结构是哈希表
    • 对集合的迭代顺序不做任何保证,不保证存储和取出元素顺序一致
    • 没有带索引的方法,不能使用普通for循环遍历
    • 由于是Set集合,不包含重复元素

练习

  • LinkedHashSet集合概述和特点
    • 哈希表和链表实现Set接口,具有可预测的迭代顺序
    • 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
    • 由哈希表保证元素唯一,没有重复元素
  • TreeSet集合概述和特点
    • 元素有序,不是指存储和取出顺序,而是按照一定的规则进行排序,具体排序方法取决于构造方法
      • TreeSet():根据元素自然顺序排序
      • TreeSet(Comparator comparator):根据指定的比较器进行排序
    • 没有带索引的方法,不能使用普通for循环遍历
    • 由于是Set集合,不包含重复元素
  • 自然排序Comparable的使用
    • 存储学生对象并遍历,创建TreeSet集合使用无参构造方法
  • 结论
    • 用TreeSet集合使用带参构造函数
    • 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo方法
    • 重写方法时,一定要注意规则必须按照要求的主要条件和次要条件写
练习
 

泛型

notion image
 

泛型的好处

  • 例如创建collection集合,可以使用<String>限制参数类型,把运行时出现的问题在编译时指出
  • 避免了强制的类型转换
 

泛型类的定义格式

notion image
 

泛型方法

  • 泛型方法的定义格式:修饰符<类型> 返回值类型 方法名(类型 变量名)()
 

泛型接口

  • 泛型接口的定义格式:修饰符 interface 接口名<类型>{}
 

类型通配符

notion image
 

可变参数

  • 其中的a是数组,要求和可以使用增强for循环
  • 一个方法如果包含多个参数,要将可变参数放到最后
  • 可变参数又称为个数可变,用作方法的形参出现,那么方法的参数个数就是可变的
    • 格式:修饰符 返回值类型 方法名(数据类型…变量名){}
    • 注意事项:变量其实是一个数组,如果一个方法有多个参数,包含可变参数,可变参数要放在最后
  • 通过Array.asList创建的数组不能添加和删除元素,但是可以进行修改(list.set())
  • List集合可以有重复元素,增删改都不可以
  • set集合不能有重复元素,增删改也不允许
    • notion image
 

Map

Map集合的概述和泛型

  • 可以使用map.put方法添加元素到集合
  • 键和值要一一对应,键重复出现的时候,第二个值会覆盖第一个
    • notion image
 

Map集合的基本功能(方法)

notion image
 

Map集合的获取功能

notion image
Map集合遍历
 

练习

 

Collection

Collection的概述和使用

Collection是针对集合操作的工具类
 

练习

  • 模拟斗地主
  • 模拟斗地主升级版
 

IO流

notion image
 

File

File概述和构造方法

notion image
 

File类创建功能

notion image
  • 需要三,使用f.mkdir()方法时,需要目录存在,不然会显示创建失败,当目录不存在而需要创建的时候使用f.mkdirs()方法
  • 不能根据名字判断是文件还是文件夹
  • 当穿件目录时使用了创建文件夹的名字,就会创建名字为目录的文件夹,当创建文件时不能有重复姓名的文件夹存在
 

File判断和获取功能

notion image
  • 使用方法创建File对象数组的时候,可以用file对象进行判断和调用方法,可以进行排除路径名等操作,如下图的if(file,isFile())就是对其是否是文件进行判断,如果是就输出文件名,上一个方法无法调用
 

File类的删除功能

  • 打开所在文件位置从show in的Finder中打开
  • 删除目录时如果该目录下有内容,应该先删除内容才能删除目录
notion image
 

递归

  • 概述:从编程的角度来看,递归指的是方法定义中调用方法本身的现象
  • 把一个复杂问题转为一个与原问题相似的规模较小的问题来求解,只需少量的程序就可以描述出解题过程所需要的多次重复计算
  • 递归解决问题要找到的两个内容
    • 递归出口:否则会出现内存溢出
    • 递归规则:与原问题相似的规模较小的问题
 

练习

  • 递归求阶乘
  • 创建文件
    • pwd可以在终端查看路径
    • 使用f.createNewFile()时注意抛出异常
 

字节流

字节流写数据

notion image
 

字节流写数据的方式

notion image
 

字节流写数据的两个问题

  • 不同系统对换行的识别不同
实现换行
notion image
 

字节流写数据加异常处理

notion image
 

字节流读数据

读字节

notion image
 

读数组

 

练习

  • 复制文本文件
  • 复制图片

字节缓冲流

notion image
 

练习

  • 复制视频
 

字符流

notion image
 

编码表

notion image
notion image
notion image
notion image
notion image
 

字符串中的编码解码

notion image
 

字符流中的编码解码

notion image
 

字符流写数据的五种方式

notion image
notion image
 

字符流读数据的两种方式

notion image
  • 复制文本文件(改进版)
    • notion image
 

字符缓冲流

notion image
 

字符缓冲流的特有功能

notion image
练习
  • 复制文本文件(字符缓冲流特有方式)
 

练习

  • 复制文本文件
  • 文件集合相转
  • 点名器
 

IO流小结

  • 字节流
  • InputStream和OutputStream属于抽象类
    • notion image
      notion image
  • 字符流
    • notion image
      notion image
 

练习

  • 集合到文件(排序版)
  • 复制单级文件夹
  • 复制多级文件夹
 

复制文件异常

notion image
 

特殊操作流

标准输入输出流

notion image
标准输入流
标准输出流
notion image
 

打印流

notion image
 

字节打印流

 

字符打印流

notion image
 

练习

  • 打印文件(打印流版)
 

对象序列化

对象序列化流

notion image
notion image
 

对象的反序列化流

notion image
 

Properties

notion image

Properties作为Map集合的特有方法

notion image
 

Properties和IO流相结合的方法

notion image
 

练习

  • start类
  • 客户端
 

多线程

实现多线程

进程

正在执行的程序
  • 是每个系统进行资源分配和调用的独立单位
  • 每一个进程都有它自己的内存空间和系统资源
 

线程

  • 例如在记事本程序中,如果在输入过程中点开了设置,那就不能将设置页面放在一边的同时继续输入,只能将设置取消后输入,这是单线程
  • 扫雷程序中,游戏开始的时候点了第一步,但是时间不会等你点第二步,而是按照自己的程序运行,这是多线程
  • 线程:是进程中单个顺序控制流,是一条执行路径
    • 单线程:一个进程只有一条执行路径
    • 多线程:一个进程有多个执行路径
 

多线程的实现方式(声明Thread的子类)

  • 注意JDK版本,1.8的run()方法无效
    • notion image
  • 重写run()方法
  • 运行端
 

设置和获取线程的名称

notion image
  • MyThread类
  • 运行
 

线程优先级

notion image
 

线程控制

线程的生命周期

notion image
 

多线程的实现方式(声明实现一个Runnable接口的类)

notion image
  • MyRunnable类
  • 运行
 

线程同步

卖票案例

  • SellTicket类
  • 运行
 

卖票案例数据安全问题的解决

  • 为什么会出现问题(这也是我们判断多线程程序是否会有数据安全问题的标准)
    • 是否出现多线程环境
    • 是否有共享数据
    • 是否有多条语句操作共享数据
  • 如何解决多线程安全问题
    • 让线程没有安全问题的环境
  • 怎么实现
    • 把多条语句操作共享数据的代码锁起来,让任意时间只有一个线程执行
    • Java提供了同步代码块的方式解决
 

同步代码块

notion image
  • 出现只有单线程运行问题,将票数增加至一千的时候能看到其他线程,可能是cpu内存问题,当sleep放出同步模块运行的时候也能看到几条线程,具体原因不明
 

同步方法

notion image
 

线程安全的类

  • StringBuffer
    • 线程安全,可变的字符序列
    • 从版本JDK5开始,被StringBuilder代替,通常应该用StringBuilder类,它支持所有相同的操作,因为不执行同步而更快
  • Vector
    • 从Java2平台v1.2开始,该类改进了List接口,使其成为JavaCollectionFramework的成员,与新的集合实现不同,Vector被同步,如果不需要线程安全的实现,建议使用ArrayList代替Vector
  • Hashtable
    • 该类实现了一个哈希表,将键映射到值,任何非null对象都可以用作键或者值
    • 从Java2平台v1.2开始,该类进行了改进,实现了Map接口,使其成为JavaCollectionFramework的成员,与新的集合实现不同,Hashtable被同步,如果不需要线程安全的实现,建议使用HashMap代替Hashtable
 

Lock锁

虽然我们可以理解同步代码块和同步方法的锁对象问题,但是并没有直接看到在哪里上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock
  • Lock实现提供比使用synchronized方法和语句可以获得更广泛的锁定操作
    • void lock():获得锁
    • void unlock():释放锁
  • lock是接口不能直接实例化,采用实现类ReentrantLock实例化
    • ReentrantLock():创建一个ReentrantLock的实例
 

生产者消费者

notion image
 

练习

生产者和消费者案例
  • Box类
  • Producer类
  • Customer类
  • 运行
 

网络编程

网络编程入门

  • 网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换
 

网络编程三要素

notion image
 

IP地址

notion image
  • mac使用ifconfig查看本机IP地址
  • ping IP地址检查网络是否连通
  • 127.0.0.1:是回送地址,可以代表本机地址,一般涌来测试使用

InetAddress的使用

notion image
 

端口

notion image
 

协议

notion image
notion image
 

UDP通信程序

UDP通信原理

notion image
 

UDP发送数据

 

UDP接收数据

 

UDP通讯练习

发送端
接收端
 

TCP通讯程序

TCP通信原理

notion image
 

TCP发送数据

  • 运行会出错,未建立服务器,无法进行传送
 

TCP接收数据

 

TCP通讯练习

练习1 反馈
客户端
服务器
练习2 键盘输入
客户端
服务器
练习3 键盘输入并反馈,接收数据并写入文件
客户端
服务器
练习4 数据来源于文本文件,写入文本文件(上传文件)
客户端
服务器
练习5 在练习4的基础上进行反馈
  • 没结束会一直等待,建议使用结束标志,最好调用方法
客户端
服务器
练习6 在练习5的基础上,为每一个客户端开启一个线程
客户端
服务器
多线程
 

Lambda

函数式编程思想概括

  • 在数学中,函数就是有输入量,输出量的一套计算方案,也就是拿数据做操作,面对对象思想强调“必须通过对象的形式来做事情”,函数式思想则尽量忽略面向对象的复杂语法,强调做什么而不是以什么形式去做
 

体验Lambda表达式

 

Lambda表达式的标准格式

notion image
notion image
 

Lambda表达式的使用前提

  • 🈶️一个接口
  • 接口中有且只有一个抽象方法
 

Lambda表达式的练习

练习1
练习2 带参
练习3 双参数
  • 看具体实现的内容,不看名字
 

Lambda表达式的省略模式

  • 参数类型可以省略,但是有多个参数的情况下,不能只省略一个
  • 如果参数有且只有一个,小括号可以省略
  • 如果代码块的语句只有一条,可以省略大括号和分号,甚至是return

Lambda表达式的注意事项

  • 使用Lambda必须要有接口,并且要求接口中有且只有一个抽象方法
  • 必须有上下文环境,才能推导出Lambda对应的接口
    • 根据局部变量的赋值得知Lambda对应的接口:Runnable r = () → System.out.print();
    • 根据调用方法参数得知Lambda对应的接口:new thread(() → System.out.print()).start;
 

Lambda表达式和匿名内部类的区别

notion image
 

方法引用

方法引用符

notion image
 

Lambda支持的引用

  • 引用类方法
  • 引用对象的实例方法
  • 引用类的实例方法
  • 引用构造器
 

引用类方法

引用类方法,就是引用类的静态方法
  • 格式:类名::静态方法
接口
操作类
 

引用对象的实例方法

引用对象的实例方法,就是引用类中的成员方法
  • 格式:对象::成员方法
接口
操作类
 

引用类的实例方法

引用类的实例方法,就是引用类中的成员方法
  • 格式:类名::成员方法
接口
操作类
 

引用构造器

引用类构造器,就是引用构造方法
  • 格式:类名::new
接口
实现类
 

stream流

notion image
notion image
 

常见的生成方式

  • Collection体系的集合可以使用默认方法stream()生成流 defaultStream<E> stream()
  • Map体系的集合间的生成流
  • 数组可以通过Stream接口的静态方法of(T…values)生成流
 

常见的中间方法

notion image
  • filter
  • limit,skip
  • distinct
  • sorted
  • map
 

常见的终结方法

 

练习

 

Stream流的收集操作

notion image
 

反射

类加载器

类加载

notion image
notion image
 

类加载器

notion image
notion image
 

反射

概述

notion image
  • Java反射机制:是指在运行时去获取一个类的变量和方法信息,然后通过获取到的信息创建对象,调用方法的一种机制,由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展
 

获取class类的对象

notion image
 

反射获取构造方法并使用

notion image
 

反射获取成员变量并使用

notion image
练习
 

反射获取成员方法并使用

notion image
练习
 

练习

  • 我有一个ArrayList<integer>集合,现在想在这个集合中添加一个字符串数据
  • 通过配置文件运行类中的方法
  • Class.txt
  • text
 

模块化

概述

notion image
 

模块的基本使用步骤

notion image
 

模块服务的使用

notion image
notion image
Java(慕课)爬虫
bhddgt
bhddgt
一个普通的干饭人🍚
公告
type
status
date
slug
summary
tags
category
icon
password
🎉NotionNext 4.0即将到来🎉
-- 感谢您的支持 ---
👏欢迎更新体验👏