发表于: 2017-08-14 23:53:58

2 869


今天完成的任务

1.构造方法

public class ConstructionMethod {//构造方法
   String name;
   String bame;
   public  void  ConstructionMethod(){}
public  ConstructionMethod(){//初始化的时候,就会调用这个构造方法
       System.out.println("我被调用了");
   }//一个无参数的构造方法

   public  ConstructionMethod(String n){//构造方法的名字和类名一样
       name=n;
       bame="也可以在构造函数内赋值";
   }//一个有参数的构造方法
   public static void main(String[] args){
ConstructionMethod a=new  ConstructionMethod();//初始化这个构造方法,如果自己没有写构造方法,jvm自己生成一个无参数的构造方法
       ConstructionMethod b=new  ConstructionMethod("重载");//构造方法是能重载的
       //实例化一个对象的时候,必然调用构造方法
       System.out.println(a.name);
       System.out.println(b.name);
       System.out.println(b.bame);
       b.bame="我在main方法里换了一个";
       System.out.println(b.bame);
   }
}

1)当你使用

ConstructionMethod a=new  ConstructionMethod();

的时候,jvm会自动生成一个无参的构造方法,并且初始化类的时候,jvm会自动调用一次这个类的构造方法

2)同方法一样,构造方法可以有复数同名的几个,这些构造方法会根据输入的常量来判断调用具体的哪一个

3)可以通过在main方法里对构造方法里面的常量进行重新赋值

public  ConstructionMethod(String n){//构造方法的名字和类名一样
   name=n;
   bame="也可以在构造函数内赋值";
}//一个有参数的构造方法
System.out.println(b.bame);
b.bame="我在main方法里换了一个";
System.out.println(b.bame);



2.this


1.this可以做当前方法的成员变量使用

ThisTest(int i){
this.i=i+1;//此时this表示引用成员变量i,而非函数参数i
   System.out.println("ThisTest "+i+"——"+this.i);//输入的结果    10-11
   System.out.println("i-1:"+(i-1)+"           this.i+1:"+(this.i+1));//输入的结果 9-12
   //从两个输出结果充分证明了i和this.i是不一样的!
}

在此代码中this.i为类里面的一个成员变量。和输入的是局部变量i是两个不同的变量。


在这个方法里面对this.i进行的更改都会反馈到

ThisTest tt0=new ThisTest(10);
System.out.println(tt0.i);

中的i的值。



2.

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+"this.i"+this.i);
}


通过构造函数里面的this();可以调用上一个构造器,但是注意的地方是只有构造方法才能调用一次,并且必须为构造方法的第一行,这样就能在当前的构造方法里面,调用上一个构造器的代码



值得注意的一点是

this.i=i++;//this以引用该类的成员变量
   System.out.println("Int constructor:  "+i+"/n"+"String constructor:  "+s+"this.i"+this.i);

在此打印出的this.i!=i,因为i++是先以变量i与this.i进行赋值,然后才会进行自身的自增操作,而++i是先进行自增操作然后再去赋值




明天打算完成的事情,接着往下看,this感觉还是没有掌握熟悉,明天再多看看


遇到的问题

1.对this掌握不熟练,经常不知道这个关键字的变量指向哪里,到现在也是半懂不懂

2.开始没搞明白this.i=i++;的运行原理,一直以为自己对this的理解哪里出问题了,因为一般都是接触了i=i++这类语句,对i++给另一个变量赋值,掌握还是不够深


收获

1.今天算分清楚了什么是构造方法什么是方法,也知道了new初始化一个类到底是怎么完成的

2.了解了this关键字,虽然还是不甚明了,但是有一个浅薄的认识

3this();在构造方法里面调用上一个构造器,感觉是很实用的技术,并且不知道被调用的构造器能不能接着调用其上一个构造器




返回列表 返回列表
评论

    分享到