我写了这个测试代码:
class MyProgram
{
int count = 0;
public static void main(String[] args)
{
System.out.println(count);
}
}
Run Code Online (Sandbox Code Playgroud)
但它给出了以下错误:
Main.java:6: error: non-static variable count cannot be referenced from a static context
System.out.println(count);
^
Run Code Online (Sandbox Code Playgroud)
如何让我的方法识别我的类变量?
我有一个名为的类Media,它有一个名为的方法setLoanItem:
public void setLoanItem(String loan) {
this.onloan = loan;
}
Run Code Online (Sandbox Code Playgroud)
我试图从以GUI下列方式命名的类中调用此方法:
public void loanItem() {
Media.setLoanItem("Yes");
}
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误
非静态方法setLoanItem(java.lang.String)不能从静态上下文引用
我只是试图onloan将Media类中的变量更改为"是" GUI.
我看过其他主题有相同的错误消息,但没有点击!
我正在讨论来自http://www.concretepage.com/java/jdk-8/java-8-unaryoperator-binaryoperator-example的例子.
我发现真正令人困惑的是,当我在形成收集器时错误地将错误的类型放入泛型中时,java编译器给了我一个非常误导性的消息:
无法从静态上下文引用非静态方法
我的错误与现实中的静态vs实例上下文无关:
Map<String, Map<Integer, Integer>> mapOfStudents = list.stream().collect(Collectors.groupingBy(Student::getClassName,
Collectors.toMap(Student::getName, Student::getAge)));
Run Code Online (Sandbox Code Playgroud)
我的错误在于泛型返回类型.当我纠正它并把:
Map<String, Map<String, Integer>> mapOfStudents
Run Code Online (Sandbox Code Playgroud)
一切都恢复正常.
有人可以解释这种令人困惑的错误信息背后的原因吗?我确信这是一个很好的,但我没有抓住它.
编辑:
~$ java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud) 首先是一些代码:
import java.util.*;
//...
class TicTacToe
{
//...
public static void main (String[]arg)
{
Random Random = new Random() ;
toerunner () ; // this leads to a path of
// methods that eventualy gets us to the rest of the code
}
//...
public void CompTurn (int type, boolean debug)
{
//...
boolean done = true ;
int a = 0 ;
while (!done)
{
a = Random.nextInt(10) ;
if (debug) { int i = 0 ; while (i<20) …Run Code Online (Sandbox Code Playgroud) 可能重复:
"无法从静态上下文引用非静态方法"背后的原因是什么?
无法对非静态方法
进行静态引用,无法对非静态字段进行静态引用
我无法理解我的代码有什么问题.
class Two {
public static void main(String[] args) {
int x = 0;
System.out.println("x = " + x);
x = fxn(x);
System.out.println("x = " + x);
}
int fxn(int y) {
y = 5;
return y;
}
}
Run Code Online (Sandbox Code Playgroud)
线程"main"中的异常java.lang.Error:未解决的编译问题:无法对类型为2的非静态方法fxn(int)进行静态引用
我在类中有一个静态函数.
每当我尝试使用非静态数据成员时,我都会遇到编译错误.
非静态字段,方法或属性成员需要对象引用
为什么它表现得那样?
我对Java和编程非常陌生.我写了一个基本程序,用来添加用户输入的2个数字并将它们添加起来并在输出框中显示它们,但是我得到"非静态方法"setText(java.lang.CharSequence)'无法引用从静态上下文",但我不知道静态的东西是什么
private void onClick(View v){
EditText input1 = (EditText) findViewById(R.id.input1);
double calc1 = Double.parseDouble(String.valueOf(input1));
EditText input2 = (EditText) findViewById(R.id.input2);
double calc2 = Double.parseDouble(String.valueOf(input2));
double total = calc1 + calc2;
String result = Double.toString(total);
EditText output1 = (EditText)findViewById(R.id.output);
EditText.setText(result);
}
Run Code Online (Sandbox Code Playgroud)
给出错误的行:
EditText.setText(result);
Run Code Online (Sandbox Code Playgroud)
对不起,如果我非常无能,但我搜索了,我真的不明白如何解决它.谢谢.
我开始用Java编程.
public static void main(String[]args)
Run Code Online (Sandbox Code Playgroud)
一本书说我应该在这种情况下使用静态,但没有明确说明为什么我应该或它意味着什么.
你能澄清一下吗?
我创建了一个2d数组(用作游戏板),在另一个类中我想获取我的数组并能够对其执行操作.
我的数组定义(在课堂上PlayingBoard):
public char[][] myGrid = new char[12][12];
Run Code Online (Sandbox Code Playgroud)
现在我想从我项目中的其他类操作这个数组.我试着打电话给该网格中它的类没有定义
int i, j;
for(i = 0; i < 12; i++) {
for(j = 0; j < 12; j++) {
PlayingBoard.myGrid[i][j] = 'x';
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
myGrid无法从静态上下文引用非静态变量
如何myGrid从第二堂课中参考,编辑和操作?
我的Spring-Boot应用程序中有2个类:
-任务
-Runner
runner类包含我的main方法,我尝试从Tasks类中调用一个方法:
亚军:
@Component
public class Runner {
Tasks tasks;
@Autowired
public void setTasks(Tasks tasks){
this.tasks=tasks;
}
public static void main(String[] args){
//error being caused by below line
tasks.createTaskList();
}
Run Code Online (Sandbox Code Playgroud)
任务类:
@Service
public class Tasks {
public void createTaskList() {
//my code
}
//other methods
}
Run Code Online (Sandbox Code Playgroud)
在我的Runner中,当我尝试在Tasks类中调用createTaskList()方法时,我收到以下错误:
Non static field 'tasks' cannot be referenced from a static context
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?