站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题请教:一个类的方法调用另外一个类的方法,调用完毕后如何把结果值返回给原来的类呢?

请教:一个类的方法调用另外一个类的方法,调用完毕后如何把结果值返回给原来的类呢?

摘要: 请教:一个类的方法调用另外一个类的方法,调用完毕后如何把结果值返回给原来的类呢?


请教:一个类的方法调用另外一个类的方法,调用完毕后如何把结果值返回给原来的类

例如:

test1.java
public class test1
{
public void main(String args[])
{
test2 mytest = new test2;
int aaa = 3;
mytest.ddt(aaa); //這樣就傳進去了呀...
//这里要用到test2.java方法ddt返回的值i
}
}


test2.java
public class test2
{
public void ddt(int i)
{
System.out.println(i);
//如何把结果i传到test1呢?
}
}


看了书是好像是用return?


test1.java
public class test1
{
public void main(String args[])
{
test2 mytest = new test2;
int aaa = 3;
int bbb = mytest.ddt(aaa); //這樣就傳進去了呀...
//这里要用到test2.java方法ddt返回的值i
}
}


test2.java
public class test2
{
public int ddt(int i)
{
System.out.println(i);
return i;
//如何把结果i传到test1呢?
}
}


public void ddt(int i)是返回空值的,你想把i返回来,i是int类型,所以
public int ddt(int i)





错了,public void ddt(int i)是不返回任何值的


在test1中使用 new test2().ddt(i)
不是可以了么?


public void ddt(int i)
是接收test1.java传过来的aaa。


public void ddt(int i)
是接收test1.java传过来的aaa。
```````````````
但是他要返回一个值啊,你void是不返回值的
所以要public int ddt(int i)
lz先仔细看哈书`



楼主,这个问题问的基本上可以说是有点faint的。
楼主的函数是没有返回值的,System.out.println(i);只是显示在屏幕上,不是返回;
建议把函数的定义再看看。
void f(){
//代码
return;
//代码
}
这样的 return 仅仅代表跳出函数,f也没有返回值,相当于一个procedure;
int f1(){
return 100;
}
int f(){
return f1();
}
这样的 f()执行后返回的是100,see?
如果说这一层理解了,加上类的封装之后就不明白了,可能是对类和对象的概念还不够理解。
努力吧!这只是个小问题。



1。一切都是value parameter in java
2。JAVA中存在着两种类型,对象 and 简单类型(int, char, float...)

如何修改传入得参数?
1。参数类型为简单类型,无论是C、C++还是JAVA,简单类型得参数传递必定是值传递而非引用传递(这里假设搂住理解值传递和引用传递这两个基本的参数传递模式),期望简单的修改参数值而影响源对象数据是不可能的(至少在JAVA中)。

唯一可行的方法是通过return value返回值,比如
int add(int augend, int addend) {
return augend + addend;
}

调用方:
int expectedChanger = 10;
int addend = 15;
expectedChanger = add(expectedChanger, addend);

C#中引入了一种新的out param,可以解决这种状况,但一般不推荐使用,因为我们并不期望方法内部与调用外部产生某种程度的耦合,特殊情况除外。


2。参数类型为对象类型
对象类型的参数的传递通过引用完成,可以在方法体内改变被传递参数的内部数据,这可以保证变更是同步的,比如:

class MyInteger {
private int i;

void setI(int newI) { i = newI; }
int getI() { return i; }
}

// 某个可能引起对象内部变化的方法
void change(MyInteger intValue) { intValue.setI(5); }

// 外部调用此方法的代码片断
MyInteger newInt = new MyInteger(1);
change(newInt);
assertEquals(5, newInt.getI()); // 断言调用了change方法后,局部变量newInt的内部值发生了变化。

但这种方法仅仅能够同步改变参数对象的内部状态,因为无论是局部变量的引用newInt,还是参数引用intValue(change方法的参数名)都引用到同一个对象。
但你不能期望在change方法内部直接改变外部的引用对象,比如:

// 某个改变参数对象引用的方法
void changeReference(MyInteger intValue) { intValue = new MyInteger(5); }

// 外部调用此方法的代码片断
MyInteger newInt = new MyInteger(1);
changeReference(newInt);
assertEquals(1, newInt.getI()); // 断言调用了changeReference方法后,局部变量newInt的内部值并未发生变化。

原因是作为对对像引用的引用本身是一种值传递,改变参数引用的对象,不会影响到外部的引用。

@.@||~


Test1.java
public class Test1
{
public void main(String args[])
{
test2 mytest = new test2;
int aaa = 3;
aaa = mytest.ddt(aaa); //用一个变量接收返回的值
}
}


test2.java
public class test2
{
public int ddt(int i)
{
System.out.println(i);
return i;//用一个return返回i 的数值
}
}


小弟感谢各位!!


↑返回目录
前一篇: 关于继承的问题
后一篇: 一个关于显示图像的问题