Java:如何有效地检查空指针

有一些模式用于检查方法的参数是否已被赋予null值。 首先是经典之作。 它在自制代码中很常见,并且很明显可以理解。 public void method1(String arg) { if (arg == null) { throw new NullPointerException(“arg”); } } 其次,您可以使用现有框架。 该代码看起来更好一点,因为它只占用一行。 缺点是它可能会调用另一个方法,这可能会使代码运行速度稍慢,具体取决于编译器。 public void method2(String arg) { Assert.notNull(arg, “arg”); } 第三,你可以尝试调用一个没有副作用的方法。 这可能看起来很奇怪,但它比上述版本的令牌更少。 public void method3(String arg) { arg.getClass(); } 我没有看到广泛使用的第三种模式,感觉就像我自己发明了它一样。 我喜欢它的简洁性,因为编译器很有可能完全优化它或将其转换为单个机器指令。 我还使用行号信息编译我的代码,因此如果抛出NullPointerException ,我可以将其追溯到确切的变量,因为每行只有一个这样的检查。 您更喜欢哪种检查?为什么?

System.arraycopy(…)的时间复杂度?

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)是一种本机方法。 这种方法的时间复杂度是多少?

如何在控制台中返回到行的开头?

如何返回到行的开头并覆盖控制台上已输出的内容? 以下似乎不起作用: System.out.print(mystuff+’\r’);

什么时候可以对业务逻辑使用exception处理?

我认为可以接受的是,作为Java中的一般规则(也许是任何具有exception处理的语言),应该尽量避免使用exception处理来实际处理业务逻辑。 一般来说,如果预计会发生某种情况,那么应该检查它并直接处理它,而不是依赖于exception处理来为您进行检查。 例如,以下不被视为良好做法: try{ _map.put(myKey, myValue); } catch(NullPointerException e){ _map = new HashMap(); } 相反,延迟初始化应该更像这样: if(_map == null){ _map = new HashMap(); } _map.put(myKey, myValue); 当然,可能存在比简单处理延迟初始化更复杂的逻辑。 因此,鉴于此类事情通常不受欢迎……如果有的话,依赖于某些业务逻辑发生的exception是一个好主意吗? 是否准确地说任何一个人感到被迫使用这种方法的实例是否真的突出了所使用的API的弱点?

从Java中的文件中读取大量数据

我的文本文件包含以下forms的1 000 002数字: 123 456 1 2 3 4 5 6 …. 999999 100000 现在我需要读取该数据并将其分配给int变量(前两个数字)和其余所有( 1 000 000个数字)到数组int[] 。 这不是一项艰巨的任务,但是 – 这很糟糕。 我的第一次尝试是java.util.Scanner : Scanner stdin = new Scanner(new File(“./path”)); int n = stdin.nextInt(); int t = stdin.nextInt(); int array[] = new array[n]; for (int i = 0; i < n; i++) { array[i] = […]

无法在JSP中设置标头。 响应已经提交

WebSphere记录警告消息“SRTServletRes W警告:无法设置标头。 对于一个JSP请求已经提交的响应。 我稍后需要在代码中使用respone标头。 我做了一些研究,并了解到Servlet正在尝试向输出流发送更多数据,但该流已经提交。 我不明白为什么这只发生在这个特定的JSP上,因为这个Servlet代码适用于其他JSP。 此页面未重定向,我收到响应,没有响应标头。

使用org.apache.commons.net.ftp.FTPClient保护FTP

有没有办法用org.apache.commons.net.ftp.FTPClient实现安全的FTP? 如果没有,Java的其他选项有哪些?

找不到当前线程的会话(Spring 3.1.X和Hibernate 4)

我正在尝试使用Spring 3.1和Hibernate 4来设置我的项目。我一直在线学习一些教程。 我得到一个奇怪的错误,根据Spring论坛应该已经修复了Spring 3.1。 春虫追踪器 当我的服务调用getCurrentSession() ,它会抛出以下exception: org.hibernate.HibernateException: **No Session found for current thread**] with root cause org.hibernate.HibernateException: No Session found for current thread at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:881) ****编辑:根据Spring Spring 3.1 Documentation for Transactions更新了我的spring-dao.xml。 我尝试用org.apache.commons.dbcp.BasicDataSource交换我的数据源。 我的配置中是否有任何可能导致此问题的属性? **** 这是我的spring-dao.xml: hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect 我的用户bean(User.java) package com.foo.lystra.beans; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; […]

如何排序对象的Arraylist

我有ArrayList,其中包含足球队(Team Team)。 团队有积分,我想按点数对它们进行排序。 public class Team { private int points; private String name; public Team(String n) { name = n; } public int getPoints { return points; } public void addPoints(boolean win) { if (win==true) { points = points + 3; } else if (win==false) { points = points + 1; } } //… } […]

在Eclipse中调试Java时如何使getResourceAsStream工作?

这是令人难以置信的……当我在包含文本文件的打包JAR文件上运行Java时,我可以使getResource()和getResourceAsStream()正常工作。 (供参考,请参阅有关访问资源的Sun文档)当我在Eclipse中运行它时,我似乎无法使相同的程序正常工作,即使我已将我的文本文件放在与编译的.class文件相同的树中 你们其中一个人可以指出我的任何细微之处,以确保getResource()和getResourceAsStream()函数正常工作吗? 我有预感它与CLASSPATH和/或Eclipse将.class文件自动编译。 (我注意到当我运行Ant时,它会编译自上次Ant构建以来已更改的所有Java文件,即使Eclipse已经编译了这些Java文件。)