- static修饰符:
static是静态的意思,是java中的修饰符。用于修饰类的变量、方法等,称为类的静态成员。在应用程序中,第一次加载类时,初始化静态变量,静态变量会一直到应用程序结束才会被系统销毁。静态成员不依赖类的某一个实例,因此调用静态成员时,可以使用类名直接调用。
- 静态变量
经过static修饰的变量,称为静态变量,也叫类变量,静态变量不依赖于任何对象存在,当类第一次加载(任何一个对象的声明,首先都要加载类),该类的静态变量就会被分配独立的内存,直到应用程序结束才被回收,因此静态变量不依赖与任何对象而存在。
静态变量和成员变量的区别:
- 生命周期不同:
静态变量:在类第一次加载的时候就会创建,等整个程序执行结束的时候被销毁。
成员变量:在创建对象的时候被创建,当该对象使用完成之后就被销毁。
2. 调用方式不同:
静态变量:类名.变量名;
成员变量:对象名.变量名;
例如:
Test test=new Test(); test.num1=7;//成员变量的调用 Test.num=9;//静态变量的调用 |
总结:
静态变量又叫做类变量,不依赖任何对象存在,成员变量依赖于对象存在的,所以在调用的时候首先要进行实例化对象,然后通过对象去调用。
在整个程序当中,一个静态变量在应用程序中只存在一份。
例如:
package com.bxit; /** * static:静态的 */ public class Test { /** * 静态修饰符:static * static可以修饰方法,属性,也可以修饰类 * * 使用static修饰的变量,在类第一次加载的时候就会创建。 * 在整个程序执行过程当中,静态变量永远只存在一份。 * 静态变量是脱离对象存在的,也就是说静态变量不会依赖于任何的对象 * * 静态变量的生命周期: * 在类第一次加载的时候就会创建,等整个程序执行结束的时候被销毁。 * 成员变量的生命周期: * 在创建对象的时候被创建,当该对象使用完成之后就被销毁。 * 静态变量调用的方式: * 类名.变量名; * 成员变量调用方式: * 对象名.变量名; * 总结: * 静态变量又叫做类变量,不依赖任何对象存在,成员变量依赖于对象存在的,所以在调用的时候 * 首先要进行实例化对象,然后通过对象去调用。 */ //类变量:在类第一次加载的时候被创建,在整个程序中只有一份。 public static int num=0; //成员变量:在进行创建对象的时候被创建,在整个程序执行过程中可以有多份。 public int num1=0; public void add(){ num++; num1++; System.out.println("静态num="+num+"--------成员num1="+num1); } public static void main(String[] args) { Test test=new Test(); //num=0 num1=0 test.add();//num=1 num1=1 Test test1=new Test(); //num=1 num1=0 test1.add(); //num=2 num1=1 Test test2=new Test(); //num=2 num1=0 test2.add(); //num=3 num1=1 } } |
执行结果:
|
说明:上述程序中,num属于静态变量,他在程序中只存在一份,所以每次都num的修改都是在原来的基础上进行的,但是num1属于成员变量,每次使用的时候都是对不同的对象的成员变量进行修改,所以每次都是一个新的变量。
- 静态方法:
静态方法就是在方法的声明前加上static修饰符,他和静态变量一样,也是不依赖与任何对象存在。
静态方法和成员方法调用方式对比:
静态方法调用方式:
类名.方法名([参数列表]);
非静态方法调用方式:
对象名.方法名([参数列表]);
例如:
Test1.add();//静态方法的调用 |
注意:1.在静态的方法中不可以调用非静态的属性和方法,如果非要调用必须先创建对象。
2.在成员方法中可以调用静态的变量和方法。
成员方法和静态方法对比表
比较内容 | 静态方法 | 成员方法 |
调用 | 类名.方法名(参数) | 对象名.方法名(参数) |
调用普通方法 | 不能直接调用 | 同一个类中的可以直接调用 |
调用静态方法 | 类名.方法名(参数) | 类名.方法名(参数) |
访问静态变量 | 类名.静态变量名 | 类名.静态变量名 |
访问成员变量 | 不能直接访问 | 同一个类中可以直接访问 |
使用this关键字 | 不能使用 | 可以使用 |
- 静态块:
可以通过static修饰代码块,叫做静态块。写在类里面,方法的外面。
例如:
static{ //name="aa"; name1="hello";//静态变量 System.out.println("静态块"); add();//讲台方法 } |
类在第一次加载的时候就会去执行静态块中的代码,在静态块中我们可以进行一些初始化的操作。静态块只能去访问类中静态的变量和方法。