一个简单的例子:
public class Circle{ public double radius;//半径 public static int NumOfObject;
public double getArea(){return radius*radius*PI;} }
1.静态方法和实例方法
静态方法可以使用:类名.方法名(参数) 的格式来调用。比如我们常用的Math.mathodName()。用对象.方法名(参数)也是可以的。
静态方法不依赖于实例变量,也就是和对象中的属性关系不大,甚至没有关系。这时候就可以加关键字static了。
实例方法必须使用对象.方法名()的格式。它依赖于对象的属性来实现。
2.对象的引用和不引用
多数时候我们是这样的:
Circle cir=new Circle();
cir是一个引用(其实可以看成指针),指向被创建的对象。其实也未必非要引用。
比如:
new Circle();
或者
System.out.println("Area is "+ new Circlr(5).getArea());
这种方式创建的叫做匿名对象。
没有被引用的对象会被Java虚拟机自动回收它占的空间。Java真贤惠啊。。
这样用厉害一点吧(?
3.静态变量、常量和方法
实例变量就是radius那样的,绑定到类的某个特定实例,存储在互不相关的内存中,不能被同一个类的不同对象影响。
如果想让一个类的所有实例共享数据,就要使用静态变量(static variable)。变量值存在一个公共的内心地址,如果某一个对象修改了它的值,所有的对象都会受影响。
类中的常量是被该类的所有对象共享的,所以应该声明为final static。
例如Math类中的PI是这样定义的:
final static double PI = 3.14159265358979323846;
调用的话就Math.PI。和静态方法一样,静态变量也可以使用类名调用,这样用可读性会比较高。
静态变量和静态方法既可以在类的实例方法中使用,也可以在静态方法中使用。但实例变量和实例方法不可以在静态方法中使用了。
栗子:
public class Foo{
int i=5;
static int k=2;
public static void main(String[] args){
int j=i;//wrong, i is an instance variable
m1();//wrong, m1() is an instance method
}
public void m1(){i = i + k + m2(i, k);}//correct
public static int m2(int i, int j) {return i+j;}//correct
}