導航:首頁 > 編程語言 > java實例類型

java實例類型

發布時間:2023-03-07 05:58:16

1. java中,類的對象,對象的實例,對象的引用,三者如何進行區分,有何區別呢

沒有「對象的實例」這種叫法,正確的叫法是「類的實例」。


沒有學過java,給你說說我的理解吧!


在java和C++這類語言中,對象(對象和實例是同義詞)實際上就是內存中的存儲數據一塊固定存儲空間,並且對象還有一系列的操作這塊存儲空間的方法。


對象的引用相當於對象的名字,名字與對象本身的區別就好比你的名字和你本人的區別。java里使用對象只能通過引用的方式,基本數據類型的變數和CC++的變數規則一樣。


如:

UserTypeut=newUserType();//ut是引用,實際的對象在內存里。
ut=newUserType();/*現在ut是另一個對象的引用,先前的對象被垃圾回收了(因為先前的對象不能被再次使用了)。*/
UserTypeut2;//定義了一個引用ut2,他不引用任何對象,不能使用。。。。
ut2=newUserType();//然ut2成為一個對象的引用。
UserTypeut3=newUserType();
UserTypeut4=newUserType();
ut3=ut4;//現在ut3引用ut4的對象,這里不是賦值。。。
inta=5;
intb=4;
a=b;//這里是賦值。ab依然引用不同的對象


類型轉換就是把一種類型的對象當做另一種類型的對象來使用。一些類型轉換會自動發生,另一些需要強制類型轉換,強制一般都會出問題,自動的也需要注意。


以上純屬個人理解,樓主慎讀之。。。。

2. java中反射實例類裝載的步驟及簡要闡述

java反射和類裝載

反射機制:

Person p=new Person();
這是什麼?當然是實例化一個對象了.可是這種實例化對象的方法存在一個問題,那就是必須要知道類名才可以實例化它的對象,這樣我們在應用方面就會受到限制.那麼有沒有這樣一種方式,讓我們不知道這個類的類名就可以實例化它的對象呢?Thank Goodness!幸虧我們用的是java, java就提供了這樣的機制.

1).java程序在運行時可以獲得任何一個類的位元組碼信息,包括類的修飾符(public,static等),基類(超類,父類),實現的介面,欄位和方法等信息.
2).java程序在運行時可以根據位元組碼信息來創建該類的實例對象,改變對象的欄位內容和調用對象方法.
這樣的機制就叫反射技術.可以想像光學中的反射,就像我們照鏡子,鏡子中又出現一個自己(比喻可能不太恰當,但是足以表達清楚意思了).反射技術提供了一種通用的動態連接程序組件的方法,不必要把程序所需要的目標類硬編碼到源程序中,從而使得我們可以創建靈活的程序.

反射的實現步驟( 不問不需要答) ,

1、獲取類的常用方式有三種: a) Class.forName("包名.類名"),最常用、推薦;b) 包名.類名.class 最簡捷;c) 對象.getClass 的方式獲得。

2、對象的實例化,上面已經獲取了類,只需要調用類的實例化方法,類.newInstance()便可。

3、獲取屬性和構造等,可以參考 JavaApi 的調用,類. getDeclaredFields,類. getConstructor(..)等。

Java的反射機制是通過反射API來實現的,它允許程序在運行過程中取得任何一個已知名稱的類的內部信息.反射API位於java.lang.reflect包中.主要包括以下幾類:
1).Constructor類:用來描述一個類的構造方法
2).Field類:用來描述一個類的成員變數
3).Method類:用來描述一個類的方法.
4).Modifer類:用來描述類內各元素的修飾符
5).Array:用來對數組進行操作.
Constructor,Field,Method這三個類都是JVM(虛擬機)在程序運行時創建的,用來表示載入類中相應的成員.這三個類都實現了java.lang.reflect.Member介面,Member介面定義了獲取類成員或構造方法等信息的方法.要使用這些反射API,必須先得到要操作的對象或類的Class類的實例.通過調用Class類的newInstance方法(只能調用類的默認構造方法)可以創建類的實例.這樣有局限性,我們可以先沖類的Class實例獲取類需要的構造方法,然後在利用反射來創建類的一個實例.

類載入機制:



類的載入機制可以分為載入-鏈接-初始化三個階段,鏈接又可以分為驗證、准備、解析三個過程。

載入:通過類的載入器查找並載入二進制位元組流的過程,在堆內存中的方法區生成 一個代表這個類的 java.lang.Class 對象,作為這個類的數據請求入口。(這里可以把上面類載入器載入文件的過程描述一下(參考版本一,不作重復))。

驗證:主要是對一些詞法、語法進行規范性校驗,避免對 JVM 本身安全造成危害; 比如對文件格式,位元組碼驗證,無數據驗證等。但驗證階段是非必須的,可以通過參數 設置來進行關閉,以提高載入的時效。

准備:對類變數分配內存,並且對類變數預初始化,初始化成數據類型的原始值, 比如 static int a=11,會被初始化成成 a=0;如果是 static double a =11,則會被初始化成 a=0.0; 而成員變數只會成實例化後的堆中初始化。

解析:把常量池中的符號引用轉換為直接引用的過程。

初始化:對類的靜態變數和靜態塊中的變數進行初始化。(上面的准備階段可以作為 預初始化,初始到變數類型的原值,但如果被 final 修飾會進行真正初始化)

上面載入、鏈接、初始化的各個階段並不是彼此獨立,而是交叉進行,這點很重要 。

***class.forName和 classloader的區別

Class.forName 和 ClassLoader 都是用來裝載類的,對於類的裝載一般為分三個階段載入、鏈接、編譯,它們裝載類的方式是有區別。

首先看一下 Class.forName(..),forName(..)方法有一個重載方法 forName(className,boolean,ClassLoader),它有三個參數,第一個參數是類的包路徑,第二個參數是 boolean

類型,為 true 地表示 Loading 時會進行初始化,第三個就是指定一個載入器;當你調用class.forName(..)時,默認調用的是有三個參數的重載方法,第二個參數默認傳入 true,第三個參數默認使用的是當前類載入時用的載入器。

ClassLoader.loadClass()也有一個重載方法,從源碼中可以看出它默認調的是它的重載 方法 loadClass(name, false),當第二參數為 false 時,說明類載入時不會被鏈接。這也是兩者之間最大區別,前者在載入的時候已經初始化,後者在載入的時候還沒有鏈接。如果你需要在載入時初始化一些東西,就要用 Class.forName 了,比如我們常用的驅動載入, 實際上它的注冊動作就是在載入時的一個靜態塊中完成的。所以它不能被 ClassLoader 載入代替。

3. 在java中 什麼叫 實例方法

Java中類的方法分為類方法(用static修飾,也叫靜態方法)和實例方法(沒有用static修飾,也叫非靜態方法),我們來了解下兩者的區別。
1.實例方法
當類的位元組碼文件載入到內存中時,類的實例方法並沒有被分配入口地址,只有當該類的對象創建以後,實例方法才分配了入口地址。從而實例方法可以被類創建的所有對象調用,還有一點需要注意,當我們創建第一個類的對象時,實例方法的入口地址會完成分配,當後續在創建對象時,不會再分配新的入口地址,也可以說,該類的所有對象共享實例方法的入口地址,當該類的所有對象被銷毀,入口地址才會消失。
2.類方法
當類的位元組碼文件載入到內存,類方法的入口地址就會分配完成,所以類方法不僅可以被該類的對象調用,也可以直接通過類名完成調用。類方法的入口地址只有程序退出時消失。

4. java當中什麼是class實例

可以這么說。在Java中,每個class都有一個相應的Class對象。也就是說,當我們編寫一個類,編譯完成後,在生成的.class文件中,就會產生一個Class對象,用於表示這個類的類型信息。
在運行期間,如果我們要產生某個類的對象,Java虛擬機會檢查該類型的Class對象是否已被載入。如果沒有被載入,JVM會根據類的名稱找到.class文件並載入它。一旦某個類型的Class對象已被載入到內存,就可以用它來產生該類型的所有對象

5. Java中實例是什麼意思

已經分配有內存的對象就叫做對象的實例。有分配內存才表明這個對象確實存在。

6. Java中實例是什麼意思

new 一個對象是實例嗎?
對,是實例,你說的沒錯。可以把這個new出來的對象叫做實例,說白了就是這個new出來的「東西」,叫它對象也可以,叫它實例也可以,對象和實例在這個角度上來講是等價的。
這樣:
Java中使用 new關鍵字 加上 構造方法,來創建一個對象,下面是一個名為Cat的類,
public class Cat {
public Cat() {
System.out.println("這是構造方法");
}
}
使用new + 構造方法 來創建一個對象,那麼也就是
Cat c = new Cat();
前半部分,Cat c 的意思是,在內存中分配一個變數,名字叫c,這個變數是Cat類型的,它的值是什麼?
一會兒在說;
後半部分,new Cat(); 這就是new關鍵字和構造方法來創建一個對象,Cat()是構造方法的名字沒錯吧?想造出一個對象來,就這么寫,語法規定的,沒有為什麼;
new Cat(); 說明 new這個Cat類的一個對象,程序運行的時候,會調用構造方法Cat(),等這個構造方法執行完了,這個Cat類型的對象也就造出來了,真正的出現在內存當中了;
使用new關鍵字造出來的對象,被分配在內存的堆區(heap),而且等這個對象真正出來之後,還會做一件重要的事情:
我們這個對象是被分配在內存中的,那麼內存地方大了,這個對象在哪裡呢?怎麼找到它呢?new關鍵字創建出一個對象之後,會把這個對象在內存中的地址返回,通過這個地址就可以找到這個對象,那麼我們上面的寫法,
Cat c = new Cat();
意思就是說,把這個對象在內存中的地址 賦值 給變數c,這就是Java中引用概念,c就叫做引用,或者叫引用變數,或者直接叫變數,沒問題,都是它;
c的值就是一個內存地址,或者叫引用地址,通過這個地址,就可以准確的找到我們剛才創建出來的對象,以後我們要使用這個對象做一些事情,調用此對象的方法什麼的,都用過這個引用,ok?
----
注意,我再說一遍,好多人都搞不清楚,這個c到底是對象還是引用,好多人說c就是Cat類的一個實例,這是非常錯誤的,c就是引用,不是對象!我們new出來的這個東西,真正在內存中的這個東西叫做對象,叫做實例

閱讀全文

與java實例類型相關的資料

熱點內容
手機文檔解壓之後解壓包去哪兒了 瀏覽:921
java中網路編程重要嗎 瀏覽:683
如何登錄別人的伺服器 瀏覽:626
調度系統軟體python 瀏覽:205
微信大轉盤抽獎源碼 瀏覽:497
壓縮機損壞的表現 瀏覽:862
同步數據伺服器怎麼用 瀏覽:634
163郵箱伺服器的ip地址 瀏覽:50
伺服器跟域是什麼 瀏覽:128
rails啟動命令 瀏覽:465
logistic命令怎麼用 瀏覽:738
c語言點滴pdf 瀏覽:747
linuxrtc編程 瀏覽:258
linux打包並壓縮命令 瀏覽:644
aes加密的證書格式 瀏覽:99
oracledbcalinux 瀏覽:844
酬勤任務app怎麼被特邀 瀏覽:199
android應用文件夾 瀏覽:1002
平面設計法則pdf 瀏覽:339
3d圓角命令怎麼用 瀏覽:569