实验五|实验五 面向对象基础(一)

一、实验预热
1、面向对象与面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
2、面向对象的三大特性
封装、继承、多态
3、用自己的话描述类与对象的关系
类与对象的关系就如模具和铸件的关系。
类的实例化结果就是对象,而对一组对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。
4、堆内存和栈内存中存储的分别是什么信息?
Java把内存划分成两种:一种是栈内存,一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new创建的对象。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
在堆中产生了一个对象后,还会在栈中定义一个特殊的变量,让栈中这个变量的取值等于对象在堆内存中的首地址,栈中的这个变量就成了对象的引用变量。引用变量就相当于是为对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的对象。
二、实验内容
1、编写学生类,要求学生类的成员属性包括姓名、学号、性别,学生类的成员方法用来打印输出学生的姓名、学号、性别(不初始化成员变量,只声明成员变量)。
代码:

class Student { String name; int id; String gender; @Override public String toString() { return "Student [name=" + name + ", id=" + id + ", gender=" + gender + "]"; } }

2、在实验1的基础上编写学生类的测试类,打印输出学生类的学生的信息
1)不进行任何成员变量赋值,直接通过调用学生类的成员方法打印出来学生类的学生默认信息。
代码:
package leif.tests; public class ExperimentalReport { public static void main(String[] args) { Student student = new Student(); System.out.println(student.toString()); } }class Student { String name; int id; String gender; @Override public String toString() { return "Student [name=" + name + ", id=" + id + ", gender=" + gender + "]"; } }

结果截图:

实验五|实验五 面向对象基础(一)
文章图片
image.png 2)对学生类的成员变量进行直接初始化,并调用成员方法打印出来自己的信息,即学生类的成员变量初始化值为自己的姓名、学号、性别。
代码:
package leif.tests; public class ExperimentalReport { public static void main(String[] args) { Student student = new Student("Leif", 23, "男"); System.out.println(student.toString()); } }class Student { String name; int id; String gender; public Student(String name, int id, String gender) { this.name = name; this.id = id; this.gender = gender; }@Override public String toString() { return "Student [name=" + name + ", id=" + id + ", gender=" + gender + "]"; } }

结果截图:

实验五|实验五 面向对象基础(一)
文章图片
image.png 3)在原来的学生类基础上添加一条属性成绩,在main方法中一步声明并实例化对象后,通过对象访问对学生对象的属性进行初始化,并打印出来学生对象的信息。
代码:
package leif.tests; public class ExperimentalReport { public static void main(String[] args) { Student student = new Student(); student.setName("Leif"); student.setId(23); student.setGender("男"); student.setScore(100); System.out.println(student.toString()); } }class Student { String name; int id; String gender; double score; public String getName() { return name; }public void setName(String name) { this.name = name; }public int getId() { return id; }public void setId(int id) { this.id = id; }public String getGender() { return gender; }public void setGender(String gender) { this.gender = gender; }public double getScore() { return score; }public void setScore(double score) { this.score = score; }@Override public String toString() { return "Student [name=" + name + ", id=" + id + ", gender=" + gender + ", score=" + score + "]"; } }

结果截图:

实验五|实验五 面向对象基础(一)
文章图片
image.png 3、一个景区根据游人的年龄收取不同价格的门票。请编写游人类,正确创建和使用对象,根据年龄段决定需要购买的门票价格(大于等于18岁且小于等于60岁票价20元、小于18岁或大于60岁免票)并输出,输出效果如下图所示。

实验五|实验五 面向对象基础(一)
文章图片
image.png
代码:
package leif.tests; import java.util.Scanner; public class ExperimentalReport { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) { System.out.print("请输入姓名:"); String name = scanner.next(); if ("n".equals(name)) { System.out.println("退出程序"); break; }System.out.print("请输入年龄:"); int age = scanner.nextInt(); Visitor visitor = new Visitor(name, age); System.out.print(visitor.getName() + "的年龄为:" + visitor.getAge() + ",门票"); if (age >= 18 && age <= 60) { System.out.println("价格为:20元"); } else { System.out.println("免费"); }System.out.println(); }scanner.close(); } }class Visitor { String name; int age; public Visitor(String name, int age) { this.name = name; this.age = age; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; } }

【实验五|实验五 面向对象基础(一)】结果截图:

实验五|实验五 面向对象基础(一)
文章图片
image.png

    推荐阅读