static关键字1概述定义了如下类:publicclassStudent{//成员变量publicStringname;公共字符性;//'男''女'publicintage;//无参构造方法publicStudent(){}//有参构造方法publicStudent(Stringa){}}我们已经知道,在面向对象中,有类和对象的概念,一些成员变量是定义在类中,比如name、age、sex,原来这些成员变量对于每个对象都是存在的(因为每个对象都可以访问)。而像name、age、sex确实是每个学生对象都应该有的属性,应该属于每个对象。所以Java中的成员(变量和方法)都是属性,Java是通过static关键字来区分的。static关键字在Java开发中非常重要,理解面向对象很关键。关于static关键字的使用,可以用来修饰成员变量和成员方法。static修饰的成员属于类,放在静态区。没有被static修饰的成员变量和方法都属于对象。我们上面例子中的成员变量不是静态修改的,所以它们属于每个对象。2定义格式,使用static表示静态。static可以修饰成员变量或者修饰方法。2.1静态变量及其访问有static修饰的成员变量,表示这个成员变量属于一个类,这个成员变量称为类变量或静态成员变量。只需使用类名即可访问它。因为只有一个类,所以内存区中只有一份静态成员变量。所有对象都可以共享这个变量。如何使用它?比如现在我们需要定义传智的所有学生班级,那么这些学生班级的对象的学校属性就应该是“传智”。这时候我们就可以把这个属性定义为static修饰的静态成员变量。定义格式修饰符静态数据类型变量名=初始值;例如publicclassStudent{publicstaticStringschoolName="传智播客";//属于类,只有一份。//.....}访问静态成员变量:格式:类名。静态变量publicstaticvoidmain(String[]args){System.out.println(Student.schoolName);//传智播客学生。schoolName="黑马程序员";System.out.println(Student.schoolName);//DarkHorseProgrammer}2.2实例变量及其对成员变量的访问,不加静态修饰,属于每个对象,这个成员变量称为实例变量,之前我们写的成员变量都是实例成员变量。需要注意的是,实例成员变量属于每个对象,必须创建才能访问类的对象。格式:Object.Instance成员变量2.3静态方法及其访问有静态修饰的成员方法,表示这个成员方法属于一个类,这个成员方法称为类方法或静态方法**。只需使用类名即可访问它。因为只有一个类,所以内存区只有一个静态方法。所有对象都可以共享这个方法。和静态成员变量一样,静态方法也可以通过类名直接访问。方法名称。例如publicclassStudent{publicstaticStringschoolName="传智播客";//属于类,只有一份。//.....publicstaticvoidstudy(){System.out.println("我们都在向黑马程序员学习");}}访问静态成员变量:格式:类名。staticmethodpublicstaticvoidmain(String[]args){Student.study();}2.4实例方法及其访问未经静态修饰的成员方法属于每个对象,这种成员方法也称为实例方法。需要注意的是,实例方法是属于每个对象的,类的对象必须先创建后才能被访问。格式:对象。实例方法示例:publicclassStudent{//实例变量privateStringname;//2.Method:Behavior//没有静态修饰,实例方法。属于每个对象,必须创建一个对象调用publicvoidrun(){System.out.println("学生可以运行");}//没有静态修改,实例方法publicvoidsleep(){System.out.println("Thestudentsleeps");}publicstaticvoidstudy(){}}publicstaticvoidmain(String[]args){//创建对象Studentstu=newStudent;stu.name="许干";//Student.sleep();//报错,必须使用对象访问。stu.sleep();stu.run();}3小结1、static修饰成员变量或成员方法时,变量称为静态变量,方法称为静态方法。这个类的每个对象共享同一个类的静态变量和静态方法。任何对象都可以更改此静态变量的值或访问静态方法。但不推荐这种访问方式。因为静态变量或者静态方法可以直接通过类名访问,不需要使用对象来访问。2、没有静态修饰的成员变量或成员方法称为实例变量,实例方法,实例变量和实例方法必须创建类的一个对象,然后通过该对象访问。3、static修饰的成员属于类,会存放在static区,随着类的加载而加载,而且只加载一次,所以只有一份,节省内存。它存储在一个固定的内存区域(静态区域),所以可以通过类名直接调用。它先于对象存在,所以它可以被所有对象共享。4、没有静态修饰的成员属于对象,有多少个对象就会有多少个副本。所以必须由对象调用。
