Tag: java

Javaexception有多慢?

问题:Java中的exception处理实际上很慢吗? 传统的观点以及大量的Google结果都表明,特殊的逻辑不应该用于Java中的正常程序stream程。 通常有两个原因, 它真的很慢 – 甚至比普通代码慢一个数量级(所给出的原因各不相同), 和 它杂乱无章,因为人们只希望在特殊代码中处理错误。 这个问题是关于#1。 作为一个例子, 这个页面将Javaexception处理描述为“非常慢”,并将慢速与创buildexception消息string联系起来 – “这个string被用于创build抛出的exception对象,这不是很快。 Java中的有效exception处理( The Effective Exception Handling)在Java中表示,“其原因是由于exception处理的对象创build方面的原因,从而导致exception抛出exception缓慢”。 另一个原因是堆栈跟踪的生成是减慢速度。 我的testing(在32位Linux上使用Java 1.6.0_07,Java HotSpot 10.0)表明exception处理不会比普通代码慢。 我试着在执行一些代码的循环中运行一个方法。 在该方法的最后,我使用一个布尔值来指示是返回还是抛出 。 这样的实际处理是一样的。 我试着以不同的顺序运行这些方法,并平均testing时间,认为这可能是JVM热身。 在我所有的testing中,投掷的速度至less与回归速度一样快,如果不快的话(速度快3.1%)。 我对我的testing是错误的可能性完全保持开放,但是在代码示例,testing比较或上一两年的结果中,我没有看到任何东西,它们显示Java中的exception处理实际上是慢的。 导致我走这条路的是我需要使用的API,它将exception作为正常控制逻辑的一部分。 我想纠正他们的用法,但现在我可能无法。 相反,我会不得不赞扬他们的前瞻性思维? 在“ 即时编译中的高效的Javaexception处理”一文中 ,作者提出,即使没有抛出任何exception,单独存在exception处理程序也足以防止JIT编译器正确优化代码,从而降低其速度。 我还没有testing过这个理论。

你如何断言在JUnit 4testing中引发了某个exception?

我怎样才能使用JUnit4惯用testing一些代码抛出exception? 虽然我当然可以做这样的事情: @Test public void testFooThrowsIndexOutOfBoundsException() { boolean thrown = false; try { foo.doStuff(); } catch (IndexOutOfBoundsException e) { thrown = true; } assertTrue(thrown); } 我记得有一个注释或一个Assert.xyz或者一个远远不够灵活的东西 ,在这种情况下,JUnit的精神要远不止于此。

内部类可以访问但不更新值 – AsyncTask

我正在尝试使用Android的AsyncTask解压缩文件夹。 这个类(称为Decompress)是Unzip一个内部类,Unzip本身是一个非活动类。 伪代码是: public class Unzip { private String index; private String unzipDest; //destination file for storing folder. private Activity activity; private boolean result; //result of decompress. public void unzip(String loc) { Decompress workThread = new Decompress(loc, activity); workThread.execute(); if(unzip operation was successful) { display(index); } //Class Decompress: class Decompress extends AsyncTask<Void, Integer, Boolean> { […]

摇摆:将切换button与一组button连同相应的菜单项一起链接

对于学校项目,我需要制作一个简单的绘画应用程序,可以绘制线条,椭圆形和矩形。 该分配指定我需要每种形状的工具栏button和菜单项。 我想通过在工具栏中的buttonJToggleButtons和菜单项JRadioButtonMenuItems超出一点。 此外,我希望当您select其中一个工具栏button时,它会取消select其他菜单项,select适当的菜单项,并取消select其他菜单项。 select其中一个菜单项也是如此。 我知道我可以将任何AbstractButton与一个ButtonGroup分组,但是我不确定这是否是正确的方法,因为虽然它处理一个button的“组”,但我不确定它是否可以处理两个并行的组。 这样做没有ButtonGroup意味着在6个事件监听器的每一个,我将不得不手动取消select其他button,每对将调用相同的代码来设置形状types。 我也可以做两个ButtonGroup ,一个用于菜单,一个用于工具栏,但是我也必须复制形状types设置代码。 在任何一种情况下,我也冒着设置一个button的菜单的风险,它设置一个菜单项,设置一个button,广告infintum。 解决这个问题的最好方法是什么? (能够用Netbeans GUIdevise器解决问题的奖励点;它更简单)

如何在Java中使用Javastring?

我正在使用Java处理一些Java源代码。 我正在提取string文字并将它们提供给一个带有String的函数。 问题是我需要将非转义版本的string传递给函数(即,这意味着将\n转换为换行符, \\转换为单个\等)。 Java API中是否有这样的函数? 如果没有,我可以从某个图书馆获得这样的function吗? Java编译器显然需要做这个转换。 PS – 如果有人想知道:我试图在反编译的混淆Java文件中unobfuscatestring文字

使用自定义sorting顺序对对象的ArrayList进行sorting

我正在寻找实施我的地址簿应用程序的sortingfunction。 我想sorting一个ArrayList<Contact> contactArray 。 Contact是一个包含四个字段的类别:姓名,家庭号码,手机号码和地址。 我想按namesorting。 我怎样才能写一个自定义的sortingfunction来做到这一点?

在Java客户端中接受服务器的自签名SSL证书

这看起来像一个标准的问题,但我无法在任何地方find明确的方向。 我有Java代码尝试连接到可能自签名(或过期)证书的服务器。 该代码报告以下错误: [HttpMethodDirector] I/O exception (javax.net.ssl.SSLHandshakeException) caught when processing request: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 据我了解,我必须使用keytool,并告诉java,这是可以的,以允许此连接。 解决这个问题的所有指令都假设我完全熟悉keytool,比如 为服务器生成私钥并将其导入到密钥库中 有没有人可以发布详细的说明? 我正在运行Unix,所以bash脚本将是最好的。 不知道是否重要,但代码在jboss中执行。

为什么this()和super()必须是构造函数中的第一个语句?

Java要求,如果你在构造函数中调用this()或super(),它必须是第一个语句。 为什么? 例如: public class MyClass { public MyClass(int x) {} } public class MySubClass extends MyClass { public MySubClass(int a, int b) { int c = a + b; super(c); // COMPILE ERROR } } Sun编译器说“调用super必须是构造函数中的第一条语句”。 Eclipse编译器说:“构造函数调用必须是构造函数中的第一个语句”。 不过,你可以通过重新安排代码来解决这个问题: public class MySubClass extends MyClass { public MySubClass(int a, int b) { super(a + b); // […]

什么是对象序列化?

什么是“对象序列化”的意思? 你能用一些例子来解释吗?

最快的方法来确定一个整数的平方根是一个整数

我正在寻找最快的方式来确定一个long价值是一个完美的平方(即其平方根是另一个整数)。 我已经通过使用内置的Math.sqrt()函数,简单的方法做到了这一点,但是我想知道是否有办法通过将自己限制为只有整数的域来更快地实现。 维护一个查找表是不切实际的(因为大约有2 31.5个整数的平方小于2 63 )。 这是我现在正在做的非常简单直接的方式: public final static boolean isPerfectSquare(long n) { if (n < 0) return false; long tst = (long)(Math.sqrt(n) + 0.5); return tst*tst == n; } 注意:我在许多Project Euler问题中使用了这个函数。 所以没有人会永远保持这个代码。 而这种微观优化实际上可能会有所作为,因为部分挑战是在不到一分钟的时间内完成每一个algorithm,而这个function在一些问题上需要被调用数百万次。 更新2 :由A. Rex发布的新解决scheme已被certificate更快。 在前10亿个整数的运行中,解决scheme只需要使用原始解决scheme的34%。 虽然John Carmack对n的小值有点更好,但与此解决scheme相比,其好处却相当小。 A. Rex解决scheme转换为Java: private final static boolean isPerfectSquare(long n) { // Quickfail if( n < […]