对static新的认识

学习java时,我首先声明了一个统一响应结果的实体类:

复制代码
public Result success(Object object){
        Result result = new Result();
        result.code=1;
        result.msg="success";
        result.data=object;
        return result;
    }

然后调用了它:

复制代码
public Result list(){
        System.out.println("查询全部的部门数据");
        List<Dept> deptList = DeptService.findAll();
        return Result.success(deptList);
    }

结果程序爆红:

复制代码
无法从 static 上下文引用非 static 方法 'success(java.lang.Object)'

查询得知原来是因为没使用静态方法

那什么是静态方法什么又是非静态方法?

非静态方法:需要通过类的实例来调用

声明 public Result success(Object object)后,调用它时需要先声明一个实体类:

复制代码
Result result = new Result();
result.success(deptList);

静态方法:可以直接通过类名调用,无需创建实例

而声明public static Result success(Object object)后则可直接调用:

复制代码
  Result.success(deptList);

如此看来static还是很神奇的,我不禁开始联想它的含义,static直译过来就是静态,那它是不是就是静止不动的意思呢?

实际上static有固定不变的含义。最开始static出现在C语言中:被它修饰的字段具有存储固定性,即静态变量在内存中的位置是固定的,这意味着

复制代码
它只有一份内存拷贝 
        → 所有实例共享这一份拷贝 
            → 属于类本身而不是实例
                → "类级别"的概念

这就与实例级别区分开啦:

  • 有static修饰的就是类级别,比如Student,不用先声明,可以直接调用
  • 而没有static修饰的也就是非静态类,例如student,需要先new一个才能调用
相关推荐
Suresoft China1 个月前
软件测试|STATIC 代码静态验证工具 C/C++ 工具链设置指南
c++·单元测试·静态测试·测试覆盖率·static·代码覆盖率·工具链设置
自动驾驶小卡8 个月前
C++ 静态变量static的使用方法
c++·static
SunkingYang9 个月前
C/C++中,const、static关键字有什么作用,如何定义、初始化,什么情形下需要用到这两关键字?
c语言·c++·const·static·初始化·申明·定义
EleganceJiaBao10 个月前
【C语言】结构体模块化编程
c语言·c++·模块化·static·结构体·struct·耦合
霸王•吕布1 年前
游戏引擎中Static,Kinematic,Dynamic三种刚体属性
static·dynamic·刚体属性·kinematic
怀九日1 年前
C++(学习)2024.9.20
开发语言·c++·学习·const·static·重载
Trouvaille ~1 年前
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
c++·类型转换·类和对象·面向对象编程·static·初始化列表·开发者指南
极客代码1 年前
[大师C语言(第四十四篇)]C语言static深入剖析
c语言·开发语言·关键字·static
EleganceJiaBao1 年前
【C语言】static 关键字
c语言·关键字·语法·static·类型