使用第一个类
定义了类本身和定义了一个函数类似,本身不会做什么事情,不会分配内存,也不会执行代码。方法要执行需要被调用,而实例方法被调用,首先需要一个实例。实例也称为对象,我们可能会交替使用。下面的代码演示了如何使用:
public static void main(String[] args) {
Point p = new Point();
p.x = 2;
p.y = 3;
System.out.println(p.distance());
}
我们解释一下:
Point p = new Point();
这个语句包含了Point类型的变量声明和赋值,它可以分为两部分:
1 Point p;
2 p = new Point();
Point p声明了一个变量,这个变量叫p,是Point类型的。这个变量和数组变量是类似的,都有两块内存:一块存放实际内容,一块存放实际内容的位置。声明变量本身只会分配存放位置的内存空间,这块空间还没有指向任何实际内容。
因为这种变量和数组变量本身不存储数据,而只是存储实际内容的位置,它们也都称为引用类型
的变量。
p=new Point();创建了一个实例或对象,然后赋值给了Point类型的变量p,它至少做了两件事:
1)分配内存,以存储新对象的数据,对象数据包括这个对象的属性,具体包括其实例变量x和y。
2)给实例变量设置默认值,int类型默认值为0。
与方法内定义的局部变量不同,在创建对象的时候,所有的实例变量都会分配一个默认值,这与创建数组的时候是类似的,数值类型变量的默认值是0,boolean是false,char是“\u0000”,引用类型变量都是null。null是一个特殊的值,表示不指向任何对象。这些默认值可以修改,我们稍后介绍。
p.x = 2;
p.y = 3;
给对象的变量赋值,语法形式是:<对象变量名>.<成员名>。
System.out.println(p.distance());
调用实例方法distance,并输出结果,语法形式是:<对象变量名>.<方法名>。实例方法内对实例变量的操作,实际操作的就是p这个对象的数据。
我们在介绍基本类型的时候,先定义数据,然后赋值,最后是操作,自定义类型与此类似:
·Point p=new Point();是定义数据并设置默认值。
·p.x=2;p.y=3;是赋值。
·p.distance()是数据的操作。
可以看出,对实例变量和实例方法的访问都通过对象进行,通过对象来访问和操作其内部的数据是一种基本的面向对象思维。
本例中,我们通过对象直接操作了其内部数据x和y,这是一个不好的习惯,一般而言,不应该将实例变量声明为public,而只应该通过对象的方法对实例变量进行操作。
这也是为了减少误操作,直接访问变量没有办法进行参数检查和控制,而通过方法修改,可以在方法中进行检查。