static关键字
1、static关键字的使用:
static是一个修饰符,用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。
static:静态的
static可以用来修饰:属性、方法、代码块、内部类。
2、使用static修饰属性:静态变量(或类变量)
- 属性,按是否使用static修饰,又分为:静态属性 VS 非静态属性(实例变量)
- 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中的一个对象中的非静态属性时,不会导致其他对象中同样的属性值得修改。
- 静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过对某个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
- static修饰属性的其他说明:
- 静态变量随着类的加载而加载。可以通过“类.静态变量”的形式进行调用。
- 静态变量的加载要早于对象的创建。
- 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
- 静态属性举例:
System.out;Math.PI
3、使用static修饰方法:静态方法
- 随着类的加载而加载,可以通过“类.静态方法”的方式调用。
- 静态方法中,只能调用静态的方法或属性
- 非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性。
4、static修饰代码块:
static关键字还有一个比较重要的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来依次执行每个static块,并且只会执行一次。
static块可以优化程序性能,是因为它的特性:只会在类被初次加载的时候执行一次。
5、static注意点:
- 在静态的方法中,不能使用this关键字、super关键字。
- 关于静态属性和静态方法的使用,大家都从生命周期的角度去理解。
6、开发中,如何确定一个属性是否要声明为static?
- 属性是可以被多个对象所共享的,不会随着对象的不同而不同。
- 类中的常量也常常声明为static。
7、开发中,如何确定一个方法是否要声明为static?
- 操作静态属性的方法,通常设置为static的。
- 工具类中的方法,习惯上声明为static的,例如:Math、Arrays、collections
8、实例:
public class Tset {
public static void main(String[] args) {
//方法的调用
Person.eat();
//sleep()没有用static修饰,无法通过类名.方法名进行调用
//Person.sleep();
//属性的调用
System.out.println(Person.name="tom");
Person p=new Person();
p.age=12;
System.out.println(p.age);
//编译不通过 Person.age=12
}
}
class Person{
static String name;
int age;
public static void eat(){
System.out.println("人要吃饭");
}
public void sleep(){
System.out.println("人要睡觉");
}
}
9、引用:
1、静态方法能不能引用非静态资源?不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。
2、静态方法里面能不能引用静态资源?可以,因为都是类初始化的时候加载的,大家相互都认识。
3、非静态方法里面能不能引用静态资源?可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。