问题内容: 本着Java的精神:为什么存在MaxPermSize?,我想问一下为什么Sun JVM对其内存分配池的大小使用固定的上限。 默认值为物理RAM的1/4(有上限和下限);结果,如果您有一个内存消耗大的应用程序,则必须手动更改限制(参数- Xmx),否则您的应用程序将运行不佳,甚至可能因OutOfMemoryError崩溃而崩溃。 为什么这个固定限制甚至存在?为什么JVM不能像大多数操作系
问题内容: 在我的Java类中,我这样声明变量 或者我们必须在多行中这样声明 我们应该遵循哪一个? 问题答案: 这只是口味和喜好问题。但是,如果您不设置准则,它将与Vim与Emacs或IntelliJ与Eclipse一起,成为大多数开发团队中无休止的辩论/争论的温床。 我建议为您的团队设置编码标准,最简单的方法是引用现有的标准,例如Sun(现在为Oracle)Java准则,在这种情况下建议每行使用
问题内容: 在下面的代码中,使用类名访问静态变量时,它不会引发前向引用错误,但是在不使用类名的情况下访问它会抛出正向引用错误。 为什么使用类名访问时不会发生这种情况? 问题答案: 前向引用规则在JLS§8.3.3中定义: 有时会限制使用声明后在文本上出现的类变量,即使这些类变量在范围内(第6.3节)。具体来说,如果满足以下所有条件,则是编译时错误: 使用类变量后,将在文本或类C中声明类变量; 在C
问题内容: 当流源为时,我无法实现流处理的良好并行化。在四核CPU上运行以下代码,我观察到最初使用3个内核,然后突然下降到2个,然后是1个内核。总体CPU利用率徘徊在50%左右。 请注意示例的以下特征: 只有6,000行; 每条线大约需要20毫秒的处理时间; 整个过程大约需要一分钟。 这意味着所有压力都在CPU上,I / O最小。该示例是用于自动并行化的“坐鸭”。 我的典型输出: 为了进行比较,如
问题内容: 考虑以下 几乎可 编译的Java 8代码: 您会注意到抛出编译器错误: 变量用户已在方法main(String [])中定义 我的问题是:为什么Lambda表达式会考虑与已经定义的Lambda表达式在同一行 初始化 的变量?我知道Lambda会在外部查找(并使用)局部变量,因此您不能将在Lambda内部使用的变量命名为与外部变量相同。但是为什么 要 定义的变量 被 认为 已经 定义?
问题内容: 考虑以下Java代码片段 输出: 预期输出: 怎么样?作为 无符号右移后的二进制形式的b,因此为什么 呢? 问题答案: 问题在于,在进行移位操作之前,所有参数都首先被提升为: 已签名,因此其值为-15。 首先将符号扩展为整数,然后向右移,并通过强制转换为截断为。 首先将符号扩展为整数,然后向右移,并通过强制转换为截断为。 您可以做以获得所需的效果。
问题内容: 为什么我们不能覆盖子类中超类的实例变量? 问题答案: 因为如果您更改数据成员的实现,则很有可能会破坏超类(想象将超类的数据成员从float更改为String)。
问题内容: 为什么这样 打印与此相同? 据我所知,后增量首先被“按原样”使用,然后被增量。是先添加预增量然后使用。为什么这不适用于for循环的主体? 问题答案: 循环等效于: 从阅读该代码可以看到,在for循环的第三部分中使用post还是pre decrement运算符并不重要。 更一般地,任何形式的for循环: 完全等同于while循环: for循环更紧凑,因此更易于解析这种常见用法。
问题内容: 在编译此文件时说 testClass.cpp:9:声明`bool Test :: isVal’ testClass.cpp:3:与先前的声明“ bool Test :: isVal()”冲突 虽然同样适用于Java 为什么在C ++中而不在Java中会发生编译错误? 问题答案: 因为C ++不是Java。您可以使用会员的地址: 因此,除了可以重载成员函数之外,不能让两个成员具有相同的名
问题内容: 我需要使用可以通过循环轻松获得的命名模式来创建大量对象。有什么办法可以像这样从变量中读取对象名称? 我不需要为对象分配变量名,仅是在分配时从其获取名称。 问题答案: 您所选择的单词表明您不完全了解变量和对象的工作方式,因此您需要对其进行修复以使其在Java中得到广泛应用。 如果我写: 我创建一个新对象, 然后 定义一个指向该对象的变量。 该对象 没有名称 (它具有一个ID,该ID是在运
问题内容: 给定下面的Java代码,您可以在Ruby类中最接近地表示这两个变量吗?而且,在Ruby中是否可以像Java中那样区分和变量? 问题答案: Ruby中确实没有等效的构造。 但是,您似乎犯了一个经典的移植错误:您有一种使用语言A 的 解决方案 ,然后尝试将其翻译为语言B,这时您真正应该做的就是找出 问题 ,然后找出解决方法使用语言B。 我不能完全确定您要从那个小的代码段中解决什么问题,但是
问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要
问题内容: 我想知道为什么默认情况下C,C ++和Java中的确切静态变量初始化为零?为什么对局部变量不是这样? 问题答案: 为什么要对静态变量进行确定性初始化而对局部变量不进行初始化? 了解如何实现静态变量。 它们的内存在链接时分配,并且它们的初始值也在链接时提供。 没有运行时开销。 另一方面,用于局部变量的内存是在运行时分配的。堆栈必须增长。你不知道以前在那里。如果需要,可以清除该内存(将其清
问题内容: 对于可以存储在HashMap中的键条目的数量有理论上的限制吗?或者最大数目纯粹取决于可用的堆内存吗? 另外,哪种数据结构最适合存储大量对象(例如数十万个对象)? 问题答案: 可存储在HashMap中的键条目的数量是否有理论上的限制,还是仅取决于可用的堆内存? 查看该类的文档,我会说理论极限是(2 31 -1 = 2147483647)个元素。 这是因为要正确实现此类,该方法必须返回一个
问题内容: 我有以下代码 由于某种原因,它会引发以下编译错误 Solution.java:11:错误:不兼容的类型:推断变量T具有不兼容的边界List list = Arrays.asList(A); ^等式约束:整数下限:int []其中T是类型变量:T扩展了在方法asList(T …)中声明的对象 我假设这是Java 8功能,但是我不确定如何解决该错误 问题答案: 期望可变数量的。不是,而是,