Java基础知识点(反射、异常、IO流、变量...)
1|0Java基础知识点(反射、异常、IO流、变量...)
1|11.反射
Java反射机制是在运行状态下,对于**任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
反射的应用场所:反射是框架设计的灵魂
大量使用了动态代理,而动态代理的实现也依赖反射
Spring框架
-
将程序内所有 XML 或 Properties 配置文件加载入内存中
-
Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息;
-
使用反射机制,根据这个字符串获得某个类的Class实例;
-
动态配置实例的属性。
==优点==:在运行期间确定对象,绑定对象,操作对象,最大限度的发挥了Java的灵活性
==缺点==:反射会跳过类型检查等,导致安全问题。例如通过反射跳过泛型的编译前类型检查
总结:
业务代码中不建议使用Java反射
开发框架中一定会用到Java反射
1|22.Java异常
异常主要分为Error和Exception两种
-
Error类以及他的子类的实例,代表了JVM本身的错误---错误不能被程序员通过代码处理
-
Exception以及他的子类,代表程序运行时发送的各种不期望发生的事情。可以被Java异常处理机制使用处理,是异常处理的核心。
try{} catch{ } finally{}
的执行顺序:
-
先执行try中的语句,包括return后面的表达式;
-
有异常时,执行catch中的语句,包括return后面的表达式,无异常时跳过catch语句;
-
然后执行finally中的语句,如果finally里面有return语句,执行return语句,程序结束;
-
finally{}中没有return时,无异常时执行try中的return,如果有异常则执行catch中的return。前两步执行的return只是确定返回的值,程序并未结束,finally{}执行之后,最后将前两步确定的return的返回值返回。
Throws VS Throw
==区别一:==
throws:跟在方法声明后面,后面跟的是异常类名
throw:用在方法体内,后面跟的是异常类对象名
==区别二:==
throws: 可以跟多个异常类名,用逗号隔开
throw:只能抛出一个异常对象名
==区别三:==
throws:表示抛出异常,由该方法的调用者来处理
throw:表示抛出异常,由该方法体内的语句来处理
==区别四:==
throws:throws表示有出现异常的可能性,并不一定出现这些异常
throw:throw则是抛出了异常,执行throw一定出现了某种异常
1|33.IO流
IO流的作用是在==本地磁盘和网络上进行操作==
一般==文本文件==使用==字符流==来处理
一般==非文本文件==使用==字节流==来处理
I/O 是针对内存 in :硬盘—>内存
out:内存—>硬盘
InputStream:字节输入流
Reader:字符输入流
OutputStream:字节输出流
Writer:字符输出流
BIO:Blocking IO 同步阻塞IO模式,数据的读取写入必须阻塞在一个线程内等待其完成
NIO:Non-Block IO
1|44.Switch关键字
switch可以作用于char byte short int 以及他们的包装类,switch不可以用在long double float boolean上
JDK之后可以作用于枚举类,在JDK1.7之后,可以作用于String
1|55.Java语言采用何种编码方式
Java语言采用==Unicode==编码标准,它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。
1|66.static关键字
static关键字的主要用途就是方便在没有创建对象时调用方法和变量,优化程序性能
==static变量==
用static
修饰的变量被称为静态变量,也被称为类变量,可以直接通过类名来访问它。静态变量被所有的对象共享,在内存中只有一个副本,仅当在类初次加载时会被初始化,而非静态变量在创建对象的时候被初始化,并且存在多个副本,各个对象拥有的副本互不影响。
==static方法==
static
方法不依赖于任何对象就可以进行访问,在static
方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用,但是在非静态成员方法中是可以访问静态成员方法/变量的。
==static代码块==
静态代码块的主要用途是可以用来优化程序的性能,因为它只会在类加载时加载一次,很多时候会将一些只需要进行一次的初始化操作都放在static
代码块中进行。如果程序中有多个static
块,在类初次被加载的时候,会按照static
块的顺序来执行每个static
块。
1|77.无参构造器的作用
Java程序存在继承,在执行子类的构造方法时,如果没有用super()
来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。如果父类只定义了有参数的构造函数,而子类的构造函数没有用super
调用父类那个特定的构造函数,就会出错。
1|88.变量
成员变量 又称为 全局变量,可以分为类变量和实例变量
类变量 | 实例变量 | 局部变量 | |
---|---|---|---|
定义位置 | 类中,方法外(static) | 类中,方法外(无static) | 方法中 |
初始值 | 有默认初始值 | 有默认初始值 | 无默认初始值 |
存储位置 | 方法区 | 堆 | 栈 |
生命周期 | 类何时被加载和卸载 | 实例何时被创建及销毁 | 方法何时被调用及结束调用 |
1|99.值传递
Java只有值传递
-
传递基本数据类型,是用的值传递
-
传递对象,传递的是一个引用的副本,只是这个副本引用和原始的引用指向的同一个对象,所以副本引用修改过对象属性之后,通过原始引用查看对象属性肯定也是被修改过的。
1|1010.常用的Object方法
Object clone()
:创建与该对象的类相同的新对象
boolean equals(Object)
:比较两对象是否相等
void finalize()
:当垃圾回收器确定不存在对该对象的更多引用时,对象垃圾回收器调用该方法
Class getClass()
:返回一个对象运行时的实例类
int hashCode()
:返回该对象的散列码值
void notify()
:唤醒等待在该对象的监视器上的一个线程
void notifyAll()
:唤醒等待在该对象的监视器上的全部线程
String toString()
:返回该对象的字符串表示
void wait()
:在其他线程调用此对象的 notify()
方法或 notifyAll()
方法前,导致当前线程等待
1|1111.新建对象的方式
-
new 创建新对象、调用了构造函数
-
通过反射机制、调用了构造函数
-
采用clone机制、没有调用构造函数
-
通过序列化机制、没有调用构造函数
-
__EOF__

本文链接:https://www.cnblogs.com/CaiDingChao/p/16557965.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!