Java面向对象编程2

这篇博客介绍了Java中的构造方法和冒泡排序的应用,通过设计一个Student类,实现成绩从高到低的冒泡排序输出学生信息。同时讲解了static关键字的使用,包括创建静态方法创建运动员对象,强调了静态方法不能访问非静态成员或方法的原因,以及静态成员的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、构造方法+冒泡排序

1.设计一个类Student,该类包括姓名、学号和成绩。在main方法中声明数组可以存多个学生信息,按照成绩从高到低的顺序冒泡输出姓名、学号和成绩信息。

学生类:Student.java

public class Student {
    private int sno;
    private String sname;
    private float scope;

    public Student(int sno, String sname, float scope) {
        this.sno = sno;
        this.sname = sname;
        this.scope = scope;
    }

    public int getSno() {
        return sno;
    }
    public void setSno(int sno) {
        this.sno = sno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public float getScope() {
        return scope;
    }
    public void setScope(float scope) {
        this.scope = scope;
    }
}

测试类:Test.java

public class Test {
    public static void main(String[] args) {
        Student[] stus = new Student[5];
        stus[0] = new Student(1,"张三",60);
        stus[1] = new Student(2,"李四",80);
        stus[2] = new Student(3,"王五",70);
        stus[3] = new Student(4,"赵六",100);
        stus[4] = new Student(5,"孙七",90);

        Student temp;

        //冒泡排序
        for(int i = 0; i < stus.length; i++) {
            for(int j = stus.length-1; j > i; j--) {
                Student s1 = stus[j];
                Student s2 = stus[j-1];
                if(s1.getScope() > s2.getScope()) {
                    temp = stus[j];
                    stus[j] = stus[j-1];
                    stus[j-1] = temp;
                }
            }
        }
        //增强型for循环输出
        for(Student s : stus) {
            System.out.println(s.getSno()+","+s.getSname()+","+s.getScope());
        }
    }
}

输出:
4,赵六,100.0
5,孙七,90.0
2,李四,80.0
3,王五,70.0
1,张三,60.0

2、static关键字

2.创建一个运动员类,提供有静态的方法create,使用该静态方法创建对象,上限为10,并进行测试。

首先复习一下,静态方法的使用原则:1.静态方法不能访问非静态的成员或方法;2.静态方法中不能使用this和super关键字。

为什么?

  1. 静态方法随着类的加载而出现,随着类的消失而消失;所以静态方法是先于对象出现的,也是先于非静态方法出现,不能用静态方法调用后出现的非静态方法。
  2. 静态优先于对象,被所有对象共享;一般静态成员变量都是类中成员共有的属性或者方法;
  3. 因为静态先存在于内存,无法访问后来对象中的数据,所以静态无法访问非静态,也不能存在this,因为this代表当前对象,静态先于对象存在。

Player.java

public class Player {
    private static int count = 0;
    private Player() {
    }
    public static Player create() {
        Player p = null;
        if(count < 10){
            count++;
            p = new Player();
            System.out.println("创建第" + count + "个对象");
        }else{
            System.out.println("已达上限!");
        }
        return p;
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
        Player.create();
        Player.create();
        Player.create();
        Player.create();
        Player.create();
        Player.create();
        Player.create();
        Player.create();
        Player.create();
        Player.create();
        //第十一个对象
        Player.create();
    }
}

输出:
创建第1个对象
创建第2个对象
创建第3个对象
创建第4个对象
创建第5个对象
创建第6个对象
创建第7个对象
创建第8个对象
创建第9个对象
创建第10个对象
已达上限!

总结:因为静态方法中没有this,在方法体中无法直接通过本类对象使用实例属性,也就是说this.属性无法使用,也就是我们常说的静态方法中不能使用非静态属性。但我们可以通过new一个实例对象来调用属性和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值