java 备忘

this:是和特定对象关联的引用。

是调用方法的对象的引用,this 用法和其他对象引用并无不同。

this 在方法内 使用,表示对 调用方法的对象 的引用

当需要明确指出 对当前对象的引用时,才使用this关键字。

this —— 这个对象、当前对象(类型是引用,其实,因为是在堆上new的对象,对对象的操作永远都只能是引用。一切对象皆是引用。一旦哪个对象没有引用了,就可能要被销毁了

理解了this,有助于 对比理解static:

static的方法就是没有this的方法。(上面说了,this是和对象(的引用)关联,即和某一个具体对象相关!) 

static里不能含this,因为static可以用类名来调用,即可能连一个对象都没有创建的时候,就能用static, 如果static方法里含this了,那么this指的那个对象在哪里呢?? 就会矛盾了!

一个是和类相关的,一个是和具体对象相关的!

它们就是一对儿。

初始化:——(先指定初始化/自动初始化,自动初始化在构造器调用之前)构造器初始化 方便灵活

指定/自动初始化顺序 取决变量于定义的顺序。

 数组初始化:

重要的一种形式是 new className[]{初始化列表。。} 例如

String: new String[]{"aaa","afd","fsdafsd"}

某个类如Rock: new Rock[]{new Rock(), new Rock(2) }

(假设Rock类提供了上面的两种构造器)

这种初始化形式可以用在很多地方:如 我们知道main(String[] args),main有个String[]的 参数

我们可以使用上面的数组初始化形式给main传 args:

main(new String[]{"afdfsdaf","afsafasf"})

即,可以用在参数是数组的时候传参。

因为Java中数组不指定大小,因此当一个方法的参数是数组时,就类似于C语言中的可变参数了。

可以应用于参数个数未知的场合(如String[] args)。或是类型未知的场合(使用Object[])。

可以创建 以对应的类型的 数组为参数 的方法:

void array(Object[] args){

}

新的Java SE5 有了新的样式的支持:

void array(Object... args){

}

如此,可以不用显示编写数组初始化的语法了。即可以去掉 上面数组初始化形式中的new className[]{}

只使用初始化列表即可:

如果是一个String类型的可变参数列表:

array("afds","afafs")

关于this构造器 参考代码

public class ThisTest {

    private int i=0;

    //第一个构造器:有一个int型形参

    ThisTest(int i){

       this.i=i+1;//此时this表示引用成员变量i,而非函数参数i

       System.out.println("Int constructor i——this.i:  "+i+"——"+this.i);

       System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));

       //从两个输出结果充分证明了i和this.i是不一样的!

    }

    //  第二个构造器:有一个String型形参

    ThisTest(String s){

       System.out.println("String constructor:  "+s);

    }

    //  第三个构造器:有一个int型形参和一个String型形参

    ThisTest(int i,String s){

       this(s);//this调用第二个构造器

       //this(i);

      
       this.i=i++;//this以引用该类的成员变量

       System.out.println("Int constructor:  "+i+"/n"+"String constructor:  "+s);

    }

    public ThisTest increment(){

       this.i++;

       return this;//返回的是当前的对象,该对象属于(ThisTest)

    }

    public static void main(String[] args){

       ThisTest tt0=new ThisTest(10);

       ThisTest tt1=new ThisTest("ok");

       ThisTest tt2=new ThisTest(20,"ok again!");

      
       System.out.println(tt0.increment().increment().increment().i);

       //tt0.increment()返回一个在tt0基础上i++的ThisTest对象,

       //接着又返回在上面返回的对象基础上i++的ThisTest对象!

    }

}
原文地址:https://www.cnblogs.com/dayInAndOut/p/3657013.html