JAVA类思维_面向对象思维 Java中的类和对象及其应用
一、面向過程與面向對象
面向過程: 從事務執行者的角度思考問題,我該干什么? 重點在過程----事務流程
面向對象: 從事務的指揮者角度思考問題,我應該找誰干什么? 重點在對象
面向對象的優點:
1.將復雜問題簡單化
2.從事務的執行者轉化為事物的指揮者
3.更貼近人的思維(懶人思想)
二、類和對象
類是Java中最基本的單位,是一類抽象事物的集合? 對抽象事物的描述(模板)
對象: 用類創建出來的具體的事物就是對象
抽象描述類:
類中的屬性是指成員變量
類中的行為是指成員方法//屬性 (成員變量 實例變量)
//書寫位置: 類中,方法外
//行為 (方法) 和Java中函數的聲明一樣,只是不寫static關鍵字
//書寫位置: 類中
創建一個類:? 關鍵字 + class + 類名(大駝峰命名) + { }
例如: 創建一個學生類
屬性:? 姓名? 年齡? 性別
行為:? 吃飯? 睡覺? 打游戲class Student{
String name;
int age;
String gender;
// 方法---成員方法、實例方法
public void eat(){
System.out.println("吃飯");
}
public void sleep(){
System.out.println("睡覺");
}
public void playGame(String game){
System.out.println("打" + game);
}
}
創建對象:? 類名 + 對象名 = 初值;
例如: 創建一個學生類的對象Student stu = new Student();
// 使用 對象名.屬性名 = 值; 對對象的屬性進行賦值和取值
stu.name = "IT彭于晏";
stu.age = "16";
stu.gender = "男";
// 調用成員方法 對象名.方法名();
stu.eat();
stu.sleep();
stu.playGame("毒奶粉");
stu.sayHi(); //在類中聲明一個sayHi方法,哪個對象調用該方法,打印的就是哪個對象的屬性
三、成員變量與局部變量
成員變量與局部變量的區別:
1.書寫位置不同:
成員變量:? 類中方法外
局部變量:? 方法中或方法上(參數位置)
2.在內存中的表現不同:
成員變量:? 堆內存中
局部變量:? 棧內存中
3.生命周期不同:
成員變量:? 隨著對象進入堆內存中創建,隨著對象的銷毀而銷毀
局部變量:? 隨著方法的調用而入棧,隨著方法的結束而銷毀
4.作用域不同:
成員變量:? 整個類中
局部變量:? 方法中
5.初始值不同:
成員變量:? 跟堆內存一樣,有默認的初始值 0 null
局部變量:? 默認沒有初值 不給初值編譯時會報錯 (局部變量聲明時必須帶有初值)
四、同名類
在同一個項目中可以有同名的類,創建在不同的包下
創建不同包下的同名類,需要指定完整的包名來創建對象
一般情況下不建議寫同名類
例如: 在包3和包4下各創建一個person類
//創建一個包3類的person對象
Person p1 = new Person( );
//在繼續創建一個包4類下的person對象
com.bao3.Person p2 = new com.bao3.Person( ); // 需要指定完整的包名
注意:
在方法中基本數據類型的傳遞是值? ?引用數據類型則是地址的傳遞 (要什么類型給什么類型)
五、匿名對象
匿名對象: 沒有名字的對象
1. 一般 在方法傳參的時候調用
2. 只調用一下方法(不賦值的情況下)
使用匿名對象當方法的參數 可以減少代碼量,方便使用public static void main(String[] args) {
// 創建兩個Person對象 并賦值
// 將重復代碼 抽成一個方法
Person p1 = new Person();
p1.name = "linqingxia";
p1.age = 16;
p1.sayHi();
Person p2 = new Person();
setNameAndAge(p2, "wangzuxian", 25);
// 使用匿名對象 當方法的參數
setNameAndAge(new Person(), "maoqiu", 20);
// 匿名對象 也是對象 也可以賦值 調用成員方法
new Person().name = "xin";
new Person().age = 30;
new Person().sayHi(); // 注意: 獲取不到"xin" 30----每new一次在堆內存中新生成一塊空間
// 只調用方法可以使用匿名對象
// 測試方法的時候 可能會使用
new Person().fun();
}
六、封裝與構造方法
封裝
Java中 寫 方法、函數 就是封裝的一種
封裝相當于隱藏了代碼的實現和屬性 不能隨意修改
需要開放訪問的接口(方法 方式) 來獲取或修改封裝的代碼
優點:
1.提高了代碼的復用性
2.提高了代碼的安全性
關鍵字 中的 權限修飾符--> private 私有的
被private修飾的屬性 只能本類中訪問
java bean 規范(java的實體類創建出來的對象)
1.聲明成員變量 都需要 私有化
2.給每個成員變量提供set和get方法
3.必須提供 無參的構造方法class Phone{
private String phoneName;
// 獲取方法
public String getPhoneName(){
return phoneName;
}
// 修改方法
public void setPhoneName(String phoneName){
this.phoneName = phoneName;
// 關鍵字 this 代表的是本類的對象
// this.成員變量 獲取本類的成員變量
// this.成員變量 = "哈哈"; 給本類的成員變量賦值
// this.成員方法 調用本類的成員方法
// 誰調用了這個方法 誰就是this
}
}
命名規范
獲取get + 成員變量名(首字母大寫)
修改set + 成員變量名(首字母大寫)
標準寫法 set方法 是沒有返回值的
構造方法
構造方法: 對對象的成員變量 進行初始化
寫法:
1. 沒有返回值位置(void也不用寫)
2. 構造方法的方法名 要與 類名 完全一致
構造方法是系統幫你調用的
只要你創建對象 系統就會自動調用構造方法
構造方法 只會執行一遍class Pen {
/*
* 類中書寫順序
* 1.成員變量
* 2.構造方法---無參的 有參的
* 3.成員方法---sayHi之類的 自己寫的
* 4.set/get方法
*/
private String name;
private String color;
// 構造方法(無參)
public Pen() {
// 初始化成員變量(給成員變量賦值)
this.name = "圓珠筆";
this.color = "紅色";
System.out.println("我是pen類的無參構造方法");
}
// 有參構造方法(構造方法的重載)
// 為了在創建對象的同時 給成員變量賦值
public Pen(String name,String color) {
this.name = name;
this.color = color;
System.out.println("我是有參的構造方法");
}
}// 介紹自己的方法
public void sayHi() {
String name = "linaiang";
// 使用this 可以區分 成員變量 和 局部變量
System.out.println(this.name + " " + this.color);
}
總結
以上是生活随笔為你收集整理的JAVA类思维_面向对象思维 Java中的类和对象及其应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java里面什么时候环境变量_Java的
- 下一篇: java中错误的源文件,关于Java源文