当前位置: 代码迷 >> J2SE >> 初学者,关于java中方法的疑问
  详细解决方案

初学者,关于java中方法的疑问

热度:248   发布时间:2016-04-23 20:17:59.0
菜鸟求助,关于java中方法的疑问

package Test01;

public class onlyTest
{
private int x=0;
public void setX(int ix)
{
x=ix;
}
public int getX()
{
return x;
}
}

package Test01;

public class invokeByObject
{
public void tryChange(onlyTest form)
{
int t=form.getX();
form.setX(t*2);
}
public void showDiffer()
{
onlyTest actual=new onlyTest();
actual.setX(100);
System.out.println("调用tryChange方法之前,x="+actual.getX());
tryChange(actual);
System.out.println("调用tryChange方法之后,x="+actual.getX());
}
public static void main(String args[])
{
invokeByObject va=new invokeByObject();
va.showDiffer();
}
}


上面的代码中public void tryChange(onlyTest form)圆括号里是否等同于onlyTest form=new onlyTest()
我试着把它改成

public void tryChange()
{
                onlyTest form=new onlyTest();
int t=form.getX();
form.setX(t*2);
}

就提示有错误,请指教
------解决思路----------------------
引用:

package Test01;

public class onlyTest
{
private int x=0;
public void setX(int ix)
{
x=ix;
}
public int getX()
{
return x;
}
}

package Test01;

public class invokeByObject
{
public void tryChange(onlyTest form)
{
int t=form.getX();
form.setX(t*2);
}
public void showDiffer()
{
onlyTest actual=new onlyTest();
actual.setX(100);
System.out.println("调用tryChange方法之前,x="+actual.getX());
tryChange(actual);
System.out.println("调用tryChange方法之后,x="+actual.getX());
}
public static void main(String args[])
{
invokeByObject va=new invokeByObject();
va.showDiffer();
}
}


上面的代码中public void tryChange(onlyTest form)圆括号里是否等同于onlyTest form=new onlyTest()
我试着把它改成

public void tryChange()
{
                onlyTest form=new onlyTest();
int t=form.getX();
form.setX(t*2);
}

就提示有错误,请指教

是可以这么理解,但是不能这么做,因为public void tryChange(onlyTest form)中的 form是入参,是别人传进来的,
你无法保证别都是onlyTest form=new onlyTest()之后就传进来,因此form对象的属性值可以是各式各样的。

------解决思路----------------------
public void tryChange()
    {
                onlyTest form=new onlyTest();
        int t=form.getX();
        form.setX(t*2);
    } 
你改成这样我没看出来有什么问题啊
你说的报错是怎么报错?

至于 上面的代码中public void tryChange(onlyTest form)圆括号里是否等同于onlyTest form=new onlyTest()

不等于 前面是传进来一个form对象 里面可以有属性 后面是创建一个新的form对象 不出意外 大部分属性都是空的 

还有 友情提示一下 类名的第一个字母一般都是大写的 这是最基本的标准

你是在自学java吗?
------解决思路----------------------
不等同的,括号里的是接收参数的。另一个是新建一个对象,不能接收参数。但两者都能传递消息。
------解决思路----------------------
不知道所云. 看了格式觉得不爽...
------解决思路----------------------
应该没有程序错误,你说的有错是指没有得到你想要的结果吧?
以参数传进去一个对象,实际上是传进去该对象的引用,在方法里对该对象引用的操作都将直接作用于该对象。而你在方法内部自己创建一个对象(new onlyTest()),是新创建的一个对象,跟方法外的对象不是同一个对象,因此对它的操作不会影响方法外面的对象。

参数列表中的onlyTest form不等同于onlyTest form = new onlyTest(),而是等同于onlyTest form = 传进来的对象的引用。

此外,也是这里大家都看着不爽的最主要原因,写JAVA就要遵守JAVA程序员的一些习惯,类名要首字母大写,驼峰命名。如果你不这样,谁也说不出你错,但谁看了都不爽,连IDE看见都给你画黄线!

最后,你这是哪里来的习惯呢?我怎么从来没听说过哪门语言的类名是小写字母开头的?
------解决思路----------------------
"就提示有错误",也不写出来什么错误......
比如说
你把tryChange(actual)改成tryChange(),而调用的是tryChange(actual);  

public void showDiffer()    {        
       tryChange(actual);      
 }