黑马程序员技术交流社区

标题: 用基础面向对象,输出一副扑克牌中的疑问。。 [打印本页]

作者: 樊玲    时间: 2013-3-10 00:03
标题: 用基础面向对象,输出一副扑克牌中的疑问。。
class Test7
{
        public static void main(String[] args)
        {
                String[] cs={"黑桃","红桃","方块","梅花"};
                String[] ns={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

                Puker[] ps=new Puker[cs.length*ns.length]; //可以装入52个扑克对象  ps中的元素现在的值是null
                int index=0;
                for(int i=0;i<cs.length;i++){
                       
                        for(int j=0;j<ns.length;j++){
                               
                         ps[index++]=new Puker(cs[i],ns[j]);
                        }
                }


                for(int i=0;i<ps.length;i++){
                        if(i%ns.length==0){
                                System.out.println();
                        }
                        ps[i].print();

                }




        }
}


class Puker
{
        private String color;
        private String number;
        Puker(){}                                                            // 这里为什么用构造函数?

        Puker(String color,String number){                      //这个构造函数重载方法,除了给this.属性赋值,还有别的作用吗?那不是跟set方法重了吗???
                this.color=color;
                this.number=number;
        }

        void setColor(String color){
                this.color=color;
        }
        String getColor(){
                return color;
        }

        void setNumber(String number){
                this.number=number;
        }
        String getNumber(){
                return number;
        }

        void print(){
                System.out.print(color+number+"  ");
        }
}



作者: 江华    时间: 2013-3-10 00:08
1、 构造函数的意义,你是特别理解
请看这个帖子中,我的回答!
作者: 江华    时间: 2013-3-10 00:11
无语,找不到了,算了,重新再敲一下

作者: 江华    时间: 2013-3-10 00:25
首先,先声明一点,java是面相对象的开发语言,所以,在写程序时,时刻保持着面相对象的思想。

构造函数的作用,你不是特别理解。
构造函数:   从字面意思来说,构造== 构画、设计、建造
其实,它就相当于建房子时的设计图纸,这个函数里包含了这个对象的一些信息,在创建的时候就必须有的。

在程序开发中,构造函数起到一个初始化的作用,一个对象在创建的时候,
某些值是在创建的时候,就必须有,这时候,就要传入一些信息,例如:银行账户,在你开户的时候,这个账户必须有一个数字账号,然后才去保存账号对象的用户信息。

所以,你的这个代码也是同样的作用
  1.         Puker(String color,String number){                      //这个构造函数重载方法,除了给this.属性赋值,还有别的作用吗?那不是跟set方法重了吗???
  2.                 this.color=color;
  3.                 this.number=number;
  4.         }
复制代码
用来接收,初始化设置的值

在有些时候,创建对象,我们不用传递初始化值
所以,就出现你下边的代码
  1.         Puker(){}                                                            // 这里为什么用构造函数?
复制代码
如果,没有上边的代码,那在创建这个类的时候,必须传递参数
,否者,java虚拟机不知道你要干啥。
作者: wodeairenw    时间: 2013-3-10 00:27
这里需要讲到构造函数的用法
Puker(){}                                                         

Puker(String color,String number){                     
              this.color=color;
                 this.number=number;
你建立对象时给对象初始化用的
比如你想建立一个没有参数的对象Puker s =new Puker(这里不写),表示建立对象时,初始化没有设置color及number
比如你想建立一个没有参数的对象Puker s =new Puker(String color,String number),表示建立对象时,初始化时设置了color及number
而set方法是对象生成之后,你需要修改里面的颜色和数字而建立的。是不同的两个概念。

作者: 杨博    时间: 2013-3-10 02:26
  private String number;
        Puker(){}                                                            // 这里为什么用构造函数?

        Puker(String color,String number){                      //这个构造函数重载方法,除了给this.属性赋值,还有别的作用吗?那不是跟set方法重了吗???
                this.color=color;
                this.number=number;
        }
首先在这里,这是这个类定义的构造函数,作用就是对对象进行初始化了,那么,定义两个,其实就是在你创建一个对象时,如果是new Pucker(),那么,他初始化对象并没有其他信息带入,但是,如果你new  Puker(cs[i],ns[j])这个,他会带入coloe与number的初始化信息,这些信息是对象一建立就有的,就是说不同的构造函数产生的对象初始化的信息不同。
至于你说与set方法重了,其实不是这样,构造函数创立对象,是他本身带有的信息,而你的set方法,是对对象的信息进行改变,二者并不重复
希望对你有帮助




作者: amen0205    时间: 2013-3-10 04:48
注释1   这个构造函数你没用到 所以  就没有用了 删了也可以  但注意以后就别用 new Puker()创建对象那个了
注释2   构造函数和set方法的区别:1 用构造函数我可以在对象创建就给对象命名    构造函数就是用来给对象初始化的
                                                2   set方法非静态的话  不用对象调用不能运行  是后期给对象该名的  
作者: 黄玉昆    时间: 2013-3-10 09:16
我觉得吧,构造函数是初始化对象用的,个人愚见
作者: 江华    时间: 2013-3-10 13:08
本帖最后由 江华 于 2013-3-10 13:09 编辑
江华 发表于 2013-3-10 00:25
首先,先声明一点,java是面相对象的开发语言,所以,在写程序时,时刻保持着面相对象的思想。

构造函数的 ...

构造函数是用来 初始化函数的,
同时也是作为接口区使用的!
要初始化,就要传递,两者之间有了传递就是沟通
不同的对象之间的沟通,我觉得就是接口的作用

作者: 黑马17期-闫东东    时间: 2013-3-10 13:20

构造方法
.如果一个类没构造方法,那么当它加载时, jvm会为其分配一个默认的空的无参构造方法
但是如果我们手动去创建了一个构造方法,那么默认的就不会在创建。
构造方法是用来创建对象的,构造方法也可以重载。好处是可以通过多种途径去实例化类的对象。
构造方法带参数的目的:是可以在创建对象的过程中就对对象的属性进行赋值操作。
用到数组:
怎样定义52个扑克牌-数组
扑克牌的花色与值固定  可以用数组来描述




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