java多个方法和实例

时间:2012-09-10 00:05:20

标签: java

我正在关注多个方法和实例的一系列教程。作者没有详细说明某些要素的细节。

为什么你认为他会将方法setName放在“public void”中,然后使用“public String getName”获取返回值。为什么他不将return randomName放在public void中并在public void中声明方法声明字符串g?

public class voidvoid {

private String randomName;

public void setName(String name){
    randomName = name;

}
public String getName () {
    return randomName;
}

public void saying () {
    System.out.printf("you are %s", getName());
}


}

5 个答案:

答案 0 :(得分:3)

它被称为封装。

  

隐藏对象的内部保护其完整性   阻止用户将组件的内部数据设置为   无效或不一致的状态。封装的好处是   它可以降低系统复杂性,从而提高稳健性   允许开发人员限制软件之间的相互依赖性   组件。

更多信息:http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming

答案 1 :(得分:1)

使用public void设置变量的值,使用public来获取变量的值是“正确”的方法。您可以搜索“java中的getter和setter”以获取有关该主题的更多信息。基本上,这提供了对获取和设置变量值的存储名称的公共访问。说()的方法显示了getter方法的使用,在本例中是getName()。请注意,变量本身被声明为私有。这意味着除非您扩展此类,否则除了通过getter和setter之外,您无法访问此类外部的变量。比如说你不喜欢弗雷德这个名字。在你的setName(String name)方法中,你可以说:

if(name.equals("Fred") {
   randomName = "Jon Doe";
}

任何时候有人试图设置名称“Fred”,它将被保存为“Jon Doe”。如果他们可以直接访问变量,他们可以随时将值设置为“Fred”。 这意味着您可以通过您的方法最终控制变量中的内容。

答案 2 :(得分:1)

当一个方法设置一个类的属性时,它被称为setter方法:

public void setName(String name)

由于您只能使用此方法设置类的randomename属性,因此通常不需要返回类型。但是如果你愿意,你肯定可以添加一个返回类型。如:

//this method will return true if the `randomname` was not set previously 
//otherwise false
public boolean setName(String name) {
    if (null == randomname )  { 
        randomname = name;
        return true;  
    }
    else return false;    
}

和setter方法类似,如果你可以使用一个方法得到一个属性,它通常被称为getter方法:

public String getName(String name)

Saying方法用于打印randomname属性。这是必要的,因为您无法在类范围之外打印randomname,因为它是私有的:

//this will print the value of randomname
public void saying ()

//another scenario
voidvoid foo = new voidvoid () ;
foo.setName("Hello world") ;

//this line will generate an erro
System.out.println (foo.randomname) ; 

//this will compile fine
foo.saying () ;

//you can also achieve the same result using getName
System.out.println (foo.getName() ) ; 

private属性的setter / getter方法是mandatory,如果你想要retrieve/set属性,optional属于public属性,但是我认为这是一个good practice

答案 3 :(得分:0)

除了向最终用户展示封装内容的价值之外,还有更多内容。在许多程序中,输出到stdout(System.out输出的位置)是从不最终用户看到的。您的对象可能需要String以供日后参考,因此将其拉出而不是将其输出到stdout将会更有益。

至于getNamesetName - 分别是访问者 mutators

访问者需要检索有关特定变量的信息,因此预期的返回类型是您需要的变量类型。由于您返回String,因此getName会返回String,因为变量randomNameString

mutator只需要改变内部变量的值,通常在某些条件下。这里真的不需要返回任何内容,因此返回值为void。通常你会看到返回boolean的mutator指示成功或失败,但在我看过它使用的例子中,返回值在很大程度上被忽略了。

答案 4 :(得分:0)

  

为什么他不将return randomName放在public void

我不明白这个问题。他把它放在public static String getName()方法中。他还能把它放在哪里呢?

  

在public void中说方法声明字符串g?

因为这会使它成为局部变量而不是实例成员,所以你不能用另一种方法设置它。