Java中 static关键字

一:static 修饰变量

在这里插入图片描述
静态的成员变量只会在数据共享区中维护一份,而非静态成员变量的数据会在每个对象中维护一份
在这里插入图片描述
static string country;

s1.country=“小日本”
在这里插入图片描述

static(静态\修饰符)
static修饰成员变量:

在这里插入图片描述

注意:1.非静态的成员变量只能使用对象进行访问,不能使用类名进行访问
2.千万不要为了方便访问数据而使用static修饰成员变量,只有成员变量的数据是真正需要被共享的时候才用static修饰

二:static修饰方法

static修饰方法(静态的成员方法):
…。。。。。的访问方式
方式一:可以使用对象进行访问
对象.静态的函数名();
方式二:可以使用类名进行访问
类名.静态的函数名();
推荐使用类名进行访问(不用创建对象,方便)
在这里插入图片描述

原因:静态函数是可以使用类名直接调用,这个时候可能还没有存在对象,而非静态的 成员数据是随着对象 的存在而存在的
3.非静态的函数是可以直接访问静态与非静态的成员
原因:非静态函数只能由对象调用,当对象存在的时候,静态数据老早就已经存在了,而非静态数据也随着对象的创建而存在了
4.静态函数不能出现this或者super关键字;
原因:因为静态的函数是可以使用类名调用的 ,一旦使用类名调用这时候不存在对象 而this关键字是代表了一个函数 的调用者对象 这时候产生了冲突

静态代码块:静态代码块是在 类名.class文件加载到内存的时候就马上执=行

static 不用实例化(创建对象—>实例化)可以直接通过类名或方法名访问 调用

三:静态的数据的生命周期:静态的成员变量是优先于对象存在的

class Student{

    String name; //名字

    static    String country = "中国"; //国籍

    //静态代码块 :静态代码块是在Student.class文件加载到内存的时候就马上执行的。
    static{
        System.out.println("静态代码块执行了...");
    }

    //构造函数
    public Student(String name){
        this.name = name;
    }
    
    //非静态的成员函数
    public  void study(){
        System.out.println("好好学习"+this);
    }


    //静态函数
    public static void sleep(){  //静态方法与非静态方法的字节码文件是同时存在内存中 的。 只是静态的成员变量数据是优先于对象存在而已。
        Student s= new Student("铁蛋");
        System.out.println(s.name+"呼呼大睡...");
    }
}


class Demo2
{
    public static void main(String[] args)
    {
        
        Student.sleep();
    //    Student s = new Student("狗娃");
    
    }
}

在这里插入图片描述

四:static什么时候修饰一个函数

              如果一个函数没有直接访问到非静态的成员时, 那么就可以使用static修饰了。 一般用于工具类的方法

Example:
/*
需求:编写一个数组的工具类。
Arrays.toString() [1,2,3,4];
sort()
*/

//数组工具类
class ArrayTool{

    public static String toString(int[] arr){
        String result  = "";
        for(int i = 0;  i < arr.length ; i++){
            if (i==0){
                result+="["+arr[i]+",";
            }else if(i==(arr.length-1)){
                result+= arr[i]+"]";
            }else{
                result+=arr[i]+",";
            }
        }
        return result;
    }
public  static  String toString(int [] arr){
    String result="";
    for(int i=0;i<arr.length;i++){
        if(i==0){
            result="["+arr[i]+","+result;
        }else if(i==(arr.length-1)){
            result=arr[i]+"]";
        }else{
            result=arr[i]+","+result;
        }
    }
}

    public static void sort(int[] arr){
        for(int i = 0; i < arr.length-1 ; i++){
            for(int j = i+1 ; j<arr.length ; j++){
                if(arr[i]>arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }    
    }

}



class Demo3
{
    public static void main(String[] args)
    {
        int[] arr = {12,1,456,165};
        //ArrayTool tool = new ArrayTool();

        ArrayTool.sort(arr);
        String info = ArrayTool.toString(arr);
        System.out.println("数组的元素:"+ info);
    }
}

静态函数为什么不能访问非静态的成员?
…静态函数只要存在有对象,那么也可以访问非静态的数据,只是不能直接访问而已

--------------------------------------------------------------------------启蒙于传智播客!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值