JAVA新手學習篇之類和對象詳解
一. 面向對象
Java 是一門面向對象的編程語言 (Object Oriented Program ,簡稱OOP),面向對象編程的核心思想是將數(shù)據(jù)(屬性)和操作數(shù)據(jù)的方法封裝成一個整體,即對象。對象之間通過信息傳遞來相互協(xié)作,從而實現(xiàn)特定的功能。
1.1 面向對象和面向過程
面向過程注重解決問題的步驟和操作,面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
舉例說明:將大象裝進冰箱
(1) 面向過程

?第一步:打開冰箱
第二步:將大象塞進冰箱
第三步:關上冰箱
那么以上三個步驟就是就是把大象塞進冰箱的過程,我們注重這一件事的過程,那么這種解決問題的方法我們就叫做面向過程。
(2) 面向對象

?那么此時只有人、大象、冰箱三個對象,將大象裝進冰箱的整個過程是:人、大象、冰箱三個對象之間交互完成的,我們不需要關心大象是如何被裝進冰箱的,那么這種不關注過程,通過對象之間的交互完成的解決問題的方式我們叫做面向對象。
注意:面向過程和面相對象并不是一門語言,而是解決問題的方法,沒有那個好壞之分,都有其專門的應用場景。
二. 類的定義和使用
什么是類呢?我們一起來簡單認識一下
2.1 什么是類
類就是用來對一個對象進行描述的,主要描述該對象有哪些屬性,哪些功能等
例如:學生
屬性:年齡、姓名、性別......
行為:上學、吃飯、考試......
那么我們知道了類的作用,那么該如何定義類呢?
2.2 類的定義格式
在JAVA中定義類的時候需要用到class關鍵字,語法格式如下:
class ClassName { //ClassName表示類的名稱
field; //表示成員變量(屬性)
method; //表示行為或者成員方法
}
那么我們來創(chuàng)建一個上述提到的學生類:
public class Student {
public String name;//學生姓名
public int age ;//學生年齡
public int score ;//學生成績
public void eat()
{
System.out.println("正在吃飯......");
}
public void exam()
{
System.out.println("正在考試......");
}
}
那么一個簡單的學生類就創(chuàng)建好了,里面描述了學生的屬性和行為。
定義類的注意事項:
1. 類型采用大駝峰定義
2.成員前寫法統(tǒng)一為public ,后面會介紹其他的訪問修飾限定符
三. 類的實例化
通過上述描述我們知道 類 只是用來對一個實體進行描述的,通過實例化才能夠創(chuàng)造出對象,那么在JAVA中我們該如何實例化出一個對象呢?這時候就要用到new這個關鍵字來進行實例化
以上述的學生類示范:
public class Student {
public String name;//學生姓名
public int age ;//學生年齡
public int score ;//學生成績
public void eat()
{
System.out.println(name+"正在吃飯......");
}
public void exam()
{
System.out.println(name+"正在考試......");
}
public static void main(String[] args) {
Student student1=new Student();
student1.name="張三";
student1.age=10;
student1.score=99;
student1.eat();
student1.exam();
}
}?
類實例化的注意事項:
1. new 關鍵字用于創(chuàng)建一個對象的實例 .
2. 使用 . 來訪問對象中的屬性和方法 .
3. 同一個類可以創(chuàng)建多個實例對象
四. this引用
接下來我們看看這個日期類的代碼和運行結果,讓我們帶著問題來探索this的用法。
public class Day {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day){
year = year;
month = month;
day = day;
}
public void printDay(){
System.out.println(year + "/" + month + "/" + day);
}
public static void main(String[] args) {
Day d1 = new Day();
Day d2 = new Day();
Day d3 = new Day();
d1.setDay(2020,9,15);
d2.setDay(2020,9,16);
d3.setDay(2020,9,17);
d1.printDay();
d2.printDay();
d3.printDay();
}
}
通過運行結果可以看見,我們明明利用setDay方法d1、d2、d3都進行的賦值,那么打印出來的結果為什么還是0/0/0呢?
第一個問題:形參名與成員變量名相同時,形參究竟是給成員變量賦值呢還是形參自己對自己賦值呢?

第二個問題:此時我們的d1、d2、d3都在調用printDay方法,該方法是如何知道打印的是哪個對象的數(shù)據(jù)呢?

那么帶著這兩個問題,我們一起來探索一下this的用法。
4.1 this引用的作用
this 引用指向當前對象 ( 成員方法運行時調用該成員方法的對象),那么我們來看一下this是怎么解決上述問題的:
問題一:
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
通過運行結果可以看見此時的結果是正確的,這是因為之前的代碼中沒有加上this引用,那時的賦值操作是 形參自己對自己進行賦值,成員變量的值還是默認值。而此時我們加上了this引用,那么此時帶this引用的year、month、day就是當前類的成員變量, 此時的賦值操作就是形參對成員變量進行賦值。
問題二:
public void printDay(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
printDay方法通過this引用就能夠知道打印的是當前對象的數(shù)據(jù)。
總結: 1. 當形參名和成員變量名字相同時,通過this引用表示該變量是當前類的成員變量
2. this是“成員方法”第一個隱藏的參數(shù),編譯器會自動傳遞,在成員方法執(zhí)行時,編譯器會負責將調用成員方法對象的引用傳遞給該成員方法,this負責來接收。
五. 構造方法
構造方法是一個特殊的成員方法,方法名必須與類名相同,構造方法可以直接給成員變量進行初始化
public class Day {
public int year;
public int month;
public int day;
public Day(int year,int month,int day)
{
this.year=year;
this.month=month;
this.day=day;
}
public void printDay(){
System.out.println(year + "/" + month + "/" +day);
}
public static void main(String[] args) {
Day d1=new Day(2024,10,10);
d1.printDay();
}
}
注意事項:
1. 名字必須與類名相同
2. 沒有返回值類型,設置為 void 也不行
3. 創(chuàng)建對象時由編譯器自動調用,并且在對象的生命周期內只調用一次
4. 如果不寫構造方法,編譯器會主動添加一個不帶參數(shù)的構造方法
public class Day {
public int year;
public int month;
public int day;
public Day()
{
......
}
public void printDay(){
System.out.println(year + "/" + month + "/" +day);
}
}那么如果我們自己寫了一個構造方法,那么編譯器就不會自動生成構造方法,正所謂救急不救窮。
5.1 構造方法重載
我們可以定義多個不同參數(shù)的構造方法,這樣就實現(xiàn)了構造方法的重載,方便用于多種情況
public class Day {
public int year;
public int month;
public int day;
public Day()
{
}
public Day(int year,int month,int day)
{
this.year=year;
this.month=month;
this.day=day;
}
public void printDay(){
System.out.println(year + "/" + month + "/" +day);
}
}5.2 通過this調用其他構造方法
. 構造方法中,可以通過 this 調用其他構造方法來簡化代碼
public class Day {
public int year;
public int month;
public int day;
public Day()
{
this(2020,10,31);
}
public Day(int year,int month,int day)
{
this.year=year;
this.month=month;
this.day=day;
}
public void printDay(){
System.out.println(year + "/" + month + "/" +day);
}
public static void main(String[] args) {
Day d1=new Day();
d1.printDay();
}
}

注意事項:
1. this(...)必須是構造方法中第一條語句
2. 構造方法之間不能互相調用形成環(huán)
5.3 默認初始化
在使用局部變量之前是必須進行初始化的,否則會進行報錯。但是使用成員變量時,可以不進行初始化,當我們實例化一個對象后,對象空間被申請好之后,對象中包含的成員其實已經(jīng)設置好了初始值。

結語
以上就是部分類和對象的內容,希望大家看完本篇后能夠理解類和對象的概念,在此小新感謝大家的觀看?。?!
到此這篇關于JAVA新手學習篇之類和對象詳解的文章就介紹到這了,更多相關JAVA類和對象內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于MyBatisSystemException異常產(chǎn)生的原因及解決過程
文章講述了在使用MyBatis進行數(shù)據(jù)庫操作時遇到的異常及其解決過程,首先考慮了事務問題,但未解決,接著懷疑是MyBatis的一級緩存問題,關閉緩存后問題依舊存在,最終發(fā)現(xiàn)是SQL映射文件中的參數(shù)傳遞錯誤,使用了錯誤的標簽導致循環(huán)插入2025-01-01
Java中PageHelper分頁后對list操作導致分頁無效
在項目中使用分頁插件的時候發(fā)現(xiàn)PageHelper插件失效了,本文就來介紹一下Java中PageHelper分頁后對list操作導致分頁無效的解決方法,感興趣的可以了解一下2021-05-05
springboot接收http請求,解決參數(shù)中+號變成空格的問題
這篇文章主要介紹了springboot接收http請求,解決參數(shù)中+號變成空格的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08

