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
原文地址:https://www.cnblogs.com/ty0910/p/14381200.html