Java知识回顾-基础知识(3)

北城以北 提交于 2020-08-13 08:55:58

1.异常

img

  • Error/错误, 是程序无法处理的错误,通常和代码执行者的操作无关,在应用程序的控制和处理能力之外

  • Exception/异常, 是程序本身可以处理的异常

    RuntimeException是Exception的一个重要子类,由jvm抛出

  • 异常能被程序本身处理,而错误无法处理

Throwable 常用的方法

public String getMessage()返回异常发生时的简要信息

public String toString() 返回异常发生时的详细信息

public void printStackTrace() 在控制台打印Throwable对象封装的一场新
  • 异常处理

使用try-catch-finally来扑获异常

try语句 用来扑获异常,后边可以0个或者多个catch块, 如果没有catch块则必须根一个finally

catch语句 用来处理try扑获到的异常

finally 语句 无论是扑获/处理异常,finally的语句都会被执行,当try或者catch中有return语句 ,finally的语句块将在方法返回前执行,如果finally中也有return 语句 则会覆盖 try/catch中的return

  • finally不执行:
1,在finally语句块的第一场发生异常

2,在finllay语句之前发生了System.exit(int),程序退出. 如果该System.exit是在异常豫剧之后,则会执行finally

3,程序所在的线程死亡

4 关闭cpu

2.java序列化时,如果有些字段不想被序列化

使用transient关键字修饰 /该关键字只能修饰变量

使用键盘输入常用的两种方法

String s = new Scanner(System.in).nextLine();
String s = new BufferedReader(new InputStreamReader(System.in)).readLine()
  1. I/O 流

按照流的方向: 输入流/输出流

按照操作单元划分: 字节流/字符流

按照流的角色划分: 节点流/处理流

InputStream/OutputSteam 字节输入/输出流

Reader/Writer 字符输入/输出流

音频/图片等媒体文件 使用字节流比较好

字符文件 使用字符流较好

  1. BIO/NIO/AIO

BIO Blocking I/O 同步阻塞I/O模式,数据的读写阻塞在一个线程内等待完成,在活动连接数较小时,可以使用,使用Socket/ServerSocket套接字通道实现

NIO Non-Blocking/NEW I/O 同步非阻塞I/O模式,也叫新I/O,使用了SocketChannel/ServerSocketChannel套接字通道实现

AIO Async-Blocking I/O 异步阻塞I/O模式 用的很少

5,this/super/static 关键字

this 表示当前对象的引用

super 用来调用父类的方法/变量,构造方法中使用super(参数列表)调用父类构造方法完成初始化,普通方法中使用super.方法()调用父类方法

使用super.变量名 调用父类的变量

static 关键字主要有以下四种使用场景:

  1. 修饰成员变量和成员方法: 被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。被static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区域的方法区。调用格式:类名.静态变量名 类名.静态方法名()
  1. 静态代码块: 静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 该类不管创建多少对象,静态代码块只执行一次.
  1. 静态内部类(static修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法
  1. 静态导包(用来导入类中的静态资源,1.5之后的新特性): 格式为:import static 这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法。
  1. Coolictions工具类
  • 排序操作

    void reverse(List list)//反转
    void shuffle(List list)//随机排序
    void sort(List list)//按自然排序的升序排序
    void sort(List list, Comparator c)//定制排序,由Comparator控制排序逻辑
    void swap(List list, int i , int j)//交换两个索引位置的元素
    void rotate(List list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。
    
  • 查找,替换操作

int binarySearch(List list, Object key)//对List进行二分查找,返回索引,注意List必须是有序的
int max(Collection coll)//根据元素的自然顺序,返回最大的元素。 类比int min(Collection coll)
int max(Collection coll, Comparator c)//根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素。
int frequency(Collection c, Object o)//统计元素出现次数
int indexOfSubList(List list, List target)//统计target在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替换旧元素

Collections提供了多个synchronizedXxx()方法·,该方法可以将指定集合包装成线程同步的集合,从而解决多线程并发访问集合时的线程安全问题,但是不建议使用,性能低下,建议使用JUC下的线程安全集合

  • Arrays类的常见操作
  1. 排序 : sort()
  2. 查找 : binarySearch() 排序后再进行二分查找,否则找不到
  3. 比较: equals()
  4. 填充 : fill()
  5. 转列表: asList()
  6. 转字符串 : toString()
  7. 复制: copyOf()

7 .深拷⻉ vs 浅拷⻉

  1. 浅拷贝: 对基本类型进行值传递,对引用类型进行引用传递的拷贝
  2. 深拷贝: 对基本类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!