JAVA中的类数组(将其用作结构)

JAVA中的类数组(将其用作结构),java,arrays,Java,Arrays,我有一个关于如何创建类数组的问题。我的背景是嵌入式C,所以Java对我来说有点新 在C语言中,您可以创建一个结构。在java中,我发现这是不可能的,所以我创建了一个类: public class Message { public String Text; public enum Type {warning,caution,advisory,engineering}; public enum Actions {yes,no}; public int priority

我有一个关于如何创建类数组的问题。我的背景是嵌入式C,所以Java对我来说有点新

在C语言中,您可以创建一个结构。在java中,我发现这是不可能的,所以我创建了一个类:

public class Message
{
    public String Text;
    public enum Type {warning,caution,advisory,engineering};
    public enum Actions {yes,no};
    public int priority;

    public Message(String Text,Type nType,Actions nActions,int priority)
    {
         this.Text = Text;
         type = nType;
         actions = nActions;
        this.priority = priority;
    }
    private Type type;
    private Actions actions;

    public String getText() { return Text; }
    public void setText(String Text) { this.Text = Text; }
}
所以我用它作为一个“结构”(在C中)

我想为这个类创建一个数组

我主要做的是:

public class Main extends AppCompatActivity 
{

SurfaceView cameraView;
TextView textView;
CameraSource cameraSource;
final int RequestCameraPermissionID = 1001;

Message[] dbmessage;
dbmessage = new Message[300];
dbmessage[0] = new Message("TEST MESSAGE", Message.Type.warning,Message.Actions.no,1);
}

基本上我应该做什么:(最佳答案)

}


编译器显示了一个错误:“未知类dbmessage”我认为主要是语法错误

你们中有谁能给我点颜色看看,或者朝好的方向踢一脚

请对我耐心,因为Java(甚至编程)不是我的职业,我只是想学习

编辑:多亏了多个成员指出我在方法之外使用了代码。这就是解决方案(显然)。来自MAIN的代码现在被放置在一个方法中,并且工作得非常完美。谢谢你们的耐心和帮助

检查这个类实例数组

<> >我建议您使用<代码> ARAYLISTAB/COD>,这与C++中的代码>向量< /代码>类似。
List<Message> myList = new ArrayList<Message>();
myList.add(new Message("TEST MESSAGE", Message.Type.warning,Message.Actions.no,1));
List myList=new ArrayList();
添加(新消息(“测试消息”,Message.Type.warning,Message.Actions.no,1));

您的问题是在静态上下文中引用非静态变量。您需要做的是以下几点: 创建mainclass的实例, 创建一个符合您需要的非静态空间 从类实例调用该void: 这对我很有用:

class Program
{
    public static void main (String[] args)
    {
        Program p = new Program();
        p.Run();
    }

    public void Run()
    {
        Message[] array = new Message[300];
        array[0] = new Message("TEST MESSAGE", Message.Type.warning,Message.Actions.no,1);
    }
}

如果您从类Main提供给我们的代码是完整的(不可能是完整的,因为缺少导入),那么您将尝试在方法之外编写语句。这在Java语法中是不允许的。正确的代码段应该是:

public class Main extends AppCompatActivity 
{
    SurfaceView cameraView;
    TextView textView;
    CameraSource cameraSource;
    final int RequestCameraPermissionID = 1001;

    // you have to put it into a method. 
    public void myMethod() {
        Message[] dbmessage;
        dbmessage = new Message[300];
        dbmessage[0] = new Message("TEST MESSAGE",  Message.Type.warning,Message.Actions.no,1);
    }
}

我建议您获得关于Java和Android编程的优秀教程/教科书。否则,这将是一次令人沮丧的经历。当然,《Java风格指南》中还有很多章节。

“我认为主要是语法错误?”编译器非常擅长告诉您是否存在语法错误。编译器是怎么说的?未知类dbmessage(在main的第2行)包含您问题中的所有主类。您发布的代码是可编译的。。。。你能更具体地解释一下“这不起作用”的含义吗?编辑你的问题,包括主类的完整代码以及完整的错误消息。它不会回答问题。现在还不清楚真正的问题是什么。这篇文章的第一句话是“我有一个关于如何制作一系列类的问题”。我提供的链接已经回答了这个问题,我只是添加了一些个人建议。他知道如何创建数组,他显示的代码在语法上是正确的。我们想找出他真正的问题是什么。如果他只是设法提供有用的信息。与类是静态的或非静态的无关。我指的是实际的数组。您无法访问它,因为main是static。正如您所看到的,数组是
main
中的局部变量。我不关心您的代码。你不是问这个问题的人。他收到了一条错误消息,因为他在静态上下文中引用了一个非静态变量。你是100%正确的!我非常关注这个类,认为错误就在这里,所以我把代码放在了一个方法之外!的确,这是一个愚蠢的错误,但非常感谢您指出这一点!
public class Main extends AppCompatActivity 
{
    SurfaceView cameraView;
    TextView textView;
    CameraSource cameraSource;
    final int RequestCameraPermissionID = 1001;

    // you have to put it into a method. 
    public void myMethod() {
        Message[] dbmessage;
        dbmessage = new Message[300];
        dbmessage[0] = new Message("TEST MESSAGE",  Message.Type.warning,Message.Actions.no,1);
    }
}