解决 Java 中的 IllegalArgumentException
本文将通过显示 java.lang.object
类中的 java.lang.IllegalArgumentException
类对异常层次结构进行分类。之后,我们将执行三个 Java 编码块来演示非法参数异常。
最后,我们将展示如何摆脱它们并解释如何自定义它们。
Java 中 IllegalArgumentException 类的层次结构
触发此异常是因为我们可能给 Java 函数提供了无效参数。此异常扩展了运行时异常类,如下图所示。
因此,Java 虚拟机运行时可能会触发一个异常。但是,要完全掌握它,请查看以下 Java 类:
-
java.lang.object
:类层次结构的根是 Class 对象。 -
java.lang.Throwable
:Throwable 类是所有 Java 错误和异常的超类。 -
java.lang.Exception
:扩展 Throwable 类,该类识别实际应用程序可能想要捕获的情况。 -
java.lang.RuntimeException
:运行时异常是 Java 虚拟机正常运行时可能产生的异常的超类。 -
java.lang.IllegalArgumentException
:抛出以通知向方法提供了非法或不适当的参数。
illegalargumentexception 的层次结构图。
Java 中的运行时异常与编译时异常
尽管大多数人都熟悉其中的区别,但许多人仍然不了解其简单性。
下表说明了 Java 中运行时和编译时错误/异常类型之间的区别。
编号 | 主题 | 运行时错误 | 编译时错误 |
---|---|---|---|
1 | 异常 | 在 JVM 的正常执行过程中抛出 | 当 Java 程序的语义规则被破坏时,JVM 会将这个错误作为一个异常抛给程序。 |
2 | 参考资料 | 类运行时异常 | 编译器异常 |
3 | 解决方案 | 在执行和识别代码之后。 | 在代码的开发过程中。 |
在 Java 中抛出并解决 IllegalArgumentException
下面的程序会抛出一个非法参数异常,因为我们不能在数组列表的初始容量中传递一个负值作为参数。
示例 1:
package com.IllegalAE.util;
import java.util.ArrayList;
import java.util.List;
public class Example1 {
public static void main(String[] args) {
List<String> demoList = new ArrayList<>(-1);
demoList.add("Red");
demoList.add("Blue");
demoList.add("Green");
System.out.println(demoList);
}
}
输出:
如果我们没有在初始列表容量中传递负值,例如:List<String> demoList = new ArrayList<>(1);
,我们会得到以下结果。
输出:
[RED, GREEN, BLUE]
示例 2:
首先,你应该注意 int a
的值是 1000,而 int b
的值是 0。
package com.IllegalAE.util;
//class
public class Example2 {
//main function
public static void main(String[] args) {
//constructor
Demo2 examp2 = new Demo2 ();
//add 2 numbers
System.out.println(" The total of A and B is: "+examp2.addTwoNums(10,5));
}
}
class Demo2 {
public int addTwoNums(int a,int b)
{
//if the value of b is less than the value of a (trigger IllegalArgumentException with a message)
if(b<a)
{
throw new IllegalArgumentException("B is not supposed to be less than "+a);
}
//otherwise, add two numbers
return a+b;
}
} //class
输出:
主函数包含通过构造函数传递的对象。由于 b
的值小于 a
,所以触发了非法参数异常。
如果我们像下面的代码一样滑动 int a
和 b
的值,
System.out.println(" The total of A and B is: "+examp2.addTwoNums(0,1000));
输出:
The total of A and B is: 15
你还可以查看下面的演示。
你可以设置非法参数条件以获取正确的用户输入并控制你的逻辑流程。
同样,Java 不允许我们通过传递非法参数来破坏方法。它是为了让用户编写干净的代码并遵循标准的做法。
另一个原因是避免可能危及代码块流的非法执行。
在 Java 中使用 Try
和 Catch
使用 Scanner 确定 IllegalArgumentException
编写程序结构以使用 try
和 catch
异常以及 Java 扫描程序类来确定非法参数异常。
以下是你需要首先考虑的几点:
-
理解
java.util.Scanner
类。Scanner mySc = new Scanner(System.in); int demo = mySc.nextInt();
请注意,上面的代码允许用户阅读 Java 的
System.in
。 -
try...catch
异常处理:try { //It allows us to define a block of code that will be tested for errors while it runs. } catch(Exception e) { //It enables us to create a code block that will be invoked if an error occurs in the try block. }
我们将能够使用
try...catch
方法来利用非法参数异常,并以适合我们的方式对其进行修改。
例子:
package com.IllegalAE.util;
import java.util.Scanner;
public class IllegalArgumentExceptionJava {
public static void main(String[] args) {
String AddProduct = "+";
execute(AddProduct);
}
static void execute(String AddProduct) {
//allows user to read System.in
//tries code block for testing errors
try (Scanner nxtLINE = new Scanner(System.in)) {
//to ignore user specified case consideration
while( AddProduct.equalsIgnoreCase("+")) {
//The code inside try block will be tested for errors
try {
System.out.println("Please enter a new product ID: ");
int Productid = nxtLINE.nextInt();
if (Productid < 0 || Productid > 10)
throw new IllegalArgumentException();
System.out.println( "You entered: "+Productid); // if try block has no error, this will print
}
//The code within the catch block will be run if the try block has any error
catch(IllegalArgumentException i) {
System.out.println("Invalid Entry Detected!. Do you want to try it again?");// if try block had an error, this would print
AddProduct = nxtLINE.next();
if(AddProduct.equalsIgnoreCase("AddProduct"))
execute(AddProduct);
}
}
}
}
}
输出:
相关文章
JavaFX 文本旋转
发布时间:2023/09/21 浏览次数:96 分类:Java
-
本介绍了如何在 JavaFX 中旋转文本。可以使用 JavaFX.scene.text.Text 类创建文本节点,并在 JavaFX 中使用 setRotate() 来旋转文本。本文介绍了如何在 JavaFX 中旋转文本。
JavaFX 区域与窗格
发布时间:2023/09/21 浏览次数:94 分类:Java
-
本文介绍了 JavaFX 中区域和窗格之间的区别。Region 和 Pane 用于将可调整大小的子节点调整到它们的首选大小,而不是重新定位它们。本文介绍了 JavaFX 中 Region 和 Pane 之间的区别。
JavaFX 媒体播放器
发布时间:2023/09/21 浏览次数:115 分类:Java
-
本文演示了 JavaFX 媒体播放器的正确使用,使用 JavaFX 播放媒体文件。在本文中,我们将学习如何使用 JavaFX 在 Java 中制作媒体播放器。为此,我们将使用内置的 JavaFX 并手动进行设置。
JavaFX 方形按钮
发布时间:2023/09/21 浏览次数:126 分类:Java
-
本文介绍如何在 JavaFX 中创建方形按钮。可以通过扩展 Java 中的 ToolBar 类来创建方形按钮。本文介绍了如何在 JavaFX 中创建方形按钮。
JavaFX setFill() 方法
发布时间:2023/09/21 浏览次数:187 分类:Java
-
本教程演示了如何在 JavaFX 中使用 setFill() 方法。setFill() 方法用于在 JavaFX 中填充形状和其他元素的颜色。本教程演示了在 JavaFX 中使用 setFill() 方法。
JavaFX FXML 加载异常的解决方法
发布时间:2023/09/21 浏览次数:192 分类:Java
-
本文展示了如何解决 JavaFX FXML 加载异常。这也突出了导致此异常的原因。本文介绍导致 JavaFX FXML 加载异常的原因并提供快速解决方案。导致 JavaFX FXML 加载异常的原因 获得 JavaFX FXML 加载异常的
Java 将文本复制到剪贴板
发布时间:2023/09/21 浏览次数:96 分类:Java
-
本文讨论将文本从 Java 应用程序复制到剪贴板的方法。本文讨论将文本从 Java 应用程序复制到剪贴板。Java 提供了几个元素来显示 Java 应用程序中的文本。
在 Java 中捕获多个异常
发布时间:2023/09/21 浏览次数:167 分类:Java
-
本教程介绍了可以在 Java 中捕获多个异常的方法。今天我们将看看我们可以在 Java 中使用和捕获多个异常的方法。Java 中的异常发生在运行时发生不需要的事件时。
什么是 Java 中的空指针异常
发布时间:2023/09/21 浏览次数:122 分类:Java
-
这篇文章教你如何理解 Java 中的空指针异常。本文介绍了 Java 空指针异常以及如何处理它。我们已经包含了一些示例程序供你遵循。在 Java 中,任何引用变量的默认值都是指向内存位置但没有任