1、static关键字的用法:
static关键字主要有以下四种使用场景:
- 修饰成员变量和成员方法:被static声明的成员变量属于静态成员变量,存放在JVM内存区域的方法区;被static修饰的成员方法属于类,不仅仅属于这个类的某个对象,而是被类中所有对象共享,可以通过类名或对象名调用。
- 静态代码块:静态代码块定义在类中,静态代码块在非静态代码块之前执行(静态代码块- ->非静态代码块一->构造方法)。不管创建多少个该类的对象,静态代码块只执行1次
- 静态内部类: static修饰的内部类被称为静态内部类。静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着: 1.它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法。
- 静态导包:用来导入类中的静态资源,1.5之后的新待性。格式为: importstatic java.lang.Math.* ;可以指定导入某个类中的指定静态资源,并且不需要使用静态方法与实例方法的区别?静态方法与实例方法的区别?类名调用类中静态成员,可以直接z使用类中静态成员变量和成员方去
2、静态方法与实例方法的区别?
静态方法属于类本身,实例方法属于该类的每个对象实例(也称实例方法)。在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名方法名”的方式。而实例方法只能使用“对象名.方法名"这种方式。也就是说,调用静态方法可以无需创建对象。
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法) ,而不允许访问实例成员变量和实例方法;实例方法则无此限制。
3、静态代码块static{ }与非静态代码块{ }的区别?
1相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,定义多个时按定义的顺序执行。
2不同点:
静态代码块在非静态代码块之前执行。执行顺序为:静态代码块、非蓉态代码块、构造方法。
静态代码块只在第一-次new创建对象前执行 一次, 之后不再执行,而非静态代码块在每new创建对象一次就执行次。
非静态代码块可在普通方法中定义(没有意义);而静态代码块不行。