public class Work03 { public static void main(String[] args) { // TODO Auto-generated method stub try { int i=3/0; System.out.println(i); } catch(ArithmeticException e) { System.out.println("算术异常!"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("运行1"); int[] arrInt= {1,5,8,4,3}; try { System.out.println(arrInt[5]); } catch (ArrayIndexOutOfBoundsException e) { // TODO Auto-generated catch block System.out.println("字符索引越界异常"); } System.out.println("运行2"); String str=null; try { if(str.equals("test")) { System.out.println("哈哈"); } }catch(NullPointerException e) { System.out.println("空指针异常!"); } System.out.println("运行3"); String str01="账号:asd1234 密码:asAZddefe" +"账号:safg134534 密码:asAZddefe" +"账号:1646465df 密码:asAZddefe"; try { Pattern p=Pattern.compile("账号:[a-z0-9]{6-16} 密码:[0-9a-zA-Z]{6,19}"); Matcher m=p.matcher(str01); while(m.find()) { System.out.println(m.group()); } } catch (PatternSyntaxException e) { System.out.println("语法异常"); } System.out.println("运行4"); try { char[] ch=new char[-1]; } catch (NegativeArraySizeException e) { // TODO Auto-generated catch block System.out.println("负数组异常"); } System.out.println("运行5"); } }
时间: 2024-04-26 11:22:58 浏览: 9
这是一段 Java 代码,它包含了多个异常处理的例子。代码的具体功能是不太清楚,但是我们可以看看代码中的异常处理部分。
首先,在代码的开头,我们看到了一个 try-catch 块。这个块中进行了一个除法运算,但是分母为 0,会抛出 ArithmeticException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
接下来,在代码中又出现了一个 try-catch 块。这个块中尝试访问数组的第 6 个元素,但是这个数组只有 5 个元素,会抛出 ArrayIndexOutOfBoundsException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
然后,在代码中又出现了一个 try-catch 块。这个块中尝试对一个 null 对象进行操作,会抛出 NullPointerException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
最后,在代码中又出现了一个 try-catch 块。这个块中尝试使用正则表达式匹配一个字符串,并输出匹配的结果。如果正则表达式存在语法错误,会抛出 PatternSyntaxException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
除了这些异常处理的例子,代码中还出现了一个创建负数组的错误,会抛出 NegativeArraySizeException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
综上,这段代码展示了多种异常处理的方式,可以帮助我们更好地理解异常处理的机制。
相关问题
纠错public class Test1_2 { void showData(){ System.out.println("中国,我爱你!"); } public static void main(String[] args) { // TODO Auto-generated method stub showData(); } }
在这个程序中,showData() 方法被定义为非静态方法,因此需要通过实例化对象来调用该方法。在 main() 方法中,没有创建对象就直接调用了 showData() 方法,导致编译错误。
正确的代码应该是这样的:
```
public class Test1_2 {
void showData(){
System.out.println("中国,我爱你!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test1_2 test = new Test1_2();
test.showData();
}
}
```
在 main() 方法中,首先创建了 Test1_2 的对象 test,然后通过 test 调用了 showData() 方法。这样就可以正确地输出 "中国,我爱你!" 了。
优化代码运用线程知识package D18; public class D18_1 { public static void main(String[] args) { // TODO Auto-generated method stub } } class Account implements Runnable{ private int money; //修改方法 //存钱 public void deposit(int amount) { money +=amount; System.out.println("存钱成功,现有"+money); } @Override public void run() { // TODO Auto-generated method stub deposit(100); } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } }
以下是对代码的优化,使用线程来实现存钱和查询余额的功能:
```
public class D18_1 {
public static void main(String[] args) throws InterruptedException {
Account account = new Account();
Thread depositThread = new Thread(() -> {
for (int i = 0; i < 10; i++) {
account.deposit(100);
}
});
Thread checkThread = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println("当前余额为:" + account.getMoney());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
depositThread.start();
checkThread.start();
depositThread.join();
checkThread.join();
}
}
class Account {
private int money;
public synchronized void deposit(int amount) {
money += amount;
System.out.println("存钱成功,现有" + money);
}
public synchronized int getMoney() {
return money;
}
}
```
这里使用了 synchronized 关键字来保证线程安全,同时使用了 join() 方法来保证查询余额的线程在存钱线程执行完毕后才开始运行,避免了查询余额时余额数值不正确的问题。