1. 返回類型是什麼意思
返回類型一般指返回引用類型,即函數返回值類型。
申明一個引用的時候,切記要對其進行初始化。引用聲明完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不可以把該引用名作為其他變數名的別名。
申明一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的塵春局一個別名,它本身不是一種數森櫻據類型,因此引用本身不佔存儲單元,系統也不給引用分配存儲單元。
(1)方法返回類型有哪些擴展閱讀
使用返回類型的優勢——
1、使用引用傳遞函數的參數,在內存中並沒有產生實參的副本,它是直接對實參操作;而使用一般變數傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變數是實參變數的副本;
如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變數傳遞參數的效率和所佔空間都好。派讓
2、使用指針作為函數的參數雖然也能達到與使用引用的效果。在被調函數中同樣要給形參分配存儲單元,且需要重復使用"*指針變數名"的形式進行運算,容易產生錯誤且程序的閱讀性較差。但在主調函數的調用點處,必須用變數的地址作為實參。而引用更容易使用,更清晰。
2. Java中方法的返回類型怎麼理解
java中方法,其實就是執行一個動作的。樓主能理解這句話嗎?比如「調用XX方法計算學生期末總成績」、「調用XX方法計算賬戶余額」、「調用XX方法列印出學生學號」,這些方法都是有一個執行目的的,每一個方法都是為一個執行目的而生的,返回值就與那個方法的目的有關。
比如我們調用XX方法計算學生成績,我們的目的是得到一個學生的成績,那我們就需要那個方法做兩件事:計算成績並且返回那個學生的成績給我們,成績就是這個方法的返回值,這個返回值的數據類型就是方法的返回類型,比如這里,我們定義為int(可以不定義為int,依情況而定,萬一學生成績可能是小數呢,就定義double,這都是由返回值類型決定的!)。
有的方法我們不需要他返回什麼值,比如「調用XX方法列印學生學號」,我們只需要他做一件事,就是列印學號,我們不需要得到任何反饋,只需要他做就行了,於是就定義這個方法的返回類型為void,意思是沒有返回值。
所以,其實方法的返回類型就是他返回的那個數據的類型,如果不返回任何數據,就是void!
能理解嗎?
3. java中方法的返回值可以是類類型嗎
可以的。
java的返回值類型有:void(沒有返回值)、基本數據瞎燃春類型(byte、short、int、段侍long、float、double、char、boolean)、引用數據類型(類、介面、數組)
望采磨耐納!
4. C#中方法返回值的類型有哪些
C#我沒研究,我用的是VB.net,但應該虛逗是差不多的,都屬於.net語言,方法的返回值類型基本包括所有滑譽汪類型,除了最基本的整型,長整整型,信仔字元串,數組,布爾,枚舉,還有系統的類,或自定義的類,例如我自定義了矩陣類,我就可以返回一個矩陣類型。
5. 關於方法的返回值類型
重寫(Overriding)
(1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父蠢冊類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而帶早宏不需要重新編寫相同的方法。
但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。
方法重寫又稱方法覆睜吵蓋。
(2)若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。
如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
(3)子類函數的訪問修飾許可權不能少於父類的;
(4)返回值類型取決於子類中重寫方法的類型。
6. 函數的返回類型有幾種它們的含義是什麼
函數的結果被稱為返回值,返問值的類型被稱為函數返回類型。
函數返回類型可以是預定義類型(如int 或double)、復合類型(如int&或double*)、用戶定義類型(如枚舉類或void 後者意指函數不返回值)
------------------------------------------------
具體請看:函數
1、概述
一般來說,函數由一個芹哪首名字來表示。函數的操作數稱為參數,由一個位於括弧中、並且用逗號分隔的參數表指定。函數的結果被稱為返回值,返問值的類型被稱為函數返回類型。不產生值的函數返回類型是void,意思是什麼都不返回。函數執行的動作在函數體中指定。函數體包含在花括弧中,有時也稱為函數塊。函數返回類型、以及其後的函數名、參數表和函數體構成了函數定義
當函數名後面緊跟著調用操作符時,這個函數就被執行了。如果函數被定義為應該接收參數,則在調用這個函數時,就需要為這些參數提供實參。且這些實參被放在調用操作符中,而兩個相鄰的實參用逗號分隔。這種安排稱為「向函數傳遞參數」
函數調用會導致兩件事情發生。如果函數已經被聲明為inline,則函數體可能已經在編譯期間它的調用點上就被展開。如果沒有被聲明為inline,則函數在運行時才被調用。函數調用會使程序控制權被傳送給正在被調用的函數,而當前活動函數的執行被掛起。當被調用的函數完成時,主調函數在調用語句之後的語句上恢復執行。函數在執行完函數體的最後一條語句或遇到返回語句後完成
我們必須在調用函數之前就聲明該函數,否則會引起編譯錯誤。當然,函數定義也可以被用作聲明。但是,函數在程序中只能被定義一次。典型情況下函數定義被放在單獨的程序文本文件中,或者與其他相關的函數定義放在同一個文本文件中。要想在其他文件而不是包含函數定義的文件中使用該函數,我們必須要用到另外一種函數聲明機制
函數聲明由函數返回類型、函數名和參數表構成。這三個元素被稱為函數聲明或函數原型,一個函數可在一個文件中被聲明多次。
函數聲明描述了函數的介面,它描述了函數必須接收的信息類型,以及它返回的信息類型返回類型,如果存在返回值的話。
2、函數原型
函數原型由函數返回類型、函數名以及參數表構成。函數原型描述的是函數的介面,它詳細描述了調用函數時需要提供的參數的類型和個數,以及函數返回值的類型
2.1、函數返回類型
函數返回類型可以是預定義類型(如int 或double)、復合類型(如int&或double*)、用戶定義類型(如枚舉類或void 後者意指函數不返回值)
函數類型和內置數組類型不能作為返回類型
但是,類類型和容器類型可以被直接返回(這種方式效率比較低)
在C++標准化之前,如果缺少顯式返回類型的話,返回值會被假定為int類型。在標准C++中,返回類型不能被省略
2.2、函數參數表
函數的參數表不能省略,沒有任何參數的函數可以用空參數表或含有單個關鍵字void 的參數表來表示。
參數表中不能出現同名的參數,函數定義的參數表中的參數名允許在函數體中訪問這個參數。函數聲明中的參數名不是必需的,如果名字存在的話,它應該被用作輔助文檔
2.3、參數類型檢查
函數的參數表為編譯器提供了必需的信息,使它能夠在函數調用時對給出的實參進行類型檢查
C++是一種強類型語言,每個函數調用的實參在編譯期間都要經過類型檢查。若實參類型與相應的參數類型不匹配,如果有可能,就會應用一個隱式的類型轉換。如果不可能進行隱式轉換或者實參的個數不正確,就會產生一個編譯錯誤。這就是函數必須先被聲明才能被使用的原因。編譯器必須根據函數參數表,對函數凋用的實參執行類型檢查,就此而言,聲明是必不可少的
3、緩嘩參數傳遞
所有的函數都使用在程序運行棧中分配的存儲區。該存儲區一直保持與該函數相關聯,直到函數結束為止。那時,存儲區將自動釋放以便重新使用。該函數的整個存儲區被稱為活動記錄
系統在函數的活動記錄中為函數的每個參數都提供了存儲區,參數的存儲長度由它的類型來決定。參數傳遞是指用函數調用的實參值來初始化函數參數存儲區的過程
C++中參數傳遞的預設初始化方法是把實參的值拷貝到參數的存儲區中,這被稱為按值
傳遞。
按值傳遞時,函數不會訪問當前調用的實參。函數處理的值是它本地的拷貝這些拷貝,被存儲在運行棧中,因此改變這些值不會影響實參的值。一旦函嫌數數結束了,函數的活動記錄將從棧中彈出,這些局部值也就消失了
在按值傳遞的情況下,實參的內容沒有被改變。這意味著程序員在函數調用時無需保存和恢復實參的值。如果沒有按值傳遞機制,那麼每個沒有被聲明為const 的參數就可能會隨每次函數調用而被改變。按值傳遞的危害最小,需要用戶做的工作也最少。毫無疑問,按值傳遞是參數傳遞合理的預設機制
按值傳遞並不是在所有的情況下都適合。不適合的情況包括:
(1)當大型的類對象必須作為參數傳遞時,對實際的應用程序而言,分配對象並拷貝到棧中的時間和空間開銷往往過大
(2)當實參的值必須被修改時
3.1、引用參數
把參數聲明成引用,實際上改變了預設的按值傳遞參數的傳遞機制。在按值傳遞時,函數操縱的是實參的本地拷貝。當參數是引用時,函數接收的是實參的左值而不是值的拷貝。這意味著函數知道實參在內存中的位置,因而能夠改變它的值或取它的地址
何時應該將一個參數指定為引用參數:
(1)被調用函數改變實參的值時
(2)向主調函數返回額外的結果
(3)向函數傳遞大型類對象
在按值傳遞情況下,整個對象將隨每次調用而被拷貝。盡管按值傳遞對內置數據類型的對象和小型類對象比較滿意,但是對於大型類對象,它的效率就太低了。使用引用參數,函數可以訪問被指定為實參的類對象,而不必在函數的活動記錄中拷貝它
如果引用參數不希望在被調用的函數內部被修改,那麼把參數聲明為const 型的引用是個不錯的辦法。這種方式能夠使編譯器防止無意的改變
3.2、引用和指針參數的關系
引用必須被初始化為指向一個對象,一旦初始化了,它就不能再指向其他對象。指針可以指向一系列不同的對象,也可以什麼都不指向。
因為指針可能指向一個對象或沒有任何對象,所以函數在確定指針實際指向一個有效的對象之前不能安全地解引用一個指針
另一方面,對於引用參數函數,不需要保證它指向一個對象。引用必須指向一個對象,甚至在我們不希望這樣時也是如此
如果一個參數可能在函數中指向不同的對象,或者這個參數可能不指向任何對象,則必須使用指針參數
引用參數的一個重要用法是,它允許我們在有效地實現重載操作符的同時,還能保證用法的直觀性
3.3、數組參數
在C++中,數組永遠不會按值傳遞。它是傳遞第一個元素的指針
例如,如下聲明:
void putValues( int[ 10 ] );
被編譯器視為:
void putValues( int* );
數組的長度與參數聲明無關
因為數組被傳遞為指針,所以這對程序員有兩個含義:
(1)在被調函數內對參數數組的改變將被應用到數組實參上而不是本地拷貝上
(2)數組長度不是參數類型的一部分
另外一種機制是將參數聲明為數組的引用。當參數是一個數組類型的引用時,數組長度成為參數和實參類型的一部分,編譯器檢查數組實參的長度與在函數參數類型中指定的長度是否匹配。例如:
void putValues( int (&arr)[10] );
int main() {
int i, j[ 2 ];
putValues( i ); // 錯誤: 實參不是 10 個 int 的數組
putValues( j ); // 錯誤: 實參不是 10 個 int 的數組
return 0;
}
參數也可以是多維數組,這樣的參數必須指明第一維以外的所有維的長度。例如:
void putValues( int matrix[][10], int rowSize );
把matrix 聲明成一個二維數組,每行由10 個列元素構成。matrix可以被等價地聲明為
int (*matrix)[10]
3.4、抽象容器類型參數
容器類型實際上是類類型,它比內置數組數據類型提供了更多的功能
當容器類型的參數按值傳遞時,容器以及全部元素都被拷貝到被調函數的本地拷貝中。因為拷貝的效率非常低,所以把容器類型的參數聲明為引用參數比較好。
當一個函數不會修改參數的值時,我們把參數聲明為const 類型的引用更為合適
3.5、預設實參
函數可以用參數表中的初始化語法為一個或多個參數指定預設實參
調用包含預設實參的,函數時我們可以(也可以不)為該參數提供實參。如果提供了實參,則它將覆蓋預設的實參值。否則函數將使用預設實參值
設計帶有預設實參函數的部分工作就是排列參數表中的參數,使最可能取用戶指定值的參數先出現,而最可能使用預設實參的參數出現在後面
一個參數只能在一個文件中被指定一次預設實參
習慣上,預設實參在公共頭文件包含的函數聲明中指定,而不是在函數定義中。如果預設實參在函數定義的參數表中提供,則預設實參只能用在包含該函數定義的文本文件的函數調用中
3.6、省略號
有時候我們無法列出傳遞給函數的所有實參的類型和數目。在這種情況下,我們可以用省略號... 指定函數參數表
省略號掛起類型檢查機制。它們的出現告知編譯器,當函數被調用時,可以有0 個或多個實參,而實參的類型未知。省略號有下列兩種形式:
void foo( parm_list, ... );
void foo( ... );
第一種形式為特定數目的函數參數提供了聲明。在這種情況下,當函數被調用時,對於與顯式聲明的參數相對應的實參進行類型檢查,而對於與省略號對應的實參則掛起類型檢查。在第一種形式中參數聲明後面的逗號是可選的
4、返回一個值
return 語句被放在函數體內,這條語句結束當前正在執行的函數。在程序執行期間遇到return 語句時,程序控制權被返回給調用此函數的函數。
一個具有返回值的函數(即函數返回類型沒有被聲明為void)必須返回一個值,缺少返回值將引起編譯錯誤
如果被返回的值的類型與函數返回類型不匹配,那麼如果可能的話將應用隱式類型轉換。如果無法隱式轉換,則產生一個編譯錯誤
預設情況下函數的返回值是按值傳遞的,這意味著得到控制權的函數將接收返回語句中指定的表達式的拷貝。該預設行為可以被改變,一個函數可以被聲明為返回一個指針或一個引用
當聲明一個返回引用的函數時,程序員應當知道下面兩個易犯的錯誤:
(1)返回一個指向局部對象的引用。局部對象的生命期隨函數的結束而結束。在函數結束後,該引用變成未定義內存的別名
(2)函數返回一個左值,對返回值的任何修改都將改變被返回的實際對象
4.1、參數和返回值與全局對象
一個程序中的各種函數可以通過兩種機制進行通信。一種方法是使用全局對象,另一種方法是使用函數參數表和返回值
全局對象被定義在函數定義之外
5、遞歸
直接或間接調用自己的函數被稱為遞歸函數
由於與函數調用相關的額外開銷,遞歸函數可能比非遞歸數執行得慢一些。但是遞歸函數可能更小且更易於理解
6、內聯函數
調用函數必須拷貝實參,保存機器的寄存器,程序還必須轉向一個新位置
若一個函數被指定為inline函數,則它將在程序中每個調用點上被內聯地展開
7、main():處理命令行
通常,在執行程序時,我們會傳遞命令行選項。例如,我們可能寫如下命令行:
prog -d -o ofile data0
實際上,命令行選項是main()的實參。在main()函數中,我們可以通過一個名為argv 的C 風格字元串數組訪問它
int main( int argc, char *argv[] ) { ... }
argc包含命令行選項的個數,argv包含aygc個C風格字元串,代表了由空格分隔的命令選項
8、指向函數的指針
8.1、指向函數的指針的類型
函數返回類型和參數表的不同組合,代表了各不相同的函數類型
int printf( const char*, ... );
int strlen( const char* );
int (*pfce)( const char*, ... ); // 可以指向 printf()
int (*pfc)( const char* ); // 可以指向 strlen()
8.2、初始化和賦值
不帶下標操作符的數組名會被解釋成指向首元素的指針。當一個函數名沒有被調用操作符修飾時,會被解釋成指向該類型函數的指針。例如,表達式:
lexicoCompare;
被解釋成類型
int (*)( const string &, const string & );
的指針
將取地址操作符作用在函數名上也能產生指向該函數類型的指針。因此lexicoCompare和&lexioCompare 類型相同
指向函數的指針可以如下被賦值:
pfi = lexicoCompare;
pfi2 = pfi;
只有當賦值操作符左邊指針的參數表和返回類型與右邊函數或指針的參數表和返回類型完全匹配時,初始化和賦值才是正確的。如果不匹配,則將產生編譯錯誤消息。在指向函數類型的指針之間不存在隱式類型轉換
函數指針可以用0 來初始化或賦值,以表示該指針不指向任何函數
8.3、調用
指向函數的指針可以被用來調用它所指向的函數。調用函數時,不需要解引用操作符。無論是用函數名直接調用函數,還是用指針間接調用函數,兩者的寫法是一樣的
也可以用顯式的指針符號寫出
(*pf)( ia, iaSize );
這兩種形式產生相同的結果,但是第二種形式讓讀者更清楚該調用是通過函數指針執行的
8.4、函數指針的數組
// typedefs 使聲明更易讀
typedef int (*PFV)(); // 定義函數類型指針的typedef
PFV testCases[10];
8.5、參數和返回類型
函數參數的類型不能是函數類型,函數類型的參數將被自動轉換成該函數類型的指針。例如:
// typedef 表示一個函數類型
typedef int functype( const string &, const string & );
void sort( string *, string *, functype );
編譯器把sort()當作已經聲明為
void sort( string *, string *,
int (*)( const string &, const string & ) );
除了用作參數類型之外,函數指針也可以被用作函數返回值的類型。例如:
int (*ff( int ))( int*, int );
函數不能聲明返回一個函數類型,如果是則產生編譯錯誤
7. java中的函數的返回值類型有哪些
就是方法要返回的值得類型,比逗猜如:
public int go(){
return 1;
}
這是返回的基本數據類型,還可以返回自定義類型
比如:先定義一個User類,隱友
public User find(String name,String password){
User user = new User();
return user;
}
返回的user就是自定義的灶指槐返回值類型
8. java中方法的返回類型有哪些可以引用數據類型嗎舉例說明
大體上分為基本類型和類類型,基本類型就是像int,陸拍boolean,long這樣的基本數據類型,類類型就是洞坦定義的類,像String,Integer(int的封裝類)這樣的,只要是納悉桐類就行包括自己寫的。
對於「可以引用數據類型嗎?」我有點看不懂,說的就是類類型吧?或者叫對象類型
反正用JAVA這么長時間,感覺啥都能返回,因為JAVA里萬物皆對象嘛
哦對了,還有void,表示無返回值