打印出来的结果是什么意思。 System.nanoTime() 在 Java
What does the printed out result mean. System.nanoTime() in Java
我不明白打印出 timeStarted
,然后打印出 getTime()
得到了什么。我打印出来的是什么?打印出来的值是什么意思?
我刚刚开始学习 java 并且正在尝试了解如何使用帧速率。
Time.java
public class Time {
public static double timeStarted = System.nanoTime();
public static double getTime() { return (System.nanoTime() - timeStarted) * 10E-9; }
}
Main.java
public class Main {
public static void main(String[] args) {
Time time = new Time();
System.out.println(time.timeStarted);
System.out.println(time.getTime());
}
}
控制台:
4.24512563119081E14
0.01404352
看看 java-文档:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()
System.nanoTime()
returns 最精确的可用系统计时器的当前值(以纳秒为单位)。值 returned 表示自某个固定但任意时间以来经过的纳秒数。
System.nanoTime()
与日期和时间无关。 System.nanoTime()
是经过纳秒的持续计数,仅此而已。
将 System.nanoTime()
的 return 值与 10E-9
相乘将得出当前计数(以秒为单位)乘以 10。(要正确转换为秒,您必须乘以 1e-9
。我猜这是初衷?)
由于您是从起始计数中减去当前计数,因此 getTime()
的 return 值将表示自 Time
-class 已加载,以秒为单位,乘以 10。
如果您查看方法 System.nanoTime
,它会以纳秒为单位为您提供当前时间。此外,由于字段 timeStarted
是 static
,它是在 class Time
加载到 JVM 时分配的,因此该字段节省了 class 加载的时间.方法 getTime
只是计算与当前时间 timeStarted
的差异,并将其乘以 10E-9
将其从纳秒转换为秒,此值表示自 class 已加载。
来自System docs:
nanoTime()
Returns the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds.
你的第一个 println
给你时间,在 纳秒 内,变量 timeStarted
被赋值(在本例中是一个非常大的数字)。
你的第二个 println
给你时间,以 秒 为单位,从你的代码开始到 getTime()
的调用。第二个值以秒为单位,因为它乘以 10E-9
,从纳秒到秒的转换因子。
如果 'time' 在计算机系统中通常由单个数字表示。该数字计算自某个初始时间(即数字为 0 的点)以来发生的概念 'ticks' 的数量。在这种情况下,滴答声是 1 纳秒——我并不是说时钟实际上以该速率滴答作响,表示时间的数字可以(比如说)每 100 纳秒递增 100。
因此,如果你有两次这种类型,它们之间的刻度数可以通过简单的减法来确定。
为事件计时,获取事件前后的当前时间,并计算差值。不需要知道初始时间 'means' 就可以使用这样的时间。你只是把时间当作一个数字。
我不明白打印出 timeStarted
,然后打印出 getTime()
得到了什么。我打印出来的是什么?打印出来的值是什么意思?
我刚刚开始学习 java 并且正在尝试了解如何使用帧速率。
Time.java
public class Time {
public static double timeStarted = System.nanoTime();
public static double getTime() { return (System.nanoTime() - timeStarted) * 10E-9; }
}
Main.java
public class Main {
public static void main(String[] args) {
Time time = new Time();
System.out.println(time.timeStarted);
System.out.println(time.getTime());
}
}
控制台:
4.24512563119081E14
0.01404352
看看 java-文档:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()
System.nanoTime()
returns 最精确的可用系统计时器的当前值(以纳秒为单位)。值 returned 表示自某个固定但任意时间以来经过的纳秒数。
System.nanoTime()
与日期和时间无关。 System.nanoTime()
是经过纳秒的持续计数,仅此而已。
将 System.nanoTime()
的 return 值与 10E-9
相乘将得出当前计数(以秒为单位)乘以 10。(要正确转换为秒,您必须乘以 1e-9
。我猜这是初衷?)
由于您是从起始计数中减去当前计数,因此 getTime()
的 return 值将表示自 Time
-class 已加载,以秒为单位,乘以 10。
如果您查看方法 System.nanoTime
,它会以纳秒为单位为您提供当前时间。此外,由于字段 timeStarted
是 static
,它是在 class Time
加载到 JVM 时分配的,因此该字段节省了 class 加载的时间.方法 getTime
只是计算与当前时间 timeStarted
的差异,并将其乘以 10E-9
将其从纳秒转换为秒,此值表示自 class 已加载。
来自System docs:
nanoTime()
Returns the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds.
你的第一个 println
给你时间,在 纳秒 内,变量 timeStarted
被赋值(在本例中是一个非常大的数字)。
你的第二个 println
给你时间,以 秒 为单位,从你的代码开始到 getTime()
的调用。第二个值以秒为单位,因为它乘以 10E-9
,从纳秒到秒的转换因子。
如果 'time' 在计算机系统中通常由单个数字表示。该数字计算自某个初始时间(即数字为 0 的点)以来发生的概念 'ticks' 的数量。在这种情况下,滴答声是 1 纳秒——我并不是说时钟实际上以该速率滴答作响,表示时间的数字可以(比如说)每 100 纳秒递增 100。
因此,如果你有两次这种类型,它们之间的刻度数可以通过简单的减法来确定。
为事件计时,获取事件前后的当前时间,并计算差值。不需要知道初始时间 'means' 就可以使用这样的时间。你只是把时间当作一个数字。