2012-09-10 31 views
-2

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

为什么你认为他会将setName方法放在“public void”中,然后使用“public String getName”获取返回值。为什么他不把公共void中的返回randomName放在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()); 
} 


} 

回答

1

使用公共无效设置一个变量和公众的价值得到一个变量的值是“正确”的方式做到这一点。您可以搜索“getter and setters in java”以获得更多关于该主题的信息。基本上,这提供了获取和设置变量值的公共访问存储名称。 say()方法显示了getter方法的用法,在这种情况下是getName()。请注意,变量本身被声明为私有。这意味着除非你扩展了这个类,否则除了通过getter和setter之外,你不能从这个类的外部访问这个变量。比如说你不喜欢Fred这个名字。里面你的setName(字符串名称)方法,你可以说:

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

任何时候,有人试图设置名称“弗雷德”,它将被保存为“乔恩·多伊”来代替。如果他们可以直接访问变量,他们可以随时将值设置为“Fred”。这意味着你可以最终控制通过你的方法进入变量的内容。

3

它被称为封装。

隐藏对象的内部通过防止 用户保护其完整性从组件的内部数据设置成 无效或不一致的状态。封装的好处是它可以降低系统复杂度,并因此增加稳健性,允许开发人员限制软件组件之间的相互依赖关系。

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

0

除了向最终用户显示已封装的值之外,还有更多。在很多程序中,输出到stdout(这是System.out输出的地方)是从来没有由最终用户看到。您的对象可能需要String供以后参考,因此将它拉出来而不是将其输出到stdout会更有好处。

至于getNamesetName - 这些都是存取存取器,分别。

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

增变器只需要改变内部变量的值,通常在某些条件下。这里没有什么需要返回的,因此返回值是void。通常你会看到mutators返回boolean表示成功或失败,但在我看到它使用的例子中,返回值在很大程度上被忽略。

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) 

话说方法用于打印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属性,但optionalpublic属性,但在我看来这是一个good practice有它。

+1

从setter方法返回'this'也是常见的,所以它们可以链接在一起。 –

+0

好点,我错过了。 –

0

为什么他不直接地将返回randomName公共无效

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

public void方法声明字符串g?

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