java实例,有些函数不是很清楚,求大神解答。
public class ParamPass{static class Object1{
public String QQ="小猫";
}
static void paramChange(int x,Object1 obj1){
x=18;
obj1.QQ="小狗";
}
public static void main(String args[]){
int x=28;
Object1 obj1=new Object1();
System.out.println("传递前的参数值:x="+x+"QQ="+obj1.QQ);
ParamPass.paramChange(x,obj1);
System.out.println("传递后的参数值:x="+x+" QQ="+obj1.QQ);
}
}
第一步 先跑 public static void main(String args[]){
int x=28;
第二步 public class ParamPass{
static class Object1{
public String QQ="小猫";
第三步 static void paramChange(int x,Object1 obj1){
x=18;
obj1.QQ="小狗";
}
大神可以解释下,这样子对吗
不是的,首先你要看的是主方法:public static void main(String args[]),
然后看定义了什么变量:int x=28;
接下来new出一个对象obj1:Object1 obj1=new Object1();
分析类描述的对象细节:
static class Object1{
public String QQ="小猫";
}
static void paramChange(int x,Object1 obj1){
x=18;
obj1.QQ="小狗";
}
最后调用对象:
System.out.println("传递前的参数值:x="+x+"QQ="+obj1.QQ);
ParamPass.paramChange(x,obj1);
System.out.println("传递后的参数值:x="+x+" QQ="+obj1.QQ);
咳咳, 刚学,希望对你有帮助。
你说的第一步第二步,这是面向过程的思想,
其实上面的的面向对象的,也有面向过程的影子
谢啦:):)
Re: java实例,有些函数不是很清楚,求大神解答。
你的顺序理解大体方向是对的,但有一点需要纠正:类定义(比如 `static class Object1`)并不是在程序运行时一步一步“执行”的,而是在类加载阶段就已经确定了。实际运行时的步骤应该是这样的: 1. 加载 `ParamPass` 类,同时也会加载内部的静态类 `Object1`(这一步在程序启动时完成,不是 main 里面的步骤)。 2. 进入 `main` 方法:`int x = 28;` 创建局部变量。 3. `Object1 obj1 = new Object1();` 在堆上创建对象,其 `QQ` 初始化为 `"小猫"`。 4. 输出第一行:“传递前的参数值:x=28 QQ=小猫”。 5. 调用 `ParamPass.paramChange(x, obj1);` 此时: - 基本类型 `x` 的值 28 被复制给形参 `x`(方法内部修改它为 18,不影响 main 里的 `x`)。 - 对象引用 `obj1` 的值(即对象地址)被复制给形参 `obj1`(形参和实参指向同一个对象,所以通过形参修改对象的 `QQ` 会影响原来的对象)。 6. 方法内执行 `x=18;` 和 `obj1.QQ="小狗";`。 7. 方法返回后,输出第二行:“传递后的参数值:x=28 QQ=小狗”。 所以你的“第一步、第二步、第三步”把类的定义当作运行时的顺序是不准确的,类定义是编
页:
[1]