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 12:22:58 浏览: 66
这是一段 Java 代码,它包含了多个异常处理的例子。代码的具体功能是不太清楚,但是我们可以看看代码中的异常处理部分。
首先,在代码的开头,我们看到了一个 try-catch 块。这个块中进行了一个除法运算,但是分母为 0,会抛出 ArithmeticException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
接下来,在代码中又出现了一个 try-catch 块。这个块中尝试访问数组的第 6 个元素,但是这个数组只有 5 个元素,会抛出 ArrayIndexOutOfBoundsException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
然后,在代码中又出现了一个 try-catch 块。这个块中尝试对一个 null 对象进行操作,会抛出 NullPointerException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
最后,在代码中又出现了一个 try-catch 块。这个块中尝试使用正则表达式匹配一个字符串,并输出匹配的结果。如果正则表达式存在语法错误,会抛出 PatternSyntaxException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
除了这些异常处理的例子,代码中还出现了一个创建负数组的错误,会抛出 NegativeArraySizeException 异常。在 catch 块中,我们捕获了这个异常,并输出了一条提示信息。
综上,这段代码展示了多种异常处理的方式,可以帮助我们更好地理解异常处理的机制。
相关问题
优化代码运用线程知识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() 方法来保证查询余额的线程在存钱线程执行完毕后才开始运行,避免了查询余额时余额数值不正确的问题。
public class Text1 { public static void main(String[] args) { // TODO Auto-generated method stub th1 t1 = new th1("芜湖"); t1.start(); th2 t2 = new th2("芜湖2"); t2.start(); } } class th1 extends Thread { String name; public th1(String name) { this.name = name; } @Override public void run() { // TODO Auto-generated method stub System.out.println(Thread.currentThread().getName() + ":" + name); } } }
这也是一个Java程序,其中定义了一个名为"th1"的线程类和一个名为"Text1"的主类。在主类中,创建了两个线程对象,一个是"th1"对象,一个是"th2"对象,并启动它们。"th1"线程类中,定义了一个名为"name"的字符串变量和一个构造函数,构造函数将传入的参数赋值给"name"变量。在"run"方法中,输出当前线程的名称和"name"变量的值。
但是这段代码中有一个多余的"}",需要将其删除。除此之外,程序运行可能会存在的问题取决于您的具体需求和执行环境。
阅读全文