今日內容介紹
一、面向對象思想
二、類與對象的關係
三、局部變量和成員變量的關係
四、封裝思想
五、private,this關鍵字
六、隨機點名器java
* public class Car { * String color; * int number; * void run() { * System.out.println(color + ":" + number); * } * }
public class CarDemo { public static void main(String[] args) { /* 測試:Car類中的run方法。 */ // 1,建立Car的對象。給對象起個名字。 Car c = new Car();// c是類類型的變量。c指向了一個具體的Car類型的對象。 // 2,經過已有的對象調用該對象的功能。格式:對象.對象成員; // 3,能夠該對象的屬性賦值。 c.color = "red"; c.number = 4; c.run(); } }
![](https://i.imgur.com/IinAhFl.jpg)
class Demo { public static void main(String[] args) { int x = 4; show(x); System.out.println("x="+x); } public static void show(int x) { x = 5; } } 基本類型做爲參數傳遞時,其實就是將基本類型變量x空間中的值複製了一份傳遞給 調用的方法show(),當在show()方法中x接受到了複製的值,再在show()方法中對x變量進行操做, 這時只會影響到show中的x。當show方法執行完成,彈棧後,程序又回到main方法執行, main方法中的x值仍是原來的值。
class Demo { int x ; public static void main(String[] args) { Demo d = new Demo(); d.x = 5; show(d); System.out.println("x="+d.x); } public static void show(Demo d) { d.x = 6; } }當引用變量做爲參數傳遞時,這時實際上是將引用變量空間中的內存地址(引用)複製了一份
C.完整代碼
class Person {
private int age;
private String name;編程
public void show() { System.out.println("age=" + age + ",name" + name); } }
* 年齡已被私有,錯誤的值沒法賦值,但是正確的值也賦值不了,這樣仍是不行, * 那腫麼辦呢?按照以前所學習的封裝的原理,隱藏後,還須要提供訪問方式。 * 只要對外提供能夠訪問的方法,讓其餘程序訪問這些方法。同時在方法中能夠對數據進行驗證。 通常對成員屬性的訪問動做:賦值(設置 set),取值(獲取 get),所以對私有的變量訪問的方式 能夠提供對應的 setXxx或者getXxx的方法。 class Person { // 私有成員變量 private int age; private String name; // 對外提供設置成員變量的方法 public void setAge(int a) { // 因爲是設置成員變量的值,這裏能夠加入數據的驗證 if (a < 0 || a > 130) { System.out.println(a + "不符合年齡的數據範圍"); return; } age = a; } // 對外提供訪問成員變量的方法 public void getAge() { return age; } } * 總結 * 類中不須要對外提供的內容都私有化,包括屬性和方法。 之後再描述事物,屬性都私有化,並提供setXxx getXxx方法對其進行訪問 * 注意 * 私有僅僅是封裝的體現形式而已 *
package cn.itcast.demo05; /* * 類描述人: * 屬性: 姓名和年齡 * 方法: 說話 * * 私有化全部的屬性 (成員變量) ,必須寫對應的get/set方法 * 凡是自定義的類,自定義成員變量,應該私有化,提供get/set * * this關鍵字: * 區分紅員變量和局部變量同名狀況 * 方法中,方位成員變量,寫this. */ public class Person { private String name; private int age; // set方法,變量name,age賦值 public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } // get方法,變量name,age獲取值 public int getAge() { return age; } public String getName() { return name; } public void speak() { String name = "哈哈"; int age = 16; System.out.println("人在說話 " + this.name + "..." + this.age); } }
標準測試代碼
package cn.itcast.demo05;安全
public class PersonTest { public static void main(String[] args) { Person p = new Person(); //調用set方法,對成員變量賦值 p.setAge(18); p.setName("旺財"); p.speak(); //調用get方法,獲取成員變量的值 // System.out.println(p.getName()); // System.out.println(p.getAge()); } }
B.代碼
class Person {
private int age;
private String name;dom
public void speak() { this.name = "小強"; this.age = 18; System.out.println("name=" + this.name + ",age=" + this.age); } } class PersonDemo { public static void main(String[] args) { Person p = new Person(); p.speak(); } }
B.代碼
class Person {
private int age;
private String name;學習
public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void speak() { System.out.println("name=" + this.name + ",age=" + this.age); } // 判斷是否爲同齡人 public boolean equalsAge(Person p) { // 使用當前調用該equalsAge方法對象的age和傳遞進來p的age進行比較 // 因爲沒法肯定具體是哪個對象調用equalsAge方法,這裏就可使用this來代替 /* * if(this.age == p.age) { return true; } return false; */ return this.age == p.age; } }
import java.util.ArrayList; import java.util.Random; import java.util.Scanner; /** * 思路: * 第一步:存儲全班同窗信息 * 第二步:打印全班同窗每個人的信息 * 第三部:隨機對學生點名,打印學生信息 */ public class Test { public static void main(String[] args) { ArrayList<Student> list = new ArrayList<Student>(); //1.1建立一個能夠存儲多個同窗名字的容器 //1.存儲全班同窗信息 addStudent(list); //2.打印全班同窗每個人的信息(姓名、年齡) printStudent(list); //3.隨機對學生點名,打印學生信息 randomStudent(list); } public static void addStudent(ArrayList<Student> list) { //鍵盤輸入多個同窗名字存儲到容器中 Scanner sc = new Scanner(System.in); for (int i = 0; i < 3; i++) { //建立學生 Student s = new Student(); System.out.println("存儲第"+i+"個學生姓名:"); String name = sc.next(); s.setName(name); System.out.println("存儲第"+i+"個學生年齡:"); int age = sc.nextInt(); s.setAge(age); //添加學生到集合 list.add(s); } } /** 2.打印全班同窗每個人的信息(姓名、年齡) */ public static void printStudent (ArrayList<Student> list) { for (int i = 0; i < list.size(); i++) { Student s = list.get(i); System.out.println("姓名:"+s.getName() +",年齡:"+s.getAge()); } } /** 3.隨機對學生點名,打印學生信息 */ public static void randomStudent (ArrayList<Student> list) { //在班級總人數範圍內,隨機產生一個隨機數 int index = new Random().nextInt(list.size()); //在容器(ArrayList集合)中,查找該隨機數所對應的同窗信息(姓名、年齡) Student s = list.get(index); System.out.println("被隨機點名的同窗:"+s.getName() + ",年齡:" + s.getAge()); } } /** * 學生信息類 */ public class Student { private String name; // 姓名 private int age; // 年齡 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
class 類名 {
//屬性
數據類型 變量名;
…
//方法
修飾符 返回值類型 方法名(參數){ }
…
}
* this關鍵字,本類對象的引用 * this是在方法中使用的,哪一個對象調用了該方法,那麼,this就表明調用該方法的對象引用 * this何時存在的?當建立對象的時候,this存在的 * this的做用:用來區別同名的成員變量與局部變量(this.成員變量) * public void setName(String name) { * this.name = name; * }
請設計一個類Demo,這個類包含以下操做:測試
A:求兩個數的和。
B:判斷兩個數是否相等。
C:輸出九九乘法表。this最後在測試類Test中進行測試。設計