摘要:封裝的實現(xiàn)封裝將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,只能通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問即隱藏對象信息的同時要留出訪問的接口封裝的特點只能通過規(guī)定的方法訪問數(shù)據(jù)隱藏類的實例細(xì)節(jié),方便修改和實現(xiàn)封裝代碼的實現(xiàn)修改屬
Lecture1 封裝的實現(xiàn)
封裝:將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,只能通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問(即隱藏對象信息的同時要留出訪問的接口)
封裝的特點:
只能通過規(guī)定的方法訪問數(shù)據(jù)
隱藏類的實例細(xì)節(jié),方便修改和實現(xiàn)
封裝代碼的實現(xiàn):
修改屬性的可見性 -- 設(shè)為private
創(chuàng)建getter/setter方法 -- 設(shè)為public,用于屬性的讀寫
在getter/setter方法中加入屬性控制語句
Tips:只有g(shù)etXXX方法的屬性是只讀屬性;只有setXXX方法的屬性是只寫屬性
Java封裝的意義:
防止使用者錯誤修改系統(tǒng)的屬性
提高系統(tǒng)的獨立性
提高軟件的可重用性
Java封裝案例:
package Chapter10.Lecture1.cat; /** * 寵物貓類的封裝 */ public class Cat { //1.修改屬性的可見性--private,限定只能在當(dāng)前類內(nèi)被訪問 private String name; //昵稱 private int month; //年齡 public Cat(){ } //通過帶參構(gòu)造方法賦值 public Cat(int month) { this.setMonth(month); } //2. 創(chuàng)建getter/setter方法 public String getName() { return "我是一只叫" + name + "的寵物貓"; } public void setName(String name) { this.name = name; } public int getMonth() { return month; } public void setMonth(int month) { if (month <= 0) { System.out.println("信息輸入錯誤,年齡必須大于0"); } else { this.month = month; } } }
package Chapter10.Lecture1.cat; public class CatTest { public static void main(String[] args) { //對象實例化 Cat one = new Cat(); //通過帶參構(gòu)造方法創(chuàng)建類 Cat two = new Cat(-2); //測試 //會輸出屬性month的初始值0 System.out.println("年齡:"+two.getMonth()); one.setName("花花"); System.out.println(one.getName()); one.setMonth(-1); if (one.getMonth() == 0) { return; } System.out.println("年齡:" + one.getMonth()); } }
定義Java包:語法 -- package 包名;,必須放在Java源文件中的第一行;一個Java源文件中只能有一個package語句
Java包的作用:管理Java文件;解決同名文件沖突
Java包的特點:Java中一個包里不能存在同名類,建議每個包內(nèi)儲存的信息功能單一
Java包的命名:域名倒序+模塊名+功能名(推薦全部使用小寫)
導(dǎo)入包的方法:
通過import 包名.*;導(dǎo)入此包下的所有類
通過import 包名.類名;導(dǎo)入此包下的指定類
通過在源代碼中直接加載包名.類名;
建議采用import 包名.類名;的方式加載,提高效率
Tips:加載類的順序跟import導(dǎo)入語句的位置無關(guān)
當(dāng)通過import 包名.*;只能訪問到指定包名下的類,無法訪問子包下的類
Java常用系統(tǒng)包:
java.lang | 包含Java語言的基礎(chǔ)的類,該包系統(tǒng)加載時默認(rèn)導(dǎo)入,如:System、String、Math |
---|---|
java.util | 包含Java語言中常用工具,如:Scanner、Random |
java.io | 包含輸入、輸出相關(guān)功能的類,如File、InputStream |
static關(guān)鍵字:表示靜態(tài)信息;特征:類對象共享(即共享同一塊內(nèi)存空間);類加載時產(chǎn)生,銷毀時釋放,生命周期長
靜態(tài)成員的訪問方法:
對象.成員名
類名.成員名
推薦調(diào)用方式:類名.靜態(tài)成員
static + 屬性 -- 靜態(tài)屬性、靜態(tài)屬性;static + 方法 -- 靜態(tài)方法、類方法;沒有靜態(tài)的類(只能使用public、abstract、final修飾)和靜態(tài)的局部變量(只能使用final修飾)
普通成員方法可以調(diào)用類中任何成員(包括靜態(tài)成員),而靜態(tài)方法中不能直接訪問同一個類中的非靜態(tài)成員,只能直接調(diào)用同一個類中的靜態(tài)成員
代碼塊:在語句中出現(xiàn)“ {} ”,就叫做代碼塊;出現(xiàn)在方法里 -- 普通代碼塊(順序執(zhí)行 - 先出現(xiàn),先執(zhí)行;可以有多個普通代碼塊 );出現(xiàn)在類中 -- 構(gòu)造代碼塊(創(chuàng)建對象時調(diào)用,優(yōu)先于構(gòu)造方法執(zhí)行;可以有多個構(gòu)造代碼塊),可以給所有成員賦值;static + 構(gòu)造代碼塊 -- 靜態(tài)代碼塊(只在類加載時調(diào)用執(zhí)行一次,優(yōu)先于構(gòu)造代碼塊執(zhí)行;可以有多個靜態(tài)代碼塊),只能給靜態(tài)成員賦值
變量的作用范圍:從定義處開始至大括號閉合
static關(guān)鍵字及代碼塊案例:
package Chapter10.Lecture2.animal; public class Cat { //靜態(tài)成員、類成員 public static int price; //售價 private String name; //昵稱 private int month; //年齡 private double weight; //體重 private String species; //品種 { System.out.println("我是構(gòu)造代碼塊"); } static { System.out.println("我是靜態(tài)代碼塊"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public String getSpecies() { return species; } public void setSpecies(String species) { this.species = species; } public static void eat() { //靜態(tài)方法中不能直接訪問同一個類中的非靜態(tài)成員,只能直接調(diào)用同一個類中的靜態(tài)成員 //run(); //name = "小明"; //只能通過對象實例化后,對象.成員方法的方式訪問非靜態(tài)成員 Cat temp = new Cat(); temp.run(); temp.name = "小明"; //靜態(tài)方法中不能使用this //this.name = "小明"; Cat.price = 100; System.out.println("小貓吃魚"); } //在成員方法中,可以直接訪問類中的靜態(tài)成員 public void run() { { System.out.println("我是普通代碼塊"); } this.name = "凡凡"; Cat.price = 20; eat();//此行代碼會導(dǎo)致棧溢出,注釋掉后執(zhí)行(原因:遞歸調(diào)用) System.out.println("售價是" + Cat.price + "的" + this.name + "快跑"); } }
package Chapter10.Lecture2.test; import Chapter10.Lecture2.animal.Cat; public class Test { public static void main(String[] args) { Cat one = new Cat(); one.setName("花花"); one.setMonth(2); one.setSpecies("英國短毛貓"); //one.price = 2000; Cat.price = 2000; Cat two = new Cat(); two.setName("凡凡"); two.setMonth(1); two.setSpecies("中華田園貓"); //two.price = 150; Cat.price = 150; System.out.println(one.getName() + "的售價為:" + one.price); System.out.println(two.getName() + "的售價為:" + two.price); //one.eat(); Cat.eat(); System.out.println("----------------------"); one.run(); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71171.html
摘要:值得注意的是,默認(rèn)會自動配置,它將優(yōu)先采用連接池,如果沒有該依賴的情況則選取,如果前兩者都不可用最后選取。 SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴就可以輕易的搭建出一個 WEB 工程 Spring Framework對數(shù)據(jù)...
摘要:面向切面的面向切面編程的基本原理通過創(chuàng)建切面使用注解為切面注入依賴定義術(shù)語通知前置通知在目標(biāo)方法被調(diào)用之前調(diào)用通知功能后置通知在目標(biāo)方法完成之后調(diào)用通知,此時不會關(guān)心方法的輸出是什么返回通知在目標(biāo)方法成功執(zhí)行之后調(diào)用通知異常通知在目標(biāo)方 面向切面的Spring 面向切面編程的基本原理 通過POJO創(chuàng)建切面 使用@AspectJ注解 為AspectJ切面注入依賴 定義AOP術(shù)語 ...
摘要:相比它支持存儲的類型相對更多字符哈希集合有序集合列表,同時是線程安全的?;诘倪B接實例,可以在多個線程間并發(fā)訪問,且線程安全,滿足多線程環(huán)境下的并發(fā)訪問,同時它是可伸縮的設(shè)計,一個連接實例不夠的情況也可以按需增加連接實例。 SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML...
此文章為Spring Boot Reference Guide(2.1.5.RELEASE)的備忘錄。 Chapter 8. Introducing Spring Boot You can use Spring Boot to create a Java application that can be started by using java -jar or more traditional w...
閱讀 713·2021-11-18 10:02
閱讀 2252·2021-11-15 18:13
閱讀 3188·2021-11-15 11:38
閱讀 2969·2021-09-22 15:55
閱讀 3688·2021-08-09 13:43
閱讀 2456·2021-07-25 14:19
閱讀 2466·2019-08-30 14:15
閱讀 3459·2019-08-30 14:15