Questions tagged «java»

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

7
“数据隐藏”和“封装”有什么区别?
我正在阅读“实践中的Java并发性”,有人说:“幸运的是,相同的面向对象技术可以帮助您编写组织良好,可维护的类(例如封装和数据隐藏),也可以帮助您创建线程安全的类。” 问题#1-我从未听说过数据隐藏,也不知道它是什么。 问题2-我一直认为封装使用的是私有vs公共,实际上是在隐藏数据。 您能否解释一下什么是数据隐藏以及它与封装有何不同?

9
纯Java网络浏览器,实用吗?[关闭]
我知道可以使用Java Web浏览器,但是实用吗?我看过Lobo项目,必须承认我印象深刻,但是从我看来,该开发在2009年停止了。使用纯Java编码的浏览器(没有任何类型的WebKit Java绑定)能够与之抗衡吗?那些在Chrome或Firefox中名列前茅的产品,还是会固有地变慢,从而阻碍用户?
29 java  web  browser 

5
Java / C#为什么不能实现RAII?
问题:Java / C#为什么不能实现RAII? 澄清:我知道垃圾收集器不是确定性的。因此,使用当前的语言功能,不可能在范围出口处自动调用对象的Dispose()方法。但是,可以添加这种确定性功能吗? 我的理解: 我认为RAI​​I的实现必须满足两个要求: 1.资源的生存期必须绑定到范围。 2.隐式的。必须在没有程序员明确声明的情况下释放资源。类似于垃圾回收器无需显式语句即可释放内存。“隐含性”仅需要在使用该类时发生。当然,类库创建者必须显式实现析构函数或Dispose()方法。 Java / C#满足点1。在C#中,可以将实现IDisposable的资源绑定到“使用”范围: void test() { using(Resource r = new Resource()) { r.foo(); }//resource released on scope exit } 这不满足第2点。程序员必须将对象明确绑定到特殊的“使用”范围。程序员可能(并且确实)忘记将资源显式绑定到作用域,从而造成泄漏。 实际上,“使用”块已由编译器转换为try-finally-dispose()代码。它具有与try-finally-dispose()模式相同的显式性质。如果没有隐式发布,则作用域的钩子就是语法糖。 void test() { //Programmer forgot (or was not aware of the need) to explicitly //bind Resource to a scope. Resource r …

6
我应该将特定功能提取到功能中,为什么?
我有一个执行3个任务的大型方法,每个任务都可以提取到一个单独的函数中。如果我将为每个任务添加其他功能,那么它会使我的代码变得更好还是更坏,为什么? 显然,它将在主函数中减少代码行的数量,但是将有附加的函数声明,因此我的类将具有附加的方法,我认为这不好,因为这会使类变得更加复杂。 我应该在编写所有代码之前执行此操作,还是在完成所有操作然后提取函数之前将其保留?


6
为什么要使用反射?
我是Java的新手。通过学习,我读到反射被用来调用类和方法,并知道哪些方法没有实现。 什么时候应该使用反射,使用反射和实例化对象以及以传统方式调用方法之间有什么区别?
29 java  reflection 

9
运算符前后的换行符[关闭]
尽管Sun的Java代码约定建议将换行符放在操作员之前,但许多其他准则也对此表示反对。我看不出任何明显的利弊,因此使用其中一种样式相对于另一种样式是否有优势? String longVarName = a + b + c + d + e + f; 与 String longVarName = a + b + c + d + e + f;

2
以下(反)模式的名称是什么?它的优缺点是什么?
在过去的几个月中,我偶然发现了以下技术/模式。但是,我似乎找不到一个特定的名称,也不能百分百确定其所有优点和缺点。 模式如下: 在Java接口中,照常定义了一组常用方法。但是,使用内部类,默认实例会通过接口泄漏。 public interface Vehicle { public void accelerate(); public void decelerate(); public static class Default { public static Vehicle getInstance() { return new Car(); // or use Spring to retrieve an instance } } } 对我来说,最大的优势似乎在于,开发人员只需要了解接口,而无需了解其实现,例如,在他快速想要创建实例的情况下。 Vehicle someVehicle = Vehicle.Default.getInstance(); someVehicle.accelerate(); 此外,我已经看到该技术与Spring一起使用,以便根据配置动态提供实例。在这方面,它看起来也可以帮助模块化。 但是,我无法撼动这是滥用接口的感觉,因为它将接口与其实现之一结合在一起。(相关性反转原理等。)有人可以向我解释该技术的调用方式以及它的优缺点吗? 更新: 经过一段时间的考虑后,我重新检查并注意到,使用以下单例版本的模式的频率更高。在此版本中,公共静态实例通过接口公开,该接口仅初始化一次(由于字段为final)。另外,几乎总是使用Spring或将接口与实现分离的通用工厂来检索实例。 public interface Vehicle …


3
为什么Java布尔原始类型名称不是'bool'?
Java有 int 和 Integer boolean 和 Boolean 这似乎有点不一致,为什么不 bool与Boolean使用已建立的较短名称作为原始类型? 要么 integer与Integer保持类型名称一致? 我认为 C ++决定bool比Java决定使用很多时间boolean,也许还有一些(当时是非标准的)C扩展,所以对于来说,C会有历史优先权bool。我注意到我经常本能地一开始尝试使用bool(现代编辑器很快就发现了这一点,而无需进行额外的编译),因此很高兴知道当前事务状态的基本原理。 如果有人记得故事的一部分,甚至可以找到并链接到网络上相关的历史讨论,那将是很棒的。
28 java  history  boolean 

4
如何证明从Java 6迁移到Java 7的合理性?
我们正在从Java 6迁移到Java 7。该项目落后于进度,有被放弃的风险,在这种情况下,它将继续使用Java 6。 Java 7有哪些具体改进,我们可以与我们的经理一起使用,并说服他使用JDK 7是重要的?寻找我可以在Oracle Java 7(相对于Java 6)中突出显示的错误修复程序。就我而言,在安全性,性能,Java 2D /打印等方面的修复将更加畅销。例如,编译器修复不会有太大用处。 [我正在浏览许多站点,例如Oracle采用指南,错误数据库,有关Stack Overflow的问题 ]。 更新:感谢您的回答。我们将更新重新计划为下一个版本。我们最接近的是安全性。接受投票最高的答案。
28 java  migration 

10
习惯于静态语言的程序员如何应对缺少Javascript工具的问题
在我的大部分职业生涯中,我几乎都是使用编译语言(尤其是Java)进行编程的。关于Java,我最喜欢的事情之一是当使用Eclipse之类的工具时,您的生产率如何,实际编写的代码很少。 您可以: 轻松自动地重构您的方法和类 立即查看调用方法或使用常量的所有位置(Open Call层次结构/显示引用) 静态类型意味着您可以使用代码完成来显示对象上可用的所有参数/功能 按住Control键单击函数/成员/类名,直接进入其定义 所有这些功能使我觉得IDE是我最好的朋友。编写Java代码,尤其是了解其他人的程序变得容易得多。 但是,越来越多的人要求我使用Javascript,到目前为止,我的经验一直很消极。 特别是: 没有立即找到函数入口点的方法(纯文本搜索除外,纯文本搜索可能会导致随后在调用层次结构之后进一步搜索方法,而其中两到三个您忘记了从哪里开始) 将参数传递给函数,无法知道该参数上有哪些属性和函数(除了实际运行程序之外,导航至调用该函数的位置,并使用console.logs输出所有属性可用) 匿名函数通常用作回调,这经常导致混乱的代码路径,从而使您无法快速浏览。 可以肯定的是,JSLint在运行时会捕获一些错误,但即使那样,也不如直接在浏览器中的代码下具有红色波浪线那样方便。 结果是您几乎始终需要把整个程序放在脑子里。这极大地增加了编写复杂程序的认知负担。所有这些需要担心的额外东西,在我的大脑中为实际创造力和解决问题的空间减少了。 当然,将对象放在一起而不是编写整个正式的类定义会更快。但是,尽管程序可能会更容易些,编写起来更快,但以我的经验来看,它们却很难阅读和调试。 我的问题是,其他程序员如何应对这些问题?显然Javascript越来越流行,我读的博客都是关于人们如何使用Java的,而不是拼命尝试寻找解决这些问题的方法。 GWT允许您改为使用Java编写Javascript环境的代码,但它似乎没有我所期望的被广泛使用。实际上,人们似乎更喜欢Javascript用于复杂程序。 我想念什么?

6
有没有一本规范的书可以作为经验丰富的开发人员学习Java?[关闭]
在过去的5/6年中,我一直是.NET开发人员。我从来没有做过任何专业的Java开发,而我上一次真正接触它的时候大概是在大学里。我一直在玩Scala语言,但是一点也不认真。最近,已经为我提供了执行一些很酷的工作的机会,但是我使用Java而不是.NET。我认为我可以通过目前的技能熟练使用,这意味着我已经知道如何编程,并且熟悉C#和C ++等语言。因此,语法和所有这些语言内容确实不是问题。我需要一本非常好的参考书和一本有关如何用Java进行思考的书。每种语言/框架/堆栈都尝试以某种方式解决问题,并且我确信Java也不例外。 有哪些您不能没有的精彩Java书籍?是否有关于Java最重要部分的书籍必须首先理解? 附带说明,我将主要进行Java Web开发。关于持久性,框架,服务器等使用什么类型的东西,并不是真正100%的。
28 java  books 

9
为什么Scala没有用C或C ++实现
有人知道为什么Scala是用Java和.NET而不是C或C ++实现的吗?大多数语言都是用Cor C ++实现的(例如Erlang,Python,PHP,Ruby,Perl)。除了允许访问Java和.NET库之外,用Java和.NET实现的Scala的优点是什么? 更新 如果用C来实现,Scala不会获得更多好处,因为它可以进行更好的调整而不是依赖JVM?
28 java  c++  .net  c  scala 

5
Java包名称约定是否有缺陷?[关闭]
我们都熟悉反转域名的Java包名称约定。即www.evilcorp.com,按照惯例,将选择具有其java包com.evilcorp.stuff。 我越来越厌倦了这个。作为一名商业程序员,我一次又一次地遇到由于更名,收购或类似原因而导致的软件包名称完全不相关的情况。 在开源世界中,名称更改较少,因此有意义。然而,在我看来,许多(商业/内部)软件的保质期都比制造它们的组织的保质期长得多。 这个问题通常是通过采取营销部门的领导使用的名称的软件项目变得更糟大谈特谈他们使用是指某个项目。这个名称将在接下来的三个月内进行更改,以使皇帝的新衣服焕然一新。 因此,我几乎停止使用反向域作为程序包名称。当然,如果大规模进行,则存在名称冲突的风险,但是可以肯定的是,可以通过使用“唯一”软件名称,避免使用通用词或将反向域用于打算作为库出售/发布的项目来缓解这种情况。 。 其他想法?
28 java  naming 

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.