如上是经典的Fobonacci递归算法:

public class Fibonacci
{public static void main(String []args){int x = f(6);System.out.println(x);}public int f(int x){if(x==1||x==2)return 1;elsereturn f(x-1)+f(x-2);}
}

编译后出错,无法在静态上下文中引用非静态。

原来,在静态的方法中不能直接调用非静态的方法或属性。因为一个类的静态方法在这个Class文件被加载之后,就可以由这个Class类型对象来调用,而非静态的方法需要一个实例对象,有可能还未被创建,所以为了避免在静态方法中调用一个还不存在的实例对象的非静态方法,编译期就会直接阻止这个行为。

解决的方法有两种,第一种是将被调用的方法设置成静态方法;第二种是new本类,然后通过实例来调用。

第一种:

public class Fibonacci
{public static void main(String []args){int x = f(6);System.out.println(x);}public static int f(int x){if(x==1||x==2)return 1;elsereturn f(x-1)+f(x-2);}
}

第二种:

public class Fibonacci
{public static void main(String []args){Fibonacci f = new Fibonacci();int x = f.f(6);System.out.println(x);}public int f(int x){if(x==1||x==2)return 1;elsereturn f(x-1)+f(x-2);}
}

静态方法:无法在静态上下文中引用非静态相关推荐

  1. JAVA错误:无法从静态上下文中引用非静态变量 this

    新学习:构造方法的重载,给成员变量赋值 错误代码: class Student {public static void main(String[] args) {Person p = new Pers ...

  2. java无法从静态上下文_java - “非静态方法无法从静态上下文中引用”背后的原因是什么?...

    java - "非静态方法无法从静态上下文中引用"背后的原因是什么? 这个问题在这里已有答案: 无法从静态上下文引用非静态变量                            ...

  3. 浅谈 JAVA中静态初始化块和非静态初始化块的区别

    众所周知在JAVA编程语言中有两种初始化块: 静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别 静态初始化块 定义: static{} 执 ...

  4. java 代码块:静态代码块和非静态代码块

    main方法是程序的入口,加入没有main方法程序无法启动,但是main方法不是第一个执行的. 我认为:在这个类加载时,编译器会找到main方法,从这里开始运行,但是当你把这个类加载的时候,静态代码块 ...

  5. 静态代码块和非静态代码块的区别

    摘自原文 小结: 1.静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块. 顺序: 静态代码块-->非静态代码块-->类构造方法. ...

  6. 静态代码块、非静态代码块、构造函数执行顺序

    静态代码块.非静态代码块.构造函数执行顺序 /*** 类的实例化顺序,静态代码块.非静态代码块.构造函数.* @author MING*/ class Person {static String na ...

  7. shaderTextView 闪动文字,static{}(静态代码块)与{}(非静态代码块)的异同点

    目录 shaderTextView  闪动文字 static{}(静态代码块)与{}(非静态代码块)的异同点 shaderTextView  闪动文字 package com.example.zhan ...

  8. java中代码块之静态代码块和非静态代码块

    一.代码块: 语法:使用{}包裹的,可以在{}中写代码. 修饰符:static 或者不修饰. static修饰的为静态代码代码块. 格式: //静态代码块,随着类的加载児执行static{System ...

  9. 静态代码块、非静态代码块、构造函数三者执行顺序

    主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序. 如有错误,欢迎指出. 首先: 静态成员变量和静态代码块的优先级是一样的,先定义的先执行. 在创建一个对象的时候会执行非静态代码块和构造函 ...

最新文章

  1. Asp.Net页面执行流程分析
  2. SSIM与PSNR的计算方式
  3. python PIL图像处理
  4. Spring Cloud与微服务学习总结(10)——Spring Cloud 常见优化项的总结
  5. 互联网晚报 | 1月21日 星期五 | 中兴手机官宣吴京为新代言人;58同城旗下“赶集网”更名“赶集直招”;罗永浩年后回归科技界...
  6. 基于stm32和富斯遥控器的SBUS波形分析和通讯实现
  7. 路由器linux校园网,还在为无法突破校园网的限制而烦恼?动动手,借助路由器完成锐捷认证...
  8. 硬盘盘符拒绝访问-问题和解决办法
  9. 在vue中使用marked解析MARKDOWN,生成目录,运行代码示例
  10. 古代奥运会创始人是谁?
  11. 不知道文字识别工具有哪些?来看看这几个好用的软件
  12. 90%的 CTO 都做不好绩效管理?看看这个十年 IT 老兵都有什么绝活?
  13. Overload resolution ambiguity. All these functions match. kotlin 开发问题日常记录
  14. jbpm创建流程图_JBPM流程图不显示
  15. 理解sklearn.processing.scale中使用有偏总体标准差
  16. 从零开始用Python搭建Socket服务器(初篇)
  17. 【数据结构】查找与排序
  18. 虚拟时钟(Virtual clock)
  19. 【网络安全】beef-xss实操以及xss修复方案
  20. python与建筑地铁结合_Python基础(3)——北京市地铁买票问题(思维练习题)...

热门文章

  1. VMware下载安装教程(超详细)
  2. 【Akka】Akka Actor生命周期
  3. postgresql导入导出大文件 copy命令
  4. 工业设计最常用的表面处理方法-丝印
  5. 120 个 常用excel模板 推荐
  6. mysql逻辑结构博客_mysql梳理2
  7. 4 个现在就该去装的 Firefox 扩展
  8. loadsh.js常用方法讲解
  9. css溢出部分用省略号代替
  10. 离散数学-ch1-Introduction