我试图在我的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有关吗?我以前从未使用过它.
谢谢.
我知道c中的关键字有两种用法:
修改变量
修改全局变量
此用法限制了全局变量范围的范围,从定义的点到文件末尾.
修改局部变量
这种用法限制了定义函数中局部变量的范围,但也保留在内存的静态区域
修改功能
这意味着只能调用它定义的文件中的函数.
而在c ++中,除了c中的用法外,static还用于修改类的数据成员和函数成员.此用法限制属于该类的成员而不是该类的对象.
我想知道static在c/c ++ 中有没有其他用法?
为什么即使你已经声明了一个私有的静态最终变量,一个颜色 - 默认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的书.它给出了一个这样的例子:
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,然后静态块执行,...,然后初始化b为a*4或12.
我想知道这里的线路是如何实现的.它如何能第一,从顶部开始的static int a = 3以才跳过static int b来static {..},只再跳回静态INT B' 它如何知道这种依赖?
由于内部静态方法我们:
- 无法对非静态字段进行静态引用
但根据这里的答案:静态方法中的局部变量是否也是静态的?
- 静态方法中的局部变量只是静态方法中的局部变量.它们不是静止的,它们在任何方面都不是特别的.
我的演绎(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中创建静态类数组?例如:
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) 如何向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是要添加到列表中的未知数量的整数
在下面的代码(我的源代码的简化版本)中,在声明时lv初始化为1右的变量,getline在for循环内部调用时神秘地变为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) 我有我的单例类,它返回指向实例的本地静态的指针以确保线程安全.现在,如果我没有将析构函数声明为私有,用户可以将其删除吗?
对于前者
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) 我正在尝试使用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)