学习笔记 · Java中的static关键字


作者:氯磷Rolin

最近在复习Java的时候发现以前忽略了一个很重要的知识点 static 关键字,复习的时候理清了 static 的用法之后,对Java又有了新的理解,故此记录

static 关键字

  • static的意义:
    static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法!
    static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。

static 关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况 下,去调用方法

静态方法

  • 静态方法是不在对象上执行的方法
    使用 static 修饰方法,可以使得该类在不需要被构造的前提下使用该方法,如Math.pow(x,a)用以计算幂运算,它并不使用任何Math对象
  • 静态方法只能访问静态属性
    使用 static 修饰的方法,在其内部只能访问使用 static 修饰的属性(字段),不能够访问非静态的实例字段
  • 使用static修饰方法的情况:
    1. 方法不需要访问对象状态,因为他需要的所有参数都通过显式参数提供
    2. 方法只需要访问类的静态字段
  • 示例:
    1. 构造一个含有静态方法的类:
public class function {    
    public static int total;    
    public static void initNum(){        
        total = 0;    
    }   
    public static void addNum(int num){        
        total += num;    
    }    
    public static int getTotal(){        
        return total;    
    }
}
2.在另外一个类中可以不需要构建函数即可调用static方法
public class CodeTest {    
    public static void main(String[] args) {        
        function.initNum();        
        function.addNum(30);        
        function.addNum(10);        
        System.out.println(function.getTotal());    
    }
}
3. 控制台输出结果:`40`

静态属性

  • 静态属性由static关键字进行修饰
  • 静态属性能够优先加载
  • 静态属性在类层面进行声明,而不存在于任何方法体中
  • 静态属性是该类所共有的,不属于某一个具体的对象
  • 静态属性只占有一份内存,不随对象的增加而增加
  • 含有static关键字的属性称之为静态属性,反之称之为实例属性

一. 作用
由于静态属性在类创建时就已经存在,有且只有一份内存地址,所以使用该类所构造的所有对象都可以共同访问这个静态属性

  • 对象之间可以共享数据变量
  • 方便之间通过类名访问变量

二. 示例

  • 在静态方法的代码中,实际上我们无需声明一个getTotal方法也可以直接读取total里的值
  • 新建一个含有静态属性和构造方法的类:
public class function {    
    public static int total;    
    public String name;    
    public static void initNum(){        
        total = 0;    
    }   
    public function(String name){        
        this.name = name;        
        total += 1;    
    }
}
  • 在另外一个类中进行调用
public class CodeTest {    
    public static void main(String[] args) {        
        function.initNum();        
        new function("zhangsan");        
        new function("lisi");        
        new function("wangwu");        
        System.out.println(function.total);    
    }
}
  • 控制台输出的值为:3

    静态代码块

    静态代码块是用static修饰的一段代码块,其格式约为 static{ // 执行语句 }
    在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

  • 静态代码块的特点:
    1. 当第一次用到本类时,静态代码块执行唯一的一次
    2. 静态内容总是优先于非静态,优先于main方法和构造方法的执行
    3. 不存在于任何方法体内
    4. 只能访问 static 变量
  • 示例:
    • 创建一个含有static代码块的类
public class function {    
    public static int total;    
    public String name;    
    static {        
        total = 0; //在静态代码块中执行初始化操作        
        System.out.println("这里是静态代码块的内容");    
    }    
    public function(String name){        
        this.name = name;        
        total += 1;        
        System.out.println("这里是构造方法里的内容");    
    }
}
  • 在其他的类中进行调用,并观察控制台的输出
public class CodeTest {    
    public static void main(String[] args) {        
        new function("zhangsan");        
        new function("lisi");        
        System.out.println(function.total);    
    }
}
  • 控制台输出最后结果:

这里是静态代码块的内容
这里是构造方法里的内容
这里是构造方法里的内容
2

静态常量

常量是一种特殊的静态属性,它的值不可修改,且无论调用多少次都只占有一个内存地址

  • 常量的声明:public static final 数据类型 常量名称 = 常量值

  • 静态常量可以在任何导入该包的地方进行调用,且不会占用多份内存

  • 常用于存放重复使用的数据,提高代码的重用性

  • 示例:

    1. 创建一个用于存放常量的类:
    public class constant {    
        public static final int num = 10086;    
        public static final String name = "zhangsan";
    }
    
    1. 可以在任意类中进行调用:
    public class CodeTest {   
        public static void main(String[] args) {        
            System.out.println(constant.name);        
            System.out.println(constant.num);   
      }
    }
    

    3.控制台输出:

    zhangsan
    10086

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值