标签: static

无法从静态上下文引用非静态变量

我试图在我的main createFile方法中从OpenFile类中调用我的方法,但我不断收到错误,说我不能从静态上下文中调用非静态变量.

我确实尝试OpenFile of = new OpenFile();在我的main方法中调用,但是这没有用,所以我现在声明OpenFile我的main方法上面工作正常,但是每次我尝试使用OpenFiles方法之一时我都会得到相同的错误.

我尝试过使用一些东西,static但这只会导致我的IDE显示错误的sym类型错误,我认为这是由引起其他错误的任何原因引起的.

这是createFile来自OpenFile:

public class OpenFile {

    private Formatter file;

    public void createFile() throws FileNotFoundException{

        try{
            file = new Formatter("test.txt");
        } catch(Exception e) {
            System.out.println("Error creating file.");
    }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的主要方法:

OpenFile of = new OpenFile();

public static void main(String[] args) {
    // TODO code application logic here

    of.createFile();
    intro();
    createAndShowRibbon();
    createAndShowNormalUI();

}
Run Code Online (Sandbox Code Playgroud)

它与Formatter有关吗?我以前从未使用过它.

谢谢.

java static non-static

-1
推荐指数
1
解决办法
2572
查看次数

c和c ++之间关键字static的区别是什么?

我知道c中的关键字有两种用法:

  • 修改变量

    • 修改全局变量

      此用法限制了全局变量范围的范围,从定义的点到文件末尾.

    • 修改局部变量

      这种用法限制了定义函数中局部变量的范围,但也保留在内存的静态区域

  • 修改功能

    这意味着只能调用它定义的文件中的函数.

而在c ++中,除了c中的用法外,static还用于修改类的数据成员和函数成员.此用法限制属于该类的成员而不是该类的对象.

我想知道static在c/c ++ 中有没有其他用法?

c c++ static

-1
推荐指数
1
解决办法
272
查看次数

超类型中的静态最终结果

为什么即使你已经声明了一个私有的静态最终变量,一个颜色 - 默认C,让我们说 - 然后你仍然不能this.defaultC在超级构造函数中使用(即你只能使用super(defaultC)而不是super(this.defaultC),即使它只是简单的等价defaultC.

我只是试图将Tile类扩展为Wall类,而Wall类我存储了所有墙的所有必要private static final变量(例如它们的宽度和高度,另一个int和默认颜色),而Tile类已经有了一些变量(但它们protected不是private).我不希望Field hides another field弹出警告(因为Tile.java和Wall.java对于许多变量都有相同的名称),所以我使用this.了我的私有静态最终变量,并且有很多错误.

这并不是特别令人不安(因为我只是有一些警告),但我只是想知道为什么.我猜测编译器根本不喜欢它,因为你不能this在超类型之前引用,但仍然完全相同.是否还没有添加这样的功能,忽略了这样的事情,还是有其他原因我看不到你不能使用super(this.PRIVATE_STATIC_FINAL_VARIABLE);

java static final super supertype

-1
推荐指数
1
解决办法
105
查看次数

声明/调用静态变量和方法的顺序

我正在读一本关于Java的书.它给出了一个这样的例子:

class UseStatic {
    static int a = 3;
    static int b;

    // ... some more lines  

    static {
        b = 4 * a;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后它解释了这个:

一旦UseStatic类被加载,所有的static 语句运行.首先,a设置为3,然后静态块执行,...,然后初始化ba*4或12.

我想知道这里的线路是如何实现的.它如何能第一,从顶部开始的static int a = 3以才跳过static int bstatic {..},只再跳回静态INT B' 它如何知道这种依赖?

java static runtime

-1
推荐指数
1
解决办法
34
查看次数

Java - 静态方法中的局部变量

由于内部静态方法我们:

  1. 无法对非静态字段进行静态引用
  1. 那么静态方法中的局部变量也应该静态的.

但根据这里的答案:静态方法中的局部变量是否也是静态的?

  1. 静态方法中的局部变量只是静态方法中的局部变量.它们不是静止的,它们在任何方面都不是特别的.

我的演绎(2)与Ernests答案(3)中的陈述之间存在冲突,我无法解释.

有人可以解释我的演绎是否错误,为什么会这样?
如果我没有错,那么问题的正确答案是"静态方法中的局部变量是否也是静态的"?

编辑:不会混淆局部变量成员变量(字段)静态是什么.

我只是在想:
如果 "static methods cannot make reference to non static field" AND "fields are variables" THEN "variables in static methods are also static"
使得在静态方法的变量本地&&静

谢谢.

java static

-1
推荐指数
1
解决办法
985
查看次数

用Java创建一个类数组

是否可以在Java中创建静态类数组?例如:

SceneObject[] scenes = {Loading.class, Menu.class};
// Loading and Menu extend SceneObject
Run Code Online (Sandbox Code Playgroud)

我们需要通过数组调用静态方法,而不是实例化它们.

编辑:

以下是我们正在努力实现的目标.我们也可以使用很多开关,但在每种方法中将每个对象添加到每个开关听起来都是多余的.

package net.bitworm.gameengine;

import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;

import net.bitworm.scenes.*;

public class SceneController {

public enum Scene{
    LOADING_SCENE,
    MENU,
    SCENE_1
}

public static SceneObject[] scenes = {new Loading(), new Menu()};

public volatile static Scene currentScene = Scene.LOADING_SCENE;

public static void setScene(Scene newScene){
    currentScene = newScene;
    System.out.println("Switched to " + currentScene.toString());
}

public static void update(GameContainer container, int delta){
    scenes[currentScene.ordinal()].update(container, delta);
}
public static void render(GameContainer container, Graphics …
Run Code Online (Sandbox Code Playgroud)

java arrays static class

-1
推荐指数
1
解决办法
1万
查看次数

将整数添加到数组列表,保留输入顺序

如何向ArrayList添加数字,但是保持它们的添加顺序?

例)Arraylist包含:[5,3,9] ...我想添加[1,2,3]来修改列表= [1,2,3,5,3,9]

Ex2)Arraylist包含:[] ...我想添加[1,2,3]来修改列表= [1,2,3]

我将一直使用一个静态arraylist

用户将通过输入以下命令从命令行输入命令:"a X1 X2 X3 ... Xn"其中'a'是命令,X1-Xn是要添加到列表中的未知数量的整数

java static arraylist

-1
推荐指数
1
解决办法
1130
查看次数

C:变量变为0,只需在for循环中调用getline

在下面的代码(我的源代码的简化版本)中,在声明时lv初始化为1右的变量,getlinefor循环内部调用时神秘地变为0 .printf如果您输入任何内容"cl",或者通过gdb,您可能会注意到它.变量在getline调用后立即更改值.最奇怪的是,当"cl"提示输入时,你可以通过gdb看到之后lv转向的值,然后在语句中正确设置,然后保存用于后续循环,无论你输入什么.0getline3if

此外,如果您将声明更改为static int lv = 1;然后预期的行为会出现(lv保持到1"手动"更改).

有人可以告诉我到底是怎么回事?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ( void ) {
  char* line=NULL;
  int len;
  int lv = 1;
  for(;;) { 
    printf("Level: %d\n", lv);

    getline(&line, (size_t*)&len, stdin);

    if (line[strlen(line) - 1] == '\n') {
      line[strlen(line) - 1] = '\0';
    }
    if (strcmp(line, "cl")==0) …
Run Code Online (Sandbox Code Playgroud)

c variables static for-loop getline

-1
推荐指数
1
解决办法
74
查看次数

你能删除本地静态变量吗?

我有我的单例类,它返回指向实例的本地静态的指针以确保线程安全.现在,如果我没有将析构函数声明为私有,用户可以将其删除吗?

对于前者

class Singleton
{
    Singleton();
    public:
    static Singleton *getInstance();

};

Singleton *Singleton::getInstance()
{
    static Singleton inst;
    return &inst;
}

// in user code
void foo()
{
    Singleton *inst = Singleton::getInstance();
    // do its stuff

    //accidentally delete instance here?! 
    // Should I have private destructor?
    delete inst;
}
Run Code Online (Sandbox Code Playgroud)

c++ singleton static

-1
推荐指数
1
解决办法
1056
查看次数

CppUnit:为什么静态局部变量保持其值?

我正在尝试使用CppUnit来测试一个只在第一次调用时才执行某些代码的方法.

class CElementParseInputTests: public CppUnit::TestFixture {
private:
    CElement* element;
public:

    void setUp() {
        element = new CElement();
    }

    void tearDown() {
        delete element;
    }

    void test1() {
        unsigned int parsePosition = 0;
        CPPUNIT_ASSERT_EQUAL(false, element->parseInput("fäil", parsePosition));
    }

    void test2() {
        unsigned int parsePosition = 0;
        CPPUNIT_ASSERT_EQUAL(false, element->parseInput("pass", parsePosition));
    }
Run Code Online (Sandbox Code Playgroud)

我想测试的递归方法:

bool CElement::parseInput(const std::string& input, unsigned int& parsePosition) {
    static bool checkedForNonASCII = false;
    if(!checkedForNonASCII) {
        std::cout << "this should be printed once for every test case" << std::endl;
        [...]
        checkedForNonASCII = …
Run Code Online (Sandbox Code Playgroud)

c++ oop static cppunit initialization

-1
推荐指数
1
解决办法
128
查看次数