无法从静态上下文引用Java非静态方法addInv(int)
我很清楚这个错误,但这是我第一次被难倒。我知道我不能从main方法调用非静态变量,但这很混乱。也许你能帮忙?该错误显示在无法从静态上下文引用Java非静态方法addInv(int),java,static,compiler-errors,Java,Static,Compiler Errors,我很清楚这个错误,但这是我第一次被难倒。我知道我不能从main方法调用非静态变量,但这很混乱。也许你能帮忙?该错误显示在addInv(1)上行 代码: import java.io.*; 导入java.util.*; 导入javax.swing.*; 公共类项目 { 公共静态int攻击、防御; 公共静态数组列表arr; 公共静态字符串名称,desc,typeOf,attackAdd,defenseAdd,canSell,canEat,earnedCoins,canEquip; 字符串统计[];
addInv(1)上代码>行
代码:
import java.io.*;
导入java.util.*;
导入javax.swing.*;
公共类项目
{
公共静态int攻击、防御;
公共静态数组列表arr;
公共静态字符串名称,desc,typeOf,attackAdd,defenseAdd,canSell,canEat,earnedCoins,canEquip;
字符串统计[];
公共静态void main(字符串参数[])
{
addInv(1);
}
公共无效附加项(int e){
字符串iname=getItem(1)[0];
字符串idesc=getItem(1)[1];
int-itypeOf=Integer.parseInt(getItem(1)[2]);
int-iattackAdd=Integer.parseInt(getItem(1)[3]);
int-idefenseAdd=Integer.parseInt(getItem(1)[4]);
boolean=boolean.parseBoolean(getItem(1)[5]);
boolean icanat=boolean.parseBoolean(getItem(1)[6]);
int iArnedCoins=Integer.parseInt(getItem(1)[7]);
攻击=攻击+添加;
防御=防御+idefenseAdd;
System.out.println(“您拾取:+iname”);
协议添加(“dan”);
System.out.println(“说明:“+idesc”);
}
//项目类型
//0-武器
//1-食物
//2-注册项目
//3-头盔
//4-装甲腿
//5-胸甲
//6-屏蔽
公共字符串[]getItem(int e){
String[]stats=新字符串[7];
String name=“Null”;
字符串desc=“无”;
字符串typeOf=“0”;
字符串attackAdd=“0”;
字符串add=“0”;
字符串canSell=“true”;
字符串canEat=“false”;
字符串挣得的硬币=“0”;
如果(e==1){
name=“鹤嘴锄”;
desc=“可用于采矿。”;
typeOf=“2”;
attackAdd=“2”;
挣硬币=“5”;
}
返回新字符串[]{name,desc,typeOf,attackAdd,defenseAdd,canSell,canEat,earnedCoins};
}
}
谢谢。在Java中,static意味着它是一个类变量或方法,这意味着该方法或变量在类的所有实例中共享。这也意味着您不需要实例化类来调用该方法。注意:除非你有一个很好的理由使事物保持静态,否则这通常不是一个好主意,因为它会产生一堆全局变量和函数
解决这个问题的正确方法是在main中创建类的实例,然后调用实例上的方法
注2:如果您有多个线程,静态变量就会出现问题,这意味着您需要跨这些线程同步读写
我会看看这个:
编辑:这是没有静态的代码,似乎可以工作
import java.util.ArrayList;
public class Item
{
public int attack, defense;
public ArrayList<String> arr = new ArrayList<String>();
public String name, desc, typeOf, attackAdd, defenseAdd, canSell,
canEat, earnedCoins, canEquip;
String stats[];
public static void main(String args[])
{
Item anItem = new Item();
anItem.addInv(1);
}
public void addInv(int e)
{
String iname = getItem(1)[0];
String idesc = getItem(1)[1];
// Never read
//int itypeOf = Integer.parseInt(getItem(1)[2]);
int iattackAdd = Integer.parseInt(getItem(1)[3]);
int idefenseAdd = Integer.parseInt(getItem(1)[4]);
// Never read
//boolean icanSell = Boolean.parseBoolean(getItem(1)[5]);
// Never Read
//boolean icanEat = Boolean.parseBoolean(getItem(1)[6]);
// Never Read
//int iearnedCoins = Integer.parseInt(getItem(1)[7]);
attack = attack + iattackAdd;
defense = defense + idefenseAdd;
System.out.println("You picked up: " + iname);
arr.add("dan");
System.out.println("Description: " + idesc);
}
// Types of Items
// 0 - Weapon
// 1 - Food
// 2 - Reg Item
// 3 - Helmet
// 4 - Armor Legs
// 5 - Chest Armor
// 6 - Shield
public String[] getItem(int e)
{
// Never read
// String[] stats = new String[7];
String name = "Null";
String desc = "None";
String typeOf = "0";
String attackAdd = "0";
String defenseAdd = "0";
String canSell = "true";
String canEat = "false";
String earnedCoins = "0";
if (e == 1) {
name = "Pickaxe";
desc = "Can be used to mine with.";
typeOf = "2";
attackAdd = "2";
earnedCoins = "5";
}
return new String[] { name, desc, typeOf, attackAdd, defenseAdd,
canSell, canEat, earnedCoins };
}
}
import java.util.ArrayList;
公共类项目
{
公众攻击、防御;
public ArrayList arr=new ArrayList();
公共字符串名称、描述、类型、攻击添加、防御添加、canSell、,
canEat,赚来的硬币,canEquip;
字符串统计[];
公共静态void main(字符串参数[])
{
Item anItem=新项();
补充条款(1);
}
公共无效附加项(int e)
{
字符串iname=getItem(1)[0];
字符串idesc=getItem(1)[1];
//从不读书
//int-itypeOf=Integer.parseInt(getItem(1)[2]);
int-iattackAdd=Integer.parseInt(getItem(1)[3]);
int-idefenseAdd=Integer.parseInt(getItem(1)[4]);
//从不读书
//boolean=boolean.parseBoolean(getItem(1)[5]);
//从不读书
//boolean icanat=boolean.parseBoolean(getItem(1)[6]);
//从不读书
//int iArnedCoins=Integer.parseInt(getItem(1)[7]);
攻击=攻击+添加;
防御=防御+idefenseAdd;
System.out.println(“您拾取:+iname”);
协议添加(“dan”);
System.out.println(“说明:“+idesc”);
}
//项目类型
//0-武器
//1-食物
//2-注册项目
//3-头盔
//4-装甲腿
//5-胸甲
//6-屏蔽
公共字符串[]getItem(int e)
{
//从不读书
//String[]stats=新字符串[7];
String name=“Null”;
字符串desc=“无”;
字符串typeOf=“0”;
字符串attackAdd=“0”;
字符串add=“0”;
字符串canSell=“true”;
字符串canEat=“false”;
字符串挣得的硬币=“0”;
如果(e==1){
name=“鹤嘴锄”;
desc=“可用于采矿。”;
typeOf=“2”;
attackAdd=“2”;
挣硬币=“5”;
}
返回新字符串[]{name,desc,typeOf,attackAdd,defenseAdd,
canSell、canEat、Earned Coins};
}
}
静态在Java中表示它是一个类变量或方法,这意味着该方法或变量在类的所有实例中共享。这也意味着您不需要实例化类来调用该方法。注意:除非你有一个很好的理由使事物保持静态,否则这通常不是一个好主意,因为它会产生一堆全局变量和函数
解决这个问题的正确方法是在main中创建类的实例,然后调用实例上的方法
注2:如果您有多个线程,静态变量就会出现问题,这意味着您需要跨这些线程同步读写
我会看看这个:
编辑:这是没有静态的代码,似乎可以工作
import java.util.ArrayList;
public class Item
{
public int attack, defense;
public ArrayList<String> arr = new ArrayList<String>();
public String name, desc, typeOf, attackAdd, defenseAdd, canSell,
canEat, earnedCoins, canEquip;
String stats[];
public static void main(String args[])
{
Item anItem = new Item();
anItem.addInv(1);
}
public void addInv(int e)
{
String iname = getItem(1)[0];
String idesc = getItem(1)[1];
// Never read
//int itypeOf = Integer.parseInt(getItem(1)[2]);
int iattackAdd = Integer.parseInt(getItem(1)[3]);
int idefenseAdd = Integer.parseInt(getItem(1)[4]);
// Never read
//boolean icanSell = Boolean.parseBoolean(getItem(1)[5]);
// Never Read
//boolean icanEat = Boolean.parseBoolean(getItem(1)[6]);
// Never Read
//int iearnedCoins = Integer.parseInt(getItem(1)[7]);
attack = attack + iattackAdd;
defense = defense + idefenseAdd;
System.out.println("You picked up: " + iname);
arr.add("dan");
System.out.println("Description: " + idesc);
}
// Types of Items
// 0 - Weapon
// 1 - Food
// 2 - Reg Item
// 3 - Helmet
// 4 - Armor Legs
// 5 - Chest Armor
// 6 - Shield
public String[] getItem(int e)
{
// Never read
// String[] stats = new String[7];
String name = "Null";
String desc = "None";
String typeOf = "0";
String attackAdd = "0";
String defenseAdd = "0";
String canSell = "true";
String canEat = "false";
String earnedCoins = "0";
if (e == 1) {
name = "Pickaxe";
desc = "Can be used to mine with.";
typeOf = "2";
attackAdd = "2";
earnedCoins = "5";
}
return new String[] { name, desc, typeOf, attackAdd, defenseAdd,
canSell, canEat, earnedCoins };
}
}
import java.util.ArrayList;
公共类项目
{
公众攻击、防御;
public ArrayList arr=new ArrayList();
公共字符串名称、描述、类型、攻击添加、防御添加、canSell、,
canEat,赚来的硬币,canEquip;
字符串统计[];
public static void main(String args[])
{
item it = new item();
it.addInv(1);
}
public class Item {
...
public static void main(String args[]) {
addInv(1);
}
public static void addInv(int e) {
...
}
public static String[] getItem(int e) {
...
}
}
public class Item {
...
public static void main(String args[]) {
Item item = new Item();
item.addInv(1);
}
}
public static void addInt(int e)