构造方法总结



7.17. 构造方法总结


一.构造器方法

一个类中方法有两种: 1.一般方法
                                         2.构造方法

1、一般方法:


public 数据类型 方法名{
          方法体
}

2、构造器方法
public 类名(参数,...){
           //方法
}

实例化对象的格式:
类名 对象名 = new 类名();
类名 对象名 = new 类名(参数值,...);

构造方法的用途:
用来实例化对象的。 

    
Attention:1\构造器方法与一般方法的区别:构造器可以传入参数。

                  2\构造器方法:1.构造器方法没有任何返回值的定义
                                           2.必须与类名相同
                  3\构造器可以重载,主要用途:初始化对象某些属性值 


                 4\每个类都会有一个默认的无参构造器,如果重新写构造器,默认的
         会被覆盖


二.方法的重载

条件:1.类中,方法同名
           2.参数类型、数量和顺序不同

调用:必须根据参数来调用


三.this关键字

1.this 表示当前调用方法的对象
2.this.name = name;//区分属性和参数 ,this指向类对象本身。

                                     this.name 表示对类对象中的name赋值,后面的name是一个变量。
3.this("无名");//调用带一个字符串参数的构造方法
4.this一大用途:可以在构造器中调用自己的另外一个构造器 
5.this调用另外一个构造器时,调用的代码必须是第一行且只调用一次 

附上小许代码:

 

//构造时,初始化name,km属性值,符合第5点
     public Student(String name,int scro){
                 this(name,km,0);
}

//构造时,初始化name,km,scro属性值
      public Student(String name,String km,int score){
                 this.name = name;
                 this.km = km;
                 this.score = score;
}

四.值传递与引用传递

Java中数据类型分两类:

原始类型(8大基本类型):byte,short,int,long,char,float,double,boolean, 还有String【原始类型改变是只能局部变,不能全部都变,除非用static修饰】;

引用类型(类类型) :类,抽象类,数组,接口【引用类型变的时候,与之相关的数据都会变】。
      

1.值传递

     1、8大基本类型和String类型遵循值传递;
     2、如何传值?
      //入口函数中
int i = 100;
...
stu.changeInt(i);
 
      //类中
public void changInt(int s){
s++;
}

i是保存在内存的栈里面。
s保存在栈里面用完就会自动销毁


2.引用传递

     1、引用类型:类,抽象类,接口,数组 
     2、如何传递
        //入口函数中
Student st1 = new Student();...
st1=st2;
st2=st3;
st3=st1;

最后得到st3 = st2;

     VI:1.对象本身存在栈里,指向自己的属性,行为,得到首地址,存在栈中;
          2.st1=st2 时,st1指向st2,得到st2的地址,存在st1中
          3.st3指向st1时,得到st2地址,就得st3 = st2



/**********************************************************/

练习:回合制游戏:奥特曼和小怪兽要战斗,奥特曼还可以和Boss进行战斗,直到一方的血量为0的时候结束战斗,输出谁胜利了!

思路分析:

分析:

对象:凹凸曼,小怪兽,Boss.
特征:名字,血量,
行为:战斗

重点:奥特曼和小怪兽要战斗,奥特曼还可以和Boss进行战斗

1、用构造器,构造3个角色,初始化他们的名字、血量;
2、分别定义、得到他们的名字,血量。
3、在奥特曼类里用重载的方法重载Fight方法,参数分别为小怪兽和Boss的对象; 在小怪兽和Boss类里面Fight方法只用奥特曼对象做参数
4、定义入口函数。

/**********************Aotoman类************************************/

//定义一个Aotoman类
public class Aotoman{

//Aotoman 名字属性
private String Name ;
//Aotoman 血量属性
private int Blood ;

    
     //构造时,初始化Name,Blood属性
     public Aotoman(String n,int b){
             Name = n;
             Blood = b;
}

     //定义一个定义、得到名字的方法
     public void setName(String m){
             Name = m;
}
     public String getName(){ 
             return Name;
}

     //定义一个定义、得到血量的方法
public void setBlood(int c){
             Blood = c;
}
     public int getBlood(){ 
              return Blood;
}

       //定义一个打Boss方法   
  public void Fight(Boss Bo){
          Bo.setBlood(Bo.getBlood()-1);
         System.out.println(Bo.getName()+"被击中,血量减1");
}

//定义一个打Monster方法  
public void Fight(Monster Mo){
       Mo.setBlood(Mo.getBlood()-1);
      System.out.println(Mo.getName()+"被击中,血量减1");
  }
}


/**************************Boss类********************************/

//定义一个Boss类
public class Boss{


//Boss 名字属性
private String Name = "未知姓名";
//Boss 血量属性
private int Blood = 10;

    
     //构造时,初始化Name,Blood属性
     public Boss(String n,int b){
                Name = n;
                Blood = b;
}

     //定义一个定义、得到名字的方法
     public void setName(String m){
              Name = m;
}          
     public String getName(){
              return Name;
}

     //定义一个定义、得到血量的方法
     public void setBlood(int c){
               Blood = c;
}
     public int getBlood(){
              return Blood;
}

     //定义一个打Aotoman方法  
     public void Fight(Aotoman Ao){ 
                      Ao.setBlood(Ao.getBlood()-1);
                     System.out.println(Ao.getName()+"被击中,血量减1");
   }  
}

/*************************Monster类*********************************/

//定义一个Monster类
public class Monster{

//Monster 名字属性
private String Name = "未知姓名";
//Monster 血量属性
private int Blood = 10;

    
     //构造时,初始化Name,Blood属性
     public Monster(String n,int b){
           Name = n;
           Blood = b;
}

     //定义一个定义、得到名字的方法
     public void setName(String m){
             Name = m;
}
     public String getName(){
            return Name;
}

     //定义一个定义、得到血量的方法
     public void setBlood(int c){
           Blood = c;
}
     public int getBlood(){
           return Blood;
}

     //定义一个打Aotoman方法  
     public void Fight(Aotoman Ao){

            Ao.setBlood(Ao.getBlood()-1);
            System.out.println(Ao.getName()+"被击中,血量减1");

   }
}

/*************************入口函数*********************************/

//定义一个入口函数

public class Manager{

public static void main(String [] args){

        Aotoman Ao = new Aotoman("奥特曼",10);
        Monster Mo = new Monster("小怪兽",10); 
        Boss    Bo = new Boss("大波士",10);

              Ao.Fight(Bo);
             Ao.Fight(Mo);
             Bo.Fight(Ao);
             Mo.Fight(Ao);

for(int i=0;i<5;i++){
      Ao.Fight(Bo);
}

for(int j=0;j<9;j++){
      Mo.Fight(Ao);
}

if(Ao.getBlood()<=0){
            System.out.println(Mo.getName()+"和"+Bo.getName()+"赢了!");
}

else if(Bo.getBlood()<=0||Mo.getBlood()<=0){
             System.out.println(Ao.getName()+"赢了!");
      }
   }
}

/**********************************************************/


遇到的问题: 奥特曼可以跟2个人对战

解决:用重载的方法。重载Fight方法,参数对象不一样而已

心得:很有种感觉自己很蠢~ 本以为重载是很牛B轰轰的~ 发现原来就是这样子的。 就是换个参数而已~  其他代码跟上次作业是差不多的。 

 

结论:不要把很多东西都看得太复杂~~ 那是无益的。




   

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值