Java中可以从构造函数中调用抽象方法吗? [复制]

2024-04-10

假设我有一个实现 Runnable 接口的抽象基类。

public abstract class Base implements Runnable {

  protected int param;

  public Base(final int param) {
      System.out.println("Base constructor");
      this.param = param;
      // I'm using this param here
      new Thread(this).start();
      System.out.println("Derivative thread created with param " + param);
  }

  @Override
  abstract public void run();
}

这是几个衍生类之一。

public class Derivative extends Base {

  public Derivative(final int param) {
      super(param);
  }

  @Override
  public void run() {
      System.out.println("Derivative is running with param " + param);
  }

  public static void main(String[] args) {
      Derivative thread = new Derivative(1);
  }

}

重点是我希望我的基类做一些常规的事情,而不是每次都复制它。 实际上,它运行良好,输出始终相同:

基础构造函数 使用参数 1 创建的派生线程 导数正在使用参数 1 运行

但是在JAVA中启动一个调用构造函数中的抽象方法的线程安全吗?因为据我所知,在 C++ 和 C# 中,大多数情况下它是不安全的。 谢谢你!


这段代码演示了为什么你应该never从构造函数调用抽象方法或任何其他可重写的方法:

abstract class Super {
    Super() {
        doSubStuff();
    }
    abstract void doSubStuff();
}

class Sub extends Super {
    String s = "Hello world";

    void doSubStuff() {
        System.out.println(s);
    }
}

public static void main(String[] args) {
    new Sub();
}

运行时,会打印null。这意味着构造函数中唯一的“安全”方法是私有方法和/或最终方法。

另一方面,您的代码实际上并不从构造函数调用抽象方法。相反,您将未初始化的对象传递给另一个线程进行处理,这更糟糕,因为您正在启动的线程可能会被赋予优先级并在您的线程之前执行。Base完成其初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中可以从构造函数中调用抽象方法吗? [复制] 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 如何设置 Visual Studio 在 (Umbraco) 项目中创建 CSHTML 文件

    因此 我正在 Visual studio 中为我的 Umbraco 项目开发剃刀宏脚本 一切工作正常 但有两件事真的很烦人 如果我想创建一个新的 CSHTML 文件 最佳解决方案是复制现有文件 我没有完整的剃须刀智能感知 例如Html Ra
  • 谷歌 Colab 上的 RVL-CDIP 数据集

    我正在尝试使用以下命令在 google colab 上下载 RVL CDIP 数据集 wget load cookies tmp cookies txt https docs google com uc export download co
  • 无法导入caffe

    我执行了make pycaffe在 caffe 目录中并且运行良好 我也这样做了 gsamaras gsamaras A15 caffe python export PYTHONPATH PYTHONPATH home gsamaras c
  • 如何将 ShortDate 字符串格式与 Html.TextBoxFor 一起使用

    使用带有 MVC2 的实体框架 我有一系列日期文本框 我想以短日期格式显示模型中的数据 但我必须使用 Html TextBoxFor 才能使更新代码正常工作 尝试使用 HTML Textbox 数据永远不会保存到模型中 我已经尝试操作字符串
  • 在java中以附件形式发送文件

    我有一个java代码 我必须发送一个依恋 可能是 doc db 或 file 所以我使用以下代码 消息已成功发送 并且特定附件文件未发送且也未收到 我的代码是 import java util Date import java util P
  • 如何在 Swift 3 中将 UIImage 数组导出为电影?

    我需要导出一组UIImage并制作一部在图像前面放置一些文本的电影 如果可能的话还可以添加音乐 你能帮我提供代码吗 我只找到了一些东西Objective c和旧版本的Swift 这是我对这个问题发布的第一个答案 从 UIImage 创建电影
  • 鼠标悬停在表格行上显示表格单元格

    我有一张看起来像这样的桌子 table thead tr th Foo th th Bar th tr thead tbody tr class data td Info here td a a url here class edit gt
  • 是否有使用 EF 数据库优先方法来解释该主题的 Fluent API 教程?

    关于 Fluent API 的教程有很多 但它们都使用 Entity Framework Code First 代码示例进行解释 由于我不了解代码优先 您是否知道任何 Fluent API 教程可以使用 EF 数据库优先方法解释该主题 谢谢
  • 有没有办法使用 python 请求发送多部分/表单数据数组?

    假设有一个端点接受HTTP请求与multipart form data内容类型 以下是可接受的请求正文的示例 033392576939750140334380 Content Disposition form data name file
  • Django-Haystack 使用具有 IAM 凭证的 Amazon Elasticsearch 托管

    我希望使用 Amazon 的 Elasticsearch 服务器来支持 Django 数据库中长文本字段的搜索 然而 我也不想将此搜索暴露给那些没有登录并且不想通过模糊或某些 IP 限制策略来依赖安全性的人 除非它可以很好地与现有的 her
  • 核心数据并发`performBlockAndWait:` NSManagedObjectContext僵尸

    我发布的应用程序有以下崩溃报告 synchronizeMyWords方法从数据库中获取实体 使用主上下文父级创建私有队列上下文 最后保存结果 所有操作都在后台线程中进行 每次应用程序进入时都会调用此方法background and fore
  • 如何使用 geom_text() 标记 geom_bar(position = 'fill')

    经过相当长的一段时间搜索后 我没有找到解决我的问题的例子 如何使用 geom text 标记 geom bar position fill mydf data frame sample sample x LETTERS 1 3 size 1
  • 在 Linq to Entities 中编辑 DataGridView 单元格

    当我使用 Linq to Entities 将数据库中的数据绑定到 C 应用程序中的 DataGridView 时 我使 DataGridView 变为只读且无法编辑 是否可以编辑 DataGridView 中的数据以及保存在数据库中的更改
  • MLSLABEL Oracle 数据类型是什么?

    我在 Oracle 中遇到了一种奇怪的数据类型 称为MLSLABEL 它没有在数据类型文档中列出 并且仅对 可信预言机 无论是什么 有效 我能找到的文档是this http download oracle com docs cd B2835
  • MD5 输入/输出的最大长度

    可以进行 md5 哈希处理的字符串的最大长度是多少 或者 如果没有限制 如果有 md5 输出值的最大长度是多少 MD5 将任意长度的消息处理为 128 位的固定长度输出 通常表示为 32 个十六进制数字的序列
  • 在php中使用wkhtmltoimage

    当我在终端中使用 wkhtmltoimage 时 效果很好 但在php中使用时会出现一些问题 问题是 php代码 它有效 当我在终端中尝试相同的命令时 它也运行良好 但是当我尝试其他链接时 它无法正常工作
  • Flex、AIR:在指定文件夹中搜索 .pdf 文件

    我需要 ActionScriot 代码来解析给定文件夹并在其中搜索 txt 文件 任何链接或代码示例都会有所帮助 Adobe Flex 3 3 AIR 谢谢 斯里 There var docs File File documentsDire
  • 如何让 GIT 默认为我的主文件夹?

    我刚刚在连接到工作域的工作计算机 Windows 7 上安装了 GIT 当我启动 GIT bash 时 它从 H 开始 而不是在我的主文件夹中 我认为当我未连接到域时这可能是一个问题 因为 ssh 文件夹位于 H 而不是我的主文件夹 我已将
  • PHP 以指数形式输出数字

    当我输出一些双变量时 它们会使用 fwrite 以指数形式写入 我可以在 PHP 中设置一些默认值 每当显示 复制或存储 变量时它总是以十进制格式出现吗 准确地说 当我在包含双精度值 不是指数形式 的 json 字符串上使用 json de
  • Java中可以从构造函数中调用抽象方法吗? [复制]

    这个问题在这里已经有答案了 假设我有一个实现 Runnable 接口的抽象基类 public abstract class Base implements Runnable protected int param public Base f