java封裝、構造方法、this

1、封裝java

特性:安全、將變化隔離、便於使用、提供重複性安全

 

例子jvm

[root@bch04 java]# cat EmployeeDemo.java 
class Employee {
    private String id;
    private String name;
    private String gender;
 
    //提供公有的set和get方法
    //public 成員修飾符,公共的,誰均可以訪問
    //private 成員修飾符,私有的,只有本身能夠訪問
 
    public void setName(String n) {
        name = n;
    }
 
    public void setId(String i) {
        id = i;
    }
    
    public void setGender(String gen) {
        if ("male".equals(gen) || "female".equals(gen)) {
            gender =gen;
        } else {
            System.out.println("please input \"male\" or \"female\"");  
        }
 
    }
    
 
    public String getName() {
        return name;
    }
 
    public String getId() {
        return id;
    }
 
    public String getGender() {
        return gender;
    }
 
 
    public void work() {
        System.out.println(id +":" +name +":" +gender +":" +"working");
    } 
}
 
public class EmployeeDemo {
public static void main(String[] args) {
 
        //建立對象
        Employee tom = new Employee();
 
        //調用公有方法,給成員賦值變量
        tom.setName("tom");
        tom.setId("1");
        tom.setGender("male");
 
        //獲取實例變量的值
        System.out.println(tom.getName());
        System.out.println(tom.getId());
        System.out.println(tom.getGender());
 
        //調用成員方法
        tom.work();
    }
 
}
 
//運行結果 
[root@bch04 java]# java EmployeeDemo 
tom
1
male
1:tom:male:working

 

[root@bch04 java]# cat Demo.java 
class Calculator {
    public String name = "my Carculator";
    public double num1;
    public double num2;
    public char option;
 
    public void init(double a, char op, double b) {
        num1 = a;
        num2 = b;
        option = op;
    }
  
    public void calculate() {
        switch (option) {
            case '+': System.out.println(name +":" +num1 +"+" +num2 +"=" +(num1+num2));
                      break;
            case '-': System.out.println(name +":" +num1 +"-" +num2 +"=" +(num1-num2));
                      break;
            case '*': System.out.println(name +":" +num1 +"*" +num2 +"=" +(num1*num2));
                      break;
            case '%': System.out.println(name +":" +num1 +"%" +num2 +"=" +(num1%num2));
                      break;
            case '/': if (num2 != 0) {
                             System.out.println(name +":" +num1 +"/" +num2 +"=" +(num1/num2));
                         } else {
                             System.out.println("num2 can not be 0 !");     
                         }
                         break;
            default : System.out.println("null");
        } 
 
    }
 
}
 
class Demo {
    public static void main(String[] args) {
        Calculator cal = new Calculator();
        cal.init(10 ,'%' ,3);
        cal.calculate();
        System.out.println("bye");
    } 
}
 
//運行結果 
[root@bch04 java]# java Demo
my Carculator:10.0%3.0=1.0
bye


  

2、構造方法ide

1. 定義:函數

對象建立出來時,沒有值:this

1.png


對象建立出來時,有值:spa

2.png


構造方法做用:對對象進行初始化對象

3.png      

  

2. 構造函數的特色:blog

1)在對象創建時由jvm調用,給對象初始化內存

2)在建立對象時調用

3)函數名與類名一致

4)沒有返回值類型

5)當類中沒有定義構造函數時,系統默認加上一個空參數的構造函數,有則覆蓋

6)一個類中能夠定義多個構造函數,以進行不一樣的初始化,以重載的形式體現

 

 

3. 構造代碼塊的特色:

1)給全部的對象進行統一初始化

2)建立對象時就運行,優先於構造函數

3)通常用於將全部構造方法中公共的信息抽取出來

4)與構造函數區別:所有對象和部分對象的區別

 

例子

[root@bch04 java]# cat Demo9.java 
class Boy {
  String name;
  int age;
  String gender;
 
   // 構造代碼塊,給全部對象進行初始化
  {
       System.out.println("哭。。。");
  }
     
  Boy() {
       System.out.println("無參構造");
  }
 
  Boy(String n, int a, String g) {
       name = n;
       age = a;
       gender = g;
       System.out.println("有參構造");
  }
 
  void run() {
       System.out.println("跑...");
  }
 
}
 
public class Demo9 {
  public static void main(String[] args) {
       System.out.println();
       Boy b = new Boy();
       Boy b2 = new Boy("jack", 1, "男");
  }
}
 
//運行結果
[root@bch04 java]# java Demo9
 
哭。。。
無參構造
哭。。。
有參構造


 

3、this關鍵字

1)表示所在函數所屬對象的引用

2this只能在非靜態中(沒有static修飾)函數使用

3)構造函數間相互調用必須放在構造函數的第一個語句中

4)能夠解決構造函數中對象屬性和函數形參的同名問題

 

class Person {
       String name;
       int age;
 
       Person() {
       }
 
       Person(String n){
              name=n;
       }
 
       Person(String n, int a) {
              //構造函數不能直接經過函數名直接調用,編譯報錯!!!
              Person(n);
              age = a;
       }
}

 

例子

//在構造函數中打印this與建立對象時打印對象名p,結果同樣,說明this和p是同樣,都是內存地址值
class Student {
    String name;
    String gender;
    int age;
 
    Student() {
    }
 
    Student(String name) {
       this();
       this.name = name;
    }
 
    Student(String name, String gender, int age) {
       this(name);
       System.out.println(this);  //Student@659e0bfd
       this.gender = gender;
       this.age = age;
    }
 
    void speak() {
       run();
       System.out.println("姓名:" + name + " 性別:" + gender + " 年齡:" + age
              + " 嘿嘿");
    }
 
    void run() {
       System.out.println("run.....");
    }
 
}
 
class Demo2 {
    public static void main(String[] args) {
       Student p = new Student("tom", "male", 28);
       System.out.println(p); // Student@659e0bfd
       p.speak();
    }
}
 
//運行結果
[root@bch04 java]# java Demo2
Student@659e0bfd
Student@659e0bfd
run.....
姓名:tom 性別:male 年齡:28 嘿嘿
相關文章
相關標籤/搜索