Java中static关键字的详细解析

1.静态 static

  1. 概念:是Java中的一个修饰符
  2. 作用:可以修饰java的类,属性,方法,包
  3. 范围:修饰类,只能修饰内部类;

2.静态变量 

  1. 概念:静态变量是被static修饰的成员变量,
  2. 特点:静态变量是随着类的加载而加载的,优先于对象出现;被该类的所有对象共享
  3. 调用方式:
public class Student {
    // 静态变量
    public static int age = 15;  
    public static void main(String[] args) {
        //创建对象
        Student s1 = new Student(); //类型 对象名称 = new 构造函数()
        //调用方法一:通过对象调用
        System.out.println(s1.age);
        //调用方法二:直接通过类名调用
        System.out.println(Student.age);
    }
}

3.静态代码块

  1. 概念:JVM在加载类时会执行static代码块,如果有多个static代码块,JVM会按照顺序执行

  2. 作用:经常被用来初始化静态变量

  3. 注意事项:静态代码块只会执行一次 

  4. 示例代码如下:

package cn.sxau.静态;

public class 静态代码块demo1 {
    private static int a;
    static{
        静态代码块demo1.a=4;
        System.out.println(a);
        System.out.println("static block is called");
    }
    public static void main(String[] args) {
        
    }
}

 4.static修饰的类

  1. 被static修饰的类都是静态内部类,静态内部类只能访问外部的静态成员和静态方法
  2. public class Outer {
        static int n=5; //静态变量(共享)
        static class Inner{ // 静态内部类,类名和外部类不能相同
            void accessAttrFromOuter(){
                System.out.println("Inner:Outer.n="+n); //访问外部类的静态变量
            }
        }
        public static void main(String[] args) {
            Outer.Inner nest = new Outer.Inner();
            nest.accessAttrFromOuter();
        }
    }

5.静态方法

  1. 概念:被static修饰的成员方法,叫做静态方法
  2. 调用方式:方式一:类名调用;方式二:对象名调用
  3. 特点:多用在测试类工具类
  4. 代码示例
//工具类
package cn.sxau.静态.工具类;

public class ArrayUtil {
    private ArrayUtil(){
        //私有化构造方法,为了防止外界创建他的对象
    }
    //定义静态方法方便调用
    //1.方法一:返回整型数组的内容,以字符串格式输出
    public static String printArr(int [] arr){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("[");
        for (int i = 0; i <arr.length; i++) {
            if(i == arr.length-1){
                stringBuilder.append(arr[i]);
            }else{
                stringBuilder.append(arr[i]).append(",");
            }
        }
        stringBuilder.append("]");
        return stringBuilder.toString();
    }
    //2.方法二:返回平均值,只考虑浮点型
    public static double avgDouble(double [] arr){
       double sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum +arr[i];
        }
       return sum/arr.length;
    }
}
//测试类

package cn.sxau.静态;

import cn.sxau.静态.工具类.ArrayUtil;

public class TestDemo {
    public static void main(String[] args) {
        //测试数据
        int [] arr1 = {1,2,3,4,5};
        System.out.println(ArrayUtil.printArr(arr1));
        double [] arr2 = {12.0,15.2,36.2};
        System.out.println(ArrayUtil.avgDouble(arr2));
    }
}

 

6.static的注意事项

  1. 静态方法只能访问静态变量和静态方法 

  2. 非静态方法可以访问静态方法和静态变量,也可以访问非静态方法和非静态变量

  3. 静态方法中没有this关键字

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值