1.请列举你所知道的各种异常(至少两种)?
2.常见的异常类型有哪些?
3.如何自定义异常?
4.包装类的常用方法有哪些?
5.int a=3,String b=“3”,请问a==b吗?
6.Java中的异常处理关键字是什么?
7.Java中throw和throws关键字有什么区别?
8.集合和数组的区别?
9.IO流的分类?
1.请列举你所知道的各种异常(至少两种)?
异常是指在程序运行过程中发生的意外情况,这些情况可能会阻止程序的正常执行。以下是一些常见的异常类型:
运行时异常:运行时异常通常是在程序执行期间由于程序本身的问题(例如数组越界、空指针访问等)引发的异常。这类异常一般是在代码的动态执行过程中发生的,因此也称为动态异常。
编译时异常:编译时异常是指在编译阶段无法通过编译器的检查而发现的异常。这类异常通常是由于代码中的语法错误、类型不匹配等问题引起的。编译器在编译时会检查这类异常,并阻止程序通过编译。
文件未找到异常:当程序尝试打开一个不存在的文件时,会引发FileNotFoundException异常。
数据库连接异常:当程序尝试连接到数据库时,如果连接失败(例如,由于网络问题、数据库服务器不可用等),会引发SQLException异常。
网络通信异常:在网络通信过程中,如果发生错误(例如,连接超时、数据传输中断等),会引发IOException异常。
空指针异常:当程序中存在空指针访问时,会引发NullPointerException异常。
类型转换异常:当程序试图将一个不兼容的数据类型转换为另一个数据类型时,会引发ClassCastException异常。
数组越界异常:当程序中存在数组越界访问时,会引发ArrayIndexOutOfBoundsException异常。
数字格式化异常:在将字符串转换为数字或执行其他数字格式化操作时,如果提供的字符串无法解析为有效的数字格式,会引发NumberFormatException异常。
2.常见的异常类型有哪些?
常见的异常类型主要包括运行时异常和编译时异常。
运行时异常通常是在程序执行期间由于程序本身的问题引发的,例如数组越界、空指针访问等。这类异常一般是在代码的动态执行过程中发生的,因此也称为动态异常。
编译时异常则是指在编译阶段无法通过编译器的检查而发现的异常。这类异常通常是由于代码中的语法错误、类型不匹配等问题引起的。编译器在编译时会检查这类异常,并阻止程序通过编译。
此外,常见的异常类型还包括文件未找到异常、数据库连接异常、网络通信异常、空指针异常、类型转换异常、数组越界异常、数字格式化异常等。这些异常通常在特定的编程场景中出现,例如文件操作、数据库操作、网络通信等。
对于这些异常,程序员应该进行适当的处理,例如使用try-catch语句块来捕获和处理异常,或者在程序中添加必要的错误检查和验证逻辑,以避免异常的发生。
3.如何自定义异常?
在Java中,自定义异常类需要继承自已有的异常类,可以是Java内置的异常类,也可以是用户自定义的异常类。自定义异常类需要遵循Java的异常处理机制,包括在方法中使用throw关键字抛出异常对象,在方法声明处使用throws关键字声明要抛出的异常类型,以及在方法调用者中使用try-catch语句块捕获并处理异常。
自定义异常类的创建步骤如下:
创建一个新的类,继承自已有的异常类(例如Exception或RuntimeException),并实现其构造方法。
在自定义异常类中添加必要的字段和方法,以便在抛出异常时提供更多的上下文信息。
在需要抛出异常的方法中使用throw关键字抛出自定义异常类的对象。
在方法声明处使用throws关键字声明要抛出的异常类型。
在方法调用者中使用try-catch语句块捕获并处理自定义异常类的对象。
需要注意的是,自定义异常类应该具有有意义的名称,能够准确地描述异常的情况,以便于阅读和理解代码。此外,根据需要,可以在自定义异常类中添加其他方法和字段,以便在抛出异常时提供更多的上下文信息。
4.包装类的常用方法有哪些?
包装类在编程中通常是指数据类型转换类,将基本数据类型转换为对象类型。以下是Java语言中包装类的常用方法:
自动装箱和拆箱:Java会自动完成基本类型到包装类的转换(自动装箱)和包装类到基本类型的转换(自动拆箱)。
构造函数:每个包装类都有多个构造函数,可以根据需要选择使用。例如,Integer类的构造函数可以接受一个整数参数、一个字符串参数(表示一个整数)或者一个字节参数(表示一个整数)。
getXXX()方法:用于获取包装类中存储的值。例如,Integer类的getInteger()方法可以获取整数值。
setXXX()方法:用于设置包装类中存储的值。例如,Integer类的setInteger()方法可以设置整数值。
equals()方法:用于比较两个包装类对象是否相等。例如,Integer类的equals()方法可以比较两个Integer对象是否相等。
toString()方法:用于将包装类对象转换为字符串。例如,Integer类的toString()方法可以将Integer对象转换为字符串表示形式。
需要注意的是,Java中还有一些其他的包装类方法,具体取决于特定的包装类类型。另外,以上是Java中常用的包装类方法,不同的编程语言中可能会存在差异。
5.int a=3,String b=“3”,请问a==b吗?
在Java中,int a = 3; 创建一个整数变量并赋值为3。而 String b = "3"; 创建一个字符串变量并赋值为"3"。
当我们使用 == 操作符来比较这两个变量时,实际上是比较它们的引用地址,而不是它们的内容。
对于整数,a == b 将会返回 false,因为它们指向两个不同的内存地址。
对于字符串,因为Java的字符串是不可变的,每个字符串对象都是新的对象。所以 "3" 和 "3" 实际上是两个不同的字符串对象,即使它们的值相同。因此,b == b 也会返回 false。
总结:在Java中,a == b 会返回 false。
6.Java中的异常处理关键字是什么?
在Java中,异常处理的关键字有以下几个:
try:用于捕获可能抛出异常的代码块。
catch:用于捕获并处理特定类型的异常。
finally:无论是否发生异常,finally块中的代码都会被执行。
throw:用于手动抛出一个异常。
throws:用于声明方法可能抛出的异常类型。
try-with-resources:用于自动关闭实现了AutoCloseable接口的资源。
这些关键字一起使用,可以帮助你更好地管理和处理程序中的异常情况。
7.Java中throw和throws关键字有什么区别?
在Java中,throw和throws都是异常处理的关键字,但它们的使用场景和功能是不同的。
throw关键字用于在代码中主动抛出一个异常。当程序中遇到一个错误条件,或者当某个操作不能正常完成时,可以使用throw关键字抛出一个异常对象。这个异常对象可以是一个内置的异常类,也可以是一个用户自定义的异常类。例如:
java if (someErrorCondition) { throw new Exception("An error occurred."); }
在这个例子中,当满足某个错误条件时,程序会抛出一个新的Exception对象。
throws关键字用于声明方法可能抛出的异常类型。当一个方法可能会抛出异常时,需要在该方法的声明中使用throws关键字来声明这个异常类型。这样做的目的是告诉调用者这个方法可能会抛出异常,调用者可以根据情况来处理这个异常。例如:
java public void someMethod() throws IOException { // Code that might throw an IOException. }
在这个例子中,someMethod()方法声明了可能会抛出IOException类型的异常。如果在实际代码中确实抛出了这个类型的异常,那么需要在方法体中使用throw关键字来抛出这个异常。
总结起来,throw和throws都是Java中处理异常的关键字,但它们的用途不同。throw用于主动抛出异常,而throws用于声明方法可能抛出的异常类型。
8.集合和数组的区别?
集合和数组是两种不同类型的数据结构,它们的主要区别如下:
存储数据的差异:数组既可以存储基本数据类型,又可以存储引用数据类型。基本数据类型存储的是值,引用数据类型存储的是地址值。而集合只能存储引用数据类型(对象)。
结构差异:数组的长度是固定的,一旦初始化,长度不能自动增长。相反,集合的长度是可变的,可以根据元素的增加而增加,减少而减少。
使用场景的差异:数组多用于元素个数是固定的场景,而集合多用于元素个数是不固定的场景。因为部分集合底层是数组实现的,首先会创建一个默认大小的数组,如果不够存储就会重新创建一个默认长度自增倍数的数组来存储,原数组就会变成垃圾,随着元素个数的增加,产生的数组垃圾就越多,浪费了内存。而数组只创建一个数组。所以如果元素个数固定,建议使用数组,元素个数不固定使用集合。
元素的存储方式:集合框架包含三块内容:对外的接口、接口的实现和对集合运算的算法。而数组无论是效率还是检查类型都是最好的。
综上所述,集合和数组的区别主要表现在数据的存储方式、结构、使用场景和元素的存储方式等方面。它们各自有其适用的场景,根据实际需求选择合适的数据结构可以提高程序的效率和性能。
9.IO流的分类?
IO流可以分为不同的类型,具体分类如下:
按流的方向分:输入流和输出流。输入流用于从数据源读取数据,而输出流则用于将数据写入到目标位置。
按处理数据单位不同分:字节流和字符流。字节流是按字节进行处理的流,而字符流则按字符进行处理。
按对手数据的处理方式分:节点流和处理流。节点流直接与程序连接,处理流则基于已存在的流(字节流或处理流)进行处理,提供更为强大的读写功能。
按数据传输方式分:缓冲流、转换流和对象流等。
以上是IO流的分类方式,实际使用时,应根据数据的类型和处理的逻辑选择合适的IO流类型。
前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。
介绍一款程序员都应该知道的软件JNPF 快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。
这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。
看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~