对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一个才能调用
相关推荐
咩咦1 个月前
C++学习笔记28:静态成员应用:不用循环求1到n的和
c++·学习笔记·类和对象·static·构造函数·oj·静态成员
咩咦1 个月前
C++学习笔记26:static 静态成员
c++·学习笔记·static·静态成员变量·静态成员·静态成员函数
咩咦1 个月前
C++学习笔记07:引用做返回值
c++·学习笔记·引用·static·引用返回
曲幽2 个月前
FastAPI 生产环境静态文件完全指南:从 /favicon.ico 404 到 HSTS 混合内容,一次全根治
python·fastapi·web·static·media·404·hsts·favicon·url_for
xiaobobo33302 个月前
linux内核源码中module_init宏定义的静态全局变量如何实现间接访问?
static·静态全局变量·变量名直接访问·指针间接访问·指针变量遍历内存数组
时光の尘3 个月前
嵌入式面试八股文(二十)·C语言关键字相关知识点速通(static、const、volatile、struct、enum、union)
c语言·const·static·union·volatile·struct·enum
BackCatK Chen5 个月前
第十三章 C 语言中的存储类别、链接与 内存管理
c语言·内存管理·static·extern·存储类别·malloc 动态内存
better_liang5 个月前
每日Java面试场景题知识点之-Java修饰符
java·访问控制·static·abstract·final·修饰符·企业级开发
一个平凡而乐于分享的小比特6 个月前
static 关键字详解
c语言·static
sulikey7 个月前
C++类和对象(下):初始化列表、static、友元、内部类等核心特性详解
c++·static·初始化列表·友元·匿名对象·内部类·编译器优化