java学习(八)——静态域、静态方法、静态初始化块

 静态域(也叫做类变量)

如果将域(成员变量)定义为static形式,这个域就叫做静态域

 特点:

  1. 这个类的所有实例将共享这个静态域。
  2. 即使没有创建该类对象,这个静态域也存在。它属于类,不属于任何独立的对象,因此也被称作类域或类变量。
  3. 随着类的加载而加载。

静态常量

定义格式:
        public static final 数据类型 常量名(通常大写)=常量值;

调用格式:类名.静态常量名

数学常量:public static final double E=2.718281828459045;

                    public static final double PI=3.141592653589793;

更多常量

静态方法(也称类方法):被关键字static修饰的方法。

特点

  1. 随着类的加载而加载。
  2. 静态方法是没有隐式参数(this)的方法。
  3. 静态方法不能调用类中的实例域和成员方法,但是可以调用自身类中的静态域和静态方法
  4.  即使没有创建该类对象,这个方法也可以调用

调用格式
            类名.方法名(...);

用途:

  1.  不需要查看或修改对象的状态,所需要的参数都是通过显示参数提供,没有隐式参数
  2.  只需要访问静态域,
  3.   用做工厂方法,生成不同格式的对象

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

运行结果


返回目录

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值