Tag: java

避免!=空语句

在Java编程时,我使用最多的惯例是在使用它之前testingobject != null 。 这是为了避免NullPointerException 。 我发现代码非常难看,而且变得不可读。 有没有一个很好的select呢? 如果你想访问这个对象的字段或方法,我想要解决testing每个对象的必要性。 例如: if (someobject != null) { someobject.doCalc(); } 在这种情况下,我将避免一个NullPointerException ,我不知道对象是否为null 。 作为结果,这些testing出现在我的代码中。

更改Javastring中的date格式

我有一个String表示一个date。 String date_s = "2011-01-18 00:00:00.0"; 我想将其转换为Date并以YYYY-MM-DD格式输出。 2011-01-18 我怎样才能做到这一点? 好的,基于我在下面检索的答案,这里是我尝试过的东西: String date_s = " 2011-01-18 00:00:00.0"; SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss"); Date date = dt.parse(date_s); SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd"); System.out.println(dt1.format(date)); 但它输出02011-00-1而不是2011-01-18所需的。 我究竟做错了什么?

什么是反思,为什么它有用?

什么是反思,为什么它有用? 我对Java特别感兴趣,但我认为任何语言的原则都是一样的。

Java通过套接字传输多个文件

好吧,试图通过套接字传输指定的文件目录,从数组列表中删除目录对象,所以只剩下文件,并在同一个套接字上一一传输。 这里的数组列表只填充了文件,没有目录。 下面分别为客户端和服务器接收和发送代码。 代码运行良好没有错误,除了所有的数据被写入到第一个文件。 后续文件在服务器文件夹中创build,但是它们是0字节。 任何input将不胜感激。 这是接收文件的服务器代码 public void receive(){ try { DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream())); DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); //read the number of files from the client int number = dis.readInt(); ArrayList<File>files = new ArrayList<File>(number); System.out.println("Number of Files to be received: " +number); //read file names, add files to arraylist […]

为什么我需要重写Java中的equals和hashCode方法?

最近我读了这个开发工程文件 。 这个文档是关于如何有效而正确地定义hashCode()和equals() ,但是我无法弄清楚为什么我们需要重写这两个方法。 我怎样才能有效地实施这些方法?

随机洗牌数组

我需要随机洗牌下面的数组: int[] solutionArray = {1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1}; 有什么function吗?

Javagenerics – types擦除 – 何时发生

我在Sun的网站上阅读了Java的types删除。 types擦除何时发生? 在编译时/运行时? 当类加载/运行时? 当类被实例化? 很多站点(包括上面提到的Sun教程)都说在编译时会发生types擦除。 如果types信息在编译时被彻底删除,那么在调用没有types信息或错误types信息的情况下,调用使用generics的方法时,JDK检查types兼容性如何。 考虑下面的例子:说A类有一个方法,为empty(Box<? extends Number> b) 。 我们编译A.java并获取类文件A.class。 现在我们创build另一个B类,它使用非参数化参数(原始types) – empty(new Box())调用空方法。 如果我们在类path中使用A.class编译B.java,那么javac足够聪明,可以引发一个警告。 所以A.class 中存储了一些types信息。 我的猜测是,类加载时会发生types删除,但这只是一个猜测。 那么这是什么时候发生的?

如何在Java中声明和初始化一个数组?

如何在Java中声明和初始化一个数组?

不能引用在不同方法中定义的内部类中的非最终variables

编辑:我需要改变几个variables的值,因为他们通过计时器运行几次。 我需要通过定时器每次迭代不断更新值。 我不能将值设置为final,因为这将阻止我更新值,但是我得到了我在下面的初始问题中描述的错误: 我以前写过以下内容: 我得到错误“不能引用在一个不同的方法定义的内部类中的非最终variables”。 这种情况发生在称为价格的双倍价格和称为priceObject的价格上。 你知道我为什么会遇到这个问题吗? 我不明白为什么我需要最后的宣言。 另外,如果你可以看到我正在做的是什么,我该怎么做才能解决这个问题。 public static void main(String args[]) { int period = 2000; int delay = 2000; double lastPrice = 0; Price priceObject = new Price(); double price = 0; Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { price = priceObject.getNextPrice(lastPrice); System.out.println(); lastPrice = price; […]

将ISO 8601兼容的string转换为java.util.Date

我试图将一个ISO 8601格式的string转换为一个java.util.Date。 如果与Locale(比较样本)一起使用,我发现模式“yyyy-MM-dd'T'HH:mm:ssZ”符合ISO8601标准。 但是,使用java.text.SimpleDateFormat,我不能转换格式正确的string“2010-01-01T12:00:00 + 01:00”。 我必须先将它转换为“2010-01-01T12:00:00 + 0100”,不用冒号。 所以,目前的解决scheme是 SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY); String date = "2010-01-01T12:00:00+01:00".replaceAll("\\+0([0-9]){1}\\:00", "+0$100"); System.out.println(ISO8601DATEFORMAT.parse(date)); 这显然不是那么好。 我错过了什么或有更好的解决scheme吗? 回答 感谢JuanZe的评论,我发现了Joda-Time的魔法, 这里也有描述 。 所以,解决scheme是 DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis(); String jtdate = "2010-01-01T12:00:00+01:00"; System.out.println(parser2.parseDateTime(jtdate)); 或者更简单地说,通过构造函数使用默认的parsing器: DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ; 对我来说,这很好。