在 Java 编程中的注意事项

重写

方法

  1. 当子类重写超类的方法时,子类该方法的被访问权限不能低于超类方法。如果超类方法为 public,则子类被重写的方法也要为 public。即子类重写方法的访问权限不能缩小。

  2. 当子类重写超类的方法时,可以不抛出异常,如果抛出异常,则子类该方法中声明的检查型异常不能比超类方法中声明的更通用。即子类重写方法抛出的异常可以是超类方法的子类,也可以不抛出异常。

  3. 当子类的方法签名与超类相同,子类该方法的返回值也要与超类返回值相同或为其子类。即重写最多只能令返回值更特殊。

字段

  1. 在 Java 中,字段不会被重写。这一点跟该字段有没有被声明为 final、protected 无关。

反射

  1. 方法 getMethod 只能获得目标类的所有能用所有的公共方法。

    而方法 getDeclaredMethod 只能获得类自身声明的所有方法,这不包括继承自超类的方法,但包括实现接口的方法。

  2. 如果反射调用的方法本身可以抛出异常,则当其抛出异常时,此异常会被反射“吞掉”,封装成 InvocationTargetException 异常重新抛出。可以使用该封装异常的方法 getTargetException 或 getCause 来获取被吞掉的异常。

  3. 基本类型对应的 class 对象是通过直接在其后加后缀 .class 来获得,而不是对应的包装类的 class 对象。

  4. 反射会影响代码的可读性,同时具有一定的危险性。又因为它的危险性,所以需要编写额外的代码去减弱这种危险,这又会带来一定的复杂度。因此,建议在如下情况时才考虑反射:

    1. 编写的是一种框架代码,组内已统一对反射的编写规范。

    2. 用于对自己的外界不可访问的方法的单元测试。

    3. 自己依赖的类在设计上不合理,但自己无法对其重构。此时可在必要时酌情使用来拥有访问该类内部数据的权限。如清除封装在 String 中的密码等等。

    4. 【废弃】要调用的方法有很多重载,而这些重载方法的形参之间又有继承关系。这里需要调用形参与实参真实类型相同的一个重载方法,但此时不知道实参的真实类型,因此不能使用强制转换。此时可以使用反射来获得实参的真实类型,从而调用正确的重载方法。【废弃。如果遇到这种情况,优先选择重构而不是反射。这种情形下使用反射容易调用自己忘记编写的不存在的方法,从而引发反射异常】

static

  1. static 方法不会被重写(但是,可以通过关键字 final 来阻止子类定义同签名的方法。)。超类引用不能调用子类 static 方法。

    因此,每个子类都有的同签名方法不要定义为 static。

  2. 对于子类与超类同签名的方法,有没有使用 static 要保持一致。如果超类方法使用了 static,则子类同签名方法也要使用 static。且 static 不能与 abstract 同时使用。

接口

  1. public 是接口的默认访问控制,且接口中只能声明 public 方法。

  2. 接口中的方法可以通过关键字 default 来提供实现。

abstract

  1. 标记为 abstract 的方法不能在这个类中提供实现。

  2. 可以将抽象类的构造器声明成 protected,但其非抽象子类的必须声明为 public,否则其它的普通类将无法创建该子类的对象。

Maven

  1. Maven 不允许模块之间的循环依赖。如果原来有这种需求,需要将它们都依赖的类抽取出来作为一个新模块,以供其它模块依赖。

  2. Maven 的测试插件 maven-surefire-plugin 默认只会测试如下的类方法:

    • 类的访问权限为 public,且类名含 test

    • 类的默认构造器的访问权限为 public

    • 方法的访问权限为 public,且方法名的前缀为 test

  3. JUnit 注解对 Maven 默认是无效的。在默认情况下,使用 JUnit 注解不能改变 Maven 的测试行为。

JUnit

  1. JUnit 注解对 Maven 默认是无效的。在默认情况下,使用 JUnit 注解不能改变 Maven 的测试行为。

  2. JUnit 中的测试类的测试方法可以声明为 default,连构造器也可以。

  3. 如果被测试的方法为继承自 Object 的方法,则测试方法的方法名必须加前缀或后缀(如 test)来使之不同。

  4. 对于方法 assertEquals,它的第一个是形参是期望值,第二个形参才是实际值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值