zoukankan      html  css  js  c++  java
  • day08作业--------------Java面向对象JavaObject01

    作业:

    1.定义一个Student类:
      a. 要求包含4个成员变量 String name, int age, boolean isMale, int sno
      b. 分别定义5个构造方法
        分别为无参构造
        初始化name成员变量值的1参构造方法
        初始化name 和 sno两个成员变量值的2参构造方法
        初始化name,age,isFimale三个成员变量值的3参构造方法
        初始化name,age, isMale,sno这4个成员变量值的4参构造方法
      c. 再定义一个成员方法
        public void print() {
          System.out.println(name + "---" + age + "---" + (isMale ? "男" : "女") + "---" + sno);}

    2. 在第一题的基础上,创建两个Student对象分别为stu1和stu2
      要求stu1对象的四个成员变量name, age, isMale, sno的值分别为“张三”,18,true, 1
      要求stu2对象的四个成员变量name, age, isMale, sno的值分别为“李四”,25,false, 2
      然后在两个对象上调用print()方法即
      stu1.print(), stu2.print(),两次调用方法输出的结果相同吗?
      为什么?(提示:在方法体中访问name成员变量,直接用成员变量名name,是this.name的简写形式)

    3. 在定义类MyStudent(类中定义的成员变量和成员方法同Student,同时在MyStudent类中定义和Student相似的5个构造方法)的基础上,根据需要修改MyStudent相应构造方法的方法体,要求实现
      MyStudent st = new MyStudent();
      st.print();
    这两句代码打印出的结果是 麻花疼---100---男---1000

    4. 如下代码所示,分别将一个double类型的数据和一个引用类型的数据传入某个方法,在方法内分别对对应的数据进行一些运算 ,经过运算之后,double类型的数据和引用类型的数据分别是什么? 并解释下,为什么

     1 public class Demo4 {
     2     public static void main(String[] args) {
     3         Person p = new Person();
     4         p.name = "我是马化腾";
     5         p.age = 50;
     6         PersonTest(p);
     7         double money = 100;
     8         doubleTest(money);
     9         System.out.println("方法执行后的money:"+money);
    10         System.out.println("方法执行后的name:"+p.name);
    11     }
    12     private static void doubleTest(double money) {
    13         money = 200;
    14     }
    15     public static void PersonTest(Person person) {
    16         System.out.println("传入的person的name:"+person.name);
    17         person.name = "我是马云";
    18         System.out.println("方法内重新赋值后的name:"+person.name);
    19     }
    20 }
    21 class Person{
    22     String name;
    23     int age;
    24 }

    答案;

    1.

     1 package com.day008;
     2 /*
     3  * 1.定义一个Student类:
     4    a. 要求包含4个成员变量 String name, int age, boolean isMale, int sno
     5    b. 分别定义5个构造方法 
     6       分别为无参构造
     7  初始化name成员变量值的1参构造方法
     8  初始化name 和 sno两个成员变量值的2参构造方法
     9  初始化name,age,isFimale三个成员变量值的3参构造方法
    10  初始化name,age, isMale,sno这4个成员变量值的4参构造方法
    11    c. 在定义一个成员方法
    12       public void print() {
    13    System.out.println(name + "---" + age + "---" + (isMale ? "男" : "女") + "---" + sno);
    14  */
    15 public class Demo1 {
    16     public static void main(String[] args) {
    17         //0.使用无参的构造方法
    18         Student stu0 = new Student();
    19         System.out.println(stu0.name+"--"+stu0.age+"--"+stu0.isMale+"--"+stu0.sno);
    20         //1.使用1参的构造方法
    21         Student stu1 = new Student("张三");
    22         System.out.println(stu1.name+"--"+stu1.age+"--"+stu1.isMale+"--"+stu1.sno);
    23         //2.使用2参的构造方法
    24         Student stu2 = new Student("李四",04);
    25         System.out.println(stu2.name+"--"+stu2.age+"--"+stu2.isMale+"--"+stu2.sno);
    26         //3.使用3参的构造方法
    27         Student stu3 = new Student("王五",25,true);
    28         System.out.println(stu3.name+"--"+stu3.age+"--"+stu3.isMale+"--"+stu3.sno);
    29         //4.使用4参的构造方法
    30         Student stu4 = new Student("赵六",26,true,06);
    31         System.out.println(stu4.name+"--"+stu4.age+"--"+stu4.isMale+"--"+stu4.sno);
    32         //调用成员方法
    33         stu4.print();
    34     }
    35 }
    36 //定义学生类
    37 class Student{
    38     //a.定义4个成员变量
    39     String name;
    40     int age;
    41     boolean isMale;
    42     int sno;
    43     
    44     //分别定义5个构造方法 
    45     //0.定义无参构造
    46     public Student() {
    47         name = "不知名字";
    48         age = -1;
    49         isMale = true;
    50         sno = -1;
    51         System.out.println("0.使用了无参的构造方法Student() ");
    52     }
    53     
    54     
    55     //1.初始化name成员变量值的1参构造方法
    56     public Student(String name) {
    57         this.name = name;
    58         System.out.println("1.使用了1参的构造方法Student(String name) ");
    59     }
    60     //2.初始化name 和 sno两个成员变量值的2参构造方法
    61     public Student(String name, int sno) {
    62         this.name = name;
    63         this.sno = sno;
    64         System.out.println("2.使用了2参的构造方法Student(String name, int sno) ");
    65     }
    66     //3.初始化name,age,isFimale三个成员变量值的3参构造方法
    67     public Student(String name, int age, boolean isMale) {
    68         this.name = name;
    69         this.age = age;
    70         this.isMale = isMale;
    71         System.out.println("3.使用了3参的构造方法Student(String name, int age, boolean isMale) ");
    72     }
    73     //4.初始化name,age, isMale,sno这4个成员变量值的4参构造方法
    74     public Student(String name, int age, boolean isMale, int sno) {
    75         this.name = name;
    76         this.age = age;
    77         this.isMale = isMale;
    78         this.sno = sno;
    79         System.out.println("4.使用了4参的构造方法Student(String name, int age, boolean isMale, int sno )");
    80     }
    81     
    82     
    83     //c.定义成员方法
    84     public void print() {
    85         System.out.println(this.name+"调用print()成员方法");
    86         System.out.println(name +" "+age+" "+(isMale ? "男" : "女")+" "+sno);
    87     }
    88     
    89     
    90 }

    运行结果:

     2.

     1 package com.day008;
     2 /*
     3  * 2. 在第一题的基础上,创建两个Student对象分别为stu1和stu2
     4    要求stu1对象的四个成员变量name, age, isMale, sno的值分别为“张三”,18,true, 1
     5    要求stu2对象的四个成员变量name, age, isMale, sno的值分别为“李四”,25,false, 2
     6    然后在两个对象上调用print()方法即 
     7    stu1.print(), stu2.print(),两次调用方法输出的结果相同吗?
     8    为什么?(提示:在方法体中访问name成员变量,直接用成员变量名name,是this.name的简写形式)
     9  */
    10 public class Demo2 {
    11     public static void main(String[] args) {
    12         Student stu1 = new Student("张三",18,true,1);
    13         Student stu2 = new Student("李四",25,false,2);
    14         stu1.print();
    15         stu2.print();
    16     }
    17     
    18 }

    运行结果:

     原因:

    a.在不同对象上调用print方法打印出的结果不同。

    b.在stu1对象上调用print()方法,打印的结果是stu1对象的成员变量的值

       在stu2对象上调用print()方法,打印的结果是stu2对象的成员变量的值

    c.之所以出现这样的结果,是因为在代码中输出name等成员变量的值,其实相当于,访问的是this.name, this.age, this.isMale, this.sno

       又因为,this代表的是当前对象,即在哪个对象上访问成员方法print(),  print()方法中的this就代表哪个对象,因此,在两个不同对象上调用print()方法,访问到达分别是两个不同对象的成员变量的值。

    3.

     1 public class MyStudent {
     2 
     3     String name;
     4     int age;
     5     boolean isFemale;
     6     int sno;
     7 
     8     /*
     9      * 无参构造方法
    10      */
    11     public MyStudent() {
    12         // 这里两种实现方式
    13         // 第一种,最简单的方式,即直接在无参构造方法中调用4参构造方法给对象的成员变量
    14         // 赋予自己规定的初值
    15         // this("麻花疼", 100, true, 1000);
    16 
    17         // 第二种方式,这几个构造方法的层层调用
    18         // 无参调用——>1参构造——》2参构造——》3参构造 -》4参构造
    19         this("麻花疼");
    20 
    21     }
    22 
    23     /*
    24      * 一参构造方法用来初始化name成员变量的值
    25      */
    26     public MyStudent(String name) {
    27         this(name, 1000);
    28     }
    29 
    30     /*
    31      * 两参构造方法用来初始化name和sno成员变量的值
    32      */
    33     public MyStudent(String name, int sno) {
    34         this(name, 100, sno);
    35     }
    36 
    37     /*
    38      * 三参构造方法用来初始化name,age和isFemale成员变量的值
    39      */
    40     public MyStudent(String name, int age, int sno) {
    41         this(name, age, true, sno);
    42     }
    43 
    44     /*
    45      * 四参构造方法用来初始化name,age和isFemale和sno成员变量的值
    46      */
    47     public MyStudent(String name, int age, boolean isFemale, int sno) {
    48         this.name = name;
    49         this.age = age;
    50         this.isFemale = isFemale;
    51         this.sno = sno;
    52     }
    53 
    54     public void print() {
    55         System.out.println(name + "---" + age + "---" + (isFemale ? "男" : "女") + "---" + sno);
    56     }
    57 
    58 }

    笨办法:

     1 package com.day008;
     2 /*
     3  * 3. 在定义类MyStudent(类中定义的成员变量和成员方法同Student,
     4    同时在MyStudent类中定义和Student相似的5个构造方法)的基础上,
     5    根据需要修改MyStudent相应构造方法的方法体,要求实现
     6       MyStudent st = new MyStudent();
     7       st.print();
     8 这两句代码打印出的结果是 麻花疼---100---男---1000
     9 
    10  */
    11 public class Demo3 {
    12     public static void main(String[] args) {
    13         MyStudent st = new MyStudent();
    14         st.print();
    15     }
    16 }
    17 class MyStudent{
    18     //a.定义4个成员变量
    19     String name;
    20     int age;
    21     boolean isMale;
    22     int sno;
    23     
    24     //分别定义5个构造方法 
    25     //0.定义无参构造
    26     public MyStudent() {
    27         this("马化腾",100,true,1000);
    28         //System.out.println("0.使用了无参的构造方法Student() ");
    29     }
    30     
    31     
    32     //1.初始化name成员变量值的1参构造方法
    33     public MyStudent(String name) {
    34         this.name = name;
    35         //System.out.println("1.使用了1参的构造方法Student(String name) ");
    36     }
    37     //2.初始化name 和 sno两个成员变量值的2参构造方法
    38     public MyStudent(String name, int sno) {
    39         this.name = name;
    40         this.sno = sno;
    41         System.out.println("2.使用了2参的构造方法Student(String name, int sno) ");
    42     }
    43     //3.初始化name,age,isFimale三个成员变量值的3参构造方法
    44     public MyStudent(String name, int age, boolean isMale) {
    45         this.name = name;
    46         this.age = age;
    47         this.isMale = isMale;
    48         System.out.println("3.使用了3参的构造方法Student(String name, int age, boolean isMale) ");
    49     }
    50     //4.初始化name,age, isMale,sno这4个成员变量值的4参构造方法
    51     public MyStudent(String name, int age, boolean isMale, int sno) {
    52         this.name = name;
    53         this.age = age;
    54         this.isMale = isMale;
    55         this.sno = sno;
    56         //System.out.println("4.使用了4参的构造方法Student(String name, int age, boolean isMale, int sno )");
    57     }
    58     
    59     
    60     //c.定义成员方法
    61     public void print() {
    62         //System.out.println(this.name+"调用print()成员方法");
    63         System.out.println(name +"--"+age+"--"+(isMale ? "男" : "女")+"--"+sno);
    64     }
    65     
    66     
    67 }

    运行结果:

     4.

     1 package com.day008;
     2 /*
     3  * 如图所示,分别将一个double类型的数据和一个引用类型的数据传入某个方法,
     4  * 在方法内分别对对应的数据进行一些运算 ,经过运算之后,
     5  * double类型的数据和引用类型的数据分别是什么? 并解释下,为什么
     6  */
     7 public class Demo4 {
     8     public static void main(String[] args) {
     9         Person p = new Person();
    10         p.name = "我是马化腾";
    11         p.age = 50;
    12         PersonTest(p);
    13         double money = 100;
    14         doubleTest(money);
    15         System.out.println("方法执行后的money:"+money);
    16         System.out.println("方法执行后的name:"+p.name);
    17     }
    18     private static void doubleTest(double money) {
    19         money = 200;
    20     }
    21     public static void PersonTest(Person person) {
    22         System.out.println("传入的person的name:"+person.name);
    23         person.name = "我是马云";
    24         System.out.println("方法内重新赋值后的name:"+person.name);
    25     }
    26 }
    27 class Person{
    28     String name;
    29     int age;
    30 }

    运行结果:

              

     原因:

      a. PersonTest(Person person)方法接受的是引用数据类型的参数,该引用类型的参数值,在调用方法和被调用方法中各有一份,但是两个参数对应的数据只有一份,即两个引用变量的值指向的是同一个对象,而方法体中,修改的同一个对象的成员变量值,所有在方法执行完之后,通过实际参数的引用值,访问同一个对象,所有访问到的是对象成员变量被修改后的值

      b.  对于doubleTest(double money)方法而言,接收的是基本数据类型的参数,参数值在调用方法(main方法)和被调用方法(doubleTest方法)中各有一份,所以,在被调用方法体中,修改的其实只是被调用方法中那一份形式参数的值,所以在方法执行完之后,实际参数的值并未被修改。

  • 相关阅读:
    ue4 官网IK流程记录
    ue4-C++中加载一个蓝图类(二)-C++中绑定Blueprint武器
    UE4 c++ 创建刚体Cube
    UE4的AI学习(1)——基本概念
    UE4的AI学习(2)——官方案例实例分析
    行为树(Behavior Tree)实践(1)– 基本概念
    Animation Blueprint, Set Custom Variables Via C++
    ue4 c++ anim notify
    ue4 动画相关方法杂记
    [UE4]Montage动画设置Slot
  • 原文地址:https://www.cnblogs.com/dust2017/p/12730886.html
Copyright © 2011-2022 走看看