面向?qū)ο?/h2>
面向?qū)ο蠼榻B
介紹
- 面向:拿、找
- 對象:能干活的東西
- 面向?qū)ο缶幊蹋耗脰|西過來坐對應(yīng)的事情
設(shè)計(jì)對象并使用
類和對象
- 類(設(shè)計(jì)圖):是對象共同特征的描述;
- 對象:是真實(shí)存在的具體東西
在Java中,必須先設(shè)計(jì)類,才能獲得對象。
如何定義類
public class 類名{
1.成員變量(代表屬性,一般是名詞)
2.成員方法(代表行為,一般是動詞)
3.構(gòu)造器(后面學(xué)習(xí))
4.代碼塊(后面學(xué)習(xí))
5.內(nèi)部類(后面學(xué)習(xí))
}
public class Phone {
String brand;
double print;
//行為(方法)
public void call(){
}
public void playGame(){
}
}
如何得到類的對象
類名 對象名 = new 類名();
Phone p = new Phone();
如何使用對象
- 訪問屬性:對象名.成員變量
- 訪問行為:對象名.方法名(...)
范例:
public class Phone {
//屬性
String brand;//手機(jī)的品牌
double price;//手機(jī)的價(jià)格
//行為
public void call(){
System.out.println("手機(jī)在打電話");
}
public void playGame(){
System.out.println("手機(jī)在玩游戲");
}
}
public class PhoneTest {
public static void main(String[] args) {
//創(chuàng)建手機(jī)的對象
Phone p = new Phone();
//給手機(jī)賦值
p.brand = "菠蘿";
p.price = 1145.14;
//獲取手機(jī)對象中的值
System.out.println(p.brand);
System.out.println(p.price);
//調(diào)用手機(jī)中的方法
p.call();
p.playGame();
//第二部手機(jī)
Phone p2 = new Phone();
p2.brand = "鴨梨";
p2.price = 1008.6;
p2.call();
p2.playGame();
}
}
總結(jié)
-
類和對象是什么?
- 類:是對象共同特征的描述(設(shè)計(jì)圖);對象:是真實(shí)存在的具體實(shí)例。
-
如何得到對象?
public class 類名{ 1.成員變量(代表屬性,一般是名詞) 2.成員方法(代表行為,一般是動詞) }
類名 對象名 = new 類名();
-
拿到對象后能做什么?
- 對象名.成員變量
- 對象名.方法名(...)
類的幾個補(bǔ)充注意事項(xiàng)
-
用來描述一類事物的類,專業(yè)叫做: Javabean類。
在Javabean類中,是不寫main方法的。
-
在以前,編寫main方法的類,叫做測試類。
我們可以在測試類中創(chuàng)建javabean類的對象并進(jìn)行賦值調(diào)用。
public class 類名{
1.成員變量(代表屬性)
2.成員方法(代表行為)
}
-
類名首字母建議大寫,需要見名知意,駝峰模式。
-
一個Java文件中可以定義多個class類,且只能一 個類是public修飾,而且public修飾的類名必須成為代碼文件名。
實(shí)際開發(fā)中建議還是一個文件定義一個class類。
-
成員變量的完整定義格式是: 修飾符 數(shù)據(jù)類型 變量名稱 = 初始化值;一般無需指定初始化值,存在默認(rèn)值。
數(shù)據(jù)類型 明細(xì) 默認(rèn)值 基本類型 byte、short、int、long 0 基本類型 float、double 0.0 基本類型 boolean false 引用類型 類、接口、數(shù)組、String null
練習(xí)
女朋友類
編寫女朋友類,創(chuàng)建女朋友類的對象
給女朋友的屬性賦值并調(diào)用女朋友類中的方法。
自己思考,女朋友類中有哪些屬性,有哪些行為?
public class GirlFriendTest {
public static void main(String[] args) {
//創(chuàng)建女朋友的對象
GirlFriend gf1 = new GirlFriend();
gf1.name = "柳如煙";
gf1.age = 18;
gf1.gender = "女神";
System.out.println(gf1.name);
System.out.println(gf1.age);
System.out.println(gf1.gender);
gf1.sleep();
gf1.eat();
System.out.println("=====================================");
GirlFriend gf2 = new GirlFriend();
gf2.name = "蘇沐雪";
gf2.age = 19;
gf2.gender = "青梅竹馬";
System.out.println(gf2.name);
System.out.println(gf2.age);
System.out.println(gf2.gender);
gf2.sleep();
gf2.eat();
}
}
總結(jié)
-
定義類有哪些建議,有什么需要注意的?
-
類名首字母建議大寫、英文、有意義,滿足駝峰模式,不能用關(guān)鍵字,滿足標(biāo)志符規(guī)定;
-
一個代碼文件中可以定義多個類,但是只能一個類是public修飾的,
public修飾的類名必須是Java代碼的文件名稱。
-
-
成員變量的格式是什么樣的,有什么特點(diǎn)?
- 成員變量的完整定義格式是:修飾符 數(shù)據(jù)類型 變量名稱 = 初始化值;
- 一般無需指定初始化值。
封裝
告訴我們,如何正確設(shè)計(jì)對象的屬性和方法
原則:對象代表什么,就得封裝對應(yīng)的數(shù)據(jù),并提供數(shù)據(jù)對應(yīng)的行為
封裝的好處
- 讓編程變得很簡單,有什么事,找對象,調(diào)方法就行。
- 降低我們的學(xué)習(xí)成本,可以少學(xué)、少記,或者說壓根不用學(xué),不用記對象有哪些方法,有需要時(shí)去找就行
private關(guān)鍵字
- 是一個權(quán)限修飾符
- 可以修飾成員(成員變量和成員方法)
- private修飾的成員只能在本類中才能訪問
public class GirlFriend {
private String name;
private int age;
private String gender;
//針對于每個私有化的成員變量,都要提供get和set方法
//set方法:給成員變量賦值
//get方法;對外提供成員變量的值
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void setAge(int a){
if(a >= 0 && a <= 100){
age = a;
}else {
System.out.println("非法參數(shù)");
}
}
public int getAge(){
return age;
}
public void setGender(String g){
gender = g;
}
public String getGender(){
return gender;
}
//行為
public void sleep(){
System.out.println("女朋友在睡覺");
}
public void eat(){
System.out.println("女朋友在吃飯");
}
}
public class GirlFriendTest {
public static void main(String[] args) {
GirlFriend gf1 = new GirlFriend();
gf1.setName("柳如煙");
gf1.setAge(18);
gf1.setGender("女");
System.out.println(gf1.getName());
System.out.println(gf1.getAge());
System.out.println(gf1.getGender());
gf1.sleep();
gf1.eat();
}
}
總結(jié)
- private關(guān)鍵字是一個權(quán)限修飾符
- 可以修飾成員(成員變量和成員方法)
- 被private修飾的成員只能在本類中才能訪問
- 針對private修飾的成員變量,如果需要被其他類使用,提供相應(yīng)的操作
- 提供“setxxx(參數(shù))”方法,用于給成員變量賦值,方法用public修飾
- 提供"getxxx()"方法,用于獲取成員變量的值,方法用public修飾
就近原則和this關(guān)鍵字
就近原則
- 誰離我近我就用誰
成員變量和局部變量
public class GirlFriend{
private int age;//成員變量
public void method(){
int age = 10;//局部變量
System.out.println(age);//打印局部變量
}
}
public class GirlFriend{
private int age;//成員變量
public void method(){
int age = 10;//局部變量
System.out.println(this.age);//打印成員變量
}
}
范例:
public class GirlFriend {
private String name;
private int age;
private String gender;
//針對于每個私有化的成員變量,都要提供get和set方法
//set方法:給成員變量賦值
//get方法;對外提供成員變量的值
//作用:給成員變量name進(jìn)行賦值的·
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age >= 0 && age <= 100){
this.age = age;
}else {
System.out.println("非法參數(shù)");
}
}
public int getAge(){
return age;
}
public void setGender(String gender){
this.gender = gender;
}
public String getGender(){
return gender;
}
//行為
public void sleep(){
System.out.println("女朋友在睡覺");
}
public void eat(){
System.out.println("女朋友在吃飯");
}
}
public class GirlFriendTest {
public static void main(String[] args) {
GirlFriend gf1 = new GirlFriend();
gf1.setName("柳如煙");
gf1.setAge(18);
gf1.setGender("女");
System.out.println(gf1.getName());
System.out.println(gf1.getAge());
System.out.println(gf1.getGender());
gf1.sleep();
gf1.eat();
}
}
總結(jié)
- 就近原則
- this作用:區(qū)別成員變量和局部變量
- this的本質(zhì)和內(nèi)存圖
構(gòu)造方法
概述:
- 構(gòu)造方法也叫做構(gòu)造器、構(gòu)造函數(shù)。
- 作用:在創(chuàng)建對象的時(shí)候給成員變量進(jìn)行賦值的。
格式:
public class Student{
修飾符 類名(參數(shù)){
方法體;
}
}
特點(diǎn):
- 方法名和類名相同,大小寫也要一致
- 沒有返回值類型,練void都沒有
- 沒有具體的返回值(不能有return帶回結(jié)果數(shù)據(jù))
執(zhí)行時(shí)機(jī):
- 創(chuàng)建對象的時(shí)候有虛擬機(jī)調(diào)用,不能手動調(diào)用構(gòu)造方法
- 每創(chuàng)建一次對象,就會調(diào)用一次構(gòu)造方法
public class Student {
private String name;
private int age;
//如果我們自己沒有寫任何的構(gòu)造方法
//那么虛擬機(jī)就會給我們加一個空參構(gòu)造方法
public Student (){
System.out.println("故鄉(xiāng)的櫻花開了");
}
public Student(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void set(int age){
this.age = age;
}
}
public class StudentTest {
public static void main(String[] args) {
//創(chuàng)建對象
//調(diào)用的空參構(gòu)造
//Student s = new Student();
Student s = new Student("柳如煙",18);
System.out.println(s.getName());
System.out.println(s.getAge());
}
}
構(gòu)造方法注意事項(xiàng)
- 構(gòu)造方法的定義
- 如果沒有定義構(gòu)造方法,系統(tǒng)將給出一個默認(rèn)的無參數(shù)構(gòu)造方法
- 如果定義了構(gòu)造方法,系統(tǒng)將不再提供默認(rèn)的構(gòu)造方法
- 構(gòu)造方法的重載
- 帶參構(gòu)造方法,和無參構(gòu)造方法,兩者方法名相同,但是參數(shù)不同,這叫做構(gòu)造方法的重載
- 推薦的使用方法
- 無論是否使用,都手動書寫無參構(gòu)造方法,和帶全部參數(shù)的構(gòu)造方法
總結(jié)
- 構(gòu)造方法的作用?
- 創(chuàng)造對象的時(shí)候,有虛擬機(jī)自動調(diào)用,給成員變量進(jìn)行初始化的。
- 構(gòu)造方法有幾種,各自的作用是什么?
- 無參數(shù)構(gòu)造方法:初始化的對象時(shí),成員變量的數(shù)據(jù)均采用默認(rèn)值。
- 有參數(shù)構(gòu)造方法:在初始化對象的時(shí)候,同時(shí)可以為對象進(jìn)行賦值。
- 構(gòu)造方法有哪些注意事項(xiàng)?
- 任何類定義出來,默認(rèn)就自帶了無參數(shù)構(gòu)造器,寫不寫都有。
- 一旦定義有參數(shù)構(gòu)造器,無參數(shù)構(gòu)造器就沒有了,此時(shí)就需要自己寫有參數(shù)構(gòu)造器了。
- 建議在任何時(shí)候都手動寫上空參和帶全部參數(shù)的構(gòu)造方法。
- 創(chuàng)造對象的時(shí)候,虛擬機(jī)會自動調(diào)用構(gòu)造方法,作用是給成員變量進(jìn)行初始化的。
標(biāo)準(zhǔn)JavaBean
標(biāo)準(zhǔn)JavaBean類
- 類名需要見名知意
- 成員變量使用private修飾
- 提供至少兩個構(gòu)造方法
- 無參構(gòu)造方法
- 帶全部參數(shù)的構(gòu)造方法
- 成員方法
- 提供每一個成員變量對應(yīng)的setXxx()/getXxx()
- 如果還有其他行為,也要寫上
范例:
public class User {
//屬性
private String username;
private String password;
private String email;
private String gender;
private int age;
//快捷鍵:
//alt + insert
//alt + Fn + insert
//插件PTG 1秒生成標(biāo)準(zhǔn)JavaBean(右鍵空白處,點(diǎn)擊倒數(shù)第三個)
//空參
public User(){}
//帶全部參數(shù)的構(gòu)造
public User(String username,String password,String email,String gender,int age){
this.username = username;
this.password = password;
this.email = email;
this.gender = gender;
this.age = age;
}
//get和set方法
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
public String getGender(){
return gender;
}
public void setGender(String gender){
this.gender = gender;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
}
對象內(nèi)存圖
一個對象的內(nèi)存圖
Student s = new Student();
- 加載class文件
- 申明局部變量
- 在堆內(nèi)存中開辟一個空間
- 默認(rèn)初始化
- 顯示初始化
- 構(gòu)造方法初始化
- 將堆內(nèi)存中的地址值賦值給左邊的變量
兩個對象的內(nèi)存圖
兩個引用指向同意一個對象
基本數(shù)據(jù)類型和引用數(shù)據(jù)類型
基本數(shù)據(jù)類型
- 在變量當(dāng)中存儲的是真實(shí)的數(shù)據(jù)值
引用數(shù)據(jù)類型
- 使用其他空間的數(shù)據(jù)
從內(nèi)存的角度去解釋:
- 基本數(shù)據(jù)類型:數(shù)據(jù)值是存儲在自己的空間中
- 特點(diǎn):復(fù)制給其他變量,也是賦的真實(shí)的值。
- 引用數(shù)據(jù)類型:數(shù)據(jù)值是存儲在其他空間中,自己空間中存儲的是地址值。
- 特點(diǎn):賦值給其他變量,賦的是地址值。
this的內(nèi)存原理
- this的作用:區(qū)分局部變量和成員變量
- this的本質(zhì):所在方法調(diào)用者的地址值
成員變量和局部變量的區(qū)別
成員變量:類中方法外的變量文章來源:http://www.zghlxwxcb.cn/news/detail-840776.html
局部變量:方法中的變量文章來源地址http://www.zghlxwxcb.cn/news/detail-840776.html
區(qū)別 | 成員變量 | 局部變量 |
---|---|---|
類中位置不同 | 類中,方法外 | 方法內(nèi)、方法申明上 |
初始化值不同 | 有默認(rèn)初始化值 | 沒有, 使用之前需要完成賦值 |
內(nèi)存位置不同 | 堆內(nèi)存 | 棧內(nèi)存 |
生命周期不同 | 隨著對象的創(chuàng)建而存在,隨著對象的消失而消失 | 隨著方法的調(diào)用而存在, 隨著方法的運(yùn)行結(jié)束而消失 |
作用域 | 整個類中有效 | 當(dāng)前方法中有效 |
到了這里,關(guān)于Java基礎(chǔ) --- 面向?qū)ο蟮奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!