static 关键字
static被称为静态,可以用来修饰类的属性,方法,代码块,内部类.
- 修饰的成员,被所有对象所共享
- 不创建对象,直接被调用
- 优先于对象存在静态优先于非静态
- 类加载时执行
1.可直接通过类名访问 也可以通过对象名访问
static
如过不是静态,每一个对象都要复制一份变量,浪费空间,
当所有对象的某一个值都相同时,加一个static使其为静态,在内存中只有一份,所有对象共享
- 静态方法只能访问 静态的变量
- 成员方法可以方法可以访问 成员变量 还可以方法静态变量
package com.nie.day2.Demo1;
public class StaticTest {
String name;
int age;
static String school;//可直接通过类名访问 也可以通过对象名访问
//static
//修饰的成员,被所有对象所共享
//不创建对象,直接被调用
//优先于对象存在o
//随着加载而加载
public void work() {
System.out.println(name + "\t" + age + "\t" + school);
}
}
package com.nie.day2.Demo1;
public class Test1 {
public static void main(String[] args) {
StaticTest.school = "陕西";//可直接通过类名访问
StaticTest b = new StaticTest();
b.age = 12;
b.name = "sfdsf";
b.work();
StaticTest c = new StaticTest();
c.age = 33;
c.name = "花花";
c.work();
}
}
输出:
sfdsf 12 陕西
花花 33 陕西
代码块
代码分实例块和静态块
- 静态变量优先于于非静态,
- 类加载时自动调用,仅一次,与是否创建对象无关。
package com.nie.day2.Demo1;
public class Demo {
static int num = 10;
{
System.out.println("实例代码块");
}
static {
System.out.println("静态代码块");
}
public static void main(String[] args) {
new Demo();// 先加载类 然后创建对象
new Demo();
System.out.println(Demo.num);
}
}
输出:
静态代码块
实例代码块
实例代码块
10