static关键字

static的特点:

    A:随着类的加载而加载
    B:优先于对象存在
    C:被类的所有对象共享
        举例:我们班的同学应共用同一个班级编号。
        其实这个特点也是在告诉我们什么时候使用静态?
            如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
        举例:
            饮水机(用静态修饰)
            水杯(不能用静态修饰)
    D:可以通过类名调用
        其实它本身也可以通过对象名调用。
        推荐使用类名调用。
        如,main方法是static的方法,不需要创建对象,通过类名就可以。方便jvm的调用。

        静态修饰的内容一般我们称其为:与类相关的,类成员

static注意事项

A:在静态方法中是没有this关键字的
        如何理解呢?
            静态是随着类的加载而加载,this是随着对象的创建而存在。
            静态比对象先存在。
B:静态方法只能访问静态的成员变量和静态的成员方法(这里的访问就是指直接访问)
            静态方法:
                只能访问静态成员变量
                只能访问静态成员方法
            非静态方法:
                可以是静态的,也可以是非静态的成员变量
                可是是静态的成员方法,也可以是非静态的成员方法。
        先简单理解:
            静态只能访问静态。

常见报错:“无法从静态上下文中引用非静态方法”
原因:静态的是随着类的加载而加载,而非静态方法,是在对象创建时程序才会为其分配内存,然后通过对象去调用非静态方法。所以在对象未存在时,没有对象调用非静态方法,非静态的方法也不会存在,静态方法自然不能调用一个不存在的方法。(静态比对象先存在,没有对象,没有人调用非静态方法,没有人调用它它怎么能执行呢。)

静态的方法:想着main方法,无需创建对象,直接(类名.方法)调用。
非静态方法:需要创建对象,通过对象来调用才能够执行。(方法不调用不执行)


工具类中使用静态方法

/*原始
class ArrayDemo{
    public static void main(String[] args){
        //int[] arr=new int[5];
        int[] arr={22,33,44,55,66};
        printArray1(arr);
        //printArray2(arr);//报错:无法从静态上下文引用非静态
        ArrayDemo ad= new ArrayDemo();//创建了一个对象,通过对象访问非静态方法
        ad.printArray2(arr);
    }

    //加了static修饰的静态方法
    public static void printArray1(int[] arr){
        for(int i=0; i<arr.length; ++i){
            System.out.print(arr[i]+" ");
        }
    }
    //非静态方法
    public void printArray2(int[] arr){
        for(int i=0; i<arr.length; ++i){
            System.out.print(arr[i]+"---");
        }
    }
}
*/

//改进
/*
    测试类的作用:在测试类中创建其他类的对象,调用其他类的功能。
    而我们现在的操作是跟数组相关的,所以,应该把这些操作定义到数组操作类中
    定义一个数组的操作类ArrayTool
    有了数组操作类之后的调用:
            A:(同以前一样)在测试类ArraDemo中创建ArrayTool类的对象,通过该对象调用方法(可以为静态方法,也可以为非静态)
            B:当printArray()为静态方法时,直接采用:类名.方法 来调用(也可以通过老方法A创建对象来调用)
            C:当printArray()为静态方法,且私有private了构造方法,则只能通过类名.方法 来调用
*/
//测试类
class ArrayDemo{
    public static void main(String[] args){
        //int[] arr=new int[5];
        int[] arr={22,33,44,55,66};
        /*
        ArrayTool ad= new ArrayTool();
        ad.printArray1(arr);
        */
        ArrayTool.printArray1(arr);
    }
}

//工具类 放在另一个java文件(ArrayTool.java)里,和ArrayDemo放在同一个文件夹下即可
class ArrayTool{
    //私有化了构造方法
    private ArrayTool(){}

    public static void printArray1(int[] arr){
        for(int i=0; i<arr.length; ++i){
            System.out.print(arr[i]+"---");
        }
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013317445/article/details/81592312
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭