Java基礎之類與對象
前言
- 本文章適合初學者進行詳細的學習,內容都是java必備掌握的知識點
- 文章內容並沒有太深、但知識點豐富
1、面向對象的特點
- 封裝性:將數據和對數據操作封裝在一起,可以保護我們的數據。
- 繼承型:子類繼承父類,擁有了父類的能力基礎上完善自己。
- 多態性:同一操作被不同類型對象調用產生不同效果
2、類體
2.1類的聲明
- 見名知意
- 首字母大寫
- 駝峰風格 StudyJava、WakeUp等等
2.2成員變數
- 類中有成員變數和方法
- 成員變數的類型:整型、浮點型、字元型、邏輯類型、引用類型:數組、對象和介面
- 成員變數有默認值而局部變數卻沒有默認值(所以我們在使用局部變數時,要給定具體的值,局部變數可以使用var)
2.3變數和方法聲明
- 變數和方法聲明規則相同
- 第二個單詞的首字母大寫
- 見名知意
- studyJava、getSum等等
3、類之間的關係
- 依賴(“uses-a”):一個類的方法 操作 另一個類的對象
public class A {
public void uses_a(C e) {
//C類是A類方法中的參數
}
}
class C {
}
- 聚合(“has-a”):類A的對象 包含 類B的對象
class student {
}
class school { //一個學校多個學生 一個學生一個學校
student A;
student B;
}
- 繼承(“is-a”):
public class A extends C{
public static void main(String[] args) {
A a = new A(); //A繼承了C A可以調用C中的方法與成員變數
a.is_a();
}
}
class C {
public void is_a() {
}
}
4、構造方法
- Java中有默認的無參構造,Student類中就有
class Student{
Student(){ //無參數的構造方法。不寫也默認有
}
int A;
Student(int a){//一旦有 有參構造,則不在默認擁有無參構造
A = a;
}
}
- 參數構造方法是和類名相同的
- 並且沒有任何的返回值類型
- 每個類可以有一個以上構造器
- 參數不限、總是伴隨著new操作符一起調用
- 常常用來給成員變數初始化使用
5、創建對象
5.1對象的聲明
- 類的名字 + 對象的名字;
Student stu;這個時候只是聲明了一個對象,並沒有給它引用,這是一個空對象我們無法使用
- 使用了空對象則會出現NullPointerException異常
5.2new操作符的作用
new Student();在我們new了一個引用後,我們將得到一個地址,我們拿著這個得到的地址。
- 去給我們剛剛聲明的對象,這樣這個對象才真正的產生了!!!
- Student stu = new Student();
5.3垃圾回收機制
- Java中所謂的辣雞回收機制就是,如果一個對象(實體)不在被任何對象引用,則將它釋放記憶體。
6、final、static、this關鍵字
6.1final
- final:最終的
- ①final可以用來修飾的結構:類、方法、變數
- ②不能被其他類繼承
- ③表示此方法不能被重寫
- ④final修飾一個屬性,就是一個常量
- 就是不可變的,String類具有不可變性,所以就用final修飾
6.2static:靜態的
- ①可以通過(類.靜態變數)的方式進行調用
- ②static可以用來修飾:屬性、方法、程式碼塊、內部類
- ③使用static修飾屬性:靜態變數(類變數、共享)
- ④statci修飾的是大家共同擁有的,缺點就是誰都可以改變這個值
- ⑤隨著類的載入而載入,雖然載入的很快,但是會導致浪費資源問題。
- 像
Math.random()就是用static修飾的,不然我們需要先new 一個對象 然後再調用random()方法
- 通過類名直接調用方法
6.3this欄位作用
- this()通常在構造器中第一句使用,可以調用父類的構造方法。具體如何使用待學完繼承後詳細講解
class Father {
String name;
int age;
public Father(String name,int age) {
this.name = name;//Java中通常通過this來區分方法體內傳來的參數和本身類中的參數
this.age = age; //this指的是本類中的實例欄位,而不是傳進來的值
//使用this可以使我們的程式更加清晰,當然你不用也沒錯!
}
}
7、方法參數
- 學過C語言的小夥伴都會認為方法的傳參有兩種情況:值傳遞和引用傳遞
- 同時也發現這個在Java中也非常適用,所以就覺得Java也是分為這兩種情況
為了誤導大家,我特意舉個例子
public class A{
public static void main(String[] args) {
B test2 = new B(20);
test2.swap(test2); //我們調用這個swap()方法,將對象test2傳進入,最終我們的年齡從20變成了30
//但是雖然我們傳的是引用,但是引用的實質就是它的地址值,其實說白了我們還是在傳值操作
//下面我給大家舉個反例
System.out.println(test2.age);
}
}
class B {
int age;
public void swap(B c) {
c.setAge(30);
}
public B(int age) {
this.age = age;
}
public void setAge(int age) {
this.age = age;
}
}
- 反例
public class A{
public static void main(String[] args) {
People zs = new People("張三", 10);//這裡我new了兩個對象實體zs和ls
People ls = new People("李四", 20);
ls.swap(zs,ls);//此時ls想和zs交換身份,所以就把他們的引用傳了過去
System.out.println(zs);//最終輸出還是[張三,10],ls的願望沒有達成
//由此可以證明我們傳遞的是兩個對象的地址值,而並非真正的引用。
}
}
class People {
String name;
int age;
public People() {
}
public void swap(People a, People b) {
People temp = null;
temp = a;
a = b;
b = temp;
}
public People(String name,int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- 那麼小夥伴們可能會問了,那第一種情況為什麼可以改變呢???
-
因為第一種情況,我們改變的是這個對象的狀態,雖然我們仍然傳的是地址值,但是我們在方法體內將此對象的狀態改變啦,大家可以多看看認真思考一下、反覆推敲。
- 一定要記住Java中沒有引用傳遞,只有值傳遞。
8、方法重寫與重載
8.1面試題:重寫和重載有什麼區別???
話說他倆除了名字差個字以外,其他不是一個概念,下面來帶大家了解二者分別是什麼
8.2重載
- 重載的特點:
- 兩個方法的參數個數不同
- 兩個方法的參數類型不同
- 不考慮返回值類型
- 兩個方法名字相同
//方法重載
public void t1(int a,double b){
}
public String t1(String a,double b){
}
- 構造器也有很多重載
8.3重寫
- 重寫的特點:
- 子類繼承了父類的方法
- 將父類的方法重新修改其中的功能。(修改方法體內)
- 相當於擁有了父親的方法,在父親方法中完善自我。
class Son extends Father{
public void run() {//兒子重寫了父親的run()功能
System.out.println("爸爸雖然我跑,但是我跑的更快");
}
}
class Father {
public void run() {
System.out.println("爸爸會跑");
}
}
9、導包
1.我們常用的包有:
- java.lang包含所有的基本語言類
- java.io包含所有的輸入/輸出類
- java.util包含實用類
- java.sql包含操作資料庫的類
- java.net包含所有實現網路功能的類
2.導入一個包要用import - eg:import java.util.Scanner;
- 可以使用通配符「*」,表示導入包中所有類
- eg:import java.sql.*;
10、四種訪問許可權
11、基本類型封裝和對象數組
11.1基本類型封裝
- Java中基本數據類型包括:boolean、byte、short、char、int、long、float和double
- 同時將他們變成對象的形式Byte、Integer、Short、Long、Float、Double和Character
- 在後面的學習我們能夠使用上。這裡就簡單介紹一下
- 並且Java中有自動裝箱和拆箱,其實用起來非常方便。
11.2對象數組
- 和普通數組一樣其實很簡單
- Student stu1,stu2,stu3,stu4,stu5;像這種情況我們要聲明多個對象時可以使用對象數組
Student[] stu = new Student[10];
stu[0] = new Student();
12、結尾
- 對於類與對象的內容就總結這麼多,希望大家可以多多練習。如果有不足之處,希望大家多多包涵,多多支援。如果有不懂的地方可以直接私信問我,歡迎來訪!
- 我將會繼續更新關於Java的學習知識,感興趣的小夥伴可以關注一下。
- 文章寫得比較走心,用了很長時間,絕對不是copy過來的!
- 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。