1 Star 0 Fork 0

ace.kevin / StudyNotes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Java学习.md 6.63 KB
一键复制 编辑 原始数据 按行查看 历史
ace.kevin 提交于 2021-12-02 15:14 . 初始化笔记仓库

image-20211125092355761

image-20211125095246881

java.io

从方向上来分类

输入流:数据源到程序(InputStream、Reader读进来)

输出流:程序到目的地(OutputStream、Writer写出去)

从功能分类:

节点流:可以直接从数据源或目的地读写

处理流(包装流):不直接链接数据源或目的地,是其他流进行封装,主要是简化操作或提高性能。

节点流是io操作的第一线,所有操作必须通过他们进行。

处理对象

字节流:按照字节读取数据(InputStream、OutputStream),底层是基于字节流

字符流:按照字符读取数据,Reader、Writer,因为文件编码不同,有了对字符进行高效操作的字符流对象。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

序列化理解

序列化也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象。

需要实现2个接口:

void Serialize(Stream stream,object o) 把对象序列化到流中

object Deserialize(Stream stream) 把流反序列化成对象

注解和反射

内置注解

@Override

@Deprecated 定义在Java.lang.Deprecated中,此注解可以用于修饰方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为他很危险或者存在更好的选择。

@SupressWarnings: 定义在java.lang.SupressWarnings中,用来抑制编译时的警告信息。

@SupressWarnings("all")
@SupressWarnings("unchecked")
@SupressWarnings(value={"unchecked", "deprecation"})

元注解

负责注解其他注解,java定义了4个标注的meta-annotation类型,用来提供对其他annotation做说明。

元注解及其支持的类在java.lang.annotation包中可以找到

  • @Target:用于描述注解的适用范围(即注解可以使用在什么地方)
  • @Retention:表示需要在什么级别保存该信息,用于描述注解的生命周期(RUNTIME> CLASS > SOURCE)
  • @Document :表示该注解将被包含在javadoc中
  • @Inherited:说明子类可以继承父类中的该注解

自定义注解

@interface 自定义注解,自动继承了java.lang.annotation.Annotation

  • 其中每一个方法实际上声明了一个配置参数。方法的名称就是参数名称;返回值的类型就是参数的类型(返回值只能是基本类型:Class、String、enum);可以通过default来声明参数的默认值
  • 如果只有一个参数成员,一般参数名为value
  • 注解元素必须要有值,定义注解元素时,经常使用空字符串,0作为默认值

反射机制

反射机制概述

Java是静态语言,但是可以成为“准动态语言”,即Java具有一定的动态性,可以利用反射机制获得类似动态语言的特征,Java的动态性让Java编程更加灵活,但是牺牲了效率和安全性

Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

Class c = Class.forName("java.lang.String")

image-20211127222448080

image-20211127222501067

Java反射机制提供的功能:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时获取泛型信息
  • 在运行时调用任意一个对象的成员变量和方法
  • 在运行时处理注解
  • 生成动态代理
  • 。。。

有点:动态创建对象和编译,体现出灵活性

缺点:

主要API

image-20211128100709192

image-20211128102756003

image-20211128102854052

image-20211128104049440

image-20211128104306111

image-20211128105404684

image-20211128110326001

image-20211128110337903

image-20211128110355758

image-20211128112815635

image-20211128112744934

类的初始化

image-20211128112914985

理解Class类并获取Class实例

类的加载ClassLoader

创建运行时类的对象

获取运行时类的完整结构

调用运行时类的指定结构

img

img

java核心库 rt.jar

双亲委派机制,的确是防止同名包、类与 jdk 中的相冲突,实际上加载类的时候,先通知 appLoader,看 appLoader 是否已经缓存,没有的话,appLoader 又委派给他的父类加载器(extLoader)询问,看他是不是能已经缓存加载,没有的话,extLoader 又委派他的父类加载器(bootstrapLoader)询问,BootstrapLoader看是不是自己已缓存或者能加载的,有就加载,没有再返回 extLoader,extLoader 能加载就加载,不能的话再返回给 appLoader 加载,再返回的路中,谁能加载,加载的同时也加缓存里。正是由于不停的找自己父级,所以才有 Parents 加载机制,翻译过来叫 双亲委派机制。

img

img

img

img

img

img

name.setAccessible(true);

## 反射操作泛型

img

img

img

其他
1
https://gitee.com/acekevin/StudyNotes.git
git@gitee.com:acekevin/StudyNotes.git
acekevin
StudyNotes
StudyNotes
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891