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