`
郑惠铭
  • 浏览: 7787 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

类和对象的总结(2)

阅读更多
类和对象的总结(2)
类的组成部分:属性、方法。
其中,方法包括:1.普通方法
                2.构造方法

一、构造方法
1.构造方法的格式:
       
            public 类名(数据类型 参数名,…){
                        //代码
           }
         
2.实例化对象的格式:
       
        类名 对象=new 类名();//实例化不带参数的构造方法
        类名 对象=new 类名(参数值,…);//实例化带参数的构造方法

3.用途: a.实例化对象
         b.为对象赋初始值

N.B:Java会给每一个类提供一个默认的构造方法。但如果你在类中定义了构造方法,则只能使用你自己定义的构造方法。


二、方法重载
1.条件:a..方法名必须要相同
          b.方法所带的参数类型、参数个数、参数顺序至少有一个不同。

2.调用:传入的参数和哪个方法定义时的参数相配,则调用对应的方法。
     exp:       //定义一个与怪物战斗的方法
             public void fighting(Monster mon){
               blood--;//血量减1
               System.out.println(name+"被"+mon.getName()+"攻击了,血量仅剩"+blood+"滴");
}
              //重载一个与Boss战斗的方法
              public void fighting(Boss boss){
                 blood--;//血量减1
                System.out.println(name+"被"+boss.getName()+"攻击了,血量仅剩"+blood+"滴");
}
}


三、this关键字
 
1.this表示当前调用方法的对象
 
2.this可以调用当前对象的属性值,exp:
              public Student(String name){
                  this.name=name;
}
    //这里的name值为”属性name”的值,这里是将name值赋给”this.name”,而这里的name值可以来自主函数的实例化对象,exp: Student stu=new Student(“becky”);

也可以调用另一个构造器.exp:
                public Student(){
               this(“未知名字”,”Java”,0);
}
//补充:当实例化对象无参数时,构造方法中的参数的值将不会成为实例化对象的初始值。//exp:Student stu=new Student();//此时无参数调入其中。//
               
public Student(String name,String km,int scro){
                this.name=name;//这里的name=”未知名字”
                this.km=km;//这里的km=”Java”
                this.scro=scro;//这里的scro=0
}
N.B:在构造器中,可以调用构造器,也可以调用方法;但在一般方法中,不能调用构造器。


四、值传递

1.值传递:Java八大基本类型和String类型遵循“值传递”规则。

2.关于地址存储地:
1)   exp:      //主函数中
                   int i=100;
                  …….

                  stu.score(i);
       //这里的i的地址存储在内存的栈中,在主函数结束后才会自行销毁,释放内存空间。//主函数中的i值不会受到类中s值变化的影响

2)   exp:      //类中
                 public void score(int s){
         …..
                 s++;
           …….
}//这里的s的地址存储在内存的栈中,用完后便会自动销毁,释放内存空间


五、引用传递

1.引用传递适用于Java的引用数据类型(对象类型、类类型)。
  其中,引用数据类型包含:数组、类、接口、抽象类。
 
2.引用传递的方式:a.对象所带有的值存在堆里,对象的地址存在栈里,对象的地址指向对象值的首地址,从而把对象值找出来。
                  b.如果要将对象2的值赋给对象1,则应使对象1指向对象2的首地址,使“对象1=对象2”,最后在函数结束后,释放对象1在堆中的存储空间。
  
exp1:      //入口函数中
          Student st1 = new Student();...
           st1=st2;
           st2=st3;
           st3=st1;

        最后得到st3 = st2;

分析: 
       1.st1=st2 时,st1指向st2的首地址,st1的值变成st2的值。
       2.st3=st1时,st3指向st1的首地址,st3 的值变成st1的值。
       
/*****************************************************************************/

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

1.思路:先将游戏中的所有对象找全,再分别列出它们的特征和行为。然后为各个对象创建一个类。最后在主函数中模拟战斗场景,输出最终结果。

2.分析:
对象 特征 行为
奥特曼 姓名、血量 战斗
小怪兽 姓名、血量 战斗
Boss 姓名、血量 战斗

3.具体代码如下:
1)//定义一个超人类
public class Superman{

          //定义一个姓名属性
          private String name;
          //定义一个血量属性
          private int blood;

           //定义一个带姓名参数的构造方法
           public Superman(String name){
                 this.name="无名";
}
           //重载一个不带参数的构造方法
           public Superman(){
                  this.blood=10;
this.name="无名";

}
            //设置姓名属性值的方法
            public void setName(String n){
                name=n;//将参数n的值赋给属性name
}
             //获取姓名属性值的方法
            public String getName(){
                 return name;
}
             //设置血量属性值的方法
            public void setBlood(int m){
                  blood=m;
}
              //获取血量属性值的方法
              public int getBlood(){
                    return blood;
}
             //定义一个与怪物战斗的方法
            public void fighting(Monster mon){
               blood--;//血量减1
               System.out.println(name+"被"+mon.getName()+"攻击了,血量仅剩"+blood+"滴");
}
              //重载一个与Boss战斗的方法
              public void fighting(Boss boss){
                 blood--;//血量减1
                System.out.println(name+"被"+boss.getName()+"攻击了,血量仅剩"+blood+"滴");
}
}
      2)//定义一个Monster类
public class Monster{

        //定义一个姓名属性
         private String name;
        //定义一个血量属性
         private int blood;

        //定义一个带姓名参数的构造方法
        public Monster(String name){
            this.name="无名";
        }
         //重载一个带血量参数的构造方法
          public Monster(int blood){
             this.blood=10;
}
          //设置姓名属性值的方法
           public void setName(String n){
               name=n;//将参数n的值赋给属性name
}
           //获取姓名属性值的方法
           public String getName(){
                return name;
}
            //设置血量属性值的方法
             public void setBlood(int m){
                  blood=m;//将参数m的值赋给属性name
}
             //获取血量属性值的方法
              public int getBlood(){
                    return blood;
}
              //定义一个与Superman战斗的方法
             public void fighting(Superman sup){
                    blood--;//血量减1
                System.out.println(name+"被"+sup.getName()+"攻击了,血量仅剩"+blood+"滴");
}
}


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

       //定义一个姓名属性
         private String name;
        //定义一个血量属性
         private int blood;

       //定义一个带姓名参数的构造方法
        public Boss(String name){
            this.name="无名";
}
        //重载一个带血量参数的构造方法
         public Boss(int blood){
              this.blood=10;
       }
         //设置姓名属性值的方法
         public void setName(String n){
              name=n;//将参数n的值赋给姓名属性name
}
           //获取姓名属性值的方法
         public String getName(){
                return name;
}
            //设置血量属性值的方法
            public void setBlood(int m){
                 blood=m;//将参数m的值赋给血量属性blood
}           
             //获取血量属性值的方法
             public int getBlood(){
                   return blood;

             //定义一个与Superman战斗的方法
              public void fighting(Superman sup){
                 blood--;//血量减1
                System.out.println(name+"被"+sup.getName()+"攻击了,血量仅剩"+blood+"滴");
}
}
       4)//定义一个Fighting类
public class Fighting{

         //定义程序的入口主函数
          public static void main(String [] args){
            
             //实例化一个Superman类的对象
            Superman sup = new Superman();
             //调用设置姓名的方法
             sup.setName("奥特曼");
             //调用设置血量的方法
             sup.setBlood(20);

              //实例化一个Monster类的对象
              Monster mon = new Monster("zzz");
               //调用设置姓名的方法
               mon.setName("小怪兽");
               //调用设置血量的方法
               mon.setBlood(10);

               //实例化一个Boss类的对象
               Boss bo = new Boss("zzz");
               //调用设置姓名的方法
                bo.setName("boss");
                //调用设置血量的方法
                 bo.setBlood(10);

               //定义回合数
               int i=20;
//开始进行20回合的较量,每回合奥特曼有2次攻击机会,小怪兽和boss各有一次攻击机会
                while(i>0){
                    //调用战斗方法
                    sup.fighting(mon);
                    //调用战斗方法
                     sup.fighting(bo);
                     //调用战斗方法
                      mon.fighting(sup);
                     //调用战斗方法
                      bo.fighting(sup);

                         i--;

                      //将奥特曼目前的血量值赋给sblood
                    int sblood =sup.getBlood();
                     //将小怪兽目前的血量值赋给mblood
                    int mblood=mon.getBlood();
                       //将boss目前的血量值赋给bblood
                     int bblood=bo.getBlood();

                   //如果奥特曼的血量先为0,输出最终结果
                    if(sblood==0){
                       System.out.println("奥特曼战败!小怪兽和boss战胜!");
                        break;//跳出循环
}
                   //如果小怪兽的血量先为0,输出最终结果
                     else if(mblood==0){
                         System.out.println("奥特曼战胜!小怪兽和boss战败!");

                           break;//跳出循环
}
                    //如果boss的血量先为0,输出最终结果
                      else if(bblood==0){
                         System.out.println("奥特曼战胜!小怪兽和boss战败!");
                     break;//跳出循环
}
}
}
}

4.编码过程中应注意的一些问题:
a.在这个游戏中,构造方法可用可不用。
b.若是选择使用构造方法,则要注意:自己在主函数中实例化的对象的构造方法是否带有参数,如果带参数,那么在实例化这个构造方法的时候我们也要带上参数,
exp:  在对象的类中有:    public Boss(String name){
                           this.name="无名";
}
      则在主函数中实例化为:Monster mon = new Monster("zzz");

反之,如果不带参数,那么在实例化这个构造方法的时候我们也不必带上参数。
exp:  在对象的类中有:  public Superman(){
                            this.blood=10;
                this.name="无名";
                         }
        则在主函数中实例化为:Superman sup = new Superman();
  c.在一方血量为0时,输出结果后记得要加上“break”,跳出循环;否则战斗将继续进行。


分享到:
评论

相关推荐

    Java中的类和对象总结

    ### Java中的类和对象总结 #### 一、类与对象的概念 在面向对象编程中,类(Class)和对象(Object)是两个核心概念。类是对象的抽象模板,它定义了对象的数据结构(即属性)和行为(即方法)。而对象则是类的具体...

    类和对象总结

    总结,类和对象是构建复杂软件系统的基石。熟练掌握它们的概念、使用方式以及相关特性,对于理解和编写高质量的面向对象程序至关重要。通过不断的实践和学习,我们可以逐步提升在OOP领域的专业技能。

    类和对象、构造方法总结

    在编程领域,面向对象编程(Object-Oriented Programming, OOP)是一种常见的编程范式,其中类和对象是核心概念。本篇文章将深入探讨类与对象以及构造方法的相关知识点。 首先,类是对象的蓝图,它定义了一组特性和...

    类对象和类指针

    总结,类对象和类指针在不同场景下各有优势。类对象更适合于轻量级对象和效率要求高的场合,而类指针则适用于需要动态绑定和管理大量对象的情况。理解并熟练运用这两种方式,能够帮助我们更好地设计和实现面向对象的...

    C++ 类与对象习题

    - **类定义**: C++中用来描述一类对象的共同特征和行为的概念。它是一个抽象数据类型,包含了数据成员和成员函数。 - **成员函数**: 定义在类中的函数,用于实现类的行为。 - **数据成员**: 定义在类中的变量,用于...

    C++ 类和对象

    总结一下,C++的类和对象是实现面向对象编程的基础。类定义了对象的结构和行为,而对象是类的实例,拥有类定义的属性和方法。理解并熟练掌握类和对象的使用,对于任何C++程序员来说都是至关重要的。通过阅读《C++类...

    类与对象-java实验报告

    本次实验的目的是深入理解和掌握Java编程语言中的类与对象的概念,通过设计和实现一系列几何图形类,包括点、直线、三角形、矩形、正方形、圆形和椭圆,来实践面向对象的设计方法。实验要求学生不仅能够创建数据域和...

    类和对象的基本概念和用法

    类和对象的基本概念和用法 类和对象是面向对象编程(Object-Oriented Programming,OOP)的基础概念。...总结:在类作用域里面,不管什么属性的成员都能访问,在类外面,只能访问公有成员,不能访问私有和保护成员。

    类与对象实验

    在`main()`函数中,创建了两个`score`对象`stu1`和`stu2`,每个对象都有自己的构造函数,用于初始化`english_score`。然后,通过`printscore()`函数输出它们的分数。实验步骤详细描述了如何使用调试器观察类的构造...

    面向对象编程:类和对象

    本文将深入探讨C#2005中面向对象编程的基石——类和对象,通过解析给定文件的信息,提炼并扩展相关知识点。 ### 类的概念 类在面向对象编程中扮演着中心角色,它不仅封装了数据,还封装了对这些数据进行操作的方法...

    使用类的对象还是指针

    在这篇文章中,我们将总结了使用类的对象还是指针的主要区别和使用场景,希望能够帮助有疑问的朋友更好地理解和应用。 首先,我们需要了解类的对象和指针的存储空间上的区别。使用new关键字创建的对象存储在堆上,...

    类与对象的关系

    在C#中,创建类意味着定义了一组属性和方法,这些属性和方法描述了该类的对象将会拥有什么数据和可以执行什么行为。在面向对象的程序设计中,类是对现实世界中具有相似性质的对象的抽象和封装。 在上机实验中,学生...

    java类与对象实验报告.docx

    在Java编程语言中,类是面向对象编程的基础,它用于封装数据和操作这些数据的方法。在给定的实验中,有两个主要的类被创建:`complex1` 和 `Complex`,它们都用来表示复数,并提供了复数的加法和减法运算。 1. **...

    对于类和对象的个人理解

    总结来说,类和对象是面向对象编程的核心,它们定义了软件组件的结构和行为。通过合理地设计和实现类与对象,我们可以构建出复杂、模块化的软件系统。在开发过程中,借助源码管理和开发工具,我们可以更高效地实现和...

    Java面向对象总结

    ### Java面向对象总结 #### 一、继承 继承是面向对象编程中的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现了代码的复用。 1. **子类继承父类就拥有了父类的属性和方法**:当一...

    总结一——浅谈Java的类与对象

    总结来说,Java的类与对象是实现面向对象编程的基础,它们帮助我们构建可重用、可扩展的代码结构。理解并熟练掌握这些概念对于成为一个合格的Java开发者至关重要。通过阅读“浅谈Java的类与对象”这篇文档,你将能更...

    Java第4章 认识类和对象.含源代码

    在Java编程语言中,类和对象是核心概念,它们构成了面向对象编程的基础。本章将深入探讨这两个概念,以及如何在实际编程中运用它们。源代码的提供将帮助我们更直观地理解这些理论知识。 首先,我们需要理解什么是类...

    Jsp内置对象session总结

    JSP 内置对象 Session 总结 Session 对象是一种 JSP 内置对象,用于管理客户端与服务器端之间的会话期。下面是 Session 对象的详细介绍。 什么是 Session Session 对象是一个 JSP 内置对象,它在第一个 JSP 页面...

Global site tag (gtag.js) - Google Analytics