你先要去弄懂this的三种用法:
我们提供的服务有:网站设计、成都网站设计、微信公众号开发、网站优化、网站认证、阳江ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的阳江网站制作公司
有三种用法:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!
你的实例中 在类B的构造方法中
public B(A a)
通过方法重载 带了A的一个实例 通过this.a=a;
给类B中的A对象赋值
在类A中 b=new B(this);
因为B b=new B(new a());
而this表示当前类的实例
构造函数:执行时间比构造代码块时间晚,也是在对象初始化的时候运行。没有返回值,构造函数名称和类名一致。
构造代码块:执行时间比静态代码块晚,比构造函数早,和构造函数一样,只在对象初始化的时候运行。没有名字、参数和返回值。
静态代码块:最早执行,类被载入内存时执行,只执行一次。没有名字、参数和返回值,有关键字static。
静态代码块只会在类被载入内存时加载一次,是最先执行的,然后是构造代码块,最后才是构造函数。构造代码块和构造函数都是在对象创建的时候执行,有几个对象就会执行几次。
构造方法分有参数的和无参的,方法名和类名一致,平常的类默认都会有一个默认无参数的构造方法,只不过程序没有显示出来,带参数的构造方法通过参数的类型,数量,顺序来区分,在类被实例化的时候就调用了构造函数。
public class Test {
public Test (){
System.out.println("Test类的构造函数(方法)");
}
public Test(int i){
System.out.println("带参数的构造方法");
} public Test(int i,int j){
System.out.println("带参数的构造方法");
}
}
首先:如果你没有自己定义带参数的构造函数,
那么系统只带一个无参数的构造函数。
你new类的时候,就是调用这个构造函数
第二:java构造函数 参数你可以随意的加,
但是,如果你加了一个带参数的构造函数,
那么,建议你自己再写上一个不带参数的构造函数,哪怕方法体内没有内容,
因为系统不会自己给你加上不带参数的构造函数。
如果没有写当你new这个类的时候,就必须带上参数。。。
下面是例子:
第一种:
public class test{
public test(){}
//如果没有自己写构造函数,系统会自己默认这样一个构造函数
//当然,如果你这个类有继承其他父类,那么在构造函数内会先调用父类的构造函数
}
第二种:
public class test{
public test(){}//因为这里我们自己定义了带参数的构造函数,所以系统不会默认加上这个无参的构造函数,所以如果有用,自己加上
public test(int i,String str){
//你希望执行的代码
}
public test(int i){
//你希望执行的代码
}
//构造函数可以有N多个,只要参数类型,或者参数个数不一样就可以了
}
public class A{
public A(int a,b){
if(ab)
System.out.println(a);
else
System.out.println(b);
}
public A(double a,double b,double c){
System.out.println(a*b*c);
}
public A(String s1,String s2){
if(s1.equals(s2))
System.out.println("equal");
else
System.out.println("no equal");
}
public static void main(String[] args)
{
new A(1,2);
new A(3.3,1.0,2.8);
new A("welcome","beijing");
}
}