Java面向对象1(练习)
2018-04-01 13:15
411 查看
1.设计一个类Student,该类包括姓名、学号和成绩。在main方法中声明数组可以存多个学生信息,按照成绩从高到低的顺序冒泡输出姓名、学号和成绩信息。
学生类:Student.java
测试类:Test.java
输出:
4,赵六,100.0
5,孙七,90.0
2,李四,80.0
3,王五,70.0
1,张三,60.0
2.创建一个运动员类,提供有静态的方法create,使用该静态方法创建对象,上限为10,并进行测试。
首先复习一下,静态方法的使用原则:1.静态方法不能访问非静态的成员或方法;2.静态方法中不能使用this和super关键字。
为什么?
静态方法随着类的加载而出现,随着类的消失而消失;所以静态方法是先于对象出现的,也是先于非静态方法出现,不能用静态方法调用后出现的非静态方法。
静态优先于对象,被所有对象共享;一般静态成员变量都是类中成员共有的属性或者方法;
因为静态先存在于内存,无法访问后来对象中的数据,所以静态无法访问非静态,也不能存在this,因为this代表当前对象,静态先于对象存在。
Player.java
Test.java
输出:
创建第1个对象
创建第2个对象
创建第3个对象
创建第4个对象
创建第5个对象
创建第6个对象
创建第7个对象
创建第8个对象
创建第9个对象
创建第10个对象
已达上限!
总结:因为静态方法中没有this,在方法体中无法直接通过本类对象使用实例属性,也就是说this.属性无法使用,也就是我们常说的静态方法中不能使用非静态属性。但我们可以通过new一个实例对象来调用属性和方法。
学生类: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.创建一个运动员类,提供有静态的方法create,使用该静态方法创建对象,上限为10,并进行测试。
首先复习一下,静态方法的使用原则:1.静态方法不能访问非静态的成员或方法;2.静态方法中不能使用this和super关键字。
为什么?
静态方法随着类的加载而出现,随着类的消失而消失;所以静态方法是先于对象出现的,也是先于非静态方法出现,不能用静态方法调用后出现的非静态方法。
静态优先于对象,被所有对象共享;一般静态成员变量都是类中成员共有的属性或者方法;
因为静态先存在于内存,无法访问后来对象中的数据,所以静态无法访问非静态,也不能存在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一个实例对象来调用属性和方法。
相关文章推荐
- java面向对象练习08(游戏角色)
- Java面向对象练习
- JAVA面向对象练习06
- Java面向对象抽象类实例练习
- Java——面向对象程序设计上机练习一(函数重载)
- JAVA面向对象练习03
- 学习练习 java面向对象封装汽车
- Java面向对象习题练习
- JAVA_SE基础——25.面向对象练习
- 学习练习 java面向对象存取款查询余额
- java使用 ArrayList 的增删改(Java面向对象基础练习)
- sdut_java_面向对象程序设计上机练习一(函数重载)
- Java菜鸟教程 面向对象(二)——constructor、overload与一个练习
- JAVA面向对象练习04
- JAVA面向对象练习05第一种
- 一起Talk Android吧(第十三回:Java面向对象综合练习)
- Java基础复习:面向对象练习1
- JAVA面向对象练习05第二种
- 面向对象程序设计上机练习一(函数重载)(java)
- Java面向对象基础小练习。