Java:为什么这样做?

Java:为什么这样做?,java,android,Java,Android,这可能是一个愚蠢的问题,我的Java可能只是初级的:-( 但我不明白为什么会这样(实际上是Android代码,但我认为这是一个一般的Java问题) 我不明白对象mySensorEventListener是如何实际创建的 我不明白下面的代码实际上做了什么 如何调用此代码 什么时候叫 这是我不明白的部分 这是它所属的android活动: 没有新的 正如注释中指出的,在第一行中有一个new,这种实例化称为 我不明白下面的代码实际上做了什么 synchronized块确保传感器中的更改通知不会同

这可能是一个愚蠢的问题,我的Java可能只是初级的:-( 但我不明白为什么会这样(实际上是Android代码,但我认为这是一个一般的Java问题)

我不明白对象
mySensorEventListener
是如何实际创建的

  • 我不明白下面的代码实际上做了什么
  • 如何调用此代码
  • 什么时候叫
这是我不明白的部分

这是它所属的android活动: 没有新的

正如注释中指出的,在第一行中有一个
new
,这种实例化称为

我不明白下面的代码实际上做了什么

synchronized
块确保传感器中的更改通知不会同时处理,而是一个接一个地处理

如何调用此代码??? 什么时候叫

当中发生更改时,
SensorManager
会调用此代码。这就是它注册的目的:

mSensorManager.registerListener(mySensorEventListener,
        SensorManager.SENSOR_ORIENTATION,
        SensorManager.SENSOR_DELAY_FASTEST);

也许你感到困惑的原因是你没有意识到,{…}大括号之间的东西是创建一个没有正式

public class SensorListener {

@Override
public void onSensorChanged(int sensor, float[] values) {
     synchronized (this) {
     }
}

@Override
public void onAccuracyChanged(int sensor, int accuracy) {
}

} 
然后在你的代码中你会看到

public SensorListener mySensorEventListener = new SensorListener();
也许你没有意识到你上面写的和我在这里写的是一样的。
这有用吗?

“没有新的!!!”它在你发布的代码的第一行。
mySensorEventListener=newsensorlistener()
new
在那里..它在第一行
public SensorListener mySensorEventListener=newsensorlistener(){
看看这个:当创建RouteMapActivity时,mySensorEventListener是一个带有新初始化的字段。回答不错,但我想你也应该指出,
同步(这)
通常是。谢谢MB,我不确定我何时理解
公共SensorListener mySensorEventListener=new SensorListener(){…等等.
被调用,我看到
新建
现在:-)在创建对象时仍然没有得到
新建
操作符意味着对象创建。由于此代码不在方法内部,而是在类内部,并且此对象不是静态的,因此它是在封闭对象(您的
路由活动
时创建的)已创建。感谢KSK:-)但仍然没有得到它:-(现在我了解大括号之间的内容是一个类定义,我看到了
新的
,但它是何时/如何实例化的?感谢KSK
新的SensorListener()
在调用
RouteMapActivity
类的构造函数之前被调用。使用一个好的调试器逐步检查代码可能会对您有所帮助(如果可以的话)。您将看到这一行在
RouteMapActivity
构造函数(如果有)之前执行换句话说,当实例化
RouteMapActivity
时,随后立即实例化
SensorListener
public class SensorListener {

@Override
public void onSensorChanged(int sensor, float[] values) {
     synchronized (this) {
     }
}

@Override
public void onAccuracyChanged(int sensor, int accuracy) {
}

} 
public SensorListener mySensorEventListener = new SensorListener();