Thinking in java 16/3/8

未完待续:最后更新16/3/8 22:25

初始化

构造器:和c++类似,每个类编写时都需要一个initialize()方法,创建对象时,如果没有构造器,java就会给对象调用相应的构造器

构造器的名字与类名相同;

构造器可以看作一个给类的对象初始化的函数,但是构造器有与函数(方法)大不相同

 

相同点

存在重载(overloading)

{

重载:使用同个函数名,通过参数列表不同,执行不同的函数体内部

类中构造器和方法都存在函数重载

}

不同点

构造器不存在返回值,没有返回值的意思是本身就不存在返回值,与void有本质不同,void只是返回一个空值,逻辑上也存在返回值

重点

{

  Tree t = new Tree(); 

  前一个Tree指类名,后一个Tree()指Tree类中的无参构造器,

  new Tree()虽然返回一个Tree类对象的引用,但是Tree()这个构造器并没有返回任何值

  其中的t指的的是生成一个Tree类对象的引用,所以在函数传递中,f(Tree t),其实也是复制一个对象引用,在f()中改变对象,也会引起原来的改变

  可以猜测,在java中所有对类对象的操作本质上都是通过类引用进行的

}

 

this关键字:

this关键字只能在方法内部使用,表示调用方法的那个对象”,同一个类调用其他的方法不需要加this,可以通过return this返回对当前对象的引用

通过对this的(显示或者隐示)引用,可以在方法内部使用本身的其他方法或者基本类型

比如void f2(){f1(),return this};

假设f1(),f2()都是类Tree的方法,f2()的定义中,f2()参数表隐式调用了本身,(Tree t'的引用,但new Ttee()生成一个确定对象,t'的引用也就有了意义),

在f2()内调用this.f1()可以直接省略this.f1(),当然如果存在相同的标识符,this.不能省略,明确变量

 

this另一个重要的作用:

构造器中调用构造器

通过给在一个构造器中this参数表来调用另个构造器,本质上是对构造器初始化的细化,每个构造器初始化一部分分段(变量)

注意点

尽管可以在一个构造器中通过this调用另一个构造器,但是一个构造器只能调用一次其他的构造器,也就是this只能使用一次,虽然可以迭代下去调用

this要写在构造器最前面,不然对造成编译错误 by Thinking in java page 86

 

重新思考static

这时候我们明白了非static方法还是字段都是通过对象具体生成也有意义的,this是非静态类成员的载体,通过this.可以调用this内部的成员

而static成员并不依靠某个具体的对象存在,不需要具体对象的生成,就可以通过类名.来调用非静态类成员,static方法内部不能调用非静态类,反过来倒是可以,

因为如果没有具体对象生成,static调用的非静态类没有意义,我们直接通过类名调用static方法也就违法了

 

思考:static方法是不是更像一个全局函数而"非一个对面对象"?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

posted @ 2016-03-08 22:08  iEdson  阅读(161)  评论(0编辑  收藏  举报