
还能说什么呢,直接泪目。
Java Workflow
在 Java 中,将程序从.java文件转换为可执行文件主要有两个步骤:编译和解释。
在终端中的执行指令
$ javac HelloWorld.java
$ java HelloWorld
Hello World!
class files
为什么使用.class files
.class文件经过了类型检查,这使得分发的代码更安全,对源码处理后执行效率也更高,并且在涉及知识产权的情况下能保护实际的源代码。
Static Typing
Java 是一种静态类型语言,这意味着所有变量、参数和方法都必须具有声明类型。声明后,类型将永远无法更改。表达式也具有隐式类型。
静态类型的优点:
-
在编码过程中更早地发现类型错误,减轻程序员的调试负担。
-
避免给终端用户带来类型错误。
-
使代码更易于阅读和推理。
-
避免耗时的运行时类型检查,提高代码效率。
-
能让程序员确切知道自己正在处理的是哪种对象
缺点:
- 代码更冗长,通用性更差
与其形成对比的是 Python 等动态类型语言,在动态类型语言中,用户则可能会在运行时遇到类型错误。因为Python 不限制类型,所以它不能假设你想要什么类型。
Static vs. Non-static
静态方法使用类名来调用,不能访问实例变量。
非静态(实例)方法使用实例名来调用。
有一些类从不实例化比如,Math。
x = Math.round(5.6)
静态方法要使用实例变量就要指定实例,
public static Dog maxdog(Dog d1,Dog d2){
if (d1.weight>d2.weight){
return d1;
}return d2;
}
Dog.maxdog(d1,d2);
public Dog maxdog(Dog d2){
if (this.weight>d2.weight){
return this;
}return d2;
}
d1.maxdog(d2);
非 static 变量:属于某个类的实例,每个实例都有自己的一份副本。 static 变量:属于类本身,整个类共享一份,所有实例都访问同一个变量。
Declaring a Variable
不同于 c/cpp,Java 向程序员隐藏内存位置会降低控制力,这会使你无法进行某些类型的优化。不过,这也能避免一大类非常棘手的编程错误。在计算成本极低的现代,这种权衡通常是非常值得的。
As the wise Donald Knuth once said: “We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil”.
参考: