Java静态方法:无法从静态上下文中引入非静态方法

来源:互联网 发布:jersey框架 get json 编辑:程序博客网 时间:2024/06/08 07:41
import java.util.Scanner;public class xuefenjidian{    double kcxfjd(double cj,int xuefen)    {        double kcjd;        double kcxfjd;        if(cj>=60)            kcjd = (cj - 50)/10;        else             kcjd = 0;        kcxfjd = kcjd * xuefen;        return kcxfjd;    }    public static void main(String[]args)    {         double cj,pscj,zcj,maxcj,mincj,hglv;         int num;         Scanner sc = new Scanner(System.in);         double jd,totaljd;         int xuefen = 0;        num=0;         zcj=0;         maxcj=0;         mincj=0; totaljd = 0;         for(int i=0;i<10;i++)         {            System.out.println("请输入成绩:" +(i+1));            cj = sc.nextDouble();            System.out.println("请输入学分:" +(i+1));            cj = sc.nextInt();            if( cj >=60 )                num ++;            zcj =zcj + cj;            if( cj > maxcj)                maxcj=cj;            else if(cj < mincj)                mincj = cj;               jd =kcxfjd(cj , xuefen);            totaljd +=jd;            System.out.println("课程学分绩点:"+jd);         }     pscj = zcj / 10;     hglv = (double)num / 10;     System.out.println("总成绩" +zcj + "平均成绩"+pscj +"最高成绩"+maxcj +"最低成绩"+mincj);     System.out.println("合格门数"+num +"合格率"+hglv);     System.out.println("总绩点"+totaljd);    }}

开始运行时,显示无法在“无法从静态上下文中引入非静态方法”,一脸无语,最后查询了一下,一位大佬这样说:
在静态的方法中不能直接调用非静态的方法或属性。因为一个类的静态方法在这个Class文件被加载之后,就可以由这个Class类型对象来调用,而非静态的方法需要一个实例对象,有可能还未被创建,所以为了避免在静态方法中调用一个还不存在的实例对象的非静态方法,编译期就会直接阻止这个行为。
处理方法如下:

public static double kcxfjd(double cj,int xuefen)    {        double kcjd;        double kcxfjd;        if(cj>=60)            kcjd = (cj - 50)/10;        else             kcjd = 0;        kcxfjd = kcjd * xuefen;        return kcxfjd;

这里引用大佬的一段代码:

 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;          else              return f(x-1)+f(x-2);      }  }  

解决的方法有两种,第一种是将被调用的方法设置成静态方法;第二种是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;          else              return f(x-1)+f(x-2);      }  }  

第二种解决方法:

 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;          else              return f(x-1)+f(x-2);      }  }  
0 0
原创粉丝点击