Questions tagged «java»

Java是最初由Sun Microsystems开发的高级,独立于平台的,面向对象的编程语言。Java目前归甲骨文所有,甲骨文于2010年收购了Sun。

2
为什么Java不将文件名放在args中?
在C和C ++中,main方法将文件名保存在数组的第一个位置argv [0]处。但是,在Java中,文件名不包含在args字符串数组中。 是否有实际原因?我知道这使得通过命令行参数从0开始而不是从1开始进行迭代,但这有好处吗?文件名只是被认为是无用的吗?
20 java  c++  c 

8
Java-为什么我们将数组称为“向量”?
我正在阅读有关Java编程的书,并希望确认我理解“向量”一词的定义。维基百科说向量是“一个一维数组”,来源http://en.wikipedia.org/wiki/Vector。 将数组简单地称为数组会更简单吗?我们是否有任何理由需要使用这种奇特的语言作为“向量”?数组和向量之间有区别吗? 资料来源:《破解编码访谈》,第4版,盖尔·麦克道威尔,第47页。 常见问题 Q-为什么不将其发布在english.stackexchange.com上? 答:因为我认为只有面向计算机科学的人才能有一个好的答案。
20 java 

5
随机播放对象的有效方法
我正在为一些测验软件编写程序。我有一个问题类,其中包含用于问题,答案,选项,标记和否定标记的ArrayList。像这样: class question { private ArrayList<Integer> index_list; private ArrayList<String> question_list; private ArrayList<String> answer_list; private ArrayList<String> opt1_list; private ArrayList<String> opt2_list; } 我想打乱所有问题,但要打乱所有问题,则所有对象都需要打乱。我本可以以这种方式解决这个问题: 首先,我将不会使用此设计,也不会使用String而不是ArrayList<String>类型作为实例变量,然后会使用该Collections.shuffle方法来随机播放对象。但是我的团队坚持采用这种设计。 现在,问题类别包含输入问题时不断增加的ArrayLists。现在如何洗牌?
20 java  collections 

6
Java序列化-优点和缺点,使用还是避免?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 序列化用于Java的持久性。可以使用序列化持久化一些对象。但是,对于大量对象,ORM,数据库等可能会更好。似乎序列化仅对小型作业有用。可能是我错了。因此,请告诉我序列化比非序列化方法有什么优势?什么时候应该使用,什么时候应该避免使用? 看到DZone文章“对象序列化是否有害”之后,这个问题浮现在我脑海。 以下是引起我疑问的内容: 如果您查看Java及其会话对象,则使用纯对象序列化。假设应用程序会话的寿命很短(最多几个小时),则对象序列化非常简单,得到了很好的支持,并内置在会话的Java概念中。但是,当数据持久性处于较长的时间段(可能是数天或数周)时,并且您不得不担心应用程序的新发行版时,序列化很快就会变成邪恶。正如任何优秀的Java开发人员所知道的那样,如果您打算序列化对象(即使在会话中),则需要一个真实的序列化ID(serialVersionUID),而不仅仅是1L,并且您需要实现Serializable接口。但是,大多数开发人员都不知道Java反序列化过程背后的实际规则。如果您的对象已更改,则不仅仅向对象添加简单字段,即使序列号未更改,Java也可能无法正确反序列化对象。突然,您无法再检索数据,这本质上是糟糕的。 现在,可能开发人员阅读此文章可能会说他们将永远不会编写有此问题的代码。可能是这样,但是您使用的库或公司不再雇用的其他开发人员呢?您能保证这个问题永远不会发生吗?保证的唯一方法是使用其他序列化方法。

4
为什么在JVM上固定堆大小?
谁能向我解释为什么JVM(我没有检查太多,但是我从未见过这样的情况)为什么需要以固定的堆大小运行?我知道在一个简单的连续堆上实现起来比较容易,但是Sun JVM已有十多年的历史了,因此我希望他们有时间改进它。 需要在启动时定义程序的最大内存大小似乎是在1960年代完成的,然后与OS虚拟内存管理的交互很差(GC检索交换出的数据,无法确定Java进程需要多少内存)真正从OS端使用,浪费了大量VM空间(我知道,您不在乎您喜欢的48位计算机...)。我还猜想,在JVM(EE应用程序服务器,OSGi)内部构建小型操作系统的各种可悲尝试至少部分归咎于这种情况,因为在系统上运行多个Java进程总是会浪费资源,因为您必须给他们每个人可能需要使用的内存。 出乎意料的是,Google并没有像我所期望的那样引起愤怒,但是它们可能只是埋葬在数以百万计的人中,他们发现了固定的堆大小并只是接受了一个事实。
20 java 


4
谁扩展接口?又为什么呢
AFAIK,我的班级extends父类和implements接口。但是我遇到了无法使用的情况implements SomeInterface。它是泛型类型的声明。例如: public interface CallsForGrow {...} public class GrowingArrayList <T implements CallsForGrow> // BAD, won't work! extends ArrayList<T> 在implements语法上禁止使用。我首先想到的是,完全禁止在<>中使用接口,但是没有。有可能,我只需要使用 extends而不是implements。结果,我正在“扩展”接口。这个另一个例子有效: public interface CallsForGrow {...} public class GrowingArrayList <T extends CallsForGrow> // this works! extends ArrayList<T> 在我看来,这似乎是句法上的不一致。但是也许我不理解Java 6的一些技巧?我应该在其他地方扩展接口吗?我要扩展的接口是否应该具有某些特殊功能?

7
用纯Java编写的Java IDE?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 是否有用Java编写的Java IDE? 今天我刚刚在学校得到了9年级的DET笔记本电脑,并且设置了各种限制。令人烦恼的是,除了系统上已经安装的可执行文件之外,您无法运行任何可执行文件(由于某些原因,它们没有禁用命令提示符,PowerShell或注册表编辑器,这很奇怪)。它们允许您运行Java可执行文件,所以我认为这是在学校笨拙的笔记本电脑上进行编程的唯一方法(自然地,当我完成所有工作后):D 编辑: 用Java编写的意思是,用于运行程序的可执行文件的文件扩展名为“ .jar”,因此可以在JVM上运行。 编辑2: 我尝试了DrJava IDE,并且效果很好,谢谢(我可以编译和执行程序)!关于使用命令“ java -jar“ C:/ Users ... / org.eclipse ...”“通过命令行运行Eclipse。这导致生成日志说文件的错误,主要错误是: 消息自动激活捆绑软件org.eclipse.ui.workbench(182)时发生错误。 如何解决此错误(与其他任何IDE相比,我更喜欢使用Eclipse)? 编辑3: 关于我的最后编辑,只需忽略它:D。我通过下载最新版本的Eclipse解决了该问题。

6
评论写作和文档的最佳实践
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 如今评论比以往任何时候都容易。在Java中,有一些将注释链接到类的很好的技术,而Java IDE擅长为您创建注释外壳。像Clojure这样的语言甚至都允许您在函数代码本身中添加对函数的描述作为参数。 但是,我们仍然生活在一个时代,好开发者经常发表过时或较差的评论-我对提高评论的鲁棒性和实用性很感兴趣。 特别是在这里,我对Java / Clojure / Python感兴趣,但是答案不需要特定于语言。 是否有任何新兴技术可以验证注释并自动检测“模糊”注释(例如,带有魔术数字的注释,不完整的句子等)或不正确的注释(例如,检测拼写错误的变量等)。 更重要的是:那里是否存在公认的“评论政策”或策略?那里有很多关于如何编码的建议-但是“如何发表评论”呢?

2
Java void方法隐式返回此
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 关于SO的setter方法返回“ this”类型有一些讨论。而且看起来像Java 7的提议void方法返回此。但是该建议无法使其适用于Java 7功能。我找不到此建议是否移至Java 8或更高版本,或者已被完全丢弃。是吗? 参考链接-https: //stackoverflow.com/questions/31584/design-java-and-returning-self-reference-in-setter-methods
20 java 

8
如何在团队成员之间传播对通用编程的认识?
我住在一个人们相信的环境中: Java泛型是专门用于库编写而不是实际编码的功能。 C ++是一种OO编程语言;template是可选的和可避免的功能 但是,这些人高度依赖使用通用编程编写的库(例如STL,Java容器)。如果我使用templates或编写代码generics,则代码审阅者很可能会拒绝它,并会以“正确/可理解/优雅”的方式发表评论以编写代码。 这种心态适用于普通程序员到高级经理。没有出路,因为90%的时间里,这些人都有自己的游说手段。 解释它们的最佳方法是什么(不被割断),同时编写构成OO和通用编程的代码的实用方法是什么?
20 java  c++  templates  generics 

7
Java(仍然)是跨平台语言的选择吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 从90年代开始使用Java时,从第一天开始就是“ 写一次,就可以在任何地方运行! ”。那时那可能是真的,我也是合唱团的一员。 考虑使用所有其他使用多平台运行时的语言(python,flash,perl,html,php ...)时,我不确定该怎么考虑。但是我仍然看到很多争论,说应该使用Java,因为它据说更适合跨平台开发。 所以,今天仍然如此吗?Java仍然是多平台开发的首选语言吗? 请具体说明跨平台方面。 我不要求进行一般语言功能比较。 更新:到目前为止反应良好!大多数答案似乎都偏爱Java或Web。脚本人群有什么意见吗?

9
init()方法有代码味道吗?
声明init()类型的方法是否有目的? 我不是问我们是否应该优先init()于构造函数,或者如何避免声明init()。 我问的是在声明方法(查看它的普遍性)后是否有任何理论依据,init()或者它是否是一种代码味道,应避免使用。 这个init()习语很普遍,但是我还没有看到任何真正的好处。 我说的是鼓励通过方法初始化的类型: class Demo { public void init() { //... } } 什么时候可以在生产代码中使用它? 我觉得这可能是代码的味道,因为它表明构造函数未完全初始化对象,从而导致部分创建了对象。如果未设置状态,则该对象不应存在。 从企业应用的意义上讲,这使我相信它可能是某种用于加速生产的技术的一部分。这是我可以想到的惯用法,这是唯一合乎逻辑的原因,但我不确定是否会有这样的习惯。

7
为什么Java具有不同大小数字的原语?
在Java中有原始类型byte,short,int并long和同样的事情float和double。为什么必须要由一个人来设置原始值应使用多少个字节?是否只能根据传入的数字大小来动态确定大小? 我能想到的原因有两个: 动态设置数据大小将意味着它也需要能够动态更改。这可能会导致性能问题吗? 也许程序员不希望某人能够使用比特定大小更大的数字,并且这使他们受到限制。 我仍然认为通过使用单个int和float类型进行简单操作可能会获得很多收益,是否有特定的原因导致Java决定不走这条路?

7
模式与原理的区别
面向对象的设计模式和原理之间有什么区别?他们是不同的东西吗?据我了解,他们两个都试图实现一些共同的目标(例如灵活性)。那么我可以说模式是原则,反之亦然吗? 设计原理= SOLID(即依赖反转原理) 设计模式= Gof(即抽象工厂模式)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.