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中可以从构造函数中调用抽象方法吗? [复制] 的相关文章

  • GSON:如何在保持循环引用的同时防止 StackOverflowError?

    我有一个带有循环引用的结构 出于调试目的 我想转储它 基本上任何格式都可以 但我选择了JSON 由于它可以是任何类 所以我选择了不需要 JAXB 注释的 GSON 但是 GSON 会遇到循环引用并递归直到StackOverflowError
  • 使用矩阵参数创建 GET 请求

    我将使用的网络服务需要矩阵参数 http tester com v1 customers lastname Jackson firstname Tim bookingreference 7Y9UIY 而不是通常的 http tester c
  • Java 拖放图像并在拖动时显示图像缩略图

    我有一个带有图像节点的网格布局 我想在我的应用程序中添加 dnd 功能 例如 当我将图像节点拖放到目标 JPanel 时 进行一些操作 例如以原始大小显示 删除等 我已经实现了这与一种使用 Transferhandler 的方法和一种使用
  • 关于Java中trim()方法的查询

    我之前提出了一个问题 但遭到了严厉的批评 所以我在这里再次提出 更简单 并重新措辞以吸引那些可能担心我之前提出问题的方式的人 背景 我正在解析一些 HTML 以获取信息 我将所有内容隔离在一系列行中 但我希望抓取的内容以及后面的一堆空格 为
  • Java心跳设计

    我需要在我的 Java 项目上实现一个心跳系统 3 5 个客户端和 1 个服务器 但我有一些问题 1 客户端需要有 2 个套接字吗 1 用于心跳 1 用于接收我的软件的正常消息 2 我看到在特定情况下 当客户端滞后时 客户端不会收到消息 如
  • 为什么要分离接口和实现?

    在生产代码中 我经常看到定义如下的类 public interface SomeComponent Some methods public class SomeComponentImpl implements SomeComponent S
  • 我的代码中出现 ArrayIndexOutOfBoundsException 的原因是什么?

    我正在 Java 中实现凸包的格雷厄姆扫描算法 我在运行代码时收到此错误 对于输入字符串 10 18 Exception in thread main java lang ArrayIndexOutOfBoundsException 0 a
  • C# 到 Java:Base64String、MemoryStream、GZipStream

    我有一个在 NET 中压缩的 Base64 字符串 我想将其转换回 Java 中的字符串 我正在寻找一些与 C 语法等效的 Java 语法 特别是 Convert FromBase64String 内存流 压缩流 这是我想要转换的方法 pu
  • 动态元素 ID 到 setId(int) - Android

    我看到了语法定义setId int and findViewByID int 但我们如何使用findViewById R id row1 我尝试使用这个 Object1 setId Integer parseInt repeat 它没有显示
  • 如何将跨源资源共享与 Spring MVC 4.0.0 RESTful Webservice 集成

    我有一个简单的 Web 服务返回JSON data The 用户等级 com bargadss SpringService Domain 是个POJO类包含 用户 ID 名字 姓氏 电子邮件 The 用户服务类 com bargadss S
  • 从壁纸中获取颜色? - 安卓

    如何找到当前壁纸的 平均 颜色并将该颜色设置为我的小部件上的布局 我正在尝试做的一个例子 这是 AccuWeather 上的设置 您可以使用WallpaperManager getWallpaperColors https develope
  • Android 是否可以获取用户和设备所在国家/地区的货币代码?

    是否可以获取用户和设备所在国家 地区的货币代码 我想将用户当前国家 地区的国家 地区代码设置为默认国家 地区 我们在 Android 中有解决方案吗 由于这段代码可能对您有帮助 public class CurrencyTest publi
  • 导入数据期间解析日期格式的最佳方法

    我创建了在数据导入 400 K 记录 期间解析视图不同日期格式的方法 我的方法捕获 ParseException 并尝试在不同时使用下一种格式解析日期 问题 在数据导入期间设置正确的日期格式是更好的方法 更快 吗 private stati
  • 如何设置 Eclipse 以停止发生异常的线路?

    如何设置 Eclipse 在发生异常时停止 我有一个 Eclipse 断点设置来在异常时中断 在下面的代码示例中 我遇到的问题是 Eclipse 尝试打开 Integer 源代码 有没有办法让调试器在我的代码示例中显示的位置中断 如果我向下
  • 带有 Spock Stub 的泛型

    我无法为泛型类编译 Spock 存根 构造函数的签名如下 SomeClass SerSup
  • cipher.update在java中做什么?

    我正在实施 DES CBC 我很困惑什么cipher init cipher update and cipher dofinal做 我只是使用 init 来设置密钥dofinal得到结果 我不使用更新 那是对的吗 另外使用时结果有什么不同U
  • 如何从java程序中编译.java文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 Java 内部编译外部 java 文件 https stackoverflow com questions 10889186 compiling external java files from
  • 什么是样板代码、热点代码和热点?

    我知道这些术语是在性能实现 优化的背景下使用的 最近一直在研究这个问题 并尝试过搜索 但没有得到任何例子 清楚地阐述 描述这些概念以及在现实世界开发场景中实现这些问题 概念 有人可以彻底解释这些术语 示例场景以及可能使用这些概念和术语的地方
  • 如何对动态渲染 html 和 css 的 Java 代码进行单元测试?

    我有一个 Java 类 它从数据库获取表单定义 然后根据表单定义呈现 html javascript 和 css 它使用大量 appendable append append 来构建html 片段 这很容易出错 Jsp 和通用模板框架 例如
  • 在 Android 应用程序中编辑/添加 IPTC 元数据

    我看过许多其他类似的问题 但似乎没有一个有准确的答案 我正在开发一个可处理大量图像的 Android 应用程序 我希望通过编辑 IPTC 关键字标签 或其他适当标签 的值来向图像添加信息 我在用元数据提取器 http drewnoakes

随机推荐

  • 如何设置 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