javabean中set和get方法
classBean{inta;publicintgetA(){returna;}publicvoidsetA(inta){this.a=a}}一直很奇怪为什么要用set和...
class Bean
{
int a;
public int getA()
{
return a;
}
public void setA(int a)
{
this.a = a
}
}
一直很奇怪为什么要用set和get,直接访问a不就可以了?有些书上说,隐藏了类的内部细节,避免用户修改,可是我还不是照样可以用set方法修改?
请指教,麻烦说的详细一点,谢谢各位了,这个问题让我一直很苦恼啊~
刚才没说清楚,补充一下,我的意思就是说如果像这样一个javabean:
public class Test{
private int add(int a,int b){
return a+b;
}
}
我在jsp页面或者别的类中直接调用add(3,5)不就可以了么?那怎么用set和get实现这种方法的隐藏? 那smile_bug你说什么时候可以用到set和get?我感觉好像我做了很多项目了,都没用到过阿.... 展开
{
int a;
public int getA()
{
return a;
}
public void setA(int a)
{
this.a = a
}
}
一直很奇怪为什么要用set和get,直接访问a不就可以了?有些书上说,隐藏了类的内部细节,避免用户修改,可是我还不是照样可以用set方法修改?
请指教,麻烦说的详细一点,谢谢各位了,这个问题让我一直很苦恼啊~
刚才没说清楚,补充一下,我的意思就是说如果像这样一个javabean:
public class Test{
private int add(int a,int b){
return a+b;
}
}
我在jsp页面或者别的类中直接调用add(3,5)不就可以了么?那怎么用set和get实现这种方法的隐藏? 那smile_bug你说什么时候可以用到set和get?我感觉好像我做了很多项目了,都没用到过阿.... 展开
17个回答
推荐于2018-05-10 · 知道合伙人数码行家
关注
展开全部
首先新建一个javabean Student.java,字段有sno,sname,age等。如下:
public class Student
{
private String sno;
private String sname;
private int age;
}
保存后,右键Student.java,选择source->Generate Setter and Getter...这一项,选择select All选中所有的字段,确定后,即生成了所有字段的get和set方法
public class Student
{
private String sno;
private String sname;
private int age;
}
保存后,右键Student.java,选择source->Generate Setter and Getter...这一项,选择select All选中所有的字段,确定后,即生成了所有字段的get和set方法
展开全部
除了共有属性,一般用private需要使用时用get.赋值用set
这样可以把属性隐藏起来。
这样调用SET方法之前比方说可以加个判断。是不是空值之类的。你也可以让你不想别人修改的属性不提供get和set方法!
这样别人可以修改使用哪个属性不可以修改使用哪个属性都在你的控制之内。
你要什么,就给我讲,我到屋里给你拿出来,但是你却不可以直接进屋去拿,万一你不熟悉我家里的情况,把我家搞乱了咋个办啊。(很精典)
另外。在hibernate中给一个属性赋值。hibernate查找的就是set+属性名(第一个字母大字)这样一个方法。然后自动把你要赋的值给它!
尽量让属性(物件,东西)私有化,让方法(能力,功能)公有化!
set/get是说属性的!对属性提供set/get方法!
这样可以把属性隐藏起来。
这样调用SET方法之前比方说可以加个判断。是不是空值之类的。你也可以让你不想别人修改的属性不提供get和set方法!
这样别人可以修改使用哪个属性不可以修改使用哪个属性都在你的控制之内。
你要什么,就给我讲,我到屋里给你拿出来,但是你却不可以直接进屋去拿,万一你不熟悉我家里的情况,把我家搞乱了咋个办啊。(很精典)
另外。在hibernate中给一个属性赋值。hibernate查找的就是set+属性名(第一个字母大字)这样一个方法。然后自动把你要赋的值给它!
尽量让属性(物件,东西)私有化,让方法(能力,功能)公有化!
set/get是说属性的!对属性提供set/get方法!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一方面是隐藏程序细节 一方面是javabean的规范要求
一个例子
class Person {
private String name;
private String age;
public String getName(){
return name; }
public void setName(String name) {
this.name = name; }
public String getAge() {
return age; }
public void setAge(String age) {
this.age = age; } }
在这里本来就可以用get与set取值或者设置值了,假如我们直接将变量声明为public不是更简单点。这种情况有必要用get与set方法吗?
在这里解释为什么要还是要用get与set。
这里就有一个封装和控制的问题。假设你直接访问属性 person.name;突然有一天,你可能需要对每个名字,或者某个名字过滤掉一些东西,怎么办?那么你就只好在出现person.name的地方到处添加过滤机制。如果你使用getName()方法,那么我就在这个方法里面过滤一下就OK了。 其实总体思想就是一个面向对象的观点来做事情,你要什么,就给我讲,我到屋里给你拿出来,但是你却不可以直接进屋去拿,万一你不熟悉我家里的情况,把我家搞乱了咋个办啊。
一个例子
class Person {
private String name;
private String age;
public String getName(){
return name; }
public void setName(String name) {
this.name = name; }
public String getAge() {
return age; }
public void setAge(String age) {
this.age = age; } }
在这里本来就可以用get与set取值或者设置值了,假如我们直接将变量声明为public不是更简单点。这种情况有必要用get与set方法吗?
在这里解释为什么要还是要用get与set。
这里就有一个封装和控制的问题。假设你直接访问属性 person.name;突然有一天,你可能需要对每个名字,或者某个名字过滤掉一些东西,怎么办?那么你就只好在出现person.name的地方到处添加过滤机制。如果你使用getName()方法,那么我就在这个方法里面过滤一下就OK了。 其实总体思想就是一个面向对象的观点来做事情,你要什么,就给我讲,我到屋里给你拿出来,但是你却不可以直接进屋去拿,万一你不熟悉我家里的情况,把我家搞乱了咋个办啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以看到set/get针对的是变量如你上面那个a
和你后面那个add方法没有关系,也不能通过set/get来隐藏。
而之所以用Set/get方法,这是面向对象里面的封装
和你后面那个add方法没有关系,也不能通过set/get来隐藏。
而之所以用Set/get方法,这是面向对象里面的封装
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以看下java反射机制,可以解决你的问题。
简单写了下:
import java.lang.reflect.Method;
public class Demo {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Demo demo = new Demo();
Method[] methods = Demo.class.getMethods();// 类的方法
for (Method method : methods) {
String methodName = method.getName();
// System.out.println("方法名:" + methodName);
if (methodName.startsWith("set")) {// 如果方法名以set开头
method.invoke(demo, "测试值");// 调用方法
}
}
for (Method method : methods) {
String methodName = method.getName();
// System.out.println("方法名:" + methodName);
if (methodName.startsWith("get") && !methodName.equals("getClass")) {// 如果方法名以get开头
Object value = method.invoke(demo);// 调用方法,并打印返回值
System.out.println(value);
}
}
}
}
简单写了下:
import java.lang.reflect.Method;
public class Demo {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Demo demo = new Demo();
Method[] methods = Demo.class.getMethods();// 类的方法
for (Method method : methods) {
String methodName = method.getName();
// System.out.println("方法名:" + methodName);
if (methodName.startsWith("set")) {// 如果方法名以set开头
method.invoke(demo, "测试值");// 调用方法
}
}
for (Method method : methods) {
String methodName = method.getName();
// System.out.println("方法名:" + methodName);
if (methodName.startsWith("get") && !methodName.equals("getClass")) {// 如果方法名以get开头
Object value = method.invoke(demo);// 调用方法,并打印返回值
System.out.println(value);
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询