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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZooKeeper和Diamond有什么不同

本文主要是讨论下两个类似产品:ZooKeeper和Diamond在配置管理这个应用场景上的异同点。 Diamond,顾名思义,寄寓了开发人员对产品稳定性的厚望,希望它像钻石一样,提供稳定的配置访问。Diamond是淘宝网Java中间件团队的核…

零基础如何系统自学Python

零基础系统自学Python 学习前的准备 明确学习目标 Python 一共有两大版本,即 Python2 以及 Python3,Python2 已停止维护,强烈建议直接上手 Python3。Python 可以说是无所不能,主要有以下几大方向,建议选择自己感兴趣…

递归神经网络 (RNN) 及其变体 LSTM (长短期记忆) 和 GRU (门控循环单元)

递归神经网络(RNN, Recurrent Neural Networks)是一类用于处理序列数据的神经网络,特别适合于时间序列数据、语音、文本等连续数据的处理。RNN之所以独特,是因为它们在模型内部维持一个隐藏状态,该状态理论上可以捕获到…

【国产MCU】-CH32V307-SysTick中断与延时功能实现

SysTick中断与延时功能实现 文章目录 SysTick中断与延时功能实现1、SysTick介绍2、SysTick中断使用3、SysTick实现微秒和毫秒延时功能CH32V307的RISC-V内核控制器自带的一个64位可选递增或递减的计数器,用于产生SYSTICK异常(异常号:15),可专用于实时操作系统,为系统提供“…

LabVIEW高精度天线自动测试系统

LabVIEW高精度天线自动测试系统 系统是一个集成了LabVIEW软件的自动化天线测试平台,提高天线性能测试的精度与效率。系统通过远程控制测试仪表,实现了数据采集、方向图绘制、参数计算等功能,特别适用于对天线辐射特性的精确测量。 在天线的…

20 easy 70. 爬楼梯

//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 // // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? // // // // 示例 1: // // //输入:n 2 //输出:2 //解释:有两种方法可以爬到楼顶。 /…

uniapp H5 $el.querySelectorAll is not a function

在监听是否在可视区域遇到问题&#xff08;网页端&#xff09; 解决方案 <view class"container"> ...省略 业务代码... </view>参考 &#xff1a; https://blog.csdn.net/qq_18841969/article/details/134620559

ZJGSU 1737 链表

题目描述 请根据输入数据构造一个带头结点的单链表&#xff0c;链表结点的数据结构为struct node {int data; struct node *next;}&#xff0c;试设计算法&#xff1a;按递增次序输出单链表中各结点的数据元素&#xff0c;并释放结点所占用的存储空间。 要求&#xff1a;不允…

裸机编程的几种模式、架构、缺陷

目录 裸机编程模式/架构 1&#xff1a;初始化代码的编写 裸机编程模式/架构 2&#xff1a;轮询模式 裸机编程模式/架构 3&#xff1a;轮询加中断执行模式 裸机编程模式/架构 4&#xff1a;中断定时器主循环的前后台架构 裸机编程模式/架构 5&#xff1a;前后台 状态机架构…

常见的几种echarts类型

一&#xff1a;折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

Leetcode : 147. 对链表进行插入排序

给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的&#xff0c;每次只移动一个元素&#xff0c;直到所有元素可以形成一个有序的输出列表。 每次迭代中&#xff0c;插入排序只从输…

(科目三)简答题汇总

模块一 信息和计算机基础 一、简述信息的的特征 【记忆技巧】普传功夫真驾驶 普遍性&#xff1a;信息是无时不有的&#xff0c;无时不在的载体依附性:信息不能独立存在&#xff0c;必须有载体。价值性:同一则信息&#xff0c;对不同的人来说&#xff0c;价值不同。时效性:同…

【AIGC调研系列】在AIGC发展背景下数据标注领域的机会

数据标注领域拥抱AIGC的发展主要通过以下几个方面实现&#xff1a; 市场规模的快速增长&#xff1a;随着AIGC技术的应用和发展&#xff0c;特别是在数据标注领域&#xff0c;市场规模呈现出爆炸式增长。预计未来几年内&#xff0c;中国AIGC数据标注产业的市场规模将达到百亿量…

如何快速的搭建一个小程序

要快速搭建一个小程序&#xff0c;你可以按照以下步骤进行&#xff1a; 明确目标和需求&#xff1a;在开始搭建小程序之前&#xff0c;首先明确你的小程序的主要功能、目标用户以及希望实现的业务需求。这将帮助你更好地规划和设计小程序。选择小程序平台&#xff1a;根据你的…

【Leetcode】字符串 string 补充知识

有限状态机 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假…

windows 两个服务器远程文件夹同步,支持文件新增文件同步、修改文件同步、删除文件同步,根据文件大小和时间戳判断文件是否修改 python脚本

在Python中实现Windows两个服务器之间的文件夹同步&#xff0c;包括文件新增、修改和删除的同步&#xff0c;可以使用paramiko库进行SSH连接以及SFTP传输&#xff0c;并结合文件大小和时间戳判断文件是否发生过变化。以下是包含删除文件同步逻辑的完整脚本示例&#xff1a; im…

二十五、剖析HashMap

剖析HashMap 本文为书籍《Java编程的逻辑》1和《剑指Java&#xff1a;核心原理与应用实践》2阅读笔记 1.1 Map 接口 Map是映射&#xff0c;有键和值的概念&#xff0c;映射表示键和值之间的对应关系&#xff0c;一个键映射到一个值&#xff0c;Map按照键存储和访问值&#x…

leetcode 3.5

普通数组 1.最大子数组和 最大子数组和 前缀和pre 动态规划 pre保留的是当前包含了当前遍历的最大的前缀和&#xff0c;如果之前的pre 对结果有增益效果&#xff0c;则 pre 保留并加上当前遍历, 如果pre 对结果无增益效果&#xff0c;需要舍弃&#xff0c;则 pre 直接更新为…

贝叶斯树定义与构建的寻行数墨

Title: 贝叶斯树定义与构建的寻行数墨 —— Notes for “The Bayes Tree: An Algorithmic Foundation for Probabilistic Robot Mapping” 文章目录 I. 前言II. 贝叶斯树的定义1. 贝叶斯树的背景2. 贝叶斯树的特点3. 贝叶斯树的定义 III. 贝叶斯树的构建1. 贝叶斯树的构建算法2…

CTP-API开发系列之接口对接准备

CTP-API开发系列之接口对接准备 CTP-API开发系列之接口对接准备CTP-API文件清单CTP-API通用规则命名规则Spi与Api CTP-API通讯模式开发语言选择 CTP-API开发系列之接口对接准备 CTP-API文件清单 文件名说明ThostFtdcTraderApi.h交易接口&#xff0c;C头文件&#xff0c;包括 …