java基礎學習(試碼) 變量類型理解

大齡後學中年,熱愛技術行業,自學思路分享理解,歡迎各位指正~

1.變量類型

* (成員變量)類變量:獨立於方法以外的變量,用 static 修飾。
* (成員變量)實例變量:獨立於方法以外的變量,不過沒有 static 修飾。
* 局部變量:類的方法中的變量。
public class Variable{ 
  static int allClicks=0; // 類變量 String 
  static String str="hello world"; // 實例變量 
  public void method(){ 
    int i =0; // 局部變量 
  } 
}

局部變量特色:

  • 局部變量聲明在方法、構造方法或者語句塊中;
  • 局部變量在方法、構造方法、或者語句塊被執行的時候建立,當它們執行完成後,變量將會被銷燬;
  • 訪問修飾符不能用於局部變量;
  • 局部變量只在聲明它的方法、構造方法或者語句塊中可見;
  • 局部變量是在棧上分配的。
  • 局部變量沒有默認值,因此局部變量被聲明後,必須通過初始化,才能夠使用。
/*
 * BasicOne age 沒有初始化,因此在編譯是會出現報錯*/
public class BasicOne {

      public BasicOne() {
          // TODO Auto-generated constructor stub
          
      }
      public void pupAge(){
          int age;
          //age 沒有初始化
    age = age + 7;
          System.out.println("小狗的年齡是"+ age);
          
      }
      public static void main(String[] args) {
          BasicOne test = new BasicOne();
          test.pupAge();
      }

}

實例變量特色:

  • 實例變量聲明在一個類中,但在方法、構造方法和語句塊以外;
  • 當一個對象被實例化以後,每一個實例變量的值就跟着肯定;
  • 實例變量在對象建立的時候建立,在對象被銷燬的時候銷燬;
  • 實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部可以經過這些方式獲取實例變量信息;
  • 實例變量能夠聲明在使用前或者使用後;
  • 訪問修飾符能夠修飾實例變量;
  • 實例變量對於類中的方法、構造方法或者語句塊是可見的。通常狀況下應該把實例變量設爲私有。經過使用訪問修飾符能夠使實例變量對子類可見;
  • 實例變量具備默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值能夠在聲明時指定,也能夠在構造方法中指定;
  • 實例變量能夠直接經過變量名訪問。但在靜態方法以及其餘類中,就應該使用徹底限定名:ObejectReference.VariableName。
import java.io.*; 
public class Employee{ 
  // 這個實例變量對子類可見 
  public String name; 
  // 私有變量,僅在該類可見 
  private double salary; 
  //在構造器中對name賦值 
  public Employee (String empName){ name = empName; } 
  //設定salary的值 
  public void setSalary(double empSal){
    salary = empSal;
   } 
  // 打印信息
  public void printEmp(){ 
    System.out.println("名字 : " + name ); 
    System.out.println("薪水 : " + salary);
   } 
   public static void main(String[] args){ 
     Employee empOne = new Employee("RUNOOB"); 
     empOne.setSalary(1000); 
     empOne.printEmp(); 
   }
}

類變量(靜態變量static)

  • 類變量也稱爲靜態變量,在類中以static關鍵字聲明,但必須在方法構造方法和語句塊以外。
  • 不管一個類建立了多少個對象,類只擁有類變量的一份拷貝。
  • 靜態變量除了被聲明爲常量外不多使用。常量是指聲明爲public/private,final和static類型的變量。常量初始化後不可改變。
  • 靜態變量儲存在靜態存儲區。常常被聲明爲常量,不多單獨使用static聲明變量。
  • 靜態變量在第一次被訪問時建立,在程序結束時銷燬。
  • 與實例變量具備類似的可見性。但爲了對類的使用者可見,大多數靜態變量聲明爲public類型。
  • 默認值和實例變量類似。數值型變量默認值是0,布爾型默認值是false,引用類型默認值是null。變量的值能夠在聲明的時候指定,也能夠在構造方法中指定。此外,靜態變量還能夠在靜態語句塊中初始化。
  • 靜態變量能夠經過:ClassName.VariableName的方式訪問。
  • 類變量被聲明爲public static final類型時,類變量名稱通常建議使用大寫字母。若是靜態變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一致。
import java.io.*; 
public class Employee { 
  //salary是靜態的私有變量 
  private static double salary; 
  // DEPARTMENT是一個常量 
  public static final String DEPARTMENT = "開發人員"; 
  public static void main(String[] args){ 
    salary = 10000; 
    System.out.println(DEPARTMENT+"平均工資:"+salary); 
  } 
}

2.修飾符 和 static

訪問控制java

修飾符 當前類 同一包內 子孫類(同一包) 子孫類(不一樣包) 其餘包
public Y Y Y Y Y
protected Y Y Y Y/N(說明) N
default Y Y Y N N
private Y N N N N

3.遇到問題

1.(報錯)Return type for the method is missing

圖片
static void main(String[] args)這裏的主函數就不須要return任何變量,因此使用void修飾。函數

public class BasicOne {
      public String name;//實例變量
   public double salary;// 私有變量,僅在該類可見
   //在構造器中對name賦值報錯沒有return
   public Employee (String empName){
    name = empName ;
   }
}
  • 解決1
public void Employee (String empName){
    name = empName ;
   }
  • 解決 2
public class BasicOne {
   public String name;//實例變量
   public double salary;// 私有變量,僅在該類可見
   //在構造器中對name賦值報錯沒有return
   public BasicOne (String empName){
          name = empName ;
      }

}

4.總例子

package basicForMando;

import sun.awt.EmbeddedFrame;

//import object.Static;

/*
 * 1.基礎知識
 * (1)修飾符 經常使用的 public
 * public static void main(String[] args) {}
 * public 可替換修飾符
 * 訪問控制修飾符 : default, public , protected, private
 * 非訪問控制修飾符 : final, abstract, strictfp
 
 * */
/* 局部變量
 * BasicOne age 沒有初始化,因此在編譯是會出現報錯*/
public class BasicOne {
      // 1. 實例變量
      public String name;
      // 1. 私有變量,僅在該類可見
      private double salary;
      // 3.靜態變量 salary是靜態的私有變量
      private static double salary1;
      // 3.靜態變量(常量) DEPARTMENT是一個常量
      public static final String DEPARTMENT = "開發人員";
      // bug 在構造器中對name賦值 沒有return
  
      public BasicOne(String empName) {
          name = empName;
          return;
      }
  
      // 設定salary的值
      public void setSalary(double empSal) {
          salary = empSal;
      }
  
      // 能夠有兩個 由於重載數據類型不一樣
      public BasicOne() {
          // TODO Auto-generated constructor stub
      }
  
      public void printEmp() {
          System.out.println("名字 : " + name);
          System.out.println("薪水 : " + salary);
      }
  
      // 2.局部變量對象
      public void pupAge() {
          int age = 0;// bug 局部變量初始化
          age = age + 7;
          System.out.println("小狗的年齡是" + age + "歲");
  
      }
  
      public static void main(String[] args) {
  
          BasicOne test = new BasicOne();
          test.pupAge();
  
          BasicOne empOne = new BasicOne("RUNOOB");
          empOne.setSalary(1000);
          empOne.printEmp();
  
          salary1 = 10000;
          System.out.println(DEPARTMENT + "平均工資:" + salary1);
      }

}
相關文章
相關標籤/搜索