Java的區域性變數沒有系統預設初始值
在看Think in java 中看到這樣一句話:
“未初始化的區域性變數更有可能是程式設計師的疏忽, 所以採用預設值反而會掩蓋這種失誤”
然後才去驗證,發現,區域性變數都必須要顯式地初始化,不然編譯不通過。
而全域性變數不用顯式地初始化,如果漏掉初始化,系統預設給以初始值:
int ---> 0
long ---> 0L
boolean ---> false
Object ---> null 等等
對於全域性變數的預設初始化: “無法阻止自動初始化的進行, 它將在構造器發生之前發生”。
在建立物件時“這塊儲存空間會被清零,這就自動的將物件中的所有基本型別設定為預設值,而引用設定為NULL”
之前我的理解是:物件在生成時,利用反射可以得到類資訊,所以類中的全域性變數就可以被預設賦值,但是區域性變數是方法被呼叫之後才會分配儲存空間的,也無法通過反射手段得到變數資訊,所以必須顯式初始化。
相關推薦
Java的區域性變數沒有系統預設初始值
在看Think in java 中看到這樣一句話: “未初始化的區域性變數更有可能是程式設計師的疏忽, 所以採用預設值反而會掩蓋這種失誤” 然後才去驗證,發現,區域性變數都必須要顯式地初始化,不然編譯
java 基本資料型別的預設初始值
java語言中有8中基本資料型別,基本情況如下: 序號 資料型別 大小/位 封裝類 預設值 可表示資料範圍 1 byte(位) 8 Byte 0
關於java中成員變數有預設初始化而區域性變數沒有
在java中如果沒有給成員變數賦值java會自動賦0,而對於區域性變數卻不會這是為什麼呢?下面就討論下java如何給成員變數賦值的。 1普通成員變數:對於普通成員變數而言,當你例項化的時候通過建構函式java會自動賦0。如下 public class test { in
c語言區域性變數預設初始值
C語言中,定義區域性變數時如果未初始化,則值是隨機的,這是為什麼呢?定義區域性變數,其實就是在棧中通過移動棧指標來給程式提供一個記憶體空間和這個區域性變數名繫結。因為這段記憶體空間在棧上,而棧記憶體是反
1.java區域性變數 & 例項變數 & 類變數(靜態變數)
區域性變數 區域性變數宣告在方法、構造方法或者語句塊中; 區域性變數在方法、構造方法、或者語句塊被執行的時候建立,當它們執行完成後,變數將會被銷燬; 訪問修飾符不能用於區域性變數; 區域性變數只在宣告它的方法、構造方法或者語句塊中可見; 區域性變數是
Java區域性變數final
區域性變數和形參帶final。 在一個執行緒A中開起另一個執行緒B,如果執行緒B要使用執行緒A的區域性變數,那麼A的區域性變數需要定義成final。理由:區域性變數是執行緒內部共享的,每一個執行緒內的不能訪問其他執行緒的區域性變數,但是上訴的情況卻違背了這一原則,那麼加上final為
Java - 區域性變數和StackOverflowError
本文目的 對Java棧記憶體進行簡單學習總結,並瞭解 -Xss JVM引數的配置,學會在程式碼中儘量減少不必要的區域性變數宣告,從而提高程式效率和編碼水平。 Java棧記憶體簡介 Java棧記憶體空間中主要存放的是區域性變數,包括基本資料型別(int、short、byt
譯:Java區域性變數型別推斷(Var型別)的26條細則
原文連結:https://dzone.com/articles/var-work-in-progress 作者:Anghel Leonard 譯者:沈歌 Java區域性變數型別推斷(LVTI),簡稱var型別(識別符號var不是一個關鍵字,是一個預留型別名),Java 10中通過JEP 286: L
java成員變數在什麼時候賦值的?
從Java SE 6開始是這樣的: public class MyClass { private int a = 1; // field declaration with initializer { // instance initializer 1 a = 2; } pu
JAVA當中變數什麼時候需要初始化?
預設值如下: Boolean false Char '\u0000'(null) byte (byte)0 short (sho
一道題讓你掌握Java區域性變數和堆疊
以下Java程式碼的輸出是_____. class Value{ public int i=15; } public class Test{ public
java 區域性變數和全域性變數問題
所謂臨時變數,就是為了方便起見申明的變數,存放一些中間結果。有點像中學幾何裡 面的輔助線。 如果基於效能的考慮,避免每次呼叫的時候為臨時變數分配空間,就可以將它宣告為成 員變數,例如臨時壓縮緩衝區。 如果基於效能的考慮,避免每次訪問的時候訪問成員變數(尤其在迴圈的時候),
區域性變數用完被釋放值依舊存在問題
#include<stdio.h> #include<stdlib.h> int * add(int a, int b){ int c = a + b; re
java 區域性變數,類變數,例項變數的作用域,生命週期
1,區域性變數 區域性變數是指定義在方法或程式碼塊中的變數,區域性變數必須初始化,在方法或程式碼塊內有效,之外則無效,方法執行開始入棧時建立,執行完畢出棧時銷燬。 2,例項變數 其作用域受限定符限定,Private的只能在本類中使用,protected子類可用,publi
現在才知道Java中變數宣告可以放在賦值後面。。。
public class Member {// 1{a = 1;// System.out.println(a);//按程式碼順序執行,沒有宣告可以先賦值但不能使用,這裡會拋錯。}private int a = 2;// 2{b = 3;}private final int b;// 3{c = 4;}pri
Java —— 靜態變數的宣告和初始化
當預設的情況下,建立一個類的物件,該物件就擁有一份屬於自己的類中全部資料成員的副本。 當一個物件中資料元素改變時,不會影響其他物件該資料元素的值。這類變數就是例項變數。 但是對於靜態變數則不同,它是屬於整個類,不屬於任何一個物件,,而且靜態變數永遠只有一份備份空間。 靜態
JAVA區域性變數
-區域性變數宣告在方法、構造方法或者語句塊中; -區域性變數在方法、構造方法、或者
全域性變數和區域性變數初始化及預設值探究
public class VariableTest { class Person { private String familyName; private String lastName = "33"; private int age; private I
Java中成員變數、區域性變數、全域性變數、靜態變數存在位置及初始化
根據定義變數位置的不同,可以將變數分為成員變數和區域性變數。 成員變數是 定義在一個類的變數:類中方法外 區域性變數是定義在一個方法內的變數:方法中 成員變數分為: 靜態屬性:隨類的存在而存在,是在類載入的初始化 非靜態屬性:隨例項的屬性存在而存在。 區域性變數: 區域性變數不能加s
java--建立一個Test類,包含有一個public許可權的int型成員變數與一個char型別的成員變數,觀察在main方法中的初始值。
//建立一個Test類 class Test1{ //包含有一個public許可權的int型成員變數與一個char型別的成員變數 public int a; public char c; } //主類 public class Test{ //主函式 publ