笔者以前学过C++语言。众所周知,C++也是一门面向对象程序设计语言。还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为然。现在在学java,看《java编程思想》这本书的时候,一行代码让我眼前一亮。随之,就知道老师说的话是错的。也许很多人都会像笔者老师那样去理解。现在笔者就要告诉你,不是这样的!
package lin;
import static java.lang.System.out;
public class Lin {
public static void main(String args[]) {
Test t = Test.function(10);
out.println(t.a);
}
}
class Test {
public int a = 10;
private Test(int a) {
this.a = a;
}
static Test function(int a) {
return new Test(a);
}
}
应该一目了然了吧?其实就是利用了静态方法 “ function() ” 来间接创建一个该类的实例。因为静态方法是属于类的,不是属于对象的。所以不需要创建类的实例就可以调用它。通过它,再创建一个类的实例,然后返回之。
其实C++这样不是很方便,因为Java的变量其实是引用型的,就类似于C语言的指针。并且Java对象的创建只能是通过new运算符。C++一般情况下是通过局部栈来实例化对象的。而这样的对象生存期是短暂的。return之后,自然而然就被操作系统给回收了。因此,C++只有通过new运算符来实例化对象才有意义。
这就是C++和java在此处的微妙差异。