Это потому, что Java выполняет статический раздел, чтобы он был объявлен. В вашем случае последовательность
Когда # 1 выполняется, obj все еще не инициализирован , поэтому он печатает нуль. Попробуйте следующее, и вы увидите разницу:
class MyClass {
private static final Object obj = new Object();
private static MyClass myClass = new MyClass();
public MyClass() {
System.out.println(obj); // will print null once
}
}
Вообще говоря, лучше избегать такой конструкции все вместе. Если вы пытаетесь создать синглтон, вот как выглядит этот фрагмент кода:
class MyClass {
private static final MyClass myClass = new MyClass();
private Object obj = new Object();
private MyClass() {
System.out.println(obj); // will print null once
}
}
В системах на базе Linux данные, полученные с помощью filesize()
, «statcached».
Попробуйте вызвать clearstatcache();
перед вызовом filesize.
Согласно руководству PHP:
Результаты этой функции кэшируются. Подробнее см. Clearstatcache ().
blockquote>http://us2.php.net/manual/en/function.filesize.php
В основном, вы должны очистить кеш статистики после операции с файлом:
$fileOut = fopen($filepath.$filename, "ab") fwrite($fileOut, base64_decode($data)); fflush($fileOut); fclose($fileOut); clearstatcache(); $newSize = filesize($filepath.$filename);
PHP хранит все метаданные файлов, которые он читает в кеше, поэтому вполне вероятно, что размер файла уже сохранен в этом кеше, и вам нужно его очистить. См. clearstatcache и вызовите его перед вызовом filesize
.