静态方法:在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
介绍一个类
Math:The class Math contains methods for performing basic numeric operations
是用来做基础运算的,所有的方法都不需要实例变量值,因为方法都是静态的
Math.abs(24.2);
static int abs(int a)
Returns the absolute value of an int value.
static 关键字标记出不需要实例的方法。
//Math.min(42,36) 没有对象!绝对没有
以类的名称调用静态方法
静态方法不能够调用非静态的变量
public class Duck {
private int size;
public static void main(String[] args) {
System.out.print("size of duck"+size);
}
}
//Cannot make a static reference to the non-static field size
虚拟机不知道是要打印具体那只鸭子的size,所有静态方法不能够调用非静态的变量!
静态方法也不能调用非静态方法
静态变量的值对所有的实例来说是相同的
package chapter5;
class Value{
static int c=0;
Value(){
c=15;
}
Value(int i){
c=i;
}
static void inc(){
c++;
}
}
class Count{
public static void prt(String s){
System.out.println(s);
}
Value v=new Value(10);
static Value v1,v2;
static{
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1=new Value(27);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v2=new Value(15);
prt("v1.c="+v1.c+" v2.c="+v2.c);
}
public static void main(String[] args){
Count ct=new Count();
prt("ct.c="+ct.v.c);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1.inc();
prt("v1.c="+v1.c+" v2.c="+v2.c);
prt("ct.c="+ct.v.c);
}
}
v1.c=0 v2.c=0
v1.c=27 v2.c=27
v1.c=15 v2.c=15
ct.c=10
v1.c=10 v2.c=10
v1.c=11 v2.c=11
ct.c=11
记住实例变量,每个实例都有一个
静态变量,每个类只有一个
静态变量会在该类的任何静态方法执行之前就初始化,并且赋初始值