java静态方法初始化属性,java中静态属性,静态方法和静态初始化器

static称为静态修饰符,它可以修饰类中的属性和方法。1.静态属性被static修饰的属性称为静态属性,这类属性一个最本质的特点是:它们是类的属性,而不属于任何一个类的具体对象。换句话说,对于该类的任何一个具体对象而言,静态属性是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值,同样任何一个类的对象去修改它时,也都是在对同一个内存单元做操作。

静态属性节省空间;静态属性保持类对象的一致性修改举例:总和、基本工资等2.静态方法

static修饰符修饰的属性是属于类的公共属性:与之相仿,用static修饰符修饰的方法,是属于整个类的类方法;而不用static至少有三重含义:(1)调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名;

(2)非static的方法是属于某个对象的方法,在这个对象创建时对象的方法在内存中拥有自己专用的代码段;而static的方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有:

(3) 由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量。也即,static方法只能处理static的数据。3.静态初始化器静态初始化器是由关键字static引导的一对大括号括起的语句组。它的作用与类的构造函数有些相似,都用来完成初始化的工作,但是静态初始化器与构造函数有三点根本的不同:

(1)构造函数是对每个新创建的对象初始化,而静态初始化器是对每个类进行初始化;

(2)构造函数是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用运行的;

(3)不同于构造函数,静态初始化器不是方法,没有方法名、返回值和参数列表。

静态初始化器(静态块)是针对类的,构造函数是针对对象的,当然是先有类,再有对象;而且静态块在给类分配内存的时候就会被执行,和静态变量一样。所以静态初始化器先于构造函数。

static语句块只执行一次,当该类第一次被初始化时调用,且只运行一次,是在构造函数之前执行的。

static 与实例无关,哪怕你创建实例后,你在销毁实例后,static里面的东西依然存在,直到线程over。 JAVA在执行程序的时候首先装载类,然后找main() 所以,在装载类的时候,遇到static马上执行, 因此,

Java code

首先执行static String str="aaaa";

接着执行static{

System.out.println(str);

System.out.println("bbb");

}

然后装载完毕,进入main()

执行System.out.println(str);

接着执行demo mydemo = new demo();

打印结果为:

aaaa

bbb

aaaa

cccc

--------------------------------  让我们考虑如下的问题,所以考虑由系统自动为新雇员对象生成编号变量的值,将Employee类的属性定义改写为:

class Employee    //定义雇员类   {     private int m_EmpNo; //私有属性:雇员编号     String m_EmpName;   //雇员姓名     char m_EmpGender;   //雇员性别     private double m_EmpSalary;  //私有属性:雇员工资     static double m_MinSalary;   //静态属性:最低工资     static int m_NextEmpNo;    //下一个新雇员的编号   } 构造函数为:   Employee(String name,char sex,double sal)  //构造函数,完成初始化工作   {     m_EmpNo=m_NextEmpNo++;   //新雇员使用了新编号之后,再产生另一个新编号     m_EmpName=new String(name);     m_EmpGender=sex;     if(sal>=m_MinSalary)   //工资额不合理时使用最低工资       m_EmpSalary=sal;     else       m_EmpSalary=m_MinSalary;这里,为实现编号不重复地自动生成,引入一个类成员m_NextEmpNo,它的值是下一个新创建的雇员对象的编号。每当有新对象生成时,系统调用构造函数,将m_NextEmpNo的当前值赋给新雇员的编号变量m_EmpNo,然后让类静态属性m_NextEmpNo自动加一,这样新对象的编号就不会与已有对象的编号相重复。表面看来整个问题似已解决,但实际上还有很关键的一步没有完成:那就是static的类属性m_NextEmpNo的初始化问题。    总之,静态初始化器的作用是对整个类完成初始化操作,包括给static类成员赋初值等,它在系统向内存加载时自动完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值