随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主要原因之一。
“初始化”与“清理”,对应一个对象的生命周期。C++中引入“构造器”的概念,在创建对象时被自动调用的特殊方法。JAVA中同样采用这种特殊方法,并自动提供了“垃圾回收器”。
Java中“初始化”的动作,是由构造函数来完成的,他不会返回任何值,区别于返回void。构造函数的名字与类名完全相同,分为无参构造函数(通常叫做默认构造函数),有参构造函数。那么他是如何调用的呢?在new一个对象时,将会为对象分配存储空间,并调用相应的构造器。相当于Java在你创建对象时,帮助你自动调用了一个类似initialize的方法对对象进行初始化。确保在操作对象前,它已经被恰当的初始化了。
在Java中,构造器是强制重载方法名的另一个原因。创建一个对象时,若想以不同的方法初始化,无参或者有参,那么这里就涉及到了方法重载。尽管方法重载是构造器所必需的,他也可以应用于其他方法。尽管方法重载具有相同的名字,但是在每个重载的方法中都有一个独一无二的参数类型列表(甚至参数类型顺序不同依然可以区分方法,但不建议这么做)。值得注意的是,根据返回方法区分方法重载是行不通的。下面一个很容易出错的两个场景:
两个方法重载,参数类型分别为int,double。传入的实参类型若有对应的形参类型时,会被正常调用。但是下面两种情况呢?
(1)当传入实参类型小于声明中的形参类型时:实际数据类型会被自动提升。
(2)当传入实参类型大于声明中的形参类型时:需要将类型进行转换,否则会报错。
何为默认构造函数在前面已经说明,这里不再重复。值得注意一个问题,当类中并没有构造器时,编译器会自动帮你创建一个默认构造函数。但是当你已经定义了一个构造器(无论是否有参),编译器则不会帮助你自动创建默认构造函数。
三个用法:
(1)表示对“调用方法的那个对象”的引用
(2)将当前操作对象传递给其他方法,放到方法的参数位置,例如:
class Apple{
Apple getPeeled(){ return Peeler.peel(this); }
}//削平果的动作
(3)用于在构造器中调用构造器,这种情况this是可以带参数的;值得注意的有几点(1)不能在非构造方法中是this(args)的方式调用构造函数(2)在一个构造函数中使用this,只能调用一个构造函数,一个以上会报错。
static静态方法就是没有this的方法,某种意义上具有全局函数的语义,可以在没有创建任何对象的情况下,仅仅通过类本身来调用静态方法,所以他并不是“向对象发送消息”的方式来完成。static使用虽然可以避免内存分配开销,但是,static修饰后在第一次加载分配内存(方法区)后,并不会释放内存,知道程序结束。所以要避免出现大量static。
先就这些,明天再写喽
联系客服