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一样,将相同功能的对象定义成静态变量,好处就是省内存以及可以直接通过类名.的方式调用。
        
    }
}

 

posted @ 2022-06-20 20:28  _八级大狂风  阅读(23)  评论(0编辑  收藏  举报