Day19---学习Java第二弹

2021-07-29

类和对象

三、类中的匿名对象

没名字的对象称为匿名对象,对象的名字按照之前的内存关系来讲,在栈内存之中,

而对象的具体内容在堆内存之中保存,这样,没有栈内存指向堆内存空间,就是一个匿名对象。

范例:

 1 package com.wz.classandobj;
 2 
 3 class Book{
 4 
 5     private String title;
 6     private double price;
 7 
 8     public Book(String title, double price) {
 9         this.title = title;
10         this.price = price;
11         System.out.println("有俩个参数的构造方法");
12     }
13 
14     public void getInfo(){
15         System.out.println("图书的名称:"+title+" 图书的价格:"+price);
16     }
17 }
18 
19 public class TestDemo {
20         public static void main(String args[]) {
21             //匿名对象
22             new Book("Java开发",89.9).getInfo();
23 
24         }
25 }

运行结果:

有俩个参数的构造方法

图书的名称:Java开发 图书的价格:89.9

 

匿名对象由于没有对应的栈内存指向,所以只能使用一次,一次之后就将成为垃圾,并且等待被GC回收释放。

 

 

典型例题:

1.实验目的

掌握类的声明、对象的创建、方法的定义和调用、构造函数的使用。

2.实验内容

1)定义一个表示学生信息的类Student,要求如下:

① 类Student的成员变量:

sNO 表示学号;

sName 表示姓名;

sSex 表示性别;

sJava 表示Java课程成绩;

② 类Student的方法成员:

getNo():获得学号;

getName():获得姓名;

getSex():获得性别;

getAge()获得年龄;

getJava():获得Java 课程成绩

2)按(1)中学生类Student的定义,创建两个该类的对象,存储并输出两个学生的信息计算机并输出这两个学生Java语言成绩的平均值。

3)创建第 (1)题的Student类的5个对象,求他们Java语言成绩的最大值和最小值。

4)根据下面的要求实现圆类Circle。

① 圆类Circle的成员变量:

radius表示圆的半径。

② 圆类Circle的方法成员:

Circle():构造方法,将半径置0

Circle(double r):构造方法,创建Circle对象时将半径初始化为r

double getRadius():获得圆的半径值

double getPerimeter():获得圆的周长

void disp():将圆的半径、圆的周长和圆的面积输出到屏幕

3.实验代码

  1 package seconddemo;
  2 public class SecondDemo {
  3     public static class Student {//学生类
  4         //成员变量
  5         private String sNo;
  6         private String sName;
  7         private String sSex;
  8         private int sAge;
  9         private double sJava;
 10         public void setStudent(String no, String name, String sex, int age, int java) {
 11             sNo = no;
 12             sName = name;
 13             sSex = sex;
 14             sAge = age;
 15             sJava = java;
 16         }
 17         //成员方法
 18         public void getNO() {//获取相关成员变量的值
 19             System.out.print(sNo+"\t");
 20         }
 21         public void getName() {
 22             System.out.print(sName+"\t");
 23         }
 24         public void getSex() {
 25             System.out.print(sSex+"\t");
 26         }
 27         public void getAge() {
 28             System.out.print(sAge+"岁\t");
 29         }
 30         public void getJava() {
 31             System.out.print(sJava+"分");
 32         }
 33     }
 34     public static class Circle{
 35         private double radius;
 36         public Circle(){
 37             radius = 0;
 38         }
 39         public Circle(double r) {
 40             radius = r;
 41         }
 42         public double getRadius() {
 43             return radius;
 44         }
 45         public double getPerimeter() {
 46             return 2 * 3.14 * radius;
 47         }
 48         public void disp() {
 49             System.out.println("圆的半径为:" + radius);
 50             System.out.println("圆的周长为:" + (2 * 3.14 * radius));
 51             System.out.println("圆的面积为:" + (3.14 * radius * radius));
 52         }
 53     }
 54     public static void main(String[] args) {//主类
 55     //这是第二问
 56         System.out.println("第二问:");
 57         Student studentA = new Student();
 58         Student studentB = new Student();
 59         System.out.println("studentA和studentB的信息如下:");
 60         studentA.setStudent("gl3162052051432", "Yu Dong", "  男", 20, 98);
 61         studentB.setStudent("gl3162052051431", "Xu chen", "  男", 20, 100);
 62         studentA.getNO();
 63         studentA.getName();
 64         studentA.getSex();
 65         studentA.getAge();
 66         studentA.getJava();
 67         System.out.println();
 68         studentB.getNO();
 69         studentB.getName();
 70         studentB.getSex();
 71         studentB.getAge();
 72         studentB.getJava();
 73         System.out.println();
 74         System.out.println(studentA.sName+"同学和"+studentB.sName+"同学的Java课程的平均分为:"+((studentA.sJava+studentB.sJava)/2)+"分");
 75     //这是第三问
 76         double max = -1;
 77         double min = 101;
 78         Student[] student = new Student[5];//定义数组
 79         for(int i = 0; i<student.length; i++) {//初始化对象
 80             student[i] = new Student();
 81         }
 82         student[0].setStudent("gl3162052051432", "Yu Dong", "  男", 20, 98);
 83         student[1].setStudent("gl3162052051431", "Xu chen", "  男", 20, 62);
 84         student[2].setStudent("gl3162052051430", "Li hai", "  男", 20, 82);
 85         student[3].setStudent("gl3162052051429", "li da", "  男", 20, 77);
 86         student[4].setStudent("gl3162052051428", "Su wang", "  男", 20, 96);
 87         for(int i = 0; i<student.length; i++) {
 88             if(min > student[i].sJava)min = student[i].sJava;
 89             if(max < student[i].sJava)max = student[i].sJava;
 90         }
 91         System.out.println("\n第三问:");
 92         System.out.println("五名同学Java课程的最高成绩为:"+max);
 93         System.out.println("五名同学Java课程的最底成绩为:"+min);
 94     //这是第四问
 95         System.out.println();
 96         System.out.println("第四问:");
 97         Circle cirNameA = new Circle();
 98         Circle cirNameB = new Circle(6);
 99         System.out.println("无参初始化:");
100         cirNameA.disp();
101         System.out.println("带参初始化:");
102         cirNameB.disp();
103     }
104 }

4.注意事项

在主类内部,新建一个另一类的类,必须加上关键字 static,否则在主函数里调用非静态的类,

出现错误,提示“无法从静态上下文中引用非静态变量this”,因为main方法执行时,内部非静态类还没加载,

所以访问不到。在本例中在student类前加一个static,就可以直接在main中调用了,当然也可以将类放在外面。

posted @ 2021-07-29 20:41  zrswheart  阅读(65)  评论(0编辑  收藏  举报