Java 学习笔记 2022.01

216 阅读5分钟

学习记录

reference:

2022.01.30

学习 注解和反射 前半部分 (1-11集)

2022.01.30

学习 注解和反射 后半部分

2022.02.01

学习泛型

2022.02.02

学习mysql


临时的草稿

  1. 学会打断点,使用 debug 调试

  2. 学会用idea看 .class 文件

  3. 学会用idea看 类 的继承关系图 crt + h

  4. 学会生成 构造方法 快捷键

new 一个对象,本质是在调用构造器

路线:

JavaSE
常用类
集合框架
IO流
多线程
网络编程
GUI
注解和反射

Mac 操作 idea 快捷键

IDEA MAC 代码生成的快捷键 command+N

mac os中try catch快捷键 option+command+t

control+ enter 生成构造函数

Intellj Idea中查看类继承面板 www.jianshu.com/p/5e6bfc6a4…

option+commamd+v 生成方法内变量

shift+command+F 全局搜索

双击shift 搜索文件名

for循环 -- 输入:methods.for 回车:

        for (Method method : methods) {
            System.out.println(method);
        }

Command + Option + L 格式化代码


注解

内置注解

@Override

@Deprecated

@SuppressWarnings

元注解

作用:负责注解其它注解

@Target @Retention @Documente @Inherited

反射

反射机制允许程序在执行期间借助Reflection API获得任何类的内部信息,并能直接操作任意对象的内部属性及方法

对每个类而言,JRE都为其保留一个不变的Class类型的对象

掌握Class类的常用方法:ClassforName() getName() getSuperClass() getinterfaces() getClassLoader() getConstructors() getMethod() getDeclaredFields()

类加载内存分析 (?todo)

Java内存:堆 栈 方法区

核心:加载 -》 链接 -》 初始化

类加载器的作用

将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后在堆中生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口。

类加载器给用户最大的帮助在于可以通过动态的路径实现类的加载处理操作。

通过反射获取类的信息(属性 方法 构造器)

method, field, constructor 对象都有 setAccessible() 方法

通过反射创建对象:

- newInstance

- 可以通过构造器去new一个对象

TODO:反射操作泛型 (没看)

Java SE 其它

泛型

java 中泛型标记符:

E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的 java 类型

泛型方法能使方法独立类而产生变化

类型通配符 一般是用”?“代替具体的类型实参

类型擦除 (桥接方法-编译器做的,目的是保持接口和类的实现关系)

可以声明带泛型的数组引用,但不能直接创建带泛型的数组对象

TODO:第10集 以后 没看

数组

定义一个数组类型的变量,使用数组类型“类型[]”,例如,int[]。和单个基本类型变量不同,数组变量初始化必须使用new int[5]表示创建一个可容纳5个int元素的数组。

集合

什么是集合(Collection)?集合就是“由若干个确定的元素所构成的整体”。例如,5只小兔构成的集合

在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。很显然,Java的数组可以看作是一种集合:

String[] ss = new String[10]; // 可以持有10个String对象
ss[0] = "Hello"; // 可以放入String对象
String first = ss[0]; // 可以获取String对象

Java的集合类定义在java.util包中,支持泛型,主要提供了3种集合类,包括List,Set和Map。

Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合类的根接口。Java的java.util包主要提供了以下三种类型的集合:

- List:一种有序列表的集合,例如,按索引排列的StudentList;

- Set:一种保证没有重复元素的集合,例如,所有无重复名称的StudentSet;

- Map:一种通过键值(key-value)查找的映射表集合,例如,根据Student的name查找对应StudentMap

Java集合的设计有几个特点:一是实现了接口和实现类相分离,例如,有序表的接口是List,具体的实现类有ArrayList,LinkedList等,二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素

IO

区分 同步 异步。

IO流以byte(字节)为最小单位,因此也称为字节流。例如,我们要从磁盘读入一个文件,包含6个字节,就相当于读入了6个字节的数据

InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。(Reader,计算机去作为Reader,即阅读、输入) OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。 (Writer,计算机去作为Writer,即输出)

究竟使用Reader还是InputStream,要取决于具体的使用场景。如果数据源不是文本,就只能使用InputStream,如果数据源是文本,使用Reader更方便一些。Writer和OutputStream是类似的。

InputStream、OutputStream、Reader和Writer都是同步IO的抽象类,对应的具体实现类,以文件为例,有FileInputStream、FileOutputStream、FileReader和FileWriter。

File对象

在计算机系统中,文件是非常重要的存储方式。Java的标准库java.io提供了File对象来操作文件和目录。

TODO 有空再看吧 累了