關(guān)于Java對象作為參數(shù)傳遞是傳值還是傳引用的問題
Java 訪問權(quán)限修飾符public,private,protected和不寫的區(qū)別
詳解java中package與import
package:將本源文件中的接口和類納入指定包中墩邀。源文件中若有包說明語句,則必須是第一個語句染厅。
import:引入本源文件中需要使用的包抖坪。
一:數(shù)據(jù)成員
形式:[修飾符] 數(shù)據(jù)成員類型 數(shù)據(jù)成員名表
修飾符包括訪問權(quán)限修飾符public揖盘、private、protected和非訪問權(quán)限修飾符static、final等天试。
下面是類、數(shù)據(jù)成員和成員方法的訪問控制符及其作用表格
數(shù)據(jù)成員與方法\類 | public | 缺省 |
---|---|---|
public | 所有類 | 包中類(含當(dāng)前類) |
protected | 包中類(含當(dāng)前類)然低,所有子類 | 包中類(含當(dāng)前類) |
缺省(friendly) | 包中類(含當(dāng)前類) | 包中類(含當(dāng)前類) |
private | 當(dāng)前類本身 | 當(dāng)前類本身 |
下面對修飾符的非訪問修飾符static喜每、final做一些論述
用 static 修飾的數(shù)據(jù)成員:
1.用 static 修飾的數(shù)據(jù)成員不屬于任何一個類的具體對象里初,而是屬于類的靜態(tài)數(shù)據(jù)成員的婿斥。特點如下:
(1)它被保存在類的內(nèi)存區(qū)的公共存儲單元中,而不是被保存在某個對象的內(nèi)存區(qū)中卒废。因此吨灭,一個類的任何對象訪問它時刚照,存取到的都是相同的數(shù)值。
(2)可以通過類名加點訪問它喧兄。
(3)static 類的數(shù)據(jù)成員仍屬于類的作用域无畔,還可以使用public static、private static吠冤、等進(jìn)行修飾浑彰。修飾符不同,可訪問的層次也不同拯辙。
2.靜態(tài)數(shù)據(jù)成員初始化方法:
(1)可以由在定義時進(jìn)行郭变;
(2)可以有靜態(tài)初始化器完成;
3.與構(gòu)造方法不同涯保,靜態(tài)初始化器的特點如下:
(1)靜態(tài)初始化器是由關(guān)鍵字 static 引導(dǎo)的一對花括號括起來的語句塊诉濒,作用是在加載類時,初始化類的靜態(tài)數(shù)據(jù)成員。構(gòu)造方法用來對新創(chuàng)建的對象進(jìn)行初始化夕春。
(2)靜態(tài)初始化器不是方法未荒,沒有方法名、返回值和參數(shù)表及志。
(3)靜態(tài)初始化器是在它所屬的類加載到內(nèi)存時由系統(tǒng)調(diào)用執(zhí)行的茄猫。而構(gòu)造方法是在系統(tǒng)用 new 運算符產(chǎn)生新對象時自動執(zhí)行的狈蚤。
public class test{
static int m;
//static int m=100;用戶在定義時進(jìn)行
static{//靜態(tài)初始化器
m=100;
}
public static void main(String args[]){
test t=new test();
System.out.println("輸出m:"+t.m);
}
}
用 final 修飾的數(shù)據(jù)成員:
如果一個類的數(shù)據(jù)成員用 final 修飾符修飾,則這個數(shù)據(jù)成員被限定為最終數(shù)據(jù)成員划纽。最終數(shù)據(jù)成員可以在聲明時進(jìn)行初始化脆侮,也可以通過構(gòu)造方法賦值,但不能在程序的其他部分賦值勇劣,它的值在程序的整個執(zhí)行過程中是不能改變的靖避。也就是說,用 final 修飾符修飾的數(shù)據(jù)成員是標(biāo)識符常量比默。
用 final 修飾符說明常量時幻捏,需要注意以下幾點:
(1)需要說明常量的數(shù)據(jù)類型并指出常量的具體值。
(2)若一個類有多個對象命咐,而某個數(shù)據(jù)成員是常量篡九,最好將此常量聲明為 static ,即用static final 兩個修飾符修飾它醋奠,可以節(jié)省空間榛臼。
(3)final修飾的數(shù)據(jù)成員屬于對象,其值一經(jīng)確定窜司,不再改變沛善。
用static修飾的數(shù)據(jù)成員屬于類,類似于一個全局變量的作用塞祈。
二:成員方法
相當(dāng)于子程序金刁,函數(shù)。
1.成員方法的分類:
從成員方法的來來源看:
(1)類庫成員方法议薪,由 java 類庫提供尤蛮,需要按照 java 提供的調(diào)用格式調(diào)用這些成員方法。
(2)用戶自定義的成員方法斯议。
從成員方法的形式看:
(1)無參成員方法
(2)帶參成員方法
2.聲明成員方法的格式:
在 java 程序中抵屿,成員方法的聲明只能在類中進(jìn)行,格式如下:
//成員方法頭
[修飾符]返回值的類型 成員方法名(形式參數(shù)表) throw[異常表]{
//方法體
說明部分
執(zhí)行語句部分
}
成員方法頭中的各項說明如下:
(1)修飾符捅位。
訪問權(quán)限修飾符:
作用是指出滿足什么條件時該成員方法可以被訪問。包括:
公共訪問修飾符public搂抒、私有訪問控制符private艇搀、保護(hù)訪問控制符protected等
非訪問權(quán)限修飾符:
作用是指明成員方法的使用方式。包括:
靜態(tài)成員方法修飾符static求晶、最終成員方法修飾符final焰雕、本地成員方法修飾符native、抽象成員方法修飾符abstract等
(2)返回值的類型芳杏。
有返回值 int矩屁、float等
無返回值void
(3)成員方法名辟宗。
即標(biāo)識符。按照慣例,方法名是一個小寫的動詞或單詞吝秕,若為多個單詞泊脐,則第一個動詞小寫,后續(xù)單詞的第一個字母大寫烁峭。
(4)形式參數(shù)表容客。
有參格式:(形參類型1 形參名1,形參類型2 形參名2...)
無參格式:()
(5)throw [異常表]。
它指出當(dāng)該方法遇到方法的設(shè)計者未曾想到的問題時如何處理约郁。
3.方法體中的局部變量
注意:
(1)在方法體內(nèi)定義的變量是局部變量缩挑,生存期和作用域是在本方法內(nèi)。局部變量只在本方法內(nèi)有效鬓梅、可見供置。離開本方法后,這些變量被自動釋放绽快。
(2)方法體內(nèi)定義變量芥丧,變量前不能加修飾符。
(3)局部變量在使用前必須明確賦值谎僻。
(4)在一個方法內(nèi)部娄柳,可以在復(fù)合語句中定義變量,這些變量只在復(fù)合語句中有效艘绍,這種復(fù)合語句也被稱為程序塊赤拒。
4.成員方法的返回值
格式: return 表達(dá)式;
或: return(表達(dá)式);
表達(dá)式可以是常量、變量诱鞠、對象等挎挖,表達(dá)式的數(shù)據(jù)類型必須與成員方法頭中給出的“返回值的類型一致”。
5.形參與實參
實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”航夺,只能由實參傳遞給形參蕉朵,而不能由形參傳給實參。程序中執(zhí)行到引用成員方法時,java把實參值拷貝到一個臨時的存儲區(qū)(棧)中阳掐,形參的任何修改都在棧中執(zhí)行始衅,當(dāng)退出該成員方法時,java自動清除棧中的內(nèi)容缭保。
6.成員方法引用方式:
1.方法語句:如:add(a,b);
2.方法表達(dá)式:如:f=2+add(f1,f2);
3.方法作為參數(shù):如:add(a,add(f1,f2));
4.通過對象來引用:如:引用變量名.方法名汛闸;
注意:
1.如果被引用的方法在本文件中,并且是本類的方法艺骂,則可以直接引用诸老。
2.如果被引用的方法在本文件中,但不是本類的方法钳恕,則要由類的修飾符與方法的修飾符來決定是否能引用别伏。
3.如果被引用的方法不是本文件的方法而是java類庫的方法蹄衷,必須在文件的開頭用import命令將引用有關(guān)庫方法所需的信息寫入本文件中。
4..如果被引用的方法是用戶在其他文件中自己定義的方法厘肮,則必須通過加載用戶包的方式來引用愧口。
7.用static修飾的靜態(tài)方法
(1)static方法是屬于整個類的,它在內(nèi)存中的代碼段隨著類的定義被分配和裝載轴脐;不用static修飾符限定的方法调卑,是某個具體類的對象的方法當(dāng)這個對象創(chuàng)建時在對象的內(nèi)存中擁有這個方法的專用代碼段。
(2)引用靜態(tài)方法:可以使用與對象關(guān)聯(lián)的引用變量名作為前綴大咱,也可以使用類名作為前綴恬涧。
(3)static方法只能訪問到static數(shù)據(jù)成員,不能訪問非static數(shù)據(jù)成員碴巾,但非static方法可以訪問static數(shù)據(jù)成員溯捆。static方法只能訪問到static方法,不能訪問非static方法厦瓢,但非static方法可以訪問static方法提揍。
(4)static方法不能被覆蓋。即:這個類的子類不能有相同名及相同參數(shù)的方法煮仇。
(5)main方法是靜態(tài)方法劳跃。在java的每個Application程序中,都必須有且只能有一個main方法浙垫,它是Application程序運行的入口點刨仑。
8.用final修飾的最終方法
在面向?qū)ο蟮某绦蛟O(shè)計中,子類可以利用重載機制修改從父類那里繼承來的某些數(shù)據(jù)成員及成員方法夹姥。用final修飾符修飾的方法稱為最終方法杉武,如果類的某個方法被final修飾符所限定,則該類的子類就不能覆蓋父類的方法辙售,即不能再重新定義與此方法同名的自己的方法轻抱,僅能使用從父類繼承來的方法。使用final修飾方法旦部,是為了任何繼承類修改此方法祈搜。保證程序的安全性。
9.用native修飾的本地方法(暫沒掌握)
使用此類方法的目的是將其他語言(如C士八、C++容燕、FORTRAN
、匯編語言等)嵌入到j(luò)ava語言中曹铃。native方法特別注意平臺問題。