java传递参数问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java传递参数问题相关的知识,希望对你有一定的参考价值。
我不明白什么叫传递参数。比如:在一个main方法和一个普通方法间怎么互相传递参数啊???请高手给各最简单的例子。(能够让我明白的,还会给以追加分)十分感谢!
(能写段最简单的代码吗?让我看下.光是字还是不懂.有代码多给追加分。例如:一个方法传值,一个方法取值,给段代码吧.十分感谢)
第一种方法是按值传递(call-by-value )。
这种方法将一个参数值(value )复制成为子程序的正式参数。
在Java 中,当你给方法传递一个简单类型时,它是按值传递的。因此,接收参数的子程序参数的改变不会影响到该方法之外。例如,看下面的程序:
class Test
void meth(int i,int j) i *= 2;j /= 2;
class CallByValue
public static void main(String args[])
Test ob = new Test();
int a = 15,b = 20;
System.out.println("a and b before call: " +
a + " " + b);
ob.meth(a,b);
System.out.println("a and b after call: " +
a + " " + b);
该程序的输出如下所示:
a and b before call: 15 20
a and b after call: 15 20
可以看出,在meth( ) 内部发生的操作不影响调用中a和b的值。它们的值没在本例中没有变为30和10。
当你给方法传递一个对象时,这种情形就会发生戏剧性的变化,因为对象是通过引用传递的。记住,当你创建一个类类型的变量时,你仅仅创建了一个类的引用。因此,当你将这个引用传递给一个方法时,接收它的参数将会指向该参数指向的同一个对象。这有力地证明了对象是通过引用调用传递给方法的。该方法中对象的改变确实影响了作为参数的对象。例如,考虑下面的程序:
// Objects are passed by reference.
class Test int a,b;
Test(int i,int j) a = i;b = j;
// pass an object
void meth(Test o)
o.a *= 2;
o.b /= 2;
class CallByRef public static void main(String args[]) Test ob = new Test(15,20);
System.out.println("ob.a and ob.b before call: " +
ob.a + " " + ob.b);
ob.meth(ob);
System.out.println("ob.a and ob.b after call: " +
ob.a + " " + ob.b);
该程序产生下面的输出:
ob.a and ob.b before call: 15 20
ob.a and ob.b after call: 30 10
正如你所看到的,在这个例子中,在meth ( ) 中的操作影响了作为参数的对象。 参考技术A public static void main(String[] args)
int a=10;
test(a);
public static void test(int a)
System.out.println(a);
执行结果 控制台打印了10
方法就好像是一个模板,参数就是这个模板可变的东西
我也不知道该怎么来描述,方法体内用 参数,你传进来什么我就用什么
上面我是用了一个静态方法 所以没有new 对象,因为 主方法和test静态方法在同一个类中,不用 类名调用。
怎么说呢,这东西完全靠自己理解,别人说的再好你不明白也白说。
多练练就好 了,我刚开始学java 的时候也不明白方法参数的传递,但是用的时间长了就明白了,
哥们多练练就好了!!
加油! 相信你能行!!!!本回答被提问者采纳 参考技术B 简单的是类定义的下面设置一个public static的变量。。在main方法和普通方便里面,赋值就行了。。两个方法都能访问 参考技术C 给你举一个最简单的两个方法直接传参的例子
class Test
public static void main(String[]s)
display(returnInt());//此为嵌套调用,display接收returnInt传来的参数
public int returnInt()
return 1;//1为返回值
public void display(int n)//n为参数
System.out.println(n); //输出参数
运行结果 1
希望对你有帮助
Java的参数传递问题
Java中方法的参数传递方式是什么?
相信不少人会认为Java和C是一样的:当参数是基本数据类型时采用值传递而参数是非基本数据类型是采用引用传递即地址传递。真的是这样吗?
先看段代码:
public class Snippet { public static void main(String[] args) { MyObj obj = new MyObj(); System.out.println(obj.age); process(obj); System.out.println(obj.age); } private static void process(MyObj obj){ obj.age = 20; } static class MyObj{ private int age = 10; } }
上面的代码结果大家肯定都明白:10 20。相信认为Java中有引用传递的人应该是被这样的代码蛊惑了,如果上述参数传递方式是引用传递那么下面这段代码应该打印出来什么结果呢?
public class Snippet { public static void main(String[] args) { MyObj obj = new MyObj(); System.out.println(obj.age); process1(obj); System.out.println(obj.age); } private static void process(MyObj obj){ obj.age = 20; } private static void process1(MyObj obj){ obj = new MyObj(); obj.age = 30; } static class MyObj{ private int age = 10; } }
如果这里采用的是引用传递,那么调用process1方法会将传入的引用重新指向一个新的对象,并将该对象的age设置成30,程序运行结果应该是10 30,然而程序运行结果却是10 10!为什么呢?答案就是Java中参数传递只有一种形式——值传递!
值传递是怎么工作的呢?第一段代码调用示意图:
process方法传递的是obj的引用的copy,就是obj引用的值,这是两个引用都指向obj对象,process方法将“obj的引用的copy”指向的对象的age属性改成了20也就把obj的引用指向的对象的age修改了。所以第一段代码调用后打印结果是10 20。
第二段代码调用示意图:
process1方法将“obj的引用的copy”传递过来以后把“obj的引用的copy”重新指向了另一个对象,并将新对象的age改成了30,方法调用完成以后新对象弃用了当然就对后面用于打印数据的obj的引用没有任何影响了,所以结果是10 10。
以上是关于java传递参数问题的主要内容,如果未能解决你的问题,请参考以下文章