找回密码
 立即注册
首页 业界区 业界 对static新的认识

对static新的认识

赫连如冰 昨天 20:05
学习java时,我首先声明了一个统一响应结果的实体类:
  1. public Result success(Object object){
  2.         Result result = new Result();
  3.         result.code=1;
  4.         result.msg="success";
  5.         result.data=object;
  6.         return result;
  7.     }
复制代码
然后调用了它:
  1. public Result list(){
  2.         System.out.println("查询全部的部门数据");
  3.         List<Dept> deptList = DeptService.findAll();
  4.         return Result.success(deptList);
  5.     }
复制代码
结果程序爆红:
  1. 无法从 static 上下文引用非 static 方法 'success(java.lang.Object)'
复制代码
查询得知原来是因为没使用静态方法
那什么是静态方法什么又是非静态方法?
非静态方法:需要通过类的实例来调用

声明 public Result success(Object object)后,调用它时需要先声明一个实体类:
  1. Result result = new Result();
  2. result.success(deptList);
复制代码
静态方法:可以直接通过类名调用,无需创建实例

而声明public static Result success(Object object)后则可直接调用:
  1.   Result.success(deptList);
复制代码
如此看来static还是很神奇的,我不禁开始联想它的含义,static直译过来就是静态,那它是不是就是静止不动的意思呢?
实际上static有固定不变的含义。最开始static出现在C语言中:被它修饰的字段具有存储固定性,即静态变量在内存中的位置是固定的,这意味着
  1. 它只有一份内存拷贝
  2.         → 所有实例共享这一份拷贝
  3.             → 属于类本身而不是实例
  4.                 → "类级别"的概念
复制代码
这就与实例级别区分开啦:

  • 有static修饰的就是类级别,比如Student,不用先声明,可以直接调用
  • 而没有static修饰的也就是非静态类,例如student,需要先new一个才能调用

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册