Java setter和getters(Java setters and getters)
很长一段时间以来,我一直在努力解决java中的setter和getter问题。
例如,如果我想用适当的set和get方法编写一个包含名称,性别,年龄等信息的类。 然后在另一个类中,我想以此为例测试我的集合和getter:
personInfo = myInfo() = new Personinfo("Anna", "female", "17");
我怎么做?
我知道我可以打印出像:
public void printout() {
System.out.printf("Your name is: " + getName() +
" and you are a " + getSex());
}
I have been struggling with setters and getters in java for quite a long time now.
For instance, if I want to write a class with some information as name, sex, age etc with appropriate set and get methods. Then in a another class I want to test my set and getters with this as a example:
personInfo = myInfo() = new Personinfo("Anna", "female", "17");
How do I do that?
I know that I can have a printout like:
public void printout() {
System.out.printf("Your name is: " + getName() +
" and you are a " + getSex());
}
原文:https://stackoverflow.com/questions/17529406
更新时间:2020-02-19 16:02
最满意答案
这是一个简单的示例,向您展示如何执行此操作:
public class Person {
private String name;
private String gender;
private int age;
Person(String name, String gender, int age){
this.name = name;
this.gender = gender;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public void setGender(String gender){
this.gender = gender;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return this.name;
}
public String getGender(){
return this.gender;
}
public int getAge(){
return this.age;
}
public static void main(String[] args)
{
Person me = new Person("MyName","male",20);
System.out.println("My name is:" + me.getName());
me.setName("OtherName");
System.out.println("My name is:" + me.getName());
}
}
这将打印出来:
我的名字是:MyName
我的名字是:OtherName
This is a simple example to show you how to do it:
public class Person {
private String name;
private String gender;
private int age;
Person(String name, String gender, int age){
this.name = name;
this.gender = gender;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public void setGender(String gender){
this.gender = gender;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return this.name;
}
public String getGender(){
return this.gender;
}
public int getAge(){
return this.age;
}
public static void main(String[] args)
{
Person me = new Person("MyName","male",20);
System.out.println("My name is:" + me.getName());
me.setName("OtherName");
System.out.println("My name is:" + me.getName());
}
}
This will print out:
My name is:MyName
My name is:OtherName
2013-07-08
相关问答
我认为最好在这里引用Java并发实践 : 假设同步仅在写入共享变量时才需要使用是一个常见的错误; 这是不正确的。 对于可能被多个线程访问的每个可变状态变量,对该变量的所有访问必须使用相同的锁持有执行。 在这种情况下,我们说这个变量是被这个锁保护的。 在没有同步的情况下,编译器,处理器和运行时可以对操作看起来执行的顺序做一些非常奇怪的事情。 针对内存动作“必须”发生在不正当同步的多线程程序中的尝试的尝试几乎肯定是不正确的。 通常,您不必对基元进行谨慎,因此如果这是一个int或一个boolean那么可
...
前C#6 我会使用最后一个,一个微不足道的财产。 请注意,我将其称为公共财产,因为吸烟者和吸烟者都是公开的。 不可变性是自动执行的属性有点痛苦 - 你不能写一个只有一个吸气剂的自动属性; 最近可以来的是: public string Foo { get; private set; }
这不是真正的不变的...只是不可变的在你的课外。 所以你可能希望使用一个真正的只读属性: private readonly string foo;
public string Foo { get { return
...
实际上有很多很好的理由考虑使用访问器,而不是直接暴露一个类的字段,而不仅仅是封装的参数,并且使未来的更改更容易。 以下是我所知道的一些原因: 封装与获取或设置属性相关的行为 - 这允许稍后更容易添加其他功能(如验证)。 在使用替代表示方式暴露属性时隐藏属性的内部表示。 将公共界面与变更保持一致 - 允许公共界面保持不变,而实施变更而不影响现有消费者。 控制属性的生命周期和内存管理(处置)语义 - 在非托管内存环境(如C ++或Objective-C)中尤为重要)。 提供调试截取点,以便在运行时更改
...
从技术上讲,从语言和VM的角度来看,是的,它们只是方法。 然而,一些图书馆和框架认识到它们的特殊性。 例如,JPA可用于通过注释字段或方法来映射“属性”。 Beans Binding库使用它们来访问属性,所以如果你在某个对象上有一个getText() / setText()对,那么你可以将“text”属性绑定到某个其他对象的其他属性(你仍然需要尽管如此,请执行addPropertyChangeListener魔术。 但这只是一种“配置约定”现象与反射的力量相结合。 Technically, fro
...
让我们从你的第二个问题开始: 我认为你在setter中使用synchronized块的原因是你对value执行了两个不同的操作 。 你检查value==null然后你设置value=v 。 虽然您在每个步骤中都有锁定,但它们之间没有锁定。 所以这是可能的: Thread1: lock value -> value==null (true) -> release value
Thread2: lock value -> value==null (true) -> release value
Thre
...
请记住,通过使addressList静态,它属于addressList类而不是类的实例。 这意味着所有addressList将共享相同的addressList 。 我不确定那是否是你想要的。 关于你的错误, AddressbookForm.getTotalContacts()返回一个int 。 由于int是Java中的基本类型,因此它没有toString()方法。 一个int可以转换为一个String如: int a = 5;
String aString = a + "";
Keep in m
...
那些是abstract methods ,这就是为什么他们没有任何实现。 要了解有关抽象类和方法的更多信息,请参阅Oracle关于抽象方法的文档 : 抽象方法是在没有实现的情况下声明的方法(没有大括号,后跟分号),如下所示: abstract void moveTo(double deltaX, double deltaY);
当抽象类被子类化时,子类通常为其父类中的所有抽象方法提供实现。 但是,如果没有,则子类也必须声明为abstract。 those are abstract methods
...
这是一个简单的示例,向您展示如何执行此操作: public class Person {
private String name;
private String gender;
private int age;
Person(String name, String gender, int age){
this.name = name;
this.gender = gender;
this.age = age;
}
public void setName(String nam
...
* Getter Setter Class public class ShoppingListName {
private static String shoppingListName;
public static String getShoppingListName() {
return shoppingListName;
}
public static void setShoppingListName(String shoppingListName) {
ShoppingLis
...
在代码示例中,我发现它们只有一个getter,但不是一个setter。 但我真的不明白为什么。 您描述的功能是在创建Person对象时,没有人可以set其gender和length 。 如果用户希望,他/她可以根据需要创建具有属性的新 Person ( new Person(...) )。 但是在创建Person之后,您无法set属性。 但是this.gender = gender可以作为制定者工作? 我似乎无法弄清楚它的功能是什么。 它确实可以作为一个setter(虽然它本身不是一个setter
...