導航:首頁 > 編程語言 > java參數值

java參數值

發布時間:2022-09-06 22:16:11

java的參數傳遞是值傳遞還是引用傳遞

測試下就知道了

publicstaticvoidmain(String[]args){

inta=1;
Stringstr="abc";

changeValue(a,str);

System.out.println(a);
System.out.println(str);
}

privatestaticvoidchangeValue(inta,Stringstr){

a=2;

str="123";

}

結果:

1
abc

所以是值傳遞

(如果是引用的類,然後又set、get方法就另當別論了)

❷ 關於java方法參數是值傳遞還是地址傳遞

JAVA傳遞參數有兩種方式:值傳遞和引用傳遞值傳遞是傳遞數據:如基本數據類型都是值傳遞引用傳遞是把形參和實參的指針指向了堆中的同一對象,對象的引用和數組的引用。實參,Java的基本數據類型,如int,double等在函數的參數傳遞時,傳遞的是

❸ java修改請求參數的值

使用Wrapper,重寫HttpServletRequestWrapper,如下:
package com.gdcn.bpaf.security.yale;

import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

@SuppressWarnings("unchecked")
public class ParameterRequestWrapper extends HttpServletRequestWrapper {

private Map params;

public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
}

public Map getParameterMap() {
return params;
}

public Enumeration getParameterNames() {
Vector l = new Vector(params.keySet());
return l.elements();
}

public String[] getParameterValues(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
return (String[]) v;
} else if (v instanceof String) {
return new String[] { (String) v };
} else {
return new String[] { v.toString() };
}
}

public String getParameter(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
return strArr[0];
} else {
return null;
}
} else if (v instanceof String) {
return (String) v;
} else {
return v.toString();
}
}
}
�0�22.使用
//然後在另一個地方使用時,按下面這樣用,假如我要修改username的值

HashMap m=new HashMap(request.getParameterMap());
/*
關鍵部分,如果不轉換成String數組,如果在下面這樣是有時:
eg:
HttpSession session = request.getSession();
Map map = request.getParameterMap();
Set keySet = map.keySet();
for (Iterator iterator = keySet.iterator(); iterator.hasNext();)
{
String key = (String)iterator.next();
String values[] = (String[])map.get(key); //這個地方就會報錯,因為username一個String不能轉換成String數組
if (values.length == 1)
session.setAttribute(key, values[0]);
else
session.setAttribute(key, values);
}
異常
就會出現java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.String;
*/
//m.put("username", newusername); //這樣會報錯
m.put("username", new String[]{newusername}); //這就是對的
HttpServletRequest req = (HttpServletRequest) request;
com.gdcn.bpaf.security.yale.ParameterRequestWrapper wrapRequest=new com.gdcn.bpaf.security.yale.ParameterRequestWrapper(req,m);
request=wrapRequest; //這是rquest就和本身的request一樣了

❹ 如何查看java虛擬機堆內存的參數值

今天在載入一幅圖片時,eclipse報出如下錯誤:
「Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 」
google了一下原來是圖片太大了。可以設置jvm堆的最大值來解決。

首先, 打開Eclipse軟體,選擇菜單欄run,在二級菜單中選擇 Debug Configurations,然後:在彈出的窗口中選擇(x)=arguments選項卡,VM arguments中輸入所需要的內存最大佔用量,比如輸入-Xmx800m即可。

以下詳細的介紹下jvm的幾個參數:
「MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains.」意思是說當前只有小於5%的非堆內存是空閑的。所以我們只要將這個值設置大一些就可以了。
提示中給出了設置的參數:
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
這里有幾個問題:
1. 各個參數的含義什麼?
2. 為什麼有的機器我將-Xmx和-XX:MaxPermSize都設置為512M之後Eclipse可以啟動,而有些機器無法啟動?
3. 為何將上面的參數寫入到eclipse.ini文件Eclipse沒有執行對應的設置?
下面我們一一進行回答
1. 各個參數的含義什麼?
參數中-vmargs的意思是設置JVM參數,所以後面的其實都是JVM的參數了,我們首先了解一下JVM內存管理的機制,然後再解釋每個參數代表的含義。
堆(Heap)和非堆(Non-heap)內存
按照官方的說法:「Java 虛擬機具有一個堆,堆是運行時數據區域,所有類實例和數組的內存均從此處分配。堆是在 Java 虛擬機啟動時創建的。」「在JVM中堆之外的內存稱為非堆內存(Non-heap memory)」。可以看出JVM主要管理兩種類型的內存:堆和非堆。簡單來說堆就是Java代碼可及的內存,是留給開發人員使用的;非堆就是JVM留給自己用的,所以方法區、JVM內部處理或優化所需的內存(如JIT編譯後的代碼緩存)、每個類結構(如運行時常數池、欄位和方法數據)以及方法和構造方法的代碼都在非堆內存中。
堆內存分配
JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;JVM最大分配的內存由-Xmx指定,默認是物理內存的1/4。默認空餘堆內存小於40%時,JVM就會增大堆直到-Xmx的最大限制;空餘堆內存大於70% 時,JVM會減少堆直到-Xms的最小限制。因此伺服器一般設置-Xms、-Xmx相等以避免在每次GC 後調整堆的大小。
非堆內存分配
JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64;由XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。
JVM內存限制(最大值)
首先JVM內存限制於實際的最大物理內存(廢話!呵呵),假設物理內存無限大的話,JVM內存的最大值跟操作系統有很大的關系。簡單的說就32位處理器雖然可控內存空間有4GB,但是具體的操作系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下為1.5G-2G,Linux系統下為2G-3G),而64bit以上的處理器就不會有限制了。
2. 為什麼有的機器我將-Xmx和-XX:MaxPermSize都設置為512M之後Eclipse可以啟動,而有些機器無法啟動?
通過上面對JVM內存管理的介紹我們已經了解到JVM內存包含兩種:堆內存和非堆內存,另外JVM最大內存首先取決於實際的物理內存和操作系統。所以說設置VM參數導致程序無法啟動主要有以下幾種原因:
1) 參數中-Xms的值大於-Xmx,或者-XX:PermSize的值大於-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的總和超過了JVM內存的最大限制,比如當前操作系統最大內存限制,或者實際的物理內存等等。說到實際物理內存這里需要說明一點的是,如果你的內存是1024MB,但實際系統中用到的並不可能是1024MB,因為有一部分被硬體佔用了。
3. 為何將上面的參數寫入到eclipse.ini文件Eclipse沒有執行對應的設置?
那為什麼同樣的參數在快捷方式或者命令行中有效而在eclipse.ini文件中是無效的呢?這是因為我們沒有遵守eclipse.ini文件的設置規則:
參數形如「項 值」這種形式,中間有空格的需要換行書寫,如果值中有空格的需要用雙引號包括起來。比如我們使用-vm C:\Java\jre1.6.0\bin\javaw.exe參數設置虛擬機,在eclipse.ini文件中要寫成這樣:
-vm
C:\Java\jre1.6.0\bin\javaw.exe
按照上面所說的,最後參數在eclipse.ini中可以寫成這個樣子:
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
實際運行的結果可以通過Eclipse中「Help」-「About Eclipse SDK」窗口裡面的「Configuration Details」按鈕進行查看。
另外需要說明的是,Eclipse壓縮包中自帶的eclipse.ini文件內容是這樣的:
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
其中–launcher.XXMaxPermSize(注意最前面是兩個連接線)跟-XX:MaxPermSize參數的含義基本是一樣的,我覺得唯一的區別就是前者是eclipse.exe啟動的時候設置的參數,而後者是eclipse所使用的JVM中的參數。其實二者設置一個就可以了,所以這里可以把–launcher.XXMaxPermSize和下一行使用#注釋掉。

❺ java 通過反射怎麼獲取方法中參數值

答案是沒法獲取。
首先反射獲取的是類、屬性、或者方法的定義,就拿方法來說,方法的定義是什麼呢?
方法的定義包括:方法名,方法的參數類型列表,方法的返回值類型。
方法的參數類型列表包括什麼呢?
包括每個參數的順序和參數類型。
參數值是什麼?是在這個方法被調用的時候傳入的參數叫做參數值。反射呢,是獲取的它的定義,並不牽扯調用,所以說沒法獲取。

❻ Java參數傳遞是值傳遞還是引用傳遞

以下是csdn中查到的一些資料,希望有所幫助

java 傳遞參數的兩種方式:

Java中沒有指針,所以也沒有引用傳遞了,僅僅有值傳遞不過可以通過對象的方式來實現引用傳遞 類似java沒有多繼承 但可以用多次implements 介面實現多繼承的功能

值傳遞:方法調用時,實際參數把它的值傳遞給對應的形式參數,方法執行中形式參數值的改變不影響實際參 數的值。

引用傳遞:也稱為傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,在方法執行中,對形式參數的操作實際上就是對實際參數的操作,方法執行中形式參數值的改變將會影響實際參數的值。

a.傳遞值的數據類型:八種基本數據類型和String(這樣理解可以,但是事實上String也是傳遞的地址,只是string對象和其他對象是不同的,string對象是不能被改變的,內容改變就會產生新對象。那麼StringBuffer就可以了,但只是改變其內容。不能改變外部變數所指向的內存地址)。

b.傳遞地址值的數據類型:除String以外的所有復合數據類型,包括數組、類和介面

值傳遞的例子:

[java]view plain

❼ Java中返回參數值的幾種狀態

下面給你介紹4種Java中返回參數值狀態:

一、Java 中無參無返回值方法的使用

第一步,定義方法

例如:下面代碼定義了一個方法名為 show ,沒有參數,且沒有返回值的方法,執行的操作為輸出 「 welcome to imooc. 」

注意哦:

1、 方法體放在一對大括弧中,實現特定的操作

2、 方法名主要在調用這個方法時使用,需要注意命名的規范,一般採用第一個單詞首字母小寫,其它單詞首字母大寫的形式

第二步,調用方法

當需要調用方法執行某個操作時,可以先創建類的對象,然後通過 對象名.方法名();來實現

二、Java 中無參帶返回值方法的使用

如果方法不包含參數,但有返回值,我們稱為無參帶返回值的方法。

三、Java 中帶參無返回值方法的使用

有時方法的執行需要依賴於某些條件,換句話說,要想通過方法完成特定的功能,需要為其提供額外的信息才行。例如,現實生活中電飯鍋可以實現「煮飯」的功能,但前提是我們必須提供食材,如果我們什麼都不提供,那就真是的「巧婦難為無米之炊」了。我們可以通過在方法中加入參數列表接收外部傳入的數據信息,參數可以是任意的基本類型數據或引用類型數據。

四、Java 中帶參帶返回值方法的使用

如果方法既包含參數,又帶有返回值,我們稱為帶參帶返回值的方法。

❽ Java方法的參數的值哪裡來的

java方法中的參數屬於形參,而在調用方法是傳入的是實參,我們一般通過調用時給方法傳入實參

❾ 誰知道Java中參數是引用傳遞還是值傳遞

java中方法參數傳遞方式是按值傳遞。所謂值傳遞,就是將實際參數值的副本(復製品)傳入方法內,而自己本身不會受到任何影響。
如果參數是基本類型,傳遞的是基本類型的字面量值的拷貝。

閱讀全文

與java參數值相關的資料

熱點內容
c51單片機特殊寄存器的原理 瀏覽:576
閃耀永恆特利加密鑰 瀏覽:758
如何誇程序員 瀏覽:776
天津期貨python招聘 瀏覽:263
單片機機器語言寫的程序 瀏覽:548
韓國直播軟體app叫什麼名 瀏覽:916
軍營訓練不聽教官的命令 瀏覽:258
v開頭的音樂播放器是什麼APP 瀏覽:117
單片機是怎麼做出來的 瀏覽:315
博圖怎麼作為opc伺服器 瀏覽:100
編譯做題軟體 瀏覽:293
橋梁檢測pdf 瀏覽:685
化解壓力的一種方法 瀏覽:680
路由器和DSN伺服器有什麼區別 瀏覽:549
android伸縮控制項 瀏覽:852
androidm3u8緩存 瀏覽:236
imphp開源知乎 瀏覽:708
清除網路通配符dos命令 瀏覽:839
鴻蒙系統怎麼快速換回安卓 瀏覽:714
pdf綠色虛擬列印機 瀏覽:215