static关键字
关键字static修饰的都是类相关的,类级别的。
变量的分类:方法体内是局部变量,方法体外是类变量也称成员变量, 成员变量也称 实例变量 和 静态变量。
静态变量没有对象的参与,所以不存在空指针异常。
静态变量static是在类加载时被初始化,不需要new对象,在类加载的时候内存空间就被开辟出来。
静态变量是存储在方法区中。静态变量的访问为 类名.变量名 的方式访问
如何区分和定义实例变量和静态变量呢? 当所定义的变量是共有的,那么就定义为静态变量。如果被定义的变量是有区分的,有n个的情况,则定义为实例变量。
静态变量可以使用 类名.变量 访问 也可以使用 引用.变量访问, 但不建议使用引用的方法.因为会导致别人误以为是实例变量、
******************只有 空引用 访问实例相关的数据时,都会出现空指针异常。
实例方法和静态方法的选择:如果在方法体中,直接访问了实例变量,那么这个方法一定是实例方法。 在开发中,工具类中的方法一般都是静态的。。。。
个人理解:只有所定义的方法中存在实例变量的内容,那么则直接且必须用实例方法,不可用静态方法,因为静态方法无法访问实例变量的内容、、、、、
静态代码块: 见一下代码可以得出,静态代码块在类加载时执行,并且在main方法执行之前执行。且一类中可以写多个且按照自上而下的顺序执行。
public class StaticTest{ static{ System.out.println('A'); } public static void main(String[] args){ System.out.println('B'); } static{ System.out.println('C'); } }//答案输出为ACB
静态代码块的用处:类加载时机,可用于类加载日志的生成。
静态变量和静态代码块按自上而下的顺序执行,避免非法前向引用的错误。
代码执行顺序的总结:类中的方法是谁被调用谁先执行,方法中的代码是有先后顺序的,静态变量是有先后顺序的,静态方法也是有先后顺序,静态变量和静态代码块也是有先后顺序的。
实例语句块: 对象构建时机 实例代码块始终在构造方法执行前执行。
public class InstanceCode{ public static void main(String[] args){ new InstanceCode(); new InstanceCode("abc"); System.out.println("main方法执行"); } { System.out.println("实例代码块执行"); } public InstanceCode(){ System.out.println("无参数的构造方法"); } public InstanceCode(String name){ System.out.println("有参数的构造方法"); } }
class Student{ public void exam(){ System.out.println("Examing"); } } public class JingtaiBianliang{ static Student s = new Student(); public static void main(String[] args){ //Student s = new Student(); 正常的引用 //s.exam(); JingtaiBianliang.s.exam(); //和out一样,将相同功能的对象定义成静态变量,好处就是省内存以及可以直接通过类名.的方式调用。 } }