继承 关键字extends 实例package com.cjg.test; public class Animal { private String name; private int age;

本文通过一个简单的Java程序演示了面向对象的基本概念,包括类的定义、属性设置与获取方法及继承等特性。通过Dog类继承Animal类的方式展示了如何实现代码复用。

package com.cjg.test;

//创建个父类Animal 并定义私有属性(因私有属性不能被调用采用set,get方法),方法

public class Animal {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void bock(){
System.out.println(this.name+"的年龄"+this.age);
}

}

package com.cjg.test;

//定义子类Dog 继承父类的属性或者方法
public class Dog extends Animal{

public static void main(String[] args) {
Dog dg=new Dog();
dg.setName("我就要券");
dg.setAge(12);
dg.bock();
}


}

 

# 普通文本型问题回答 你提出的问题是:**为什么在运行代码后,没有打印出 `"捕获异常: 年龄不合法"`?** 我们来逐行分析你的代码,发现问题的根源。 --- ## ❌ 核心问题:`setAge` 方法逻辑错误(条件嵌套错误) 看你的 `setAge` 方法: ```java public void setAge(int age) { if (age >= 0 && age <= 150) { if (age < 0 || age > 150) { throw new IllegalArgumentException("年龄不合法"); } this.age = age; } } ``` ### 🚫 错误分析: - 外层判断:`if (age >= 0 && age <= 150)` → 只有当年龄合法时才进入。 - 内层判断:`if (age < 0 || age > 150)` → 这个条件和外层**完全相反**,所以: 当 `age = -5` 时: - 外层条件 `(age >= 0 && age <= 150)` → `$false$` - 所以整个方法体直接跳过! - **既不会抛异常,也不会赋值,更不会执行任何操作!** ➡️ 因此,`throw` 语句根本没有机会执行,异常没被抛出,`catch` 块也就不会触发。 --- ## ✅ 正确写法应为: ```java public void setAge(int age) { if (age < 0 || age > 150) { throw new IllegalArgumentException("年龄不合法"); } this.age = age; } ``` 或者等价地: ```java public void setAge(int age) { if (age < 0 || age > 150) { throw new IllegalArgumentException("年龄不合法"); } else { this.age = age; } } ``` --- ## 🔍 额外说明:自定义异常类多余且危险 你写了: ```java package com.itgaohe.practice.test01; public class IllegalArgumentException extends RuntimeException { ... } ``` ⚠️ 这是一个严重问题! Java 已经有一个标准类:`$java.lang.IllegalArgumentException$`。你现在自己定义了一个同名类(虽然包不同),JVM 会优先使用你这个类,导致行为混乱或无法匹配 catch 块! 即使当前能编译通过,也极易引发不可预测的问题。 ### ❌ 千万不要重写标准异常类! 删除你自己写的这个 `$IllegalArgumentException$` 类! 直接使用 Java 内置的即可: ```java catch (java.lang.IllegalArgumentException e) { ... } ``` JVM 自带,无需自己实现。 --- ## ✅ 修正后的完整正确代码 ### ✔️ Customer.java ```java package com.itgaohe.practice.test01; public class Customer { private String id; private String name; private int age; public Customer() {} public Customer(String id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { if (age < 0 || age > 150) { throw new IllegalArgumentException("年龄不合法"); } this.age = age; } } ``` ### ✔️ Test.java ```java package com.itgaohe.practice.test01; public class Test { public static void main(String[] args) { Customer customer = new Customer(); try { customer.setAge(-5); } catch (IllegalArgumentException e) { System.out.println("捕获异常: " + e.getMessage()); } } } ``` ### ✔️ 删除这个文件! ❌ `IllegalArgumentException.java` —— 不要自定义标准异常! --- ## ✅ 预期输出 ``` 捕获异常: 年龄不合法 ``` --- ## ✅ 总结 | 问题 | 解释 | |------|------| | **没有打印异常** | 是因为 `setAge(-5)` 没有真正抛出异常(外层条件阻止了执行) | | **条件逻辑错误** | 使用了 `if (合法) { if (非法) throw }`,导致非法输入直接被忽略 | | **自定义异常风险** | 不应创建与 JDK 同名的异常类,会导致冲突和难以调试的问题 | --- ✅ **修复建议:** 1. 修改 `setAge` 方法中的判断逻辑; 2. 删除你自己写的 `IllegalArgumentException` 类; 3. 重新运行程序。 🔧 修复后就能看到期望的输出了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值