• Unit4如何使用类


    Unit4如何使用类

    一、动手任务

    1. 创建对象,调用方法

      public class Student {
         String studentID;
         String studentName;
         String gender = "男";
         int age;
         String nation;

         public String eat(String food) {
             System.out.println("正在吃" + food);
             return "好吃";
        }

         public void speak() {
             System.out.println("大家好!");
        }

         public void bite(String name) {
             System.out.println(name + ":被咬了");
        }

         public String bite(String school, String studentName) {
             System.out.println(school + "学校的" + studentName + ":被咬了");
             return studentName + "喊:疼啊!";
        }
      }
      public class Test {
         public static void main(String[] args) {
             Student student = new Student();
             System.out.println("stu对象的属性:studentID的值是"+student.studentID);
             System.out.println("stu对象的属性:studentName的值是"+student.studentName);
             System.out.println("stu对象的属性:gender的值是"+student.gender);
             System.out.println("--------------以上是属性,以下是方法");
             student.speak();//调用speak方法
             String eatResult = student.eat("烤鸡翅");
             System.out.println("eat方法调用的结果是" + eatResult);
             student.bite("杨孟");
             String biteResult = student.bite("太原工业学院", "张荣");
             System.out.println("bite方法调用的结果是" + biteResult);
        }
      }

      属性有默认值,默认值规则:整数和字符型默认位0,小数默认为0.0,布尔类型默认为false,引用类型默认为null

    2. 使用默认构造方法创建对象

      • 什么是构造方法?名字和类名相同且没有返回类型

      • 构造方法的作用是啥?与new配合创建对象,给对象的属性赋值

      • 默认构造方法,如果在一个类里,程序员没有明确提供构造方法,JVM会自动提供一个默认的构造方法,默认构造方法没有形参,方法体为空。如果程序员明确提供了构造方法,JVM将不再提供默认的。

        简而言之:如果我们没有,JVM会提供,我们有,JVM不再提供

      // JVM默认构造方法
      public class Person {
         String name;
         int age;
         String nation;

         public static void main(String[] args) {
             // 使用默认的构造方法
             Person p = new Person();
             System.out.println(p.age);
             System.out.println(p.name);
        }
      }
      // 等价于以下代码public class Person {
         String name;
         int age;
         String nation;

         public Person() {
             
        }

         public static void main(String[] args) {
             // 使用默认的构造方法
             Person p = new Person();
             System.out.println(p.age);
             System.out.println(p.name);
        }
      }
      public class Person {
         String name;
         int age;
         String nation;

         public Person() {
             
        }

         public static void main(String[] args) {
             // 使用默认的构造方法
             Person p = new Person();
             System.out.println(p.age);
             System.out.println(p.name);
        }
      }
    3. 使用有参数构造方法创建对象

      public class Person {
         String name;
         int age;
         String nation;

         public Person(String n,int a) {
             name = n;
             age = a;
        }

         public Person(String n, int a, String na) {
             name = n;
             age = a;
             nation = na;
        }

         public static void main(String[] args) {
             Person person1 = new Person("刘翔", 20);
             System.out.println(person1.age);
             System.out.println(person1.name);
             System.out.println(person1.nation);
             System.out.println("------------------------");
             Person person2 = new Person("王志勇", 21, "广东");
             System.out.println(person2.name);
             System.out.println(person2.age);
             System.out.println(person2.nation);
        }
      }
    4. 从键盘接收数据

      • 导入包:java.util.Scanner

      • 类功能:用户输入两个整数,程序做加法和减法计算

      public class Calc {
         public int add(int num1, int num2) {
             return num1 + num2;
        }

         public int sub(int num1, int num2) {
             return num1 - num2;
        }

         public static void main(String[] args) {
             Scanner scanner = new Scanner(System.in);
             System.out.println("请输入第一个数字");
             int first = scanner.nextInt();
             System.out.println("请输入第二个数字");
             int second = scanner.nextInt();
             Calc calc = new Calc();
             int addResult = calc.add(first, second);
             System.out.println("加法结果:" + addResult);
             int subResult = calc.sub(first, second);
             System.out.println("减法结果:" + subResult);
        }
      }

    二、代码分析

    1. 代码输出结果

      public class Person {
         String name;
         int age;
         String nation;

         public Person() {
             System.out.println("Person");
        }

         public void Person() {
             System.out.println("123456");
        }

         public static void main(String[] args) {
             Person p = new Person();
             p.Person();
        }
      }
      // 结果:
      Person
      123456
    2. 属性值的变化过程

      public class Person {
         String name;
         int age=21;
         String nation;

         public Person(int a) {
             age = a;
        }
         
         public static void main(String[] args) {
             Person p = new Person(19);
             System.out.println(p.age);
        }
      }
      // age最初是0,变成21,最后是19

    三、面试题

    1. 什么样的方法是构造方法?

      名字和类名相同,且没有返回类型

    2. 能不能用对象调用构造方法?

      不能,只能用new来调用构造方法

    3. 构造方法的作用是什么?

      与new配合创建对象,给对象的属性赋值

    4. 属性的默认值规则?

      整数和字符型默认为0,浮点型默认为0.0,布尔型默认为false,引用类型默认为null

    5. 属性值的变化过程?

      默认值,显示赋值,构造方法赋值

    6. 一般方法名字能否和类名相同?

      可以

    四、任务

    1. 教务系统中需要计算学生年龄,设计学生类,提供计算年龄的方法,根据出生年份计算年龄。用户输入出生年份,程序输出年龄

      public class StudentAge {
         /**
          * 根据出生年份计算年龄
          * @param birth
          * @return 计算得到的年龄
          */
         public int calAge(int birth) {
             GregorianCalendar gregorianCalendar = new GregorianCalendar();
             int year = gregorianCalendar.get(Calendar.YEAR);
             return year-birth;
        }

         public static void main(String[] args) {
             Scanner scanner = new Scanner(System.in);
             System.out.println("请输入用户的出生年份");
             int birth = scanner.nextInt();
             StudentAge studentAge = new StudentAge();
             System.out.println("用户今年" + studentAge.calAge(birth) + "岁了");
        }
      }
    2. 编写并使用教务系统中的老师类Teacher,具体包括:

      属性:教师工号,教师姓名,教师年龄,教师学历,教师职称,月薪。其中教师学历默认为"硕士",教师职称默认为”讲师“,月薪默认为3000;

      提供3个构造方法,第一个不带参数,第二个对教师姓名和教师职称赋值;第三个对所有属性赋值。

      提供3个一般方法,:

      计算教师年龄的方法:参数是教师出生年份,返回值是教师年龄。计算教师工龄的方法:参数是教师入职年份,返回值是教师工龄

      计算教师年薪:按13个月计算

      编写程序,调用以上三个方法、

      public class Teacher {
         /**
          * 教师工号
          */
         int id;
         /**
          * 教师姓名
          */
         String name;
         /**
          * 教师年龄
          */
         int age;
         /**
          * 教师学历
          */
         String education = "硕士";
         /**
          * 教师职称
          */
         String professional = "讲师";
         /**
          * 教师月薪
          */
         int sal = 3000;

         public Teacher() {
        }

         public Teacher(String name, String professional) {
             this.name = name;
             this.professional = professional;
        }

         public Teacher(int id, String name, int age, String education, String professional, int sal) {
             this.id = id;
             this.name = name;
             this.age = age;
             this.education = education;
             this.professional = professional;
             this.sal = sal;
        }

         /**
          * 计算教师年龄
          * @param birth 教师的出生年份
          * @return 教师年龄
          */
         public int calAge(int birth) {
             GregorianCalendar gregorianCalendar = new GregorianCalendar();
             int year = gregorianCalendar.get(Calendar.YEAR);
             return year - birth;
        }

         /**
          * 计算教师工龄
          * @param begin 入职年份
          * @return 教师工龄
          */
         public int calWorkYear(int begin) {
             GregorianCalendar gregorianCalendar = new GregorianCalendar();
             int year = gregorianCalendar.get(Calendar.YEAR);
             return year - begin;
        }

         /**
          * 计算教师的年薪
          * @return 教师年薪
          */
         public int calYearSal() {
             return this.sal * 13;
        }

         public static void main(String[] args) {
             Teacher teacher1 = new Teacher();
             int age = teacher1.calAge(1997);
             int workYear = teacher1.calWorkYear(1975);
             int sal = teacher1.calYearSal();
             System.out.println("该教师的年龄为:"+age+"岁,工龄为:"+workYear+"年,年薪为:"+sal+"元");
        }
      }
    3. 在教务系统中,老师输入3位学生张彤,李楠和程浩然的Java成绩,程序输出他们的平均分

      public class Score {
         public int avgScore(int a,int b,int c) {
             return (a+b+c)/3;
        }

         public static void main(String[] args) {
             Scanner scanner = new Scanner(System.in);
             System.out.println("请输入第一位同学的成绩");
             int first = scanner.nextInt();
             System.out.println("请输入第二位同学的成绩");
             int second = scanner.nextInt();
             System.out.println("请输入第三位同学的成绩");
             int third = scanner.nextInt();
             Score score = new Score();
             int avg = score.avgScore(first, second, third);
             System.out.println("这三位同学的平均分为:" + avg);
        }
      }



    软件下载提取码:qwer
  • 相关阅读:
    如何成为合格的技术面试官?
    互联网上有多少个网站?
    前端领域不需要架构师?
    WebAssembly 简介
    git常用命令
    剑指offer-基本思想学习(未包括代码)
    OS知识点总结
    对软件工程的一点认识
    项目实现过程的每个阶段
    编译原理课程设计总结
  • 原文地址:https://www.cnblogs.com/ty0910/p/14381200.html
Copyright © 2020-2023  润新知