static关键字
1 概述
定义如下类:
public class Student { // 成员变量 public String name; public char sex; // '男' '女' public int age; // 无参数构造方法 public Student() { } // 有参数构造方法 public Student(String a) { }}
曾经晓得面向对象中,存在类和对象的概念,在类中定义了一些成员变量,例如name,age,sex ,后果发现这些成员变量,每个对象都存在(因为每个对象都能够拜访)。
而像name ,age , sex的确是每个学生对象都应该有的属性,应该属于每个对象。
所以Java中成员(变量和办法)等是存在所属性的,Java是通过static关键字来辨别的。static关键字在Java开发十分的重要,对于了解面向对象十分要害。
对于 static
关键字的应用,它能够用来润饰的成员变量和成员办法,被static润饰的成员是属于类的是放在动态区中,没有static润饰的成员变量和办法则是属于对象的。咱们下面案例中的成员变量都是没有static润饰的,所以属于每个对象。
2 定义格局和应用
static是动态的意思。 static能够润饰成员变量或者润饰办法。
2.1 动态变量及其拜访
有static润饰成员变量,阐明这个成员变量是属于类的,这个成员变量称为类变量或者动态成员变量。 间接用 类名拜访即可。因为类只有一个,所以动态成员变量在内存区域中也只存在一份。所有的对象都能够共享这个变量。
如何应用呢
例如当初咱们须要定义传智全副的学生类,那么这些学生类的对象的学校属性应该都是“传智”,这个时候咱们能够把这个属性定义成static润饰的动态成员变量。
定义格局
修饰符 static 数据类型 变量名 = 初始值;
举例
public class Student { public static String schoolName = "传智播客"; // 属于类,只有一份。 // .....}
动态成员变量的拜访:
格局:类名.动态变量
public static void main(String[] args){ System.out.println(Student.schoolName); // 传智播客 Student.schoolName = "黑马程序员"; System.out.println(Student.schoolName); // 黑马程序员}
2.2 实例变量及其拜访
无static润饰的成员变量属于每个对象的, 这个成员变量叫实例变量,之前咱们写成员变量就是实例成员变量。
须要留神的是:实例成员变量属于每个对象,必须创立类的对象才能够拜访。
格局:对象.实例成员变量
2.3 静态方法及其拜访
有static润饰成员办法,阐明这个成员办法是属于类的,这个成员办法称为类办法或者静态方法**。 间接用 类名拜访即可。因为类只有一个,所以静态方法在内存区域中也只存在一份。所有的对象都能够共享这个办法。
与动态成员变量一样,静态方法也是间接通过类名.办法名称即可拜访。
举例
public class Student{ public static String schoolName = "传智播客"; // 属于类,只有一份。 // ..... public static void study(){ System.out.println("咱们都在黑马程序员学习"); }}
动态成员变量的拜访:
格局:类名.静态方法
public static void main(String[] args){ Student.study();}
2.4 实例办法及其拜访
无static润饰的成员办法属于每个对象的,这个成员办法也叫做实例办法。
须要留神的是:实例办法是属于每个对象,必须创立类的对象才能够拜访。
格局:对象.实例办法
示例:
public class Student { // 实例变量 private String name ; // 2.办法:行为 // 无 static润饰,实例办法。属于每个对象,必须创建对象调用 public void run(){ System.out.println("学生能够跑步"); } // 无 static润饰,实例办法 public void sleep(){ System.out.println("学生睡觉"); } public static void study(){ }}
public static void main(String[] args){ // 创建对象 Student stu = new Student ; stu.name = "徐干"; // Student.sleep();// 报错,必须用对象拜访。 stu.sleep(); stu.run();}
3 小结
1.当 static
润饰成员变量或者成员办法时,该变量称为动态变量,该办法称为静态方法。该类的每个对象都共享同一个类的动态变量和静态方法。任何对象都能够更改该动态变量的值或者拜访静态方法。然而不举荐这种形式去拜访。因为动态变量或者静态方法间接通过类名拜访即可,齐全没有必要用对象去拜访。
2.无static润饰的成员变量或者成员办法,称为实例变量,实例办法,实例变量和实例办法必须创立类的对象,而后通过对象来拜访。
3.static润饰的成员属于类,会存储在动态区,是随着类的加载而加载的,且只加载一次,所以只有一份,节俭内存。存储于一块固定的内存区域(动态区),所以,能够间接被类名调用。它优先于对象存在,所以,能够被所有对象共享。
4.无static润饰的成员,是属于对象,对象有多少个,他们就会呈现多少份。所以必须由对象调用。