什么"无效"是指方法的返回类型?

时间:2016-03-04 00:20:21

标签: java

我对" void"感到困惑, 因为它与方法有关。

我不知道两种方法之间的区别是什么?#34; void"而另一个没有。

例如,如果我这样做:

Public meth (int amount)
{

    amount = initial * interest;
    return amount;

}

(不确定是否正确,甚至有效,取名称"金额"并将其命名为与我的形式参数相同的东西,但这里有意义的是你是执行计算并返回结果)

然后,如果我做了类似的事情:

Public void Testing (int array[])
{

    //code that would modify the internals of an array

}

第二个没有"返回"因为它更像是一种通用方法,可以应用于任何整数数组,而第一种方法是关于对特定变量的工作?

还会欣赏一两个我何时或不会使用的例子" void"和"返回"。

另一件让我感到困惑的事情是调用方法。

我知道有时我会做一些事情,例如,使用上面的测试方法,

Testing(ArrayName);

其他时候,它会像:

NameOfWhateverImApplyingMethodTo.MethodName();

然后有时候事情会通过以下方式妥善完成:

Thing1.MethodName(Thing2);

我会在哪种情况下切换方法调用的语法?

5 个答案:

答案 0 :(得分:1)

  1. Java区分大小写,因此修饰符Public无效,请使用public
  2. 您不能将方法定义为public methodName(int a),只有构造函数具有此签名,对于不返回任何内容的方法,方法必须为public void methodName(<signature>);对于方法,方法必须为public <return type> methodName(<signature>)做。

答案 1 :(得分:1)

void作为返回类型的方法不返回任何内容。例如,您想在班级中设置字段firstName。您将编写类似

的设置方法
public void setFirstName(String n) {
 this.firstName = n;
}

正如您所看到的,您只是设置一个类变量而不需要返回任何内容。

如果你不使用void,那么你必须为方法提供一个返回类型。就像你想为上面的变量写一个getter:

public String getFirstName() {
 return this.firstName;
}

提供返回类型后,您必须返回该类型的值,否则您的代码将无法编译。

调用方法可以根据您调用它的位置以及使用的修饰符来完成:

  • 如果您从同一个班级调用该方法,则只需编写firstName = getFirstName()
  • 即可
  • 如果从另一个类调用该方法,则需要方法类的对象作为限定符,如personObject.getFirstName()
  • 如果您正在调用静态方法,则需要将类名称作为限定符,如Person.getFirstName();

答案 2 :(得分:0)

第一个例子,一个没有返回类型的方法,是constructor;在使用new创建实例时使用。但是,您无法从构造函数返回值。像,

this.amount = initial * interest; // return amount;

将字段amount设置为initial * interest

答案 3 :(得分:0)

Void基本上意味着该方法不会返回任何内容。

如果你做了

String name= "tim";
public void getName(){
 return name;
}

这会导致错误,因为getName方法返回一个名为name的字符串对象,但方法声明是说我什么都没有返回 - 因为它是无效的。

相反,该方法应为:

String name = "tim";
public String getName(){
return name;
}

现在,当调用方法getName()时,它将返回一个字符串对象“name”,其中包含“tim”:)

您可能对set方法无效。例如,

String name = "tim";
public void setName(String newName){
this.name = newName;
}

调用此方法时,您将使用setName("Andy");,并将name变量的值设置为“Andy”。此方法中没有返回任何内容,因为它正在设置某些内容,但不需要发回任何内容,因此我们在方法声明中使用void。

希望这有帮助。

答案 4 :(得分:0)

返回类型就是你得到的。当你打电话给它时,你还希望得到什么?例如,如果方法得到两个数的平均值,那么你期望一个数字返回,所以返回类型将是一个数字类型,如“int”(整数)。 您可以看到它应该使用该逻辑或查看单词return的方法 - 返回后返回的是返回的内容,其类型应该在方法中声明(例如,如果它表示“返回4;”它是返回一个int,应该是例如public int getFour()

您还询问了testing()vs testing(word) 我记得有同样的困难。两者之间的区别也与方法声明行有关。我会说明一下。

    public String testing(){
        return "a word";
    }

通过执行“System.out.println(testing());”调用此方法应该打印“一个字”。通过执行“System.out.println(testing(”a word“))来调用此方法;”会给你一个问题 - 这是因为当你调用测试时,它会查看相应的方法:一个在正确的类中,具有正确的返回类型和正确的参数/参数。如果你正在调用测试(“一个单词”),这意味着你使用一个String作为参数(因为“一个单词”是一个字符串),所以它试图使用测试(String aString)方法 - 不存在。 所以当方法没有输入时你使用空括号,并且当方法需要东西时你把东西放在括号中。这应该比听起来更容易混淆,因为它通常是合乎逻辑的 - 如果你想调用一个返回平均值的方法,你需要问自己“ 的平均值?”您可能需要为其提供您想要的平均值。

接下来:(a)测试()与(b)AClass.testing()与(c)aclass.testing() -

在(a)中,没有指定类。因此,如果你从那个类中调用它,Java可以猜出哪个类:这个类,它会起作用。从任何其他课程,它不会知道你在说什么,甚至可能侮辱你。 在(b)中,您通常会指定一个类 - 因此它将知道要在哪个类中找到它 - 如果它是“静态方法”,它将起作用。 * [见底部] 在(c)中,您要指定要在*上运行“testing()”的AClass的实例

例如,假设您创建了一个名为Business的类。通过为每个名称,编号,地址指定,可以创建一百个Business对象。 例如

   Business b = new Business(name, number, address);

然后在Business类中,您有一个方法“getName()”。这个方法没有参数 - 你可以看到括号是空的 - 所以,如果从另一个类调用“Business.getName()”,它怎么知道你想要哪个名字?你刚刚做了一百家企业! 它根本不可能。因此,对于这样的方法,您将调用“b.getName()”(b是我们上面创建的业务),它将获得业务的此实例的名称 - 即b 。 我很乐意提供帮助,所以如果你对我刚写的任何特定部分感到困惑,请告诉我,我会尽力详细说明!

编辑:有点静态方法: 静态方法不属于该类的实例。例如,getName()将获得 this Business的名称 - 即Business类的这个实例。但是,让我们说在Business类中,你创建了一个方法,它将字符串中每个单词的第一个字母转换为大写字母 - 就像你想要在打印它们时使商业名称看起来更专业一样。

public static String stringToUpperCase(String aString){
    aString = aString.substring(0, 1).toUpperCase() + aString.substring(1);
    return aString;
}

要使用它,您可以从以下位置更改getName()方法:

public String getName(){
    return name;
}

public String getName(){
    return stringToUpperCase(name);
}

这里使用新方法使名称具有大写的第一个字母 - 但这是它涉及Business类的程度。您注意到它不会询问有关特定企业的名称,地址或编号的信息。它只需要一个字符串你给它,做一些事情,然后把它还给它。无论你是没有企业还是一百个都没关系。 要调用此方法,您可以使用:

System.out.println(Business.stringToUpperCase("hello"));

这将打印Hello。 如果它不是静态方法,您必须先创建一个新业务:

Business b = new Business("aName", "aNumber", "anAddress"); 

System.out.println(b.stringToUpperCase("hello"));

如果方法 需要访问更多业务实例信息(如业务的名称编号或地址),则无法成为实例变量。