java傳入參數
① java 中怎樣輸入參數
你說的是命令行參數
public static void main(String[] args);
通過命令行來向java應用程序傳遞參數。
main方法接收畝燃一個讓耐輪一個字元串數組參數;從控制台傳進來的參數都被當作String類型的來處理,如果需要向應用傳遞多個參數,則用空格隔開,如果參數本身用雙引號引起來
執行時的格式: java 類名 參數1 參數2……
例子:
public class Abc{
public static void main(String[] args){
if(args.length!=2){
System.out.println("請按下列方式執行:"+"java Abc 參數1 參數2");
System.exit(0);
}
String a = args[0];
String b = args[1];
System.out.println("第一個參數是:"+a);
System.out.println("第二個參數是:"+b);
}
}
編譯:javac Abc.java
執行:java Abc 參數1 參數2
注意:通過main()方法從控制台接收的參數坦信都是String類型的,如果需要其他
類型參數,需要將接收的String類型參數,顯式的轉換
② 在java中傳遞參數的方法有幾種做簡要的說明
傳遞參數的方法分為兩種:
1.值傳遞
2.引用傳遞
③ java 參數傳遞問題
Java的參數傳遞總結:
JAVA的參數傳遞總是傳"值",但是傳值方式也分為兩種方式,它們是靠傳遞參數的類型區分的。這兩種類型分別為JAVA的基礎類型和Object(對象)類型;基礎類型包括boolean,byte,short,char,int,long,float,double,而Object就是對象,如數組.在參數為基礎類型時,見代碼:
public class A{
public static void main(String arg[]){
int a=3;
method1(a);
System.out.println(a);
}
public static void method1(int a){
a=4;
}
}
此時結果的輸出將是1,而且只要你的值在Main函數中沒變,a的值不管怎麼傳都不回變,這是因為a是傳值,而這個"值"是a的一個拷貝數嫌,a的值在傳遞後的改變只是改變了a的拷貝的內容,並沒有改變真正的a的值;對於參數為對象
public class A{ public class A{
public static void main(String arg[]){ public static void main(String arg[]){
int[] a=new int[1]; int[] a=new int[1];
a[0]=3; a[0]=3;
method1(a); method1(a);
System.out.println(a[0]); System.out.println(a[0]);
} }
public static void method1(int[] a){ public static void method1(int[] a){
a[0]--; a=new int[0];
} a[0]=4;
} }
}
左邊的結果將是2,右邊的結果將是3(未變),原因是:在傳遞的參數為對象時,這個傳遞的"值"中放的內容實際上是對向所在的地址,左邊的情況是指針定位到對象的地址後,在上面把內容給改了,所以數組的值後會改變,而右邊的情況為給對象新分配了一個指針到新的地址上面去,所以所有的薯核手操作都在新的地址上面,並不會影響原來的值氏昌。註:對於String,Interger,Boolean,Double等的系統對象,它們雖然是Object,但是任何方式的傳遞參數的值得改變並不會影響原來的值。
④ Java參數傳遞
Java的方法參數傳遞都是值傳遞。這個問題需要樓主慢慢理解,如果基礎薄弱(C、C++基礎弱)就記住就好。如果基礎好可以從內存角度理解。
從語法和簡單層面理解:str是一個String類型的對象,傳遞給changeStr方法,傳遞的是str的引用內容,方法內的changeStr(String value),value變數和str指向了同一個對象,但是value重新賦值後,它的指向改變了,但是str的指向不會發生,所以str的輸出還是「Hello」,而changeObjValue方法傳入的TEST的對象pt給changeObjValue(TEST ref),ref變數和pt變數指向了同一對象,之後通過改變了對象的內容,pt變數的指向沒變,但是執行的對象的變數變了。所以pt的ptValue值變了。
進一步理解,Java對字元串進行了特殊處理,因為字元串這種數據類型太常用了,為了節省內容提高效率。Java把字元串放入了常量池,所以我們沒辦法在運行時修改一個字元串對象的內容。也就是對value變數的賦值操作是重寫建立了一個對象。樓主可以測試經典的java String的代碼:
Stringa="a";
Stringb="a";
Stringc=newString("a");
Stringd=newString("a");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);
System.out.println(d==c);
再深入,Java沒有C和C++的指針概念,可以粗暴的理解Java的引用是一種特殊的指針(實際上Java盡量把程序猿從指針中解放出來,或者說避免直接操作內存對象)。有一種不負責的說法:Java的基本類型傳遞傳遞的是值,也就是值的副本,引用類型傳遞的時引用。但是要注意String對象的內容不可變,而且傳遞的引用指向不可變。運行時Java的局部變數在棧空間中(線程私有),對象在堆內存中(線程公有),changeStr方法相當於在堆內存中又開辟了一塊兒空間重寫分配了一個對象,但是str沒有指向這個新new出來的對象。而changeObjValue方法修改的pt指向的對象的內容也就是修改的是堆內存的數據,ref和pt指向的是一塊兒內存。所以pt的對象數據會變化。
⑤ java 怎麼傳遞參數
傳對象,之後通過反射,getClass()獲得對應的類,具體代碼如下
Class<?>type=object.getClass();
Method method=type.getMethod("getId",null);//getId為getId()方法
Object id=method.invoke(object,null);
⑥ java 方法 傳參
要是想傳字面量的話 就這樣
public class D {
public static void main(String[] args) throws Exception {
byte a = 45;
t(a);
t((byte)45);
}
public static void t(byte a) {
System.out.println(a);
}
}
正確的傳參方式
⑦ java 方法可以傳入多少個參數
java的方法可以動態傳入參數,比如methodA(String... values),它相當於傳進入一個values的數組,因此在你的內存支持的情況下,參數個數可以是無限個的。
⑧ java 方法傳參時,不是必須傳的參數如何設置
1、java是強匹配的,調用方法,對應的參數必須要有值,如果不是必須傳的,意思是你可能不需要用的,可以傳null
2、或者改造原有的方法參數,把多餘的參數去掉
3、或者另外寫一個方法,少參數的,然後該方法內部,調用原來的方法
4、代碼截圖如下:
5、看代碼,13行的,就相當於調用少一個參數的
拓展資料:
如題,有一個方法里兩個形參,我另一個文件類中一個方法想要那個方法的返回值,可是第二個參數在這里用不到,能否只傳第一個參數 如何實現,前提這個類不能繼承後重寫方法,因為多人合同寫的。
解決方案
不可以,變通的辦法是再寫一個只有一個參數的函數重載形式,在其中給另一個參數一個預設值,間接調用。
解決方案二:
一個Action調用兩個不同的方法
解決方案三:
調用的時候給一個無影響的值
解決方案四:
講道理的話是不能這樣做的,不過如果你傳的第二個參數如果對於當前調用時沒有意義也是可以傳一個值的。
解決方案五:
首先,Java語法規定了方法的參數列表,那麼調用的時候就需要按照方法定義傳遞給足夠的參數,你那種需要少傳參的話可以重載方法,不要定義那麼多參數就可以了。
解決方案六:
你一個方法傳入兩個參數,但如果你只調用一個,那麼另外一個參數你讓人家多尷尬,你讓人家尷尬了,人家也不會讓你好過的,因此就給你報錯啊,當然你可以像樓上所說,傳入一個無影響的參數進去,但這又有什麼意義,還造成代碼的浪費,你這個方法每調用一次,就造成一次浪費,因此,最好的方法就是傳入一個參數,寫一個重載方法。初學者經驗不足,互相指教~
解決方案七:
既然用不到第二個參數,最簡單的,給個無關痛癢的初始值。
解決方案八:
方法定義2個參數,在方法體內提供判斷參數,看傳入的參數是否為null,調用方法時,只傳入一個值,另一個是null就行。
解決方案九:
方法 重載一下 就好了。
⑨ Java中函數參數的傳遞是怎樣進行的
Java中函數參數的傳遞是按值傳遞。
下面證明Java中參數傳遞是完完全全是傳值而不是傳址。
一:
package com.sitinspring;
public class ChangeClass{
public void changeInt(int i){
i=5;
}
public void changeLong(long i){
i=555;
}
public void changeString(String str){
str="5555";
}
public void changeMember(Member member){
member=new Member("Cindy",35);
}
public void changeMemberField(Member member){
member.setAge(20);
member.setName("Andy");
}
public static void main(String[] args){
ChangeClass changeClass=new ChangeClass();
int intValue=10;
changeClass.changeInt(intValue);
System.out.println(intValue);
long longValue=10;
changeClass.changeLong(longValue);
System.out.println(longValue);
String stringValue="1234";
changeClass.changeString(stringValue);
System.out.println(stringValue);
Member member2=new Member("Douglas",45);
changeClass.changeMember(member2);
System.out.println(member2);
Member member=new Member("Bill",25);
changeClass.changeMemberField(member);
System.out.println(member);
}
}
二:
package com.sitinspring;
public class Member{
private String name;
private int age;
public Member(String name,int age){
this.age=age;
this.name=name;
}
public String toString(){
return "Member name="+name+" age="+age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
輸出:
10
10
1234
Member name=Douglas age=45
Member name=Andy age=20
解釋:
第一個輸出10是因為int是基本類型,傳遞的參數是intValue的拷貝,對拷貝的修改對原值intValue沒有影響.
第一個輸出10和上面是一個道理.
第三個輸出1234.由於String是類類型, str是stringValue的地址拷貝,參數str指向的地址和stringValue的一致,但在函數changeString 中,由於String的特殊性, str=「5555」和str=new String(「5555」)是等價的, str指向了新的」5555」所在的地址,此句後str就與原來的stringValue徹底脫離了聯系.
第四個輸出Member?name=Douglas?age=45的道理和上面相同.
第五個輸出Member?name=Andy?age=20是因為changeMemberField函數中修改了參數member 的值,也就是修改member指向實例的值,而這個實例正是member指向的值,因此member就變成了name=Andy 且age=20.
結論:
Java中參數傳遞的都是值,對應基本類型,傳遞的是原值的拷貝;對於類類型,傳遞的是引用即地址的拷貝.
對於函數對參數的改變是否會影響原值的問題:值類型自然不會影響到原值.而對於類類型要看改變的是參數的地址還是值,如果是前者,參數和原引用指向了不同的地址,它們自然脫離了關系;如果是後者,修改的實例就是原引用指向的實例,這當然對原值進行了修改.
⑩ java里什麼叫傳入參數,請詳細解釋。
就是在你調用方法的時納答乎候方法需要你提供的參數。例如:
public void add(int a, int b){
int c = a+b;
System.out.println("c="+c)
}
當你調用這舉亮個方法的時候需要傳入洞悉兩個數 比如,1 和 2
則會輸出結果 3
1 和 2 就是 傳入的參數