A. java給對象的成員變數的賦值方法
java類的成員變數可以直接賦值,即賦初始值;
java類的成員變數也可以不賦值,系統會根據變數類型賦系統默認值;
java類的成員變數可以在以如下賦值:
聲明時(int i=10;)
構造方法里(this.變數名=? 方式)
類聲明時不賦值,用 對象實例名.setXXX(xxx); 即set方法
Java類的局部變數必須在聲明時賦值,否則報錯....就是那種定義在方法里的變數...
B. java里調用其他文件夾下的類,出現成員變數不能賦值的問題
Study類的name和age兩個屬性沒有明文指定訪問修飾符,那麼默認的訪問修飾符是default
default 修飾的屬性只允許本類內部和同包名下的類直接訪問
你的Study類在ja1.stu;包名下, 但是 main 方法所在的Index類不在這個包名下, 所以在 Index 類中是不允許直接訪問name 和 age 這2個屬性的, 所以直接賦值會報編譯錯誤
你可以明文指定這2個屬性為 public 的或者在 Study 類中為這2個屬性添加 public 的 getter 和 setter 方法,用於在 Index 類中更新和獲取這2個屬性的值
C. 在java中 變數之間是如何賦值的
一、基本類型數據賦值
實驗1 :定義一個int 類型變數a = 3,並將a 賦值給int b,然後將a ,賦值為5,那麼b 的值是3 還是5 呢?
int a = 3;
int b = a ;
a = 5 ;
System.out.println(" a = " + a+" b = "+b );
運行程序 ,列印結果為 :
a = 5 b =3
我們看到,b並沒有隨a的改變而改變。基本數據類型是值賦值。
二、String類型數據賦值
實驗2:定義一個String類型變數s1 賦值為「a」,並將s1賦值給String s2 ;然後將s1賦值為「b」,那麼s2的值是 「a」還是 「b」?
String s1 = "a" ;
String s2 = s1;
s1 = "b" ;
System.out.println("s1 = "+s1+" s2 = "+ s2);
運行程序 ,列印結果為 :
s1 = b s2 =a
我們看到,s2並沒有隨s1的改變而改變。
三、自定義數據類型賦值
實驗3: 創建一個TUser u1 ,並將u1賦值給TUser u2 ,將 u1重新賦值 ,u2會隨著u1改變而改變嗎 ?
TUser u1 = new TUser();
u1.setId(1);
TUser u2 = u1 ;
u1 = new TUser();
u1.setId(2);
System.out.println("ui :"+u1 + "\t\n" +"u2 : "+ u2);
運行程序,列印結果為:
u1 :TUser(id=2)
u2 : TUser(id=1)
我們看到u2並沒有隨著u1的改變而改變。
如果我們不改變u1指向的地址,而是改變u1指向地址所對應的數據(即將 u1 = new TUser(); 注釋掉)。那麼u1,u2 列印的記過將都會是 TUser(id=2)
通過以上三個實驗我們發現:
變數之間的賦值,可以說沒有所謂的值賦值和地址賦值。
簡而言之,將一個變數a賦值給另一個變數b,是將這個變數a的值,拷貝一份給變數b(如果a是引用類型,就拷貝引用,如果是基本類型,就拷貝原始值)