2 skill0516 skill0516 于 2016.04.21 22:00 提问

java初学中,遭遇无法从静态上下文中引用非静态 变量 this

import java.util.*;

public class ComicBooks {

public ComicBooks(){

}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    HashMap quality = new HashMap();
    float price1 = 3.00F;
    quality.put("mint",price1);
    float price2 = 2.00F;
    quality.put("near mint",price2);
    float price3 = 1.50F;
    quality.put("very fine",price3);
    float price4 = 1.00F;
    quality.put("fine",price4);
    float price5 = 0.50F;
    quality.put("good",price5);
    float price6 = 0.25F;
    quality.put("poor",price6);

    Comic[] comix = new Comic[3];       
    comix[0] = new Comic("AMAZING sPIDER-MAN","1a","very fine",5_000.00F);        
    comix[0].setPrice((Float)quality.get(comix[0].condition));
    comix[1] = new Comic("Incredible Hulk","181","near mint",240.00F);        
    comix[1].setPrice((Float)quality.get(comix[1].condition));
    comix[2] = new Comic("Cerebus","1A","good ",144.00F);        
    comix[2].setPrice((Float)quality.get(comix[0].condition));

    for (Comic comix1 : comix) {
        System.out.println("Title:" + comix1.title);
        System.out.println("Issue:" + comix1.issueNumber);
        System.out.println("Condition" + comix1.condition);
        System.out.println("Price: $ " + comix1.price + "\n");
    }     

}

class Comic{
    String title;
    String issueNumber;
    String condition;
    float basePrice;
    float price;

    Comic(String inTitle,String inIssueNumber,String inCondition,
            float inBasePrice){
        title = inTitle;
        issueNumber = inIssueNumber;
        condition = inCondition;
        basePrice = inBasePrice;
    }

    void setPrice(float factor){
        price = basePrice*factor;
    }
}

}

在41行遇到无法从静态上下文中引用非静态 变量 this

12个回答

qq_31863057
qq_31863057   2016.04.22 09:04

this 是不能在静态方法中使用的

caozhy
caozhy   Ds   Rxr 2016.04.21 22:05

Comic类里面需要使用的字段、函数都要加上public

skill0516
skill0516   2016.04.21 22:09

我知道了,我吧Comic类放到了Comicbooks类中间,结果就无法访问。

类似原因百度那个http://zhidao.baidu.com/link?url=DCSzQJAeSjzOFDcaGqXi-qTP-4soeenw2Ek3v-aMn2P7Qfdg5crZUavZb1IY13VPP2zyvQhrBO8FBAWGUtJvw_

问题在于你把 class Clerk 放到了 public class fengzhuang 内部

Clerk 成了fengzhuang 的非静态内部类,属于fengzhuang 的一个成员

在静态方法main中不能访问非静态的成员,也就不能直接new Clerk()

只能通过外部类的对象访问。

把Clerk clerk1=new Clerk("职员一",25,2012.12f);改成:

Test.Clerk clerk1=new Test().new Clerk("职员一",25,2012.12f);

或者把class Clerk放到fengzhuang 类外面就好了。
提问者评价
非常感谢,说得很透。

skill0516
skill0516   2016.04.21 22:08

我知道了,我吧Comic类放到了Comicbooks类中间,结果就无法访问。

类似原因百度那个http://zhidao.baidu.com/link?url=DCSzQJAeSjzOFDcaGqXi-qTP-4soeenw2Ek3v-aMn2P7Qfdg5crZUavZb1IY13VPP2zyvQhrBO8FBAWGUtJvw_

问题在于你把 class Clerk 放到了 public class fengzhuang 内部

Clerk 成了fengzhuang 的非静态内部类,属于fengzhuang 的一个成员

在静态方法main中不能访问非静态的成员,也就不能直接new Clerk()

只能通过外部类的对象访问。

把Clerk clerk1=new Clerk("职员一",25,2012.12f);改成:

Test.Clerk clerk1=new Test().new Clerk("职员一",25,2012.12f);

或者把class Clerk放到fengzhuang 类外面就好了。
提问者评价
非常感谢,说得很透。

qq_28192317
qq_28192317   2016.04.21 22:56

静态方法不可以直接调用静态的方法,如果想调用的话,new这个非静态方法的实例,然后用实例去调方法。

qq_28192317
qq_28192317   2016.04.21 22:57

静态方法不可以直接调用非静态的方法。如果想调用的话,new这个非静态方法的实例,然后用实例去调方法。

lxl403853563
lxl403853563   2016.04.22 10:15

必须同是静态才行,你这样调用,非静态变量不能初始化

lxl403853563
lxl403853563   2016.04.22 10:15

必须同是静态才行,你这样调用,非静态变量不能初始化

lxl403853563
lxl403853563   2016.04.22 10:15

必须同是静态才行,你这样调用,非静态变量不能初始化

CSDNXIAON
CSDNXIAON   2016.04.22 13:21

无法从静态上下文中引用非静态 变量 this
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!