[英]What does this error mean? java.lang.reflect.InaccessibleObjectException: Unable to make field private final int java.time.LocalDate.year
[英]What does “private static final” mean in Java?
我對android非常陌生,我只是在摸摸它的表面。 當我瀏覽一些教程時,我碰到了這個類來下載文件。 我能夠理解其他代碼,但無法理解
private static final int MEGABYTE = 1024 * 1024;
有嗎 這真的有必要嗎? 如果未聲明為第一怎么辦。
下面是代碼
public class FileDownloader { private static final int MEGABYTE = 1024 * 1024; public static void downloadFile(String fileUrl, File directory){ try { URL url = new URL(fileUrl); HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); //urlConnection.setRequestMethod("GET"); //urlConnection.setDoOutput(true); urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); FileOutputStream fileOutputStream = new FileOutputStream(directory); int totalSize = urlConnection.getContentLength(); byte[] buffer = new byte[MEGABYTE]; int bufferLength = 0; while((bufferLength = inputStream.read(buffer))>0 ){ fileOutputStream.write(buffer, 0, bufferLength); } fileOutputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
這一定是非常愚蠢的問題,但我真的很好奇知道如何以及為什么?
提前致謝。
MEGABYTE = 1024 * 1024
MB
平均字節數,稱為兆字節
8 bits = 1 byte
1024 bytes = 1 kb
1024 kb = 1 Mb
1 Mb包含1048576
。 等於1024 * 1024
字節
inputStream.read
將嘗試從Steam讀取此數量的字節並將其放入字節數組中
data_read_as_byte return
> 0 number of bytes read
< 0 -1
// return 0 when passed array size is 0
private static final
聲明意味着將該值聲明為常量 。 它沒有什么特別的,將硬編碼的值作為常量只是一種很好的編碼實踐。 出於代碼可讀性和可維護性的考慮。
您的代碼基本上是為下載文件創建1 MB的緩沖區 。
這意味着在下載文件時,首先將1 MB下載到您的RAM中,然后將該部分復制到文件輸出流(磁盤)中,並將重復此過程,直到下載完所有內容為止。 請注意,如果所有內容均已下載到RAM,則設備可能會用完內存,並且應用會拋出OutOfMemoryError
。 另請注意,您可以為緩沖區選擇任何值而不是1 MB。
private static final int MEGABYTE = 1024 * 1024;
有嗎?
聲明了一個final
, private
和static
變量
它是什么必然做的是,你可以參考MEGABYTE
變量的任何方法中FileDownloader
類( because it is private
),無論是static
或not
。
如果它將declared inside any method
,則其scope
將僅在該方法之內。
如果將其declared without static
關鍵字,則將無法使用static
方法訪問它。 您可以通過刪除static
關鍵字來自己嘗試。
這真的有必要嗎? 如果未聲明為第一怎么辦。
在給定的類中,只有一個static method
並且此變量被聲明為private
,因此以這種方式聲明它沒有多大意義。 在方法中聲明此變量也應該沒問題
實例化MEGABYTES
小於INTEGER.MAX_VALUE
要細
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.