Questions tagged «java»

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

6
首选类成员还是在内部方法之间传递参数?
假设在一个类的私有部分中有一个供多个私有方法使用的值。人们喜欢将其定义为类的成员变量还是将其作为参数传递给每个方法?为什么? 一方面,我可以看到一个论点,即减少类中的状态(即成员变量)通常是一件好事,尽管如果在类的所有方法中重复使用相同的值,那似乎是一个理想的选择。表示为类状态的候选对象,以使代码看起来更清晰(如果没有其他内容)。 编辑: 为了澄清提出的一些评论/问题,我不是在谈论常量,这与任何特定情况都没有关系,而只是与其他人谈论的一种假设。 暂时忽略OOP角度,以下是我想到的特定用例(假设通过引用传递只是为了使伪代码更整洁) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) 所以我的意思是,多个功能之间存在一些共同的变量-在我看来,这是由于较小功能的链接所致。在OOP系统中,如果这些都是类的所有方法(例如,由于通过从大型方法中提取方法进行重构而导致的结果),则该变量可以全部传递给它们,也可以是类成员。

3
为什么在C样式语言中逻辑NOT运算符是“!”而不是“ ~~”?
对于二进制运算符,我们同时具有按位和逻辑运算符: & bitwise AND | bitwise OR && logical AND || logical OR 但是,NOT(一元运算符)的行为有所不同。有〜用于按位和!为逻辑。 我认识到与AND和OR相对,NOT是一元运算,但是我无法想到设计师为何选择偏离单数位和双数逻辑的原则,而是改用其他字符的原因。我猜您可能读错了它,就像总是返回操作数值的双按位运算一样。但这对我来说似乎不是一个真正的问题。 我有什么原因想念吗?
39 java  c#  c++  c 


7
创建块只是为了减小变量的范围是否有意义?
我正在用Java编写程序,有一次我需要为密钥库加载密码。只是为了好玩,我尝试通过执行以下操作使密码尽可能短: //Some code .... KeyManagerFactory keyManager = KeyManagerFactory.getInstance("SunX509"); Keystore keyStore = KeyStore.getInstance("JKS"); { char[] password = getPassword(); keyStore.load(new FileInputStream(keyStoreLocation), password); keyManager.init(keyStore, password); } ... //Some more code 现在,在这种情况下,我知道这有点愚蠢。我还可以做很多其他事情,其中​​大多数实际上更好(我根本不能使用变量)。 但是,我很好奇在某些情况下这样做不是那么愚蠢。我唯一想到的另一件事是,如果您想重用通用变量名,如count或temp,但是良好的命名约定和简短的方法使其不太可能有用。 在某种情况下,仅使用块来减小变量范围有意义吗?
38 java  variables  scope 

2
现代语言是否仍使用解析器生成器?
我是研究关于gcc编译器套件在维基百科这里,当这想出了: GCC开始使用由Bison生成的LALR解析器,但后来逐渐切换为手写递归下降解析器。2004年用于C ++,2006年用于C和Objective-C。目前,所有前端都使用手写递归下降解析器 因此,在最后一句话中,(以及我所信任的维基百科),我可以肯定地说:“ C(gcc),C ++(g ++),Objective-C,Objective-C ++,Fortran(gfortran),Java(gcj), Ada(GNAT),Go(gccgo),Pascal(gpc),... Mercury,Modula-2,Modula-3,PL / I,D(gdc)和VHDL(ghdl)”都是前端,不再使用解析器生成器。也就是说,它们都使用手写的解析器。 我的问题是,这种做法无处不在吗?具体来说,我在[Python,Swift,Ruby,Java,Scala,ML,Haskell]中寻找x的“ x的标准/官方实现是否具有手写的解析器”的确切答案?(实际上,这里也欢迎提供其他语言的信息。)我敢肯定,经过大量的挖掘,我可以自己找到它。但是,我也相信社区很容易对此负责。谢谢!


9
编程中的内存管理是否已成为无关紧要的问题?
背景信息 我重新访问了一个我很久没去过的古老(但很棒)的网站-Alioth Language Shootout(http://benchmarksgame.alioth.debian.org/)。 几年前,我开始使用C / C ++进行编程,但是由于参与的项目中的语言限制,从那时起,我几乎一直只在Java中工作。我不记得这些数字,而是想大致了解一下Java的状况。在资源使用方面与C / C ++背道而驰。 该执行时间仍然比较好,与Java在表现最差的4倍比C / C ++慢,但平均约(或以下)2倍。由于Java本身实现的性质,这不足为奇,并且它的性能时间实际上比我预期的要短。 真正的难题是内存分配 -最糟糕的是,Java分配了: 内存比C高52倍 比C ++高25倍。 52倍的内存...绝对令人讨厌,对吗?...还是?内存现在相对便宜。 问题: 如果我们不是在对工作内存(即嵌入式系统等)有严格限制的目标平台上说话,那么今天选择通用语言时是否应该考虑内存使用情况? 我之所以提出这样的要求,部分原因是因为我正在考虑迁移到Scala作为我的主要语言。我非常喜欢它的功能方面,但是从内存上看,它比Java还要昂贵。但是,由于内存似乎正在以每年更快,更便宜和更丰富的方式(似乎越来越难找到没有至少4GB DDR3 RAM的家用笔记本电脑),因此可以不争辩说资源管理正在变得越来越多与(可能需要昂贵的实现方式)高级语言功能无关,后者可以更快地构建更具可读性的解决方案?

2
您应该从库代码登录吗?
如果我正在开发Java库,那么从库代码中发出日志语句是否是一种好习惯? 在库中记录日志将使调试和故障排除更加透明。但是,另一方面,我不喜欢用日志记录语句乱扔我的库代码。是否还有任何性能影响需要考虑?
38 java  logging 

4
Java 1.0的“核心” API包是什么?
在阅读有关Google v Oracle案的信息时,我遇到了这些问题(显然是从主持审判的法官那里获得的) ... 是否同意至少在1996年时以下情况成立? 以下是Java应用程序编程接口的核心:java.lang,java.util和java.io。 Java编程语言是否引用或要求上述三个之外的任何方法,类或包? ... 资料来源:Groklaw 显然有很多法律后果,Google和Oracle在某些方面可能不同意,我不在乎。将法律交给律师。 但是,我怀疑这里有一段有趣的历史。 我的问题是(谁的人第一次做任何Java编码2001年在1.3版本左右),在Java的1.0版本是什么,需要外java.lang,java.util和java.io编译一个有效的Java程序? 作为一个示例(使用C#5.0),await关键字依赖于(除其他外)。没有该类,编译器将无法正常运行。Task<T> GetAwaiter() 同样,是否有依赖于其他软件包的核心运行时功能(例如ClassLoader *)? 我会出于好奇而问,对于最低限度可行的Java(该语言,忽略其周围的所有合法内容)到底需要什么是很有意思的。 *我假设ClassLoader甚至是Java 1.0中的功能,它是7.0中规范的一部分,并且可能是许多早期版本。
38 java  history 

5
学习Python的Java开发人员:我需要包扎哪些概念?
背景:我已经完成了一些教程并编写了一些小项目。使用Google和StackOverflow一切都很好。 在过去的几天里,我几次想知道“我想念什么?” -我觉得我在用Python编写代码时仍在思考Java。 StackOverflow上的这个问题充满了关于学习Python需学习哪些资源的提示,但我仍然觉得我是Java开发人员,有字典(无需双关语)可以翻译成Python。 我真正想做的是重构我的头脑,使其能够编写Pythonic Python而不是伪装成Python的Java,而又不会失去我的Java技能。 因此,我的问题的症结在于:Java开发人员真正需要学习什么概念才能思考Pythonic?这包括需要学习的所有内容。 注意:我是在询问语言概念,而不是语言语法。

4
为什么更喜欢非静态内部类而不是静态内部类?
这个问题是关于将Java中的嵌套类做成静态嵌套类还是内部嵌套类。我在这里和Stack Overflow上进行了搜索,但是实际上找不到关于此决定的设计含义的任何问题。 我发现的问题是关于静态和内部嵌套类之间的区别的,这对我来说很明显。但是,我还没有找到令人信服的理由在Java中使用静态嵌套类-匿名类除外,我不考虑这个问题。 这是我对使用静态嵌套类的影响的理解: 更少的耦合:由于类不能直接访问其外部类的属性,因此通常得到的耦合较少。较少的耦合通常意味着更好的代码质量,更容易的测试,重构等。 Single Class:类加载器不需要每次都照顾一个新类,我们创建外部类的对象。我们只是一遍又一遍地获得同一类的新对象。 对于一个内部类,我通常会发现人们认为访问外部类的属性是有利的。从设计的角度来看,我希望在这方面有所不同,因为这种直接访问意味着我们具有很高的耦合度,并且如果我们想将嵌套类提取到其单独的顶层类中,则只能在本质上转向将其转换为静态嵌套类。 所以我的问题归结为:我是否认为非静态内部类可用的属性访问会导致较高的耦合度,从而导致较低的代码质量,我是错误的,并且据此我推断(非匿名)嵌套类应一般是静态的? 或者换句话说:为什么有一个令人信服的理由为什么人们更喜欢嵌套的内部类?

8
在Java中使用`this`关键字可以接受的样式是什么?
我来自Python或Javascript之类的语言(以及其他一些不太面向对象的语言),并且我试图提高我的Java工作知识,而我只是以肤浅的方式知道这些知识。 总是this在当前实例属性之前添加前缀是否被认为是不好的做法?我觉得写起来更自然 ... private String foo; public void printFoo() { System.out.println(this.foo); } ... 比 ... private String foo; public void printFoo() { System.out.println(foo); } ... 因为它可以帮助我区分实例属性和局部变量。 当然,在像Javascript这样的语言中,始终使用会更有意义this,因为可以嵌套更多的函数,因此局部变量来自更大的作用域。据我了解,在Java中,这样的嵌套是不可能的(内部类除外),因此可能不是什么大问题。 无论如何,我都倾向于使用this。会觉得很奇怪而不是习惯吗?

12
资深程序员使用了最差的编程实践
我知道说起来似乎很奇怪,但是工作中的一名程序员故意使用了一些不良的编程实践!我会解释。首先,我要说他是一个有才华的人,大部分时间他都会编写可理解的代码。 他被要求在以Java编写的Web应用程序项目上实施许可。由于它是Java,因此如果真的愿意,人们可能会黑客打开罐子并读取其中编写的类和方法的名称。他对这个问题的解决方案是,从字面上说来笨拙地调用不太明显的名称和变量,并将它们植入已经拥挤的类中,而不是生成新类。 他的理由是,如果黑客想要切换某些类以绕过许可检查(并因此获得产品的免费副本),那么如果不清楚哪种方法,他将花费更多的时间。执行这些特定任务。只有在他完成之后,我才与他面对面,这表明我们也许可以购买某种混淆器库来为我们做,同时保持良好的编程习惯。他声称没有时间或资源来寻找这种解决方案。 ..这让我陷入了困境。我是否正在寻找Java中的混淆器库并修复他的旧代码(对于重塑他的代码可能有些麻烦),还是我将其保留下来,以至于让我感到无休止?

17
我如何对自己的编程技能更有信心?[关闭]
编程对我来说并不陌生。我最初在12岁时开始做标记(HTML,现在请不要嘲笑我),在13岁时我开始做一些BASIC编程(此时我对Flowcharts,Pseudocodes非常了解),但后来我被告诫高中时期的生物学,因此错过了诸如C,Java等语言的“真实”编程知识。我为UG BE学习了CS(与BS类似,但更理论化)。我自己(在较小程度上)学习了C&C ++(我的教授感到非常痛苦,并且课堂上充斥着代码小丑(谁在学校已经学过了,因此没有注意课堂,也没有让像我这样的小凡人也不必专心听课)),并可以制作出很棒的加法或乘法程序(现在甚至是花木园的程序) 我的主要问题是,我总是对自己有限的编程技能感到不足和窒息,而对代码丑陋不屑一顾(相信我,我在很久以前就遇到过这个网站,但现在可能会鼓起勇气进行实际发布一个问题),有时甚至因上述无能而感到沮丧。大多数人说,编程不一定与语言有关,而是与人的心态以及他们用来解决问题/问题的技术有关。我同意这样的观点,但是我能获得这样的“心态”吗?如果这样的话,我应该如何进行“编程/编码”?如果有什么设定的方法和步骤可以最有效地达到“禅宗”呢?编码”。我该怎么做?同样,如果某些圣徒想指导这件被压倒的$#!^也不会有什么坏处。 PS:我将永远感激任何认为我值得他们度过时光的人,并且作为奖励,我将命名为我随他们发行的第一款软件。(如果我要运送一个,即) TL; DR:从未真正学习过“编程/编码”,即使我尝试也无法解决问题。帮我!

6
使用TDD的复杂代码的好例子[关闭]
在大型,现实生活中,复杂的项目中使用TDD的一个很好的例子是什么?到目前为止,我所看到的所有示例都是出于书籍或纸张目的的玩具项目... 您能命名一个使用TDD的开源项目吗?最好使用C ++,但我可以阅读Java和C#或其他类似语言。
37 java  c#  open-source  c++  tdd 

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.