种和对象的总结2

类和对象的总结2
今天我们更加深入的学习了类和对象。
上节课我们知道了在JAVA中每个类都有自己的属性和方法。
其中方法可以分为普通方法和构造方法。
什么是构造方法?
构造方法是指利用该类名定义一个对象时可以对其初始化的方法。
构造方法的格式是public 类名(数据类型  参数名,...){
//代码
     }
每个类都有一个默认的构造方法,这个构造方法我们是看不见的。
其实它的格式就是public 类名()
{}
一个无参数,空代码的方法。
它是每个类默认的构造方法。当然我们也可以再类中定义自己的构造方法。
如果你定义了自己的构造方法,那么JAVA默认的构造方法不会被使用。
利用构造方法我们可以实例化对象。
           实例化对象的格式:
类名 对象名 = new 类名();
类名 对象名 = new 类名(参数值,...);

构造方法的用途:
用来实例化对象的。
在JAVA的类中,允许出现同名字不同参数的方法,我们把定义这种同名字的方法称之为方法的重载。
重载可以分为普通方法的重载和构造方法的重载。
普通方法的重载条件如下:
条件:
1.方法名必须要相同;
2.方法所带的参数个数,参数类型和参数顺序必须要有一个是不同的。

调用:
根据参数来调用重载的方法
值得注意的是:返回值类型并不作为方法重载的条件。
构造方法与普通方法的重载条件相同,只是不带返回值类型和格式不同而已。
例如一个类  Student
我们可以定义两个名字相同的构造方法
public Student()
{}
public Student(String s)
{System.out.println(s);}
这两个方法构造名字相同,并且都可以实现对对象的初始化,他们的区别只是参数不同。
this关键字的应用
我们在定义一个类的同时肯定不止只使用一个对象吧,那么我们如何区分如此多的对象呢?
JAVA中利用this关键字很好的解决了这个问题
this的意思是当前的,正在使用的。
它代表当前正在使用的对象.
格式是this.属性或者方法 和 this(参数)
例如this.name = name;//区分属性和参数
this("无名");//调用带一个字符串参数的构造方法
它也可以在构造方法中使用
例如
public Student()
{this("空");}
public Student(String s)
{System.out.println(s);}
this(参数)是指调用该类里面另外的构造方法
值传递
在调用一个方法的时候一般都会有参数的传递
JAVA中参数的传递分为值传递和引用传递
值传递是指该方法只会接收传递过来的参数的值而不能改变该参数.
值传递适用于Java的八大基本数据类型和String类型。
它的传递过程是先利用该参数的名字找到在内存空间的那段数据,在将该数据赋值给方法里面的参数接收.所以它不能对实参进行改变.
与值传递相对的是引用传递
引用传递是可以改变其实参的值得。
它适用于
Java的引用数据类型(对象类型、类类型)。
引用数据类型包含的:数组、类、接口、抽象类
它的传递过程是把该参数的地址赋值给接收参数,从而是该接收参数直接指向该地址所相对应的内存空间,所以接收参数可以直接对实参进行改变.
练习:
我们今天的练习和昨天只是稍微有点不同,今天的练习是还奥特曼还可以跟BOOS进行战斗.
我的理解是既然奥特曼还可以跟BOOS进行战斗,那我可以给奥特曼这个类定义一个战斗方法。
根据参数的不同(小怪兽和BOOS)来重载这个方法。
具体实现代码如下.
package today;

//每一种生物应该包含生命值,攻击力,防御力,名字4项基本属性

public class SHOU {                         //定义怪兽的各项属性
public String name="怪兽";
public int old=200;
public int gongji=100;
public int fangyu=20;


}
package today;
                                             
public class BOOS {      //定义BOOS的各项属性
public String name="BOOS";
public int old=400;
public int gongji=180;
public int fangyu=23;


}
package today; //定义奥特曼的各项属性

public class Man {

public String name="奥特曼";
public int old=500;
public int gongji=200;
public int fangyu=39;
   public void Zhandou(BOOS a)     //模拟奥特曼与BOOS对战时的过程
   {for(int i=1;this.old>0&&a.old>0;i++)
{System.out.println("第"+i+"回合战斗结束");
a.old=a.old-this.gongji+a.fangyu;
this.old=this.old-a.gongji+this.fangyu;
System.out.println(a.name+"还剩"+a.old+"点血");
System.out.println(this.name+"还剩"+this.old+"点血");

}
System.out.println("战斗结束");
if(this.old>0)
System.out.println(this.name+"取得胜利!");
else
System.out.println(a.name+"取得胜利!");}
   public void Zhandou(SHOU a)    //因为还可以跟小怪兽战斗,重载该函数模拟

与小怪兽战斗的场面
   {for(int i=1;this.old>0&&a.old>0;i++)
{System.out.println("第"+i+"回合战斗结束");
a.old=a.old-this.gongji+a.fangyu;
this.old=this.old-a.gongji+this.fangyu;
System.out.println(a.name+"还剩"+a.old+"点血");
System.out.println(this.name+"还剩"+this.old+"点血");

}
System.out.println("战斗结束");
if(this.old>0)
System.out.println(this.name+"取得胜利!");
else
System.out.println(a.name+"取得胜利!");}
  


}
package today;

public class Manerger {    //定义一个主函数接口

/**
* @param args
*/
public static void main(String[] args) {
Man str=new Man();   //给奥特曼,小怪兽,BOOS初始化一个对


SHOU a=new SHOU();
BOOS b=new BOOS();
str.Zhandou(a);      //奥特曼分别和小怪兽,BOOS进行战斗
str.old=500;
str.Zhandou(b);

}

}
通过今天的练习,我对类的构造和重载,以及两种值传递和this关键字的使用进一步了解。
希望在以后的学习中能继续努力,更加进步.