问:
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
第一步的return返回什么
第二步的 this怎么解释
答:
你前面应该定义了password这个字段并且为String 类型的,类似这样:
private String password;
其实getPassword()和setPassword()是对你定义的password进行取值和赋值,
这两个方法执行的顺序是这样的:首先执行
setPassword();//对password进行赋值;
当你要用到password中的值的时候调用
getPassword();
return 返回的是当前password的值,而this指的是本类中的password(因为其他的类也可能定义了password如果其他类中有password并且是public的,此时你调用setPassword()这个方法时,那可能同时改了其他类的password)。这样解释您应该明白了吧。
一般说后台变量是相对于前台的,举个例子,Web程序表现用html,但逻辑用代码写出来的,所以代码里的变量我们通常叫后台变量,只是一个说法而已,不用太在意,你知道是变量就可以了。面向对象通常包含 封装、继承、多态,get set就是封装。举个简单例子,如果你类里有个公共变量name,那么外面就可以直接给这个变量赋值,如果我在赋值时候需要加逻辑,那么就没办法处理了,但我用get set封装的话,那么就可以做一些逻辑东西,如:
public class test
{
string Name
{
set
{
if(value=="")
{
throw ......
}
}
}
}
这样我外面给变量赋值时候我就可以做判断,加逻辑了。当然这只是一个例子。不知道你可懂了。
第一步的return返回的是该类中password的值
this表示当前类。由于在第二个函数定义了一个与当前类中字段password相同的形式参数,所以用 this来表明此处是类中字段password。
get 表示获取某个变量值
set 表示设置某个变量值
get set 后面家变量名
比如:
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag=flag;
}
get用于取得属性的值,set用于给属性赋值
例如:
class Aa {
private String a1;
public setA1(String a1) {
this.a1 = a1;
}
public getA1() {
return this.a1;
}
}
class Amain {
public static void main(String[] args) {
Aa aa = new Aa();
aa.setA1("为aa赋一个值"); //用于赋值
String a1 = aa.getA1(); // 取得属性的值
System.out.println(a1);
}
}
get和set 方法用于private数据中,如果一个类中的数据已经设为private,那么在其他类中已经不能调用他,只能通过get和set方法。
这是我和你设计的例子:
package baidu;
public class Test1 {//get和set方法
private String s;
public void setStr(String s){
this.s=s;
}
public String getStr(){
return this.s;
}
}
//在另外一个类中使用
class Yong{
public static void main(String[] args) {
Test1 t=new Test1();
t.setStr("guo");
System.out.println(t.getStr());
}
set/get方法一般是bean类里的函数,实体bean里一般就有private权限的变量,但是要访问他们就要有函数了,就是public权限的set/get方法分别修改和读取变量的值
用这种方式的好处是提高安全性,你可能想这样还是能修改怎么就提高安全性了呢。。是这样的,如果直接把变量设成public权限的,这样不用set/get,这样也在其它类中可以直接使用这些变量,完全没有安全性。我觉得还能避免多个bean中变量名相同的问题
问:
据说推荐用GET 和SET 来访问/修改FIELD
那么,像我这段代码,该如何改成GET SET的形式?
class whotogetset
{
public int a;
public int b;
} (我这里当然以c#为例,你们当然可以用你们擅长的C/C++/VB/JAVA等语言来回答我的疑问)
答:
你说的在C#里面叫做属性,也是C#所特有的。
下面是C#属性的解释。
C# 提供一种对称为属性的声明标记进行定义的机制。可以将属性置于源代码的某些实体上以指定附加信息。可以在运行时通过反射检索属性包含的信息。您可以使用预定义属性或者定义自己的自定义属性。
属性提供功能强大的方法以将声明信息与 C# 代码(类型、方法、属性等)相关联。与程序实体关联后,属性可在运行时查询,并可以以任意多种方式使用。
声明属性类
在 C# 中声明属性很简单:它采取从 System.Attribute 继承的类声明的形式,并已用 AttributeUsage 属性标记,如下所示:
using System;
[AttributeUsage(AttributeTargets.All)]
public class HelpAttribute : System.Attribute
{
public readonly string Url;
public string Topic // Topic is a named parameter
{
get
{
return topic;
}
set
{
topic = value;
}
}
public HelpAttribute(string url) // url is a positional parameter
{
this.Url = url;
}
private string topic;
}
代码讨论
属性 AttributeUsage 指定该属性可以应用于的语言元素。
属性类是从 System.Attribute 派生的公共类,至少有一个公共构造函数。
属性类有两种类型的参数:
“定位参数”,每次使用属性时都必须指定这些参数。定位参数被指定为属性类的构造函数参数。在上面的示例中,url 便是一个定位参数。
“命名参数”,可选。如果使用属性时指定了命名参数,则必须使用参数的名称。通过包含非静态字段或属性来定义命名参数。在上面的示例中,Topic 便是一个命名参数。
属性参数限制为下列类型的常数值:
简单类型(bool、byte、char、short、int、long、float 和 double)
string
System.Type
enums
对象(对象类型的属性参数的参数必须是属于上述类型之一的常数值。)
以上任意类型的一维数组
class whotogetset
{
private int a;
private int b;
public int _a
{
get { return a; }
set { a = value; }
}
public int _b
{
get { return b; }
set { b = value; }
}
}
用的时候whotogetset objTest = new () whotogetset ();生成实例后objTest.a
objTest.b就行了,
属性,如果你有VS环境的话,可以看一下,属性和字段是不一定的图形()
你可用set get来控制读写属性
C#代码
class whotogetset
{
private int a;
private int b;
public int _a
{
get { return a; }
set { a = value; }
}
public int _b
{
get { return b; }
set { b = value; }
}
}
其他地方引用_a,_b
class whotogetset
{
private int a;
private int b;
public int A
{
get{return a;}
set{a=value;}
}
public int B
{
get{return b;}
set{b=value;}
}
}
可以只有get没有set那就是只度,不能在外部改变a或b,或者只有set没有get那就是只写
public class Photo {
private int _id;
private int _albumid;
private string _caption;
public int PhotoID { get { return _id; }
set{this._id =value;} }
public int AlbumID { get { return _albumid; }
set{this._albumid =value;}}
public string Caption { get { return _caption; }
set{this._caption =value;}}
public Photo(int id, int albumid, string caption) {
_id = id;
_albumid = albumid;
_caption = caption;
}
}
通俗来讲:get是获取值 set是设置值
比如这句: get { return _id; }
如果调用这个get方法 就能获得方法return的 this._id =value(返回的值)
调用方法:Console.Write(对象 _id);(输出该属性的值)
比如这句:set{this._id =value;}
如果调用这个set方法 就可以重新设置_id的值 value就是你新设置的值
调用方法:对象._id="新值";(为该属性附新值)