Java中的代码优化
我有一个打印子目录创建日期的代码。我得到了预期的输出,但我编写代码的方式并不好,我认为可以用更好的方式对其进行优化。如您所见,for循环中有三行代码,每次for循环运行时都会执行这些代码,这增加了复杂性Java中的代码优化,java,Java,我有一个打印子目录创建日期的代码。我得到了预期的输出,但我编写代码的方式并不好,我认为可以用更好的方式对其进行优化。如您所见,for循环中有三行代码,每次for循环运行时都会执行这些代码,这增加了复杂性 public static void main(String aa[]) throws IOException { DateFormat simpleDateFormat = new SimpleDateFormat("MM-dd-yyyy"); File fi
public static void main(String aa[]) throws IOException
{
DateFormat simpleDateFormat = new SimpleDateFormat("MM-dd-yyyy");
File file = new File("G:\\TestFiles");
File[] files = file.listFiles();
for(File subDir: files)
{
BasicFileAttributes attribute = Files.readAttributes(subDir.toPath(), BasicFileAttributes.class);
FileTime filetime = attribute.creationTime();
String strDate = simpleDateFormat.format(filetime.toMillis());
System.out.println(strDate);
}
}
我试图以这样的方式编写代码:在for循环内部,我应该只有print语句,其余三行应该在for循环外部。我采用的一种方法是声明子文件夹的路径,但它没有给出子文件夹的正确创建日期。对我来说很合适……您可以将其拆分为:
final DateFormat simpleDateFormat = new SimpleDateFormat("MM-dd-yyyy");
final File file = new File("G:\\TestFiles");
for (File subDir : file.listFiles()) {
System.out.println(simpleDateFormat.format(Files.readAttributes(file.toPath(), BasicFileAttributes.class)
.creationTime().toMillis())
);
}
…但是请注意
file.listFiles()
,因为您可能很容易得到一个NPE(尽管您也没有在原始代码中检查它)。它对我来说很好…您可以将其拆分为:
final DateFormat simpleDateFormat = new SimpleDateFormat("MM-dd-yyyy");
final File file = new File("G:\\TestFiles");
for (File subDir : file.listFiles()) {
System.out.println(simpleDateFormat.format(Files.readAttributes(file.toPath(), BasicFileAttributes.class)
.creationTime().toMillis())
);
}
…但是请注意file.listFiles()
,因为您可能很容易获得NPE(尽管您也没有在原始代码中检查它)。
你的问题不清楚你所说的优化是什么意思
在环路外移动线路
在for
循环内执行的代码行需要在循环内运行。这一点没有什么不优化的。我在代码中没有看到任何可以移动到循环之外的内容
如果您担心创建的对象几乎会立即被销毁并成为JVM垃圾收集器的“垃圾”…请停止担心。现代JVM经过了非常好的磨练和优化,适合于这种短期对象。不要在一个长时间运行的循环(几十万次或数百万次迭代)中轻率地创建这样的对象,但也不要为此烦恼
同样,请参见下面的代码示例。注意我是如何将时区、区域设置和格式化程序放在循环之前的。这些行在for
循环中也可以正常工作,但它们会重复执行并创建新实例,而没有任何好处。这三个特定的对象是为了重用而构建的,所以我将它们移到了顶部。在起草代码时,我可能会将它们放在循环中,然后将它们标识为有资格移出循环
少行
如果优化意味着为了缩短代码而减少行数,我强烈建议不要这样做,原因有三
- 代码的可读性比行数重要得多。程序员需要能够轻松阅读和理解代码,而不是破译代码
- 如果有简单的短行代码,调试就容易多了。我所说的“短”是指专注于正在完成的一个(或几个)特定操作(而不是实际的线路长度)。如果一行中发生太多嵌套操作,则调试时跟踪值和效果会变得更加复杂
- 像Oracle这样的现代JVM技术在编译和运行时优化代码方面做得非常出色。当给出相对简单的代码行时,这些优化将变得最强大。使代码过于密集或“聪明”实际上会减少Java编译器/运行时优化的机会
2014-04-19
2010-10-12
2015-06-21
优化
你的问题不清楚你所说的优化是什么意思
在环路外移动线路
在for
循环内执行的代码行需要在循环内运行。这一点没有什么不优化的。我在代码中没有看到任何可以移动到循环之外的内容
如果您担心创建的对象几乎会立即被销毁并成为JVM垃圾收集器的“垃圾”…请停止担心。现代JVM经过了非常好的磨练和优化,适合于这种短期对象。不要在一个长时间运行的循环(几十万次或数百万次迭代)中轻率地创建这样的对象,但也不要为此烦恼
同样,请参见下面的代码示例。注意我是如何将时区、区域设置和格式化程序放在循环之前的。这些行在for
循环中也可以正常工作,但它们会重复执行并创建新实例,而没有任何好处。这三个特定的对象是为了重用而构建的,所以我将它们移到了顶部。在起草代码时,我可能会将它们放在循环中,然后将它们标识为有资格移出循环
少行
如果优化意味着为了缩短代码而减少行数,我强烈建议不要这样做,原因有三
- 代码的可读性比行数重要得多。节目