日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

四、java基础-面向过程_对象_类中可出现的因素

發布時間:2024/10/8 编程问答 28 如意码农
生活随笔 收集整理的這篇文章主要介紹了 四、java基础-面向过程_对象_类中可出现的因素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、面向過程和面向對象區別:

1)面向過程:開發一個應用程序、一個項目,必須先了解整個過程,了解各個步驟、模塊間的因果關系,使的面向過程方式去開發程序時,代碼和代碼之間的關聯程度是非常強。所以其中任何一個因果關系出現問題或者發生變動,都會影響到整個系統。缺點:擴展性差
2)面向對象:先去了解整個業務,然后將現實的業務分割成不同的單元,再使用java程序對各個單元進行實現,實現之后我們只要給它一個環境,驅動一下,讓各個單元和各個單元進行合作,形成一個系統。優點:擴展能力強

備注:因為現實世界太復雜多變,面向過程的分析方法無法滿足。

java、.net:都是面向對象的;c++:一半面向對象,一半面向過程;c語言: 純面向過程

備注:為什么面向對象成為主流?

因為更符合人類的思維模式,更容易分析顯示世界,從軟件開發的生命周期來看:面向對象分為(OOA 面向對象的分析、OOD 面向對象的設計、OOP面向對象的線程)

2、類和對象的概念:

1)類:是一種類型,對現實世界中具有共同特征的一堆事物進行抽象,就形成了類。
類=屬相+方法   屬相源于類的狀態,而方法來源于動作
2)對象:現實存在的個體,具體的存在稱為對象,也叫實例;也就是說一個類的具體化,就是對象或實例
備注:通常是定義類型,創建對象;在java中類相當于引用數據類型,從類到對象的過程稱為實例化過程,從對象到類的過程稱為抽象的過程
java語言中對象封裝性:
A、屬性私有化。由private修飾的數據只能在本類中訪問
B、對外提供set和get方法,在方法中可以寫代碼做業務邏輯控制,進一步提高數據安全性,外部程序無法直接訪問私有的數據,但是可以通過調用set和get方法進行調用

3、java類中可以出現的因素:

1)成員變量(實例變量、非靜態變量)-->是對象相關的,在堆中的對象中存儲,必須有對象才能訪問。引用.成員變量名進行調用成員變量必須先聲明再賦值才能使用,若無手動賦值,則在無參構造方法執行的時候會自動賦值,但是加載該類的時候并不會給其中定義的成員變量賦值
2)成員方法(實例方法、非靜態方法)-->引用.成員方法名進行調用
3)靜態方法 -->類名.靜態方法名進行調用
4)構造函數(構造方法)-->為了創建對象,并在創建對象的時(即調用無參構造方法時)給所又的成員變量賦值
   構造方法的語法: [修飾符列表]  構造方法名(形式參數列表){//構造方法名必須和類名一致
     方法體;//一個類沒有提供任何構造方法,系統默認提供無參數的構造方法;一個類已經手動的提供了構造方法,那么系統不會再提供任何構造方法;
    }
  //構造方法和普通的方法一樣,同樣可以構成重載
  //構造方法不具有任何返回值類型,即沒有返回值,關鍵字void 也不能加入,加入后就不是構造方法了,就成了普通的方法了

備注:

對象:

A、java語言中所有new的東西只有在heap堆內存種才能看到。
B、new表示到堆里面開辟一個空間,new 在java語言中是個關鍵字。
C、Student stu1=new Student();其中的new Student 表示開辟的空間是一個Sutdent類型的空間,其實是在創建對象。 而stu1是個局部變量,它的類型是Student類型。是在棧中存儲的。即new Student()創建一個對象,之后將賦給局部變量:stu1,而這個局部變量是有類型的,是Student類型。

D、對象在堆里面是占一定的空間的,這個空間在內存中有它的地址。這個內存地址被賦給了stu1,那么stu1這個地址就指向了堆里面的空間,這在C語言里面叫做指針,只不過在java中沒有指針這么一說,這被稱做引用,
注意:把stu1當做對象是錯誤的,stu1專業術語別成為引用,引用中保存的是內存地址指向堆中的對象。一般情況下都是通過一個地址去訪問一個對象。一個類可以創建多個對象

4、 一個標準的實體類的4大基本規則:
A、封裝(屬性私有化,分別提供對應的get與set方法等),
B、提供無參構造 ,
C、重寫:toString(),equals(),hashCode()這3個方法,
D、實現java.io.Serializable接口!

為什么要重寫toString方法?
最后重寫toString方法會讓你打印和輸出變得更順利

為什么要重寫equals方法?
重寫它就是為了以后比較對象是否相等,比如你問題中的假如父類是person,子類是student,那么當我們new了幾個student后,在程序中怎么去判斷這幾個 student實例是否是同一個學生呢?別告訴我用“=”去判斷!這時如果我們的student重寫了equals(比如你按照學號來比較),那么你就可以用S1.equals(S2)來比較了。
為什么重寫hashCode方法?
至于hashCode,那是因為假如我們存取數據時  是存放在鍵值對中時(比如Map),這時候光靠equals效率不高,這時候用對象的哈希碼(即hashCode方法得到的)來查找和比較更快,所以一般重寫equals方法必須重寫hashCode方法,因為java規定相等的對象必須有相等的哈希碼

5、java虛擬機管理的內存

1)堆區heap
所有new出來的對象都放在堆區,java程序員無法直接對堆中的數據進行操作,必須通過一個引用去訪問,也就是間接去訪問。
另一種解釋:存放new出來的對象,此對象由垃圾收集器收集,垃圾收集器,針對的就是堆區。 
2)棧區stack
每一次調用方法的時候都會在棧中分配空間,每調用一個方法,會發生壓棧動作;方法結束后發生彈棧動作,并且每一個棧幀中,會存放一個局部變量;

這個局部變量保存一個內存地址,指向堆(heap)中的一個對象,什么時候這個對象會被回收走呢?當中間的這根線斷了,就代表再也沒有人可以訪問它了。 因為所有訪問堆中的數據都是通過引用來實現的。如果堆中的對象沒有更多的引用指向它,則該對象變成了垃圾,等待垃圾回收器的回收。
3)方法區
方法區存放的是.class 文件代碼,還包括靜態變量、常量另外一種解釋:方法區存放類的所有消息,包括所有的方法,靜態變量,常量。

  *.class  文件通過裝載機,將class的文件代碼放到方法區里面。然后一步一步的執行代碼,代碼每執行一次就調用一次方法,每調用一次方法就在棧中分配空間,在這個過程中,假如用了一個new關鍵字,用來創建對象,一創建對象就會在堆區分配空間,

User u1= new User();//程序執行到此處,u1不再指向堆中的對象,即u1不指向堆中的任何東西,對象變成了垃圾。
u1=null;

//System.out.println(u1.name);//java.lang.NullPointerException 使用一個空的引用去訪問成員會出現:空指針異常。

備注:

類加載到虛擬機的時候,成員變量是沒有值的,因為在加載的時候根本就沒有創建對象;

在構造方法執行的時候,才會給成員變量賦值。所以引用數據類型的默認值都是null

對象在堆中開啟空間,對象在堆中的內存地址,讓一個引用去保存,將來我們要向訪問這個對象,要通過地址去訪問,也即是通過“引用.”的方式去訪問

總結

以上是生活随笔為你收集整理的四、java基础-面向过程_对象_类中可出现的因素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。