Java知识点补缺

1、 java中方法的重写的两同两小一大原则

方法名相同

参数类型相同

子类返回类型小于等于父类方法返回类型,

子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限。

2、Class.forName(); 类.class; 对象.getClass();

Class.forName() 的形式会装入类并做类的静态初始化,返回 Class 对象。

类.class 的形式会使 JVM 将使用类装载器将类装入内存(前提是类还没有装入内存),不做类的初始化工作,返回 Class 对象。

getClass() 的形式返回运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象 。

 

getClass()是动态的,其余是静态的。

类.class和class.forName()只能返回类内field的默认值,getClass可以返回当前对象中field的最新值

Class.forName() 返回的是一个类, newInstance() 后才创建一个对象,Class.forName()的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的

参考:https://www.cnblogs.com/feiyun126/p/3229492.html

3、Java类加载的过程

当Java程序需要使用某个类时,如果该类还未被加载到内存中,JVM会通过加载、链接(验证、准备和解析)、初始化三个步骤来对该类进行初始化。

1、 加载:查找和导入Class文件

类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。

2、链接:其中解析步骤是可以选择的

a)检查:检查载入的class文件数据的正确性

b)准备:给类的静态变量分配存储空间

c)解析:将符号引用转成直接引用

3、初始化:对静态变量,静态代码块执行初始化工作

1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;

2)如果类中存在初始化语句,就依次执行这些初始化语句。

参考:https://blog.csdn.net/xuemengrui12/article/details/82707473

4、Java io流

按照流的流向:输入流和输出流。注意:这里的输入、输出是相对于内存而言的。

按处理数据单位不同分为字节流和字符流

字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码。

字符流:每次读取(写出)两个字节,有中文时,使用该流就可以正确传输显示中文。

按照流的角色划分为节点流和处理流

节点流:从或向一个特定的地方(节点)读写数据。如FileInputStream。

处理流(包装流):是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

参考:https://baijiahao.baidu.com/s?id=1659851047751244423&wfr=spider&for=pc

5、Java字节流与字符流的区别

字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的;

字符流在操作时使用了缓冲区,通过缓冲区再操作文件。

使用场景

字节流一般用来处理图像,视频,以及PPT,Word类型的文件。

字符流一般用于处理纯文本类型的文件,如TXT文件等。

字节流可以用来处理纯文本文件,但是字符流不能用于处理图像视频等非文本类型的文件。

Java IO 流的整体架构图:

参考:https://baijiahao.baidu.com/s?id=1659851047751244423&wfr=spider&for=pc

原文地址:https://www.cnblogs.com/yangms/p/13922281.html