【问题标题】:Throw exception at class level在类级别引发异常
【发布时间】:2014-08-31 05:25:27
【问题描述】:

在我的类中,我有一个利用 awt.Robot 类的方法,每次运行此方法时我都会实例化 Robot()。我认为这会显着减慢我的处理速度,因为在该方法在循环中运行 10000 次的情况下,我将实例化 Robot() 10000 次而不是仅一次。如果我可以将其声明为全局,那将解决我的问题。我尝试过:

Robot robot = new Robot();

就在我的班级下,但我需要抛出异常才能使用该行。不幸的是,我不知道如何在没有 try/catch 块的情况下执行此操作,而我无法在方法之外执行此操作。

如何解决这个问题并将机器人初始化为全局?

【问题讨论】:

  • 为什么不在你的类的构造函数中这样做?
  • 我的类的构造函数?我学会了在初始化一个类的时候如何使用构造函数来取参数,但是我不知道如何使用它们来做到这一点......
  • 顺便说一句,这个类被用作库/导入,如果这有什么不同的话
  • 构造函数是一种方法。 (几乎)任何可以放在常规方法中的语句都可以放在构造函数中。

标签: java awt global awtrobot


【解决方案1】:

你可以把实例化放在一个静态块中

 static Robot robot;
 static {
    try {
       robot = new Robot();
    catch()
    {}
    }

【讨论】:

  • 但仅当 robot 声明为 static 时。如果不是,您将按照 HFOE 的建议将初始化语句放在构造函数中。
  • 您能解释一下它如何提高性能以便我们学习吗?
  • 感谢您的回答,我实现了它,但@KickButtowski 实际上并没有提高性能......它必须是别的东西让我感到困惑,我想我只能摆弄一下。我认为这会有所作为,因为现在我们只创建一次而不是 n 次。
  • @KickButtowski - 出于性能原因,OP 希望在每个方法调用上创建机器人一次而不是重复创建。以上创建了机器人一次。
  • 尽管当我需要数千次时,仍然只能以每秒 35 次执行迭代:P
【解决方案2】:

你能做到吗?

只要您只有其中一个类,请参阅单例模式。只有一个机器人,对“yourRobotUsingMethod”的所有调用只使用一个机器人。

通过在类构造函数中初始化您的机器人类,您可以在类被实例化时尝试/捕获初始化。

class YourClass {

    private Robot robot;    

    public YourClass() { 

        try {
            robot = new Robot();
        }
        catch(Exception e) {
            //Catch your exception here
        }
    }

    public void yourRobotUsingMethod() {
        //Use your robot here
        //You might want to check if robot is not null here too.
    }
}

对不起,如果我把关键字弄乱了,我已经习惯了 C++ 的块访问级别。但你应该明白了

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多