变量默认值
实例变量都有一个默认值,如果希望修改这个默认值,可以在定义变量的同时就赋值,或者将代码放入初始化代码块中,代码块用{}
包围,如下所示:
int x = 1;
int y;
{
y = 2;
}
x的默认值设为了1, y的默认值设为了2。在新建一个对象的时候,会先调用这个初始化,然后才会执行构造方法中的代码。
静态变量也可以这样初始化:
static int STATIC_ONE = 1;
static int STATIC_TWO;
static
{
STATIC_TWO = 2;
}
STATIC_TWO=2;
语句外面包了一个static {}
,这叫静态初始化代码块。静态初始化代码块在类加载的时候执行,这是在任何对象创建之前,且只执行一次。
private变量
一般不应该将实例变量声明为public,下面我们修改一下类的定义,将实例变量定义为private,通过实例方法来操作变量,如下所示。
// www.coolcou.com
class Point {
private int x;
private int y;
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public double distance() {
return Math.sqrt(x * x + y * y);
}
}
这个定义中,我们加了4个方法,setⅩ/setY用于设置实例变量的值,getⅩ/getY用于获取实例变量的值。
这里面需要介绍的是this
这个关键字。this表示当前实例,在语句this.x=x;
中,this.x
表示实例变量x,而右边的x表示方法参数中的x。在实例方法中,有一个隐含的参数,这个参数就是this,没有歧义的情况下,可以直接访问实例变量,在这个例子中,两个变量名都叫x,则需要通过加上this来消除歧义。
这4个方法看上去是非常多余的,直接访问变量不是更简洁吗?函数调用是有成本的,在这个例子中,意义确实不太大,实际上,Java编译器一般也会将对这几个方法的调用转换为直接访问实例变量,而避免函数调用的开销。但在很多情况下,通过函数调用可以封装内部数据,避免误操作,我们一般还是不将成员变量定义为public。
使用这个类的代码如下:
public class coolcou {
public static void main(String[] args) {
Point p = new Point();
p.setX(2);
p.setY(3);
System.out.println(p.distance());
}
}
上述代码将对实例变量的直接访问改为了方法调用。
酷客教程相关文章:
评论前必须登录!
注册