在Java中,线程中的super.run()是什么意思?
我真的不明白在Java中,线程中的super.run()是什么意思?,java,android,multithreading,handler,super,Java,Android,Multithreading,Handler,Super,我真的不明白super.run()的意思和super.handleMessage(msg) 它们是必要的吗 我的代码应该写在哪里?在super.run()之前/super.handleMessage(msg)还是在它们之后 new Thread(){ @Override public void run() { super.run(); } }.start(); / 问题 我真的不明白super.run()和super.handleMessage(msg)
super.run()的意思代码>和super.handleMessage(msg)代码>
它们是必要的吗
我的代码应该写在哪里?在super.run()之前代码>/super.handleMessage(msg)代码>还是在它们之后
new Thread(){
@Override
public void run() {
super.run();
}
}.start();
/
问题
我真的不明白super.run()
和super.handleMessage(msg)
的意思,它们是必需的吗李>
我的代码应该写在哪里?在super.run()之前还是之后
答案-1
这在相关代码中是不必要的
new Thread(){
@Override
public void run() {
super.run();
}
}.start();
public class Thread implements Runnable
{
...
@Override
public void run() {
if (target != null) {
target.run();
}
}
...
}
super.run
是调用Thread
类。因此,没有必要这样做,因为存在空函数
答案-2
请参考答案-1,你不必担心
但是,如果实现了super.x
,则必须编写依赖于函数的代码。线程类文档清楚地说明了这一点
public void run()
If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns.
Subclasses of Thread should override this method.
类似地,Handler Java文档也不是很清晰,但如果您看到Handler的handleMessage方法代码,它是空的
/**
* Subclasses must implement this to receive messages.
*/
public void handleMessage(Message msg) {
}
因此,对于这两种方法,都不需要调用super。他们俩什么也不做
你的第二个问题,答案取决于你的要求。Java不限制对超级方法的调用必须是第一行代码(除非您在编写构造函数时,超级构造函数必须在子类构造函数中的任何其他行/段代码之前被调用)。如果您需要在超级类方法之前处理一些逻辑,您可以自由地这样做。如果需要,还可以在方法代码之间调用super方法。因此,您可以在重写方法中的任何位置调用超级方法。您需要了解超类方法的作用以及如何使用它来决定何时调用它。当您编写@Override public void run()
时,您正在重写基本运行方法,以便它将运行其上的任何内容。
在下面的示例中,它将在run内部打印。如果您在构造函数中传递target并调用super.run()
,则调用了target.run()
方法
public static void main(String[] args) {
new Thread(new test()){
@Override
public void run() {
// super.run();
System.out.println("inside run");
}
}.start();
}
}
class test implements Runnable{
@Override
public void run() {
System.out.println("inside target");
}
}
对于线程super,不需要run()。对同名对象的超级方法的任何调用都将调用类继承自的类中的方法。对于Thread(),它提供了一个空的run方法,它不做任何事情。所以这不是必需的。我不确定处理程序是如何工作的,但我猜这里也不需要它。
public static void main(String[] args) {
new Thread(new test()){
@Override
public void run() {
// super.run();
System.out.println("inside run");
}
}.start();
}
}
class test implements Runnable{
@Override
public void run() {
System.out.println("inside target");
}
}