发表于: 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();在构造方法里面调用上一个构造器,感觉是很实用的技术,并且不知道被调用的构造器能不能接着调用其上一个构造器
评论