1. 继续Hello World 在第 4 节 “第一个程序”中,读者应该已经尝试对Hello world程序做各种改动看编译运行结果,其中有些改动会导致编译出错,有些改动会影响程序的输出,有些改动则没有任何影响,下面我们总结一下。首先,注释可以跨行,也可以穿插在程序之中,看下面的例子。 例 2.1. 带更多注释的Hello World #include <stdio.h> /* * com
问题内容: 当超类具有标记为final的字段但子类覆盖(隐藏?)此字段时,会发生什么?“最终”并没有阻止它,不是吗?我正在处理的特定示例是Building类,从中继承了各种建筑物。除其他事项外,每种类型的成本对于每个子类都应是最终成本,但是每种类型的建筑物应具有自己的成本。 编辑:从那以后,我意识到我不知道上面我在说什么。我真正想要的是成本的静态变量。但是,如果我在超类中声明这些静态变量,则它们对
问题内容: 输出量 自333线程产生于444线程以来,我一直期待输出的最后一行出现“ NewInitialValue”,而tl是本地可继承线程。 是什么导致此问题,如何解决? 问题答案: 当您无法控制线程的创建时,您不应依赖。Javadoc指出: […]创建子线程时,子级将接收父级具有值的所有可继承线程局部变量的初始值。 在您的示例中,线程是由返回者创建的 那是一个执行程序,最多将使用两个线程来执
问题内容: 假设我们有这个问题 扩展和覆盖,但鉴于实现现在会引发异常。由于覆盖方法不能引发新的异常,因此不会编译。 最好的解决方案是什么? 将所需的异常传播到。对我来说,这是反对封装,继承和一般OOP的(可能会引发永远不会发生的异常)。 使用呢?此解决方案不会将传播到,但是Oracle文档和其他来源指出,当“客户端代码无法执行任何操作”时,应使用异常类。并非这种情况,此异常将对恢复blablabl
问题内容: 我不太明白为什么可以在Java中继承静态方法? 继承就像从基类继承,而Static属于Class而不是Object。 那么,如果静态仅属于该类,为什么它会滴入派生类呢?它不应该只与定义它的类一起使用吗? 继承静态方法是一种好的编程习惯吗? 问题答案: 在Java中,静态方法不是 继承的 (或正确的词被 覆盖 ),但可以 隐藏 。 这里最大的不同是它们不像对象方法那样经受多态性。 运行时
问题内容: 我可以以某种方式在抽象类上对一组注释进行分组,并且扩展该类的每个类都已自动分配了这些注释? 至少以下情况不起作用: 问题答案: 答案是不 除非注释类型具有@Inherited元注释,否则不会继承Java注释:https : //docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html。 Spring的注释
问题内容: 我正在编写一个库,该库具有一组预定义的枚举值。可以说,我的枚举如下所示。 现在,使用此库的客户端可能需要添加更多值。假设客户需要添加和。这不会覆盖任何现有值,而是使枚举具有5个值。 在此之后,我应该能够使用5种不变的可能性。 实现此目标的最佳方法是什么? 问题答案: 您不能具有另一个扩展,也不能通过继承将值“添加”到现有值。 但是,可以实现。 我要做的是让原始实现标记(即没有方法声明)
问题内容: 我的对象层次结构随着继承树的加深而增加了复杂性。这些都不是抽象的,因此,它们的所有实例都或多或少地达到了目的。 由于参数数量很多,我想使用“构建器模式”来设置属性,而不是对多个构造函数进行编码。由于我需要适应所有排列,因此继承树中的叶类将具有伸缩构造函数。 当我在设计过程中遇到一些问题时,我已经浏览了这里的答案。首先,让我给您一个简单的,简短的示例来说明问题。 现在我们有一些代码可以继
问题内容: 这是一个有趣的代码片段: 我知道子类不会继承其父级的私有成员,但是obj设法在其中调用它不应具有的访问权的方法。在编译时,obj是Superclass类型,在运行时是Subclass类型。 这可能与以下事实有关:对doSomething()的调用发生在驱动程序类内部,而该驱动程序类恰好是其自己的类(以及为什么可以首先调用doSomething()的原因)。 因此问题归结为,obj如何访
问题内容: 我正在用Java 构建一个类。逻辑本身可以工作并找到期望的解决方案(带有任意数量的参数)。无论如何,部分项目如我所料。 问题来自解决方案表示的问题。可以公平地说,我已经用Python完成了这个项目,并决定尝试使用Java作为一种介绍,这可能是问题所在,我也想像Python一样这样做。 这是我的一些课程: 问题是它仍然从Operation类获取令牌:“ null” 我知道这可能是因为op
问题内容: 伙计们,我们是像其他任何类一样从Object继承的(当然,我们不必明确声明除外)还是对Object类有一些特殊的特权,并且它不像其他类那样继承? 问题答案: 不,是一样的。这是JLS 8.1.3 的摘录: 如果任何其他类的类声明都没有extends子句,则该类会将其作为其隐式直接超类。 当然,它本身有点特殊(JLS): 每个类都只是单个现有类(第8.1.3节)的扩展(即其子类),并且可
问题内容: 通过使用抽象类,我们可以实现与接口相同的功能,那么为什么Java不允许以下代码? 我知道可以通过仅使用接口来实现多重继承,但是上面的代码与接口所做的事情相同。 问题答案: 不允许这样做,因为您可以对抽象类做更多的事情。允许多重继承是没有意义的,前提是您只在可以使用接口的情况下才使用抽象类。 仅将抽象类用于无法通过接口执行的操作会更简单,在这种情况下,您将无法使用两个抽象父类。 注意:使
问题内容: 可以继承@Repository批注吗? 我可以创建一个 然后扩展它而不指定@Repository批注? 我如何知道注释是否可以继承? 问题答案: 参见http://www.docjar.com/html/api/org/springframework/stereotype/Repository.java.html 没有@Inherited批注,因此它不会被继承。
问题内容: 我有超类和方法。如果我在继承的子类中重写了方法,或者必须始终编写它,是否会继承? 问题答案: 不,您将总是不得不写信。如果您调用超类的同步方法,则这当然是同步调用。不是方法签名的一部分。 有关Java线程负责人(等等)的Doug Lea的详细说明,请参见http://gee.cs.oswego.edu/dl/cpj/mechanics.html。
问题内容: 我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在该类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有注释的方法,该方法可以进行初始化。 接下来,我用具有方法和方法的特定类扩展该类。这些方法对环境进行类特定的初始化(例如,将一些记录放入数据库中)。 如何执行带注释的方法的特定顺序?我需要先执行抽象基类中的那些,然后再执行扩展类中的那些。 例: 预