当前位置: 首页 > 知识库问答 >
问题:

为什么map的put方法现在直接在类中工作?

濮阳赞
2023-03-14
public class Demo{
    Map<String,String> test = new HashMap<String,String>();
    test.put("A","A");
    System.out.println(test);

}

为什么这段代码中不允许put函数?

共有3个答案

裴华荣
2023-03-14

要在类中执行某些内容,您需要在本身包含某些内容的类中定义一个方法。

你做到了:上课-

正确:类别-

轩辕鸿
2023-03-14

Java不是这样工作的。如果您想在加载类时实现这个put,您可以尝试使用静态块。

public class Demo{
    static Map<String,String> test = new HashMap<String,String>();
    static{
        test.put("A","A");
        System.out.println(test);
    }
}

或者,如果您希望它在每次创建对象时都被初始化,请将其保留在适当的构造函数中或只是默认执行块中(类似于静态,但没有静态关键字)。

public class Demo{
    Map<String,String> test = new HashMap<String,String>();
    public Demo(){
        test.put("A","A");
        System.out.println(test);
    }
}
卫建义
2023-03-14

如果要在对象初始化过程中运行一些代码,请将其放在大括号中:

public class Demo{
    Map<String,String> test = new HashMap<String,String>();

    {   // This is now part of object initialization
        test.put("A","A");
        System.out.println(test);
    }
}

put或任何其他方法调用在类声明部分是不允许的,因为Java不知道何时运行此代码。该语言对运行执行代码有特定的规则:它要么是方法调用的一部分,要么是对象或类初始化的一部分。

大括号中的代码成为对象初始化的一部分。任何时候运行Demo d=new Demo()测试映射都会被插入到映射中,映射本身也会被打印出来。请注意,打印输出不会很漂亮。参见此Q

 类似资料:
  • 问题是,我试图使用findViewById()全局初始化TextView对象,但它在运行时抛出一个错误,然后,如果我在onCreate()或任何其他方法中使用它,初始化工作就会很好。 我正在为API级别22及以上开发

  • 问题内容: 以下接口和类已成功编译。 问题在下面的输出中提到: 输出: X 瞧,MyInterface是一个接口, 那为什么编译器允许编译 mi.getClass(),mi.wait()。 或如何在接口中使用Object类的方法。 ÿ 编辑 :-我接受拒绝的答案,因为这是最具解释性的。但是在阅读了答案之后,又出现了一个问题:- “ 请记住,如果接口试图在Object类中声明一个声明为’final’

  • 什么类实际实现了接口?我正在研究收集API。。而且似乎在实现类中返回的实际方法是直接在本身中指定的。 接口指定用于操作迭代器的实际方法。。但是我很难找到实现这个的实际类。 哪个类实际上-实现-接口,允许类中的方法工作? 我确信必须有一个实现类,因为调用本身肯定不能返回接口,必须有实例化的东西。

  • 我知道这是一个很基本的问题,但一个面试官用一种很诡计的方式问我,我很无奈:( 我只知道一个界面的材料或理论定义,并在我工作的许多项目中实现了它。但我真的不明白这为什么有用,怎么有用。 接口方面有一点我也不懂。例如,我们使用 finally块中的。但我没有看到该类实现或继承接口()类,我的意思是。我想知道怎么才能直接调用方法名。同样,我不理解Dispose方法是如何工作的,因为我们需要用我们自己的实

  • 我不知道POST和PUT方法的确切区别。有些人在网上说,当你们更新记录的时候,你们必须使用PUT方法而不是POST,我不知道这是真的吗?? 如果你的网站URL在POST方法1.www.example。com/user/{id}/update:-使用2.www.example。com/user/update:-使用后这是否正确??

  • 这是我的线程: 它得到一个上限和下限以及一个在所有线程上共享的结果。 这是我的测试类: