当前位置:首页 » 编程语言 » java方法调用参数

java方法调用参数

发布时间: 2022-08-15 05:56:28

java调用参数是怎么理解的

在方法调用时,需要根据方法声明传入适当的参数,通过每次调用方法时传参,极大的增强

了方法的统一性,避免了方法内部功能代码的重复。但是在实际传递参数时,如果在方法内部修改了

参数的值,则调用时使用的变量是否发生改变呢?

请看如下代码:

public class TransferValueDemo

{
public static void main(String[] args)

{

int m = 10;

int[] a = {1,2,34};

test(m,a);

System.out.println(m);

System.out.println(a[0]);

}

public static void test(int n,int[] t)

{

n = 0;

t[0] = 123;

}

}

执行该程序以后,程序的输出结果是:10 123。则在调用test方法时,同样都是传入参数,为

什么变量m的值未改变,而a[0]的值发生了改变呢?下面就来说明该问题。

在参数传递时,一般存在两种参数传递的规则,在Java语言中也是这样,这两种方式依次是:

按值传递(by value)

按值传递指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部

,在方法内部修改时,则修改的时拷贝出来的值,而原始的值不发生改变。

说明:使用该方式传递的参数,参数原始的值不发生改变。

按址传递(by address)

按址传递指每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方法内部通过存储地址

改变对应存储区域的内容。由于在内存中固定地址的值只有一个,所以当方法内部修改了参数的值以

后,参数原始的值发生改变。

说明:使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值也发生改变。

在Java语言中,对于那些数据类型是按值传递,那些数据类型是按址传递都作出了硬性规定,

如下所示:

按值传递的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地

址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。

那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指向的内存地址。关于String

的特殊性见本博客的String类深入解析)。

按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口

按照这里的语法规则,则上面的代码中变量m的类型是int,属于按值传递,所以在方法内部修改参数

的值时m的值不发生改变,而a的类型是数组,属于按址传递,所以在方法内部修改参数的值时,原始

的值发生了改变。

按值传递和按址传递在实际使用时,需要小心,特别是在方法内部需要修改参数的值时。有些时候,

对于按值传递的参数需要修改参数的值,或者按址传递时,不想修改参数的值,下面是实现这两种方

式时的示例代码。

按值传递时通过返回值修改参数的值:

public class TransferValueDemo1

{

public static void main(String[] args)

{

int m = 10;

m = test1(m); //手动赋值

System.out.println(m);

}

public static int test1(int n)

{

n = 15;

return n;

}

}

在该示例代码中,通过把修改以后的参数n的值返回,来为变量m赋值,强制修改按值传递

参数的值,从而达到修正参数值的目的。

按址传递时通过重新生成变量避免修改参数的值:

public class TransferValueDemo2

{

public static void main(String[] args)

{

int[] a = {1,2,3};

test2(a);

System.out.println(a[0]);

}

public static void test2(int[] m)

{

int[] n = new int[m.length];

for(int i = 0;i < m.length;i++)

{

n[i] = m[i];

}

n[0] = 10;

}

}

在该示例代码中,通过在方法内部创新创建一个数组,并且把传入数组中每个参数的值都

赋值给新创建的数组,从而实现复制数组内容,然后再修改复制后数组中的值时,原来的参数内容就

不发生改变了。

这里系统介绍了Java语言中参数传递的规则,深刻理解这些规则将可以更加灵活的进行程

序设计。例如使用复合数据类型按址传递的特性可以很方便的实现多参数的返回,代码示例如下:

public int test3(int[] m,int[] n){……}

则该方法中,实际上返回了三种值,一个int的返回值,数组m的值,数组n的值,这只是参

数传递的一种基本使用,在JDK提供的API文档中也大量的存在该方法。

当是对象时,方法取得的是引用的。swap(obj a,obj b)
调用是swap(c,d),就是对象a,b的引用进行了复制。引用a和c都指向同一对象,引用b和d都指向同

一对象。如果Integer有setValue方法没有问题,但可惜没有,用int t=p.intValue能取得对象的

值,但还是不能交换。如果创建新对象,影响的只是c和d,不会影响a,b。

注意JAVA和VC的区别,JAVA没有指针,因此在无论方法中的形参怎样变化,方法外的实参不受影响。

(这句话也不完全对)

Ⅱ java怎么调用带参数构造函数

1
如果在子类中调用
,那么先new
一个参数所在类型的对象a,即
A
a
=
new
A(),然后在子类中用super(a)就可以调用父类的带类参数构造方法。
2
如果在其他类中调用,那么也需要先new
一个参数所在类型的对象a,即
A
a=new
A();,然后new调用类的的时候把参数传进去就可以了,B
b
=
new
B(a)。

Ⅲ 在java中有一个方法调用了很多个方法怎么用参数控制调用其中的任何一个方法

import java.util.concurrent.Callable; public class CallableUse { public static void main(String... args) { // final int num = 100770; or int num = 100770; // 使用匿名的内部类, 如果需要传递参数可能需要将变量转换成final: try { callMethod(100, new Callable<Integer>() { public Integer call() { return needOperation(num); } }); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } public static int needOperation(int param) { // do something param = 999; return param; } public static void callMethod(int i, Callable<Integer> myFunc) { // do something try { System.out.println(myFunc.call() ); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

Ⅳ 怎样调用java中有参数的方法

一个方法中的参数是局部变量,只能在本方法内部使用。如果非要在别的方法中使用,可以将你在方法1中输入的整数作为方法1的返回值,在方法2中调用方法1,间接调用输入的整数。
public int method1(){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
return n;
}
public void method2(){
int j = this.method1(); //调用方法1中的整数
}

Ⅳ 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方法的调用带参数的

首先你的getFormatDate(String format)需要一个String类型的参数,但你又不想传递一个String类型的,你就可以写一个null,表示空对象,其实这方法的目的就是动态创建解析日期的格式,你可以这样:

(Stringformat)throwsException{
Datetoday=newDate();
SimpleDateFormatsimple=newSimpleDateFormat(format);
System.out.println(simple.format(today));
returnsimple.format(today);//返回格式化后的字符串
}

Ⅶ Java方法参数是引用调用还是值调用

Java中方法是值调用还是引用调用取决于方法中参数的类型。Java基本数据类型的参数为值调用,其他的数组、自定义的类,这几种类型为引用类型,
String类特殊:
当String变量定义时这样定义:String name = "张三";,这样的定义参数的方法为值传递。

Ⅷ java中怎么从一个方法中调用另一个方法中的参数

  1. 一个方法中的参数是局部变量,只能在本方法内部使用。

  2. 非要在别的方法中使用,可以将你在方法1中输入的整数作为方法1的返回值,在方法2中调用方法1,间接调用输入的整数。

Ⅸ JAVA主类如何调用其他类的含参数的方法,新人求教-,·

1如果在子类中调用,那么先new一个参数所在类型的对象a,即Aa=newA(),然后在子类中用super(a)就可以调用父类的带类参数构造方法。2如果在其他类中调用,那么也需要先new一个参数所在类型的对象a,即Aa=newA();,然后new调用类的的时候把参数传进去就可以了,Bb=newB(a)。

热点内容
c缓存池 发布:2025-01-20 13:23:45 浏览:6
数控编程帅气宝塔图纸 发布:2025-01-20 13:22:15 浏览:871
共享文件夹加密软件 发布:2025-01-20 13:08:41 浏览:40
标识符是怎样存储的 发布:2025-01-20 13:08:39 浏览:894
怎么看安卓大屏什么牌子 发布:2025-01-20 13:08:35 浏览:258
ios开发java 发布:2025-01-20 13:02:42 浏览:881
速腾有侧灯的是哪个配置 发布:2025-01-20 13:01:53 浏览:371
社保用户名和密码都忘记了怎么办 发布:2025-01-20 12:55:55 浏览:321
最优存储形式是什么 发布:2025-01-20 12:51:32 浏览:27
centos编译php7 发布:2025-01-20 12:33:52 浏览:920