Java基础知识点

Java基础知识点

1.方法重载和重写的区别

方法重载:

  • 同一个类中的方法,方法名相同,返回值可以相同可以不同,参数列表必须不同
  • 发生在编译期,在编译期确定执行哪个方法

方法重写:

  • 指的是子类重新定义父类已经定义过的方法,方法的签名必须完全相同(包括返回值、方法名、参数列表)
  • 发生在运行期,是多态的体现

2.IO流中为什么要有字节流和字符流?

IO流中提供了一个直接操作字符的接口,方便我们对字符进行流操作

如果是音频文件、图片等媒体文件用字节流比较好

如果涉及到字符的话,比如说中文,使用字符流比较好

3.IO中的缓冲流知道吗?

IO中有字节缓冲流和字符缓冲流

它属于是设计模式中的装饰器模式,在不改变原有对象的情况下,来增强子类的功能

使用缓冲流,可以把数据加载至缓冲区,一次读取、写入多个字节,降低IO次数

使用缓冲流的作用主要体现在read()和write(int b),不带字节数组的方法的时候,使用缓冲流的话可以显著提高性能。

为什么会提高性能呢?其实就是缓冲流中自带的有缓冲区,缓冲区是一个字节数组,可以把读取、写入的字节先放到缓冲区,再一次性地进行IO,降低IO次数。

4.IO模型

IO模型分为:阻塞IO、非阻塞IO、IO多路复用

  • 阻塞IO:当用户进程发起read()请求,因为用户进程不能够直接访问内核空间,所以用户进程会阻塞等待,当内核经过准备数据、数据就绪、将数据从内核空间复制到用户空间,用户进程解除阻塞接收数据。

  • 在这里插入图片描述

  • 非阻塞IO:也是用户进程发起read()请求向内核要数据,如果内核没有返回数据的话,用户进程也不会阻塞,它会反复不断发起read()请求的调用。等待数据从内核拷贝到用户空间的时候,线程依旧是阻塞的,直到拷贝完成

  • 在这里插入图片描述

  • IO多路复用:IO多路复用模型中,线程先发起select请求,询问内核数据是否准备就绪,当数据准备就绪,线程会发起read()请求,数据从内核空间拷贝到用户空间仍然是阻塞的。

  • AIO:异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

  • 在这里插入图片描述

5.String

String为什么是不可变的?

答出来两点就好了:

  • 保存字符的字符数组是被final修饰的且为私有的,并且没有提供set方法。
  • String类是被final修饰的,避免了从子类进行破坏。

字符串常量池了解吗?

字符串常量池是一种池化技术,作用就是复用、减少空间消耗。

在JDK 1.7 之前位于堆上,之后位于直接内存。

在创建字符串的时候,会现在堆上找有没有相同的,有的话只需要在栈上创建引用,再指向常量池。

没有的话创建常量池,在栈上创建引用指向它。

6.反射了解吗?

反射的作用是赋予了在运行时动态获取类的方法和属性的能力,而且可以调用类的方法和属性。

平常我们写业务代码是很少用到反射的,但是在框架上反射用的很多

比如动态代理,注解也使用了反射机制

这就是基于反射分析类,在运行时拿到类上、方法上、参数上的注解信息。

再根据注解信息进行下一步的处理

7.获取class对象的四种方式

如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象:

1. 知道具体类的情况下可以使用:

Class alunbarClass = TargetObject.class;

但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化

2. 通过 Class.forName()传入类的全路径获取:

Class alunbarClass1 = Class.forName("cn.javaguide.TargetObject");

3. 通过对象实例instance.getClass()获取:

TargetObject o = new TargetObject();
Class alunbarClass2 = o.getClass();

4. 通过类加载器xxxClassLoader.loadClass()传入类路径获取:

ClassLoader.getSystemClassLoader().loadClass("cn.javaguide.TargetObject");

通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行


.loadClass(“cn.javaguide.TargetObject”);


通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行

------

著作权归JavaGuide(javaguide.cn)所有 基于MIT协议 原文链接:https://javaguide.cn/java/basis/reflection.html
  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值