繁体   English   中英

Android / java初学者语法问题

[英]Android/java beginner syntax question

所以我正在观看教程,我正在尝试理解这种语法

  Thread thread = new Thread()
    {     
  //if i declare variables here i get errors
            public void run()
            {
            // ....define variables in function
           }
    }

这段代码是如何工作的? 我认为在创建线程对象时,它定义了向函数“列表”添加或“附加”函数? 因此可以稍后调用thread.run()或thread.start()。 我不确定我在猜猜。有人可以启发我。 从我在run函数中观看的教程中他做到了这一点

//the same run that is in the Thread class
public void run()
{
  int timer = 0 ;
  while(timer < 5000)
  {
     sleep(100) ; 
     timer+=100;
  }
}

睡觉做什么? 我用谷歌搜索它但找不到任何好的东西。 在继续循环之前,它是否基本上停止当前应用程序100毫秒? 睡眠被称为50次? 我在数学上很糟糕大声笑..但如果是这样,那么上面的代码是等同于

public void run()
{
  int timer = 0 ;
  while(timer < 50)
  {
     sleep(100) ; 
     timer++;
  }
}

但是我知道最简单的方法就是说睡眠(5000);

显然,我是一个菜鸟。所以我会感激任何解释......彻底的更好的谢谢。 对不起,没有想法如何使用代码标签..

这是不可能的,因为它就像在实例中尝试放置实例变量而不是

可能..我们只为一个实例提供一个实现..而且你不能拥有

专门为单个Object定义的实例变量..而sleep(100)停止执行

当前线程为100毫秒,它发生50次..这意味着50 * 100毫秒..

ntc给出了一个很好的答案,但线程并不总是android的最佳方式。 查看AsyncTask。

您在第一个发布的代码示例中看到的是匿名类。 这是一个小例子 ,这里是techartifact解释

简而言之,这可以让你创建一些扩展某个类的对象(Thread,在你的示例中)。 你没有命名这个类,这意味着你将无法在代码的其他部分使用这个相同的类。

通常,您选择的父类具有一些必须实现的方法。 在您的示例中,您必须实现run() 完成后,您将拥有一个将按照您的定义运行的对象,而无需创建专用类或“已命名” 内部类

这与创建扩展Thread并执行Thread thread = new MyThreadBehaviour();另一个类的行为相同Thread thread = new MyThreadBehaviour();

方法run会做你喜欢的事情,我更喜欢你的代码!

可能有理由将线程休眠50次,持续100ms。 例如,如果您同时运行多个线程,则在较短时间内停止多次将导致与长时间停止它们不同的行为。

您正在使用匿名类的语法。 基本上你是在同时定义和创建一个Thread子类的实例。 run方法覆盖Thread中的run方法,因此新的Thread对象使用run方法。 定义Thread类,以便在调用Thread.start()时,它将启动创建线程所需的步骤,并将开始执行run方法。

如果您需要一个不可重用的简单类(例如您的示例或事件侦听器),则匿名类非常有用。 这些类型的类可能是特定于上下文的,并且只会在您需要它的地方使用,因此最好在要使用它的位置简洁地定义和实例化该类,而不是明确定义一个名为子类,然后创建该子类的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM