黑马程序员技术交流社区

标题: 构造方法中的this [打印本页]

作者: 黑马-陈思源    时间: 2013-3-11 12:47
标题: 构造方法中的this
本帖最后由 黑马-陈思源 于 2013-3-11 13:15 编辑

今天看到一段代码。原来 一个类的构造方法的多个重载通过this还可以实现一个实例对多个构造方法的实现。。
弱弱的问下,这有什么实际意义吗?就是以后有什么技术或者说是小技巧可以用到呢?
作者: scott0610    时间: 2013-3-11 12:55
this关键字:是一个对象的默认引用,this总是指向调用该方法的对象。
this关键字最大的作用就是让类中一个方法,访问该类的另一个方法或属性。
在构造函数中使用this调用该类的其他构造函数,
构造器是一个特殊的方法,该方法主要用于创建类的实例,Java语言里构造器是创建对象的重要途径。因此,Java类必须包含一个或一个以上的构造器。   同一个类里具有多个构造器,多个构造器的形参列表不同,这就叫构造器的重载。
简单的说,一个类中有多个构造函数,就是可以多种创建对象的途径。
作者: 邹学良    时间: 2013-3-11 13:37
打个比方:
现在有某个类中存在多个构造方法,但是不管有多少个构造方法,最终结果都要打印一句“A”,不通过this()方法:
  1. public class demo1 {
  2.         private String name;
  3.         private int age;
  4.         public demo1(){
  5.                 System.out.print("A");       
  6.         }
  7.         public demo1(String name){
  8.                 System.out.print("A");
  9.                 this.name=name;
  10.         }
  11.         public demo1(String name,int age){
  12.                 System.out.print("A");
  13.                 this.name=name;
  14.                 this.age=age;
  15.         }
  16.         //.....
  17.         public String get(){
  18.                 return name+age;
  19.         }
  20.         public static void main(String[] args) throws Exception {
  21.                 demo1 d=new demo1("张三",20);
  22.                 System.out.print(d.get());
  23.         }
  24. }
复制代码
通过this()方法实现
  1. public class demo1 {
  2.         private String name;
  3.         private int age;
  4.         public demo1(){
  5.                 System.out.print("A");       
  6.         }
  7.         public demo1(String name){
  8.         //System.out.print("A");
  9.                 this();
  10.                 this.name=name;
  11.         }
  12.         public demo1(String name,int age){
  13.                 //System.out.print("A");
  14.                 //this.name=name;
  15.                 this();
  16.                 this.age=age;
  17.         }
  18.         //.....
  19.         public String get(){
  20.                 return name+age;
  21.         }
  22.         public static void main(String[] args) throws Exception {
  23.                 demo1 d=new demo1("张三",20);
  24.                 System.out.print(d.get());
  25.         }
  26. }

复制代码
这个时候的this()就可以为我们做到代码优化的作用
作者: 张卫刚    时间: 2013-3-11 13:41
举个例子吧,你可以举一反三,多想想
class Ca
{
        int a;
        int b;
        Ca(int a)
        {
                this.a=a;
        }
        Ca(int a,int b)
        {
                this(a);
                this.b=b;
                printA();
        }
        void printA()
        {
                System.out.println(a+"------"+b);
        }
}
        class Te
        {
                public static void main(String []args){
                        Ca c = new Ca(5,9);
                }
        }
作者: vmvm555    时间: 2013-3-11 13:50
我是这么理解构造器的重载的,不知道你有没有看过张孝祥老师的7k银行业务那段面试题,在那段视频项目中,张孝祥老师用到了很多常量,为了便于后期程序的维护性和可扩展性,张老师将这些常量全部封装在一个类中,这样以后如果想修改常量中的值,只需修改一处即可,构造器的重载作用与此类似。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2