静态域(也叫做类变量)
如果将域(成员变量)定义为static形式,这个域就叫做静态域
特点:
- 这个类的所有实例将共享这个静态域。
- 即使没有创建该类对象,这个静态域也存在。它属于类,不属于任何独立的对象,因此也被称作类域或类变量。
- 随着类的加载而加载。
静态常量
定义格式:
public static final 数据类型 常量名(通常大写)=常量值;
调用格式:类名.静态常量名
如数学常量:public static final double E=
2.718281828459045;
public static final double PI=
3.141592653589793;
静态方法(也称类方法):被关键字static修饰的方法。
特点
- 随着类的加载而加载。
- 静态方法是没有隐式参数(this)的方法。
- 静态方法不能调用类中的实例域和成员方法,但是可以调用自身类中的静态域和静态方法
- 即使没有创建该类对象,这个方法也可以调用
调用格式
类名.方法名(...);
用途:
- 不需要查看或修改对象的状态,所需要的参数都是通过显示参数提供,没有隐式参数
- 只需要访问静态域,
- 用做工厂方法,生成不同格式的对象
如:LocalDate.now(); LocalDate.of(); NumberFormat();
NumberFormat c1=NumberFormat.getCurrencyInstance(); //返回当前默认语言环境的货币格式。 NumberFormat c2=NumberFormat.getPercentInstance(); //返回当前默认语言环境的整数格式。
使用静态工厂方法的原因(《java核心技术 卷一》):
1.无法命名构造器,构造器的名字必须与类名相同,但是这里希望将得到的货币实例和百分比实例采用不同的名字
2.当使用构造器时,无法改变所构造的对象类型,而工厂方法将返回一个DecimalFormat类对象,这是NumberFormat的子类
main()方法:在启动程序时,静态的main方法将执行并创建程序所需要的对象。
静态初始化块:用static标记的代码
用途:对类的静态域进行初始化
特点:
1.在类第一次加载的时候调用
2.所有的静态初始化语句和静态初始化块按在类中定义的顺序执行
class Student
{
private static int nextNo=1;
private int no;
private String name;
private char sex;
//构造方法
public Student(String name,char sex)
{
this.name=name;
this.sex=sex;
this.no=0;
}
public String getName()
{
return name;
}
public char getSex()
{
return sex;
}
public int getNo()
{
return no;
}
public void setNo()
{
no=nextNo;
nextNo++;
}
public static int getNextNo()
{
//name="叶叶";//静态方法只能访问静态变量,无法引用非静态变量
return nextNo;
}
static
{
System.out.println("第一个静态初始化块");
}
static
{
System.out.println("第二个静态初始化块");
}
}
public class StaticDemo
{
public static void main(String[] args)
{
int sno=Student.getNextNo(); //可以不创建对象调用静态方法
System.out.println(sno);
Student[] s1=new Student[5];
for(int i=0;i<s1.length;i++)
{
s1[i]=new Student("叶叶",'男');
s1[i].setNo();
System.out.println("学号:"+s1[i].getNo()+"----姓名:"+s1[i].getName()+"----性别:"+s1[i].getSex());
System.out.println("NextNo="+Student.getNextNo());
}
}
}
运行结果