java封裝、構造方法、this
阿新 • • 發佈:2018-04-26
java一、封裝
特性:安全、將變化隔離、便於使用、提供重復性
例子
[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
二、構造方法
1. 定義:
對象創建出來時,沒有值:
對象創建出來時,有值:
構造方法作用:對對象進行初始化
2. 構造函數的特點:
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 哭。。。 無參構造 哭。。。 有參構造
三、this關鍵字
1)表示所在函數所屬對象的引用
2)this只能在非靜態中(沒有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 嘿嘿
java封裝、構造方法、this