java.lang object math string,面向对象知识点回顾
static關鍵字
概念:多個對象共享同一份數據,是靜態的,可以修飾成員變量和成員方法,同時還可以修飾代碼塊和修飾類,但是必須是內部類。
static關鍵字特點
1.隨著類的加載而加載
2.靜態變量屬于類不屬于對象
3.被類的所有對象共享
4.靜態的內容存在于方法區的靜態區
5.static是共享的,不變的,放在方法區,靜態代碼塊在類加載的時候就會執行,并且只執行一次
static的使用
1.可以通過類名調用
2.類名.靜態變量
3.類名.靜態方法
4.通過讀寫方法訪問
static關鍵字應用場景
不想創建某個類的對象,而希望直接訪問該類的某些屬性或方法。
static關鍵字注意事項
1.在靜態方法中是不能使用this和super關鍵字。
2.靜態方法只能訪問靜態的成員變量和靜態的成員方法。
3.全是靜態方法的類一般在開發當中被看做工具類,例如Math類、Arrays 工具類。
4.非靜態環境可以訪問靜態變量
static關鍵字主要有四種用法:
1.用來修飾成員變量,將其變為類的成員,從而實現所有對象對于該成員的共享;
2.用來修飾成員方法,將其變為類方法,可以直接使用“類名.方法名”的方式調用,常用于工具類;
3.靜態塊用法,將多個類成員放在一起初始化,使得程序更加規整,其中理解對象的初始化過程非常關鍵;
4.靜態導包用法,將類的方法直接導入到當前類中,從而直接使用“方法名”即可調用類方法,更加方便。
靜態修飾方法的意義
1.簡化代碼
2.靜態方法用來訪問靜態成員
3.編寫工具類
*構造方法私有
*成員方法添加static關鍵字修飾
代碼塊
1.概念:使用”{}”括起來的一段代碼
2.分類:根據位置可分類
* 普通代碼塊:直接在方法或語句中定義的代碼塊
* 局部代碼塊: 定義在局部位置,限定局部變量的作用域
* 構造代碼塊:定義在成員位置,直接寫在類中的代碼塊,抽取多個構造代碼塊的重復代碼,從而簡化代碼
* 靜態代碼塊:定義在成員位置,在類加載的時候執行,只能夠執行一次
* 同步代碼塊:定義在局部位置
靜態變量和非靜態變量的區別
1.構造方法、構造代碼塊、靜態代碼塊的執行順序:靜態代碼塊 > 構造代碼塊 > 構造方法
2.靜態代碼塊在類加載的時候執行只執行一次
3.構造代碼塊在每次訪問構造方法之前執行,可以執行多次
4.構造方法每次創建對象的時候執行,可以執行多次
包
包的概述
*本質就是文件夾
*分門別類地管理Java文件
*處理同一個文件夾中類名重名的問題
包的聲明:
package 包名1.包名2....;
包的導入:
import java.util.Scanner;
包的特點:
1.同包下的類相互調用不需要導入
2.在同一個類中使用不同包中的同名類,需要顯示導入,例如Date
3.如果一個類沒有包,那么默認在default包下,該包下的類永遠無法被外界訪問,只能夠在同包下訪問
4.包的聲明必須出現在Java文件的第一句
5.如果希望導入一個包中所有的類 java.util.*;
6.java.lang(核心包)包下的類不需要導入
7.在寫一個類的時候千萬不要和系統的類重名
JDK中常用的包:
1.java.lang 包含了Java中一些核心的包 String Object Math Arrays
2.java.awt: 包含了Java中一些窗口圖形化的相關類
3.java.util: 工具包
super關鍵字
this和super用法類似,this代表本類引用,super代表父類引用。
this和super的對比使用
1.訪問成員變量
this.成員變量super.成員變量
2.訪問構造方法
this():訪問本類無參構造 this(參數列表) 訪問本類帶參構造
super():訪問父類無參構造 super(參數列表):訪問父類帶參構造
3.訪問成員方法
this.成員方法():訪問本類成員方法
super.成員方法():訪問父類成員方法
this和super的區別
1.this可以理解為當前對象,誰調用this就代指那個調用者對象,
2.每次創建一個對象,默認都會創建一個this變量指向同一個堆區空間
3.super本質是父類存儲空間的標識,但是你可以理解為父類對象,
那么同樣可以使用super這個關鍵字來訪問父類的成員
注意:
1.任何一個類的無參或者帶參構造方法的第一句都默認省略 super();
2.任何一個類都直接或者間接繼承自Object類
3.為什么設計Object類,滿足了萬事萬物皆對象的原則
訪問根類Object的無參構造方法的意義何在? - 加載Object類中靜態成員和靜態代碼塊
4.創建一個子類對象默認會去調用父類的構造方法,那么有沒有在創建子類對象的同時也創建了父類對象呢?
沒有創建父類對象,本質就相當于訪問了一個普通方法,創建對象開啟空間需要new關鍵字
5.super訪問父類帶參構造方法的意義? -- 幫助子類初始化父類繼承下來的成員,簡化編程
6.靜態環境/靜態上下文(static修飾的方法),不能夠出現this和super
7.super必須出現在構造方法的第一句
8.this和super不能夠共存
繼承
概念:
類是對一批對象的抽象,繼承是對一批類的抽象
繼承的格式:
類和類之間的關系:
*繼承 (is a)
*組合 (has a)
*通過extends關鍵字可以實現類與類的繼承
*class 子類類名 extends 父類類名 { }
*被繼承的這個類稱為父類,基類或者超類
*繼承的這個類稱為子類或者派生類
繼承的特點:
*1.通過extends關鍵字,實現了繼承之后,讓類與類之間產生了關系,建立關系是好還是壞? 有好有壞
*2.繼承的本質就是抽取共性代碼,多個重復代碼的向上抽取,簡化代碼 BaseDao BaseActivity
*3.類是對一批對象的抽象,繼承是對一批類的抽象
*4.父類又被稱為超類,或者基類,子類又被稱為派生類
*5.Java是面向對象語言,萬事萬物皆是對象,為了滿足這個設計原則,所有的類都直接或者間接繼承自Object類
繼承的好處:
*1.簡化了代碼
*2.提高了擴展性
*3.提高了可維護性
*4.開閉原則: 對擴展開放,對修改關閉
繼承的缺點:
*開閉原則: 對擴展開放,對修改關閉
*高內聚,低耦合: 類與類之間,功能與功能之間,模塊與模塊之間,功能盡量內聚,不同模塊之間,盡 量獨立
*造成了耦合性過高,牽一發動全身
*?注意:繼承一定要慎用,主要利用繼承簡化代碼的優點
繼承的注意事項:
*1.單一繼承性
* 2.支持多層繼承
*3.如果父類成員使用private修飾,那么子類不能被繼承
*4.如果一個子類繼承了父類的屬性和方法還可以有自己特有的屬性和方法
*5.當子類和父類的成員變量重名的時候,子類優先
*6.構造方法不能夠被繼承
如何使用繼承
*1.一般在寫代碼的時候發現代碼中存在重復代碼,需要向上抽取,考慮繼承
*2.當某個類的設計非常復雜的時候可以考慮繼承。例如: 設計一個窗口類
使用繼承的步驟:
1、書寫出所有子類,觀察子類共有的成員變量和成員方法
2、抽象出共同點,書寫一個父類
3、讓子類去繼承父類,并把子類的共有屬性刪除
訪問權限修飾符
訪問權限修飾符:
public [default] protected private
修飾類
1.public 任何包中的類都可以訪問該類
2.默認(default) 同一個包中的類可以訪問該類
3.不能用protected和private修飾類。
修飾成員(成員變量或者成員方法)
1.private 只對本身類可見
2.默認(default) 對同一包中的類可見
3.protected 對所有子類和同一包中的類可見
4.public對一切類可見
方法重寫
方法重寫概述
如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。子類中出現了和父類中一模一樣的方法聲明,也被稱為方法覆蓋,方法復寫
方法重寫的規則
1.發生在具有子父類的兩個類中
2.方法名相同
3.參數列表相同
4.返回值類型相同或者是其子類
5.訪問權限不能嚴于父類
6.拋出的異常不能夠被擴大
訪問權限修飾符的寬嚴關系
public > protected > default > private
方法重寫的注意事項
1、父類中private修飾的方法不能被重寫,也不能夠被繼承。
2、構造方法不能被重寫。
3、子類重寫父類方法時,訪問權限不能更低。
4、重載和重寫的比較(重寫和重載是完全不同的兩個概念毫無任何關系)
5、返回值類型相同或者是其子類
舉例:
有農民(farmer),教師(teacher),科學家(scientist),服務生(attendant),其中農民,服務生只有基本工資,教師除基本工資外,還有課酬(元/天),科學家除基本工資外,還有年終獎,請你寫出相關類,將各種類型的員工的全年工資打印出來。
```java
public class OverrideDemo {
public static void main(String[] args) {
Farmer f = new Farmer(4500.0);
Teacher t = new Teacher(6000.0, 60);
Scientist s = new Scientist(8000.0, 100000.0);
Attendant a = new Attendant(2400.0);
f.printAllYearSalary();
t.printAllYearSalary();
s.printAllYearSalary();
a.printAllYearSalary();
}
}
class Employee {
protected double basicSalary;
public Employee() {
}
public Employee(double basicSalary) {
this.basicSalary = basicSalary;
}
public void printAllYearSalary() {
System.out.println("全年工資: " + (basicSalary * 12));
}
public double getBasicSalary() {
return basicSalary;
}
public void setBasicSalary(double basicSalary) {
this.basicSalary = basicSalary;
}
}
class Farmer extends Employee {
public Farmer() {
}
public Farmer(double basicSalary) {
super(basicSalary);
}
}
class Teacher extends Employee {
private double courseFee;
public Teacher() {
}
public Teacher(double basicSalary, double courseFee) {
super(basicSalary);
this.courseFee = courseFee;
}
public double getCourseFee() {
return courseFee;
}
public void setCourseFee(double courseFee) {
this.courseFee = courseFee;
}
@Override
public void printAllYearSalary() {
System.out.println("全年工資: " + (basicSalary * 12 + courseFee * 600));
}
}
class Scientist extends Employee {
private double yearBouns;
public Scientist() {
}
public Scientist(double basicSalary, double yearBouns) {
super(basicSalary);
this.yearBouns = yearBouns;
}
@Override
public void printAllYearSalary() {
System.out.println("全年工資: " + (basicSalary * 12 + yearBouns));
}
public double getYearBouns() {
return yearBouns;
}
public void setYearBouns(double yearBouns) {
this.yearBouns = yearBouns;
}
}
class Attendant extends Employee {
public Attendant() {
}
public Attendant(double baiscSalary) {
super(baiscSalary);
}
}
```
總結
以上是生活随笔為你收集整理的java.lang object math string,面向对象知识点回顾的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java substance下载,做出漂
- 下一篇: php中求数据库两个数的和,php –