目录

1.异常

1.1运行器异常

1.2编译器异常

1.3处理异常

try...catch

throws

throw

1.4自定义异常

2.枚举

3.泛型

3.1泛型类

3.2泛型方法

4.常用API

Date日期类

Math数学类

Random随机类

BigDecimal

BigInteger

StringBuffer与StringBuilder

System系统类

5.多线程

5.1线程的生命周期

5.2线程的创建方式

继承Thread类

实现Runnable接口

实现Callable接口

线程池

5.3锁

synchronized同步锁

ReentrantLock锁

5.4线程的常用方法

5.5线程的优先级

5.6线程通信

6.集合框架

6.1Collection接口

List

Set

6.2Map接口

HashMap

6.3集合的遍历

List集合遍历

Set集合遍历

Map集合遍历

7.IO流

7.1File类

7.2输入输出流

序列化与反序列化

8.Socket通信

9.JDK

9.1JDK5

9.2JDK7

9.3JDK8

9.4JDK10

9.5JDK13

注解和反射

正则表达式

面试题


1.异常

  • 最顶级的异常类:Throwable

    • 错误(Error):无法处理的错误,只能去修改源代码。

      • 错误一般情况下不会遇见
    • 异常最顶级的父类(Exception)

1.1运行器异常

在运行时抛出的异常

英文 中文
NullPointerException 空指针异常
ArithmeticException 除数为0异常
IndexOutOfBoundsException 下标越界异常

1.2编译器异常

写代码的时候出现的异常

英文 中文
IOException IO异常
FileNotFoundException 文件未找到异常

1.3处理异常

try...catch

  • try{// 有可能出现异常的代码
    }catch{// 出现异常时要执行的代码// 打印值栈信息e.printStackTrace();// 获取异常信息System.out.println(e.getMessage());
    }finally{// 一定会执行的代码——无论是否出现异常
    }
    
  • catch用法:

    • catch可以有多个
    • catch中捕获异常要有顺序,先捕获小的,后捕获大的
    • catch括号中写的是一个异常对象,这个异常对象在出现相应的异常时被实例化
  • finally的说明:

    • 无论是否出现异常,finally里的代码块都会执行
    • 一般情况下,我们写在finally中的代码都是类似释放资源的操作

throws

  • 抛异常通常是使用在方法的声明处。

  •     public static   void a1 () throws  Exception{}
    
  • 如果在方法的声明处抛出了异常,在方法的调用处需要进一步处理

    • throws
    • try...catch

throw

  • 人为的抛出一个异常

  •     public static   void a1 () {int i=10;if (i<10){throw new RuntimeException("i的值不合法");}}
  • 如果人为的抛出一个运行器异常——在调用方法时不需要做进一步处理

  • 如果抛出的是一个编译器异常——在方法声明处也需要进行异常的throws,在调用方法处也需要进一步处理

    •     public static void main(String[] args) throws Exception {a1();}public static   void a1 () throws Exception {int i=10;if (i<10){throw new Exception("i的值不合法");}}
      

1.4自定义异常

  • 创建一个类继承Exception或者继承RuntimeException即可

    • 如果继承的是Exception,我们自定义的异常就是编译器异常
    • 如果继承的是RuntimeException,我们自定义的异常就是运行器异常

2.枚举

  • 用来存储有限个数对象的类——枚举

  • 枚举中的对象都是静态final,枚举类中的构造器都是私有的(private)。

  • public enum  Season {SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎"),AUTUMN("秋天","秋高气爽"),WINNER("冬天","凛冬将至");private  String name;private  String desc;Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}
    }
    
  • 枚举在switch...case中的应用,在JDK5以后

3.泛型

  • 类型参数化
  • 泛型只能是引用数据类型

3.1泛型类

public class Season<T>{}
  • 泛型类的泛型在实例化时确定
  • 继承泛型类时
    • 子类可以不是泛型类
    • 子类有自己的泛型时,父类也有自己的泛型时,他们之间毫无瓜葛
    • 子类在继承父类时,之间继承了父类的泛型,在声明子类时,直接指定父类的泛型

3.2泛型方法

public <E>E show(E t){return t;
}
  • 泛型方法的泛型在传参时确定

4.常用API

Date日期类

  • Date
  • SimpleDateFormat
  • Instant
  • LocalDateTime
  • LocalDate
  • LocalTime
  • DateTimeFormat
  • Calendar

Math数学类

  • ceil——向上取整,返回值是double类型
  • floor——向下取值,返回值是double类型
  • round——四舍五入,返回值是整型(int,long)
  • random——生成一个0~1的随机小数
  • 所有方法都是静态

Random随机类

  • 生成一个伪随机数

BigDecimal

  • 大统计类型,一般情况下在开发中,涉及金额的计算,都用这个

    • 比较推荐使用compareTo方法

    •     BigDecimal bigDecimal = new BigDecimal("123");BigDecimal bigDecimal1 = new BigDecimal("123");System.out.println(bigDecimal.compareTo(bigDecimal1));
      
    • 注意——在构建BigDecimal时,尽量使用new BigDecamal(String str)

BigInteger

  • 范围:很大——比double还大

StringBuffer与StringBuilder

  • 比较重要的方法

    • append——追加
    • reverse——反转
  • 三个字符串的区别
    • String一旦声明不可改变,其他两个是可以改变的
    • StringBuffer是JDK1.0存在,线程安全
    • StringBuilder是JDK5推出,线程不安全

System系统类

  • 比较重要的方法

    • currenttTimeMills:获取当前系统的毫秒数
    • getProperty(String name):获取系统对应的属性值

5.多线程

5.1线程的生命周期

  • 新建
  • 就绪
  • 运行
  • 阻塞
  • 死亡

5.2线程的创建方式

继承Thread类

  • 重写run方法,调用start方法来启动线程

实现Runnable接口

  • 重写run方法,把当前的实现类包装成Thread类对象,调用start方法

实现Callable接口

  • 重写call方法,把当前的实现类先包装成Runnable,在包装成Thread类,再调用start方法

线程池

  • 开发中,基本上涉及到线程池,一定会用线程池。
  • 但是不会用JDK提供的线程池(阿里规约的约定)。——一般会自定义线程池

5.3锁

synchronized同步锁

同步监视器
同步代码块 类对象,第三方的对象
同步方法 实例对象

ReentrantLock锁

  • Lock锁
  • Lock与synchronized的区别:
    • Lock是手动上锁,手动解锁
    • synchronized是全自动【不能控制的很好】

5.4线程的常用方法

  • sleep:线程休眠
  • interrupr:线程中断
  • join:线程加入
  • yield:释放CPU执行权

5.5线程的优先级

  • 整型【1~10】

5.6线程通信

  • wait线程等待
  • notify:唤醒下一个正在等待的线程
  • notifyAll:唤醒所有等待的线程
  • 死锁:互相拿着对方的资源不放手

6.集合框架

6.1Collection接口

  • 存放单值的最大父接口

List

  • 特点:数据是按照添加的先后顺序来排序,数据是可以重复的

ArrayList

  • 内部结构是数组——有下标,而且比较适合于查询,不适合做频繁的增删
  • Vector:早期的集合类——和ArrayList的区别
    • Vector是线程安全,效率低
    • ArrayList是线程异步,效率高

LinkedList

  • 内部结构是双向链表——没有下标,不适合用来查询,增删的效率较高

Set

  • 存储数据的特点——数据没有按照添加的先后顺序来排序,数据不可以重复。
  • Set集合如何保证数据的唯一性——通过重写hashCode与equals方法

HashSet

哈希表。

  • 内部结构是HashMap。

TreeSet

  • 可以排序的Set集合
  • 排序方式
    • 自然排序——实现Comparable接口,重写compareTo方法。
    • 定制排序(临时排序)——实现Comparator接口,重写compare方法。

6.2Map接口

  • 存放对值的最大父接口。(K,V)
  • key是不能重复的
  • value是可以重复的
  • map集合也是无序的,不按照添加的先后顺序来排序的

HashMap

  • 内部结构:

    • JDK7之前是数组+链表
    • JDK8以后是数组+链表+红黑树
  • 常用方法
    • put:赋值
    • get:取值

6.3集合的遍历

List集合遍历

        // 1.for循环for (int i = 0; i < list.size(); i++) {}// 2.增强for循环for (String s : list) {}// 3.迭代器Iterator<String> iterator = list.iterator();while (!iterator.hasNext()){System.out.println(iterator.next());}

Set集合遍历

        // 1.增强for循环for (String s : set) {}// 2.迭代器Iterator<String> iterator = set.iterator();while (!iterator.hasNext()){System.out.println(iterator.next());}

Map集合遍历

        // 1.使用keySet先拿到所有的key,再根据key去拿valueSet<String> keys = map.keySet();for (String key : keys) {System.out.println(key+"->"+map.get(key));}// 2.使用内部类Entry--------推荐使用Set<Map.Entry<String, String>> entries = map.entrySet();entries.forEach(System.out::println);

7.IO流

组织架构

InputStream OutputStream Reader Writer
File~ File~ File~ File~
Buffered~ Buffered~ Buffered~ Buffered~

7.1File类

  • File类只能操作文件,不能操作文件的内容

7.2输入输出流

  • 输入(读):把磁盘上的内容读取到内存中
  • 输出(写):把内存中的数据写出到硬盘上
  • 注意
    • 字节流可以操作二进制文件(所有文件)
    • 字符流只能存在纯文本文件(.java .py .txt【只能写字的文件】)
  • 关闭流:把关闭流的操作放在finally中。

序列化与反序列化

  • 序列化:把一个对象按照某种规则以及某个版本号保存到硬盘上的某个文件,一个对象对应一个文件

  • 反序列化:把一个文件根据某种规则以及当时序列化的版本号来读取对象,读取到内存中

  • 如何实现序列化的操作

    • 实现序列化的Serializable接口

    • 添加一个序列号

    •     private static final long serialVersionUID = 7523967970034938905L;
      

8.Socket通信

  • TCP与UDP的区别

    • TCP是可靠的传输,再传输数据之前必须建立可靠的连接,效率低
    • UDP是不可靠的传输,在传输数据时无需建立可靠的连接,效率高
  • IP,端口号,请求,响应,请求体,响应体,响应头,URL

9.JDK

9.1JDK5

  • 增强for循环
  • 枚举
  • 泛型
  • 包装器
  • 自动装箱和自动拆箱
  • Callable接口
  • switch...case可以使用枚举
  • StringBuilder

9.2JDK7

  • 类型推断——实例化泛型类时泛型类的构造器的泛型不用写
  • try中可以创建对象
  • switch...case支持String

9.3JDK8

  • 函数式接口
  • 箭头函数【lambda表达式】
  • 断言(Junit)
  • 接口的改变
    • 放默认方法
    • 放静态方法
  • HashMap内部结构(数组+链表+红黑树)
  • Stream流式编程

9.4JDK10

  • 类型推断(定义变量可以用var)

9.5JDK13

  • 文档字符串

注解和反射

  • 反射获取

    • 类的方法
    • 类的属性
    • 类的构造器

正则表达式

面试题

  1. throw和throws的区别

    1. throw——人为抛出一个异常
    2. throws——被动(让JVM去处理)抛出一个异常
  2. finally和finalize的区别
    1. finally——是异常处理的一个结构,放在finally中的代码无论是否出现异常都会执行
    2. finalize——是Object类的一个方法,用来垃圾回收的方法,JDK9已过时
  3. 编译器异常和运行器异常的区别
    1. 编译器异常在写代码时期抛出的异常,如果不处理,编译不通过
    2. 运行器异常只要不运行,就不会报错
  4. HashMap与Hashtable的区别
    1. HashMap是线程不安全,效率高,key值可以为null
    2. Hashtable是线程安全,效率低,key值不可以为null

2022.08.12 第三组 高小涵相关推荐

  1. 2022.08.10 第三组 高小涵

    目录 JavaSE总结: 1.数据类型 1.1基本数据类型 1.2引用数据类型 1.3变量的声明 2.运算符 3.条件判断语句 4.循环语句 4.1for循环 4.2while循环 4.3do...w ...

  2. 2022.08.15 第三组 高小涵

    目录 Mysql数据库 数据库 Mysql 基本操作 表 SQL语言 SQL分类 DCL(数据库控制语言) DDL(数据定义语言) DML(数据操作语言) Mysql数据库 数据库 数据库[按照数据结 ...

  3. 2022.08.03 第三组 高小涵

    锁: 1.synchronized(重量级锁)多线程并发编程.          JDK1.6为了减少获得锁和释放锁带来的性能消耗引入的偏向锁和轻量级锁. 拓展:  1.无锁:不加锁          ...

  4. 【总结】最系统化的CV内容,有三AI所有免费与付费的计算机视觉课程汇总(2022年12月)...

    欢迎大家关注有三AI的计算机视觉课程系列,我们的课程系列共分为5层境界,内容和学习路线图如下: 第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用等. 第2层: ...

  5. 【总结】有三AI所有原创GAN相关的学习资料汇总(2022年12月)

    GAN的研究和应用在这几年发展可以说是非常迅猛,无疑是这几年深度学习计算机视觉领域里落地性最酷的技术之一,包括图像与视频生成,数据仿真与增强,各种各样的图像风格化任务,人脸与人体图像编辑,图像质量提升 ...

  6. 第14届蓝桥杯STEMA测评真题剖析-2022年12月18日Scratch编程初中级组

    [导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第109讲. 蓝桥杯选拔赛现已更名为STEMA,即ST ...

  7. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  8. 基因编辑相关最新研究进展(2022年12月)

    [1]西湖大学马丽佳团队开发新型CRISPR脱靶和DNA易位检测工具 2022-12-15报道,2022年12月12日,西湖大学生命科学学院马丽佳团队在 Nature Communications 期 ...

  9. 2022年山东省中职组“网络安全”赛项比赛任务书-2

    2022年山东省中职组"网络安全"赛项 比赛任务书-2 一.竞赛时间 总计:360分钟 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180 ...

最新文章

  1. 汇编语言--BIOS和DOS中断例程
  2. 河南大学生带着捡来的妹妹求学12年
  3. 如何设置mysql让其他人能访问_怎么配置MySQL数据库让别人远程访问
  4. php静态方法场景,深入介绍PHP中的static的修饰方法和yield的使用场景
  5. 英语在线听力翻译器_仁爱版初一英语免费听力训练电子教程
  6. 什么是java构造函数_什么是java构造函数
  7. .net中如何发送HTTP请求网络资源
  8. 雷电3接口能干嘛_acasis阿卡西斯推出首款雷电3接口WIFI6网卡:内置Intel AX200
  9. vue动态点击切换css样式且子元素动态显示和隐藏
  10. 字节跳动智能创作实验室-图像团队2022秋招正式批开启
  11. 数据意识崛起,从企业应用看BI软件的未来发展 1
  12. 数据库字典收集整理,设计数据表时可拿来查考
  13. 心跳包、乒乓包、SO_KEEPLIVE
  14. 垃圾收集器GC中parallel scavenge收集器为什么不能CMS配合使用?
  15. 图像风格迁移cvpr2020_浅谈风格迁移(二)任意风格迁移
  16. web安全之--UrlRewrite
  17. VS2022的下载和使用
  18. C语言编译时产生的警告:initializing ‘char *‘ with an expression of type ‘const char *‘ discards qualifiers
  19. 使用PS制作圆角图片
  20. 生活修行_身体心灵修行

热门文章

  1. 新手必看:访问url到加载全过程详解(看完不会我吃shi)
  2. 安全工具checksec.sh
  3. ocp跟oce的区别 oracle_六种角度看OCA与OCP、OCM区别
  4. 果快服务器维护中 稍后再试,维护中什么意思?服务维护中是什么意思
  5. 用cxf开发一个可以被安卓调用的接口
  6. 小红书文案怎么编辑制作?小红书上的文案怎么做的?
  7. 关于RoboMaster2019新型能量机关的一些感想(大风车)
  8. hdu 2066 一个人的旅行(最短路)
  9. python导出结果_Python连接Oracle数据查询导出结果
  10. 程序员应知必会的思维模型之 18 林纳斯定律 (Linus‘s Law)