Java private变量

变量默认值

实例变量都有一个默认值,如果希望修改这个默认值,可以在定义变量的同时就赋值,或者将代码放入初始化代码块中,代码块用{}包围,如下所示:

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());
    }
}

上述代码将对实例变量的直接访问改为了方法调用。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!