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 润饰的成员,是属于对象,对象有多少个,他们就会呈现多少份。所以必须由对象调用。