【讨论】Java的关键字new为什么不取消呢?
Java初学,这种问题贻笑大方了,还请各位大侠不吝指教。
我学的还不深,似乎Java 所有的对象定义都使用,诸如 Myclass mc=new Myclass()的语句,相当开辟了一片内存,同时返回了指向这片内存的指针(Java喜欢说是句柄,引用)。
既然所有的定义,都这么干,那作为一个语种,就把new关键字取消好了,这种事情让编译器自己知道不就可以了?为什么还要有这个关键字呢?
------解决方案-------------------- 用spring吧。IOC控制反转。spring工厂自动帮你创建
------解决方案--------------------
楼主naive啊
如下代码:
Java code
public class Test {
public Test() {
System.out.println("const");
}
public static Test Test() {
System.out.println("normal method");
return new Test();
}
public static void main(String[] args) {
Test t = new Test();
}
}
------解决方案-------------------- LZ,记住一句话,入乡随俗。没必要纠结,否则大家还会讨论为什么不取消C++的delete,还有把VB.NET的IF THEN ... END IF统一成C语言风格...这样没完没了的问题 把我在前两天其他帖子里面的话再概括一遍: 不是说java的思维方式(或者编码方式)就是正确的,就是最好的。 这就好比,中文习惯说“我认为这个不...”,而英文一般习惯说“I don't think ...”。没谁对,谁错,完全是习惯问题。 建议在学习java或者其他语言(包括人类/编程语言)的时候,也按照这种入乡随俗的方式thinking in ... 之所以要入乡随俗,就是因为大家都是这么思考,包括Java语法的制定者,JDK或者其他类库、框架的编写者,也包括你的同事,都是以同样一种思维方式(或许是好的或许是不好的,who cares)在工作,你只有融入他们,才能事半功倍,否则,多半是撞了南墙还一事无成。 编程语言如是,人类语言亦如是。
------解决方案--------------------
探讨 谢谢,这个例子让我稍微明白点了。普通函数名怎么还可以与构造函数名一样啊……好像和C++还是不大一样 对于您的这个例子,我觉得,如果java这样规定: 1. Test t或者Test t()表示创建一个对象的引用(自然会调用构造函数) 2. Test t=Test();表示调用普通函数 不就行了?
------解决方案-------------------- 还有多态,其实8楼已经说了 Student extends Person; Person p = new Student(); 如果木有new,你的p只能定义成Person的实例,不能有上面那种写法。 而多态是java的重要特性,灵活性很高。你这么做,就把多态给封杀了,为了一句简单的便利,付出代价是惨痛的。
------解决方案-------------------- 探讨 引用: 数组怎么办 你说的没错,其实不仅仅是数组,形参如果是非内置类型,那么方法里可能还是要进行是否null的判断。 我在想,我起初问这个问题,是因为隐约觉得,Java似乎希望把“指针”相关的概念都屏蔽掉。因此我才会觉得new、null这种带有“指针”痕迹的东西都能内部封装,或许才叫完美吧。 不知道Java后续的版本会怎样发展…… 我继续……
------解决方案--------------------
探讨 引用: 引用: 引用: 还有多态,其实8楼已经说了 Student extends Person; Person p = new Student(); 如果木有new,你的p只能定义成Person的实例,不能有上面那种写法。 而多态是java的重要特性,灵活性很高。你这么做,就把多态给封杀了,为了一句简单的便利,付出代……