簡體   English   中英

Java中的“ private static final”是什么意思?

[英]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; 

有嗎?

聲明了一個finalprivatestatic變量

它是什么必然做的是,你可以參考MEGABYTE變量的任何方法中FileDownloader類( because it is private ),無論是staticnot

如果它將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM