所以我刚刚看到这个代码在工作,作者告诉我这是内联优化。Java内联优化是否正确?
Class Test{
...
void init(){
//sets variables, call functions, etc
}
...
}
然后他称之为主这样
Test t=new Test();
t.init();
而是用从的init()在它的代码默认的构造函数。他告诉我这是内联优化。 这是正确的吗?它如何更快?我在哪里读到这个?
所以我刚刚看到这个代码在工作,作者告诉我这是内联优化。Java内联优化是否正确?
Class Test{
...
void init(){
//sets variables, call functions, etc
}
...
}
然后他称之为主这样
Test t=new Test();
t.init();
而是用从的init()在它的代码默认的构造函数。他告诉我这是内联优化。 这是正确的吗?它如何更快?我在哪里读到这个?
这不是更快。它似乎是基于一种方法可以内联但构造函数不能的假设。不幸的是,这是无稽之谈,所以它的全部内容都离开了窗口。
即使这样更快,它几乎肯定是一个坏主意。代码不应该以可读性为代价进行优化,除非在每个最后一个CPU周期都很关键的极端情况下,在这种情况下,您不太可能使用Java。
事实上,这比只是难以阅读更糟糕。接下来的重构将不可避免地为Test
构造函数调用init()
方法,因此它不一定需要手动完成(并且如果它被忘记,手动执行操作是一个痛苦和一个潜在的错误来源);如果构造函数调用可以重写的方法是不好的做法,因为子类可能会无意中更改构造函数在调用超类构造函数时发生的情况(有关更多详细信息,请参阅this question)。发生这种情况时,同一包中的Test
的子类将能够覆盖方法init()
,然后当子类调用super()
(隐式或显式地)时,超类的构造函数将最终调用替换为 10。 (这个问题可以通过声明init()
为private
来解决。)
不要这样做。
我不认为你有什么优化。话虽如此,但我认为在设计阶段这不是一个好主意,要么是因为类初始化是每个类必须自己做的事情。在一个单独的方法,将这种行为:
是一些东西,通常不建议使用。
问问作者。 –
没有什么优化你的代码中的任何东西.. – Maroun
这是如何工作的? – Natix