前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中的 static

Java中的 static

作者头像
头发还在
发布2023-10-16 11:00:16
1340
发布2023-10-16 11:00:16
举报
文章被收录于专栏:桃花源桃花源

1 static 静态变量

1.1 静态变量的使用

static变量也称作静态变量,也叫做类变量

静态变量被所有的对象所共享,在内存中只有一个副本

当且仅当在类初次加载时会被初始化

静态变量属于类

通过类名就可以直接调用静态变量

也可以通过对象名.静态变量名调用

static 变量

代码语言:javascript
复制
public class Student{
    private String name;
    private static String schoolName;
    private static int count;
    public Student(String name){
        this.name = name;
        count++;
    }
    public void showStuInfo(){
        System.out.println("学生的姓名是" + this.name + ",学校的名字是" + Student.schoolName);
    }
    
    public static void main(String[] args){
        Student.schoolName = "实验中学";
        Student s1 = new Student("张三");
        Student s2 = new Student("李四");
        Student s3 = new Student("王五");
        
        s1.showStuInfo();
        s2.showStuInfo();
        s3.showStuInfo();
        
        System.out.println("学生的数量是:" + Student.count);
        System.out.println("学生的数量是:" + s1.count);
    }
}

1.2 实例变量和静态变量区别

  • 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量;

实例变量属于该类的对象,必须产生该类的对象,才能调用实例变量。

  • 静态变量随着类的加载,存在于方法区中;

实例变量随着对象的建立,存在于堆内存中。

  • 静态变量在程序开始时创建,在程序结束时销毁;

实例变量在对象创建时创建,在对象被销毁时销毁。

2 静态方法

static修饰的方法,叫静态方法,也叫做类方法

静态方法中,不能直接访问非静态成员变量和非静态成员方法

静态方法中,不能使用 this 关键字

通过类名可以直接调用静态方法

也可以通过对象名.静态方法名调用

静态方法和静态方法访问

代码语言:javascript
复制
public class Student{
    private String name;
    private int age;
    private int studentId;
    private static String classRoom;
    public static void showClassRoom(){
        //静态方法中不能使用this关键字
        System.out.println("教室3301");
    }
    public static void main(String[] args){
        Student.showClassRoom();
    }
}

3 静态块

3.1 静态块的使用

静态代码块在类加载时执行,并且只执行一次

静态代码块中不能有this关键字

静态块可以有多个,按照顺序执行

代码语言:javascript
复制
public class Emp{
    static{
        System.out.println("欢迎");
    }
    static{
        System.out.println("再次光临");
    }
}

3.2 静态块、匿名构造块、构造函数

执行顺序

代码语言:javascript
复制
public class Son{
    static{
        System.out.println("静态块1");
    }
    
    private String name;

    public Son(String name){
        this.name = name;
        System.out.println("构造方法");
    }
        
    {
        System.out.println("匿名构造块");
    }
    static{
        System.out.println("静态块3");
    }
    
    public static void main(String[] args){
        Son s1 = new Son("张三");
        Son s2 = new Son("李四");
        Son s3 = new Son("王五");
    }
}

输出如下:

静态块1 静态块3 匿名构造块 构造方法 匿名构造块 构造方法 匿名构造块 构造方法

执行的顺序为:静态块 --> 匿名块 --> 构造方法

4 静态引入

如果我们需要频繁引用某一个类下的方法,比如 ​​java.lang.Math​​​ 类下相关的数据计算类,或者是用于进行单元测试的 ​​org.junit.Assert​​ 类下各种用于断言的方法,就可以采用静态引用,从而可以省去对前边类名的重复书写。

代码语言:javascript
复制
import static java.lang.Math.random;
import static org.junit.Assert.assertTrue;

public class test {
    public static void main(String[] args) {
        double random = random(); //Math中的方法
        System.out.println(random);
        assertTrue(random > 0.3); //Assert中的方法
        
        new test().normalMethod();
    }

    //静态引入的方法,在普通方法中同样使用
    public void normalMethod(){
        double random = random();
        System.out.println(random);
        assertTrue(random > 0.7);
    }
}

通过静态引入的方法,在普通方法和静态方法中,都可以使用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 static 静态变量
    • 1.1 静态变量的使用
      • 1.2 实例变量和静态变量区别
      • 2 静态方法
      • 3 静态块
        • 3.1 静态块的使用
          • 3.2 静态块、匿名构造块、构造函数
          • 4 静态引入
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档