实验三 Java面向对象基础
一、实验目的与要求
1、掌握面向对象的基本概念,掌握类定义的方法、对象的创建、访问;
2、熟练掌握、深刻理解构造方法的概念、含义、作用、调用时机等;
3、掌握几个关键字的特征及用法:static、this;
4、深刻理解和掌握方法重载;
5、了解类的权限、成员的权限。
二、实验原理
1.如何定义类,类的基本构成;
用class关键字定义一个类,后面加上自定义的类名。
2.成员变量一般是私有的、方法是公共的,其它权限使用很少;
3.构造方法的作用、特点等;
作用:给对象初始化。
特点:方法名称和类同名。不用定义返回值类型。不可以写retrun语句。构造方法可以被重载。
4.方法的重载:重载的时候,方法名要一样,但是参数类型或个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
5.static、this的作用等。
static关键字:在一个java类中,可以使用static关键字来修饰成员变量,该变量被称为静态变量,静态变量被所有实例共享。要注意,static不能用来修饰局部变量和内部类中的变量。
this关键字:1.通过this关键字可以明确的去访问一个类的成员变量,解决与局部变量名称冲突的问题。
2.通过this关键字调用成员方法。
3.构造方法是在实例化对象时被java虚拟机自动调用的,在程序中不能像调用其他方法一样调用构造方法,但可以在一个构造方法中使用“this([par1, par2...])”的形式来调用其他的构造方法,但是在成员方法中不可行,也不能在一个类中的两个构造方法中使用this相互调用。
三、预习与准备
掌握基本的概念及原理,明确实验任务和目的,准备实验的源代码。
四、实验内容
1、定义一个学生类,要求如下:
(1)类名是Student;
(2)该类包含3个属性:学号sID,姓名sName,年龄sAge;
(3)给各个属性设置set\get方法,合适的访问权限;
(4)定义缺省的构造方法;
(5)定义合适的重载的构造方法;
(6)重写toString( ) 方法;
(7)定义一个表示人数的静态成员变量,用以对学号进行自动增加赋值;
(8)创建数组对象(多个学生)。
package candice;
public class Student {
//定义一个静态变量
static int index = 1;
//定义成员变量
private int sID;
private String sName;
private int sAge;
public Student() {
}
//定义成员变量的获取方法和设置方法
public int getsID() {
return sID;
}
public void setsID(int sID) {
this.sID = sID;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public int getsAge() {
return sAge;
}
public void setsAge(int sAge) {
this.sAge = sAge;
}
//重载构造方法,传入实参
Student(String sName, int sAge) {
this.sName = sName;
this.sAge = sAge;
sID = index++;//学号自增1
}
//重写toString()方法,用来输出学生信息
@Override
public String toString() {
return "Student{" + "sID=" + sID + ", sName= " + sName + ", sAge=" + sAge + "}";
}
public static void main(String[] args){
//创建学生类,学号自增,其他参数由构造方法传入
Student s1 = new Student("Candice",19);
Student s2 = new Student("ChenDie",19);
System.out.println(s1);
System.out.println(s2);
//学号从2017117351开始
Student.index = 2017117351;
Student s3 = new Student("ChenDie3",20);
System.out.println(s3);
Student s4 = new Student("ChenDie4",21);
System.out.println(s4);
}
}
2、定义一个类用以实现求最大值、次大值。必须使用面向对象的思想。
提示:定义类时,可以提供多种样式的构造方法。譬如:自动随机生成数组,人为提供数组;使用方法getFMax( )、getSMax( )来求解最大次大值;考虑是否需要提供这两个的属性对应的成员变量。
package candice;
public class max {
public static void main(String[] args) {
// 定义数组
//int[] arrayInt = {6, 2, 6, 5, 3, 1};
//随机生成数组
int [] arrayInt = new int[10];
for(int i=0;i<arrayInt.length;i++){
int temp = (int)(Math.random()*10)+1;//随机产生一个 1~10 的整数
arrayInt[i] = temp;//将产生的数添加到数组
System.out.print(arrayInt[i]+"\n");
}
// 排序
for (int i = 0; i < arrayInt.length - 1; i++) {
for (int j = 0; j < arrayInt.length - i - 1; j++) {
if (arrayInt[j] < arrayInt[j + 1]) {
int temp = arrayInt[j];
arrayInt[j] = arrayInt[j + 1];
arrayInt[j + 1] = temp;
}
}
}
int maxNum = arrayInt[0];// 最大值
int secondNum = arrayInt[1];// 次大值
System.out.println(maxNum + "," + secondNum);
}
}
3、定义一个教师类、一个课程类。
package candice;
//定义一个教师类
public class Teacher {
private String name;//姓名
private String srt;//职称
private double money;//工资
private double src;//工龄
//set/get方法
public Teacher() {
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSrt() {
return srt;
}
public void setSrt(String srt) {
this.srt = srt;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getSrc() {
return src;
}
public void setSrc(double src) {
this.src = src;
}
//重载构造方法,传入实参
Teacher(String name,String srt, double money,double src) {
this.name = name;
this.srt = srt;
this.money = money;
this.src = src;
}
@Override
public String toString() {
return "Teacher{"+"name="+name+"srt="+srt+"money="+money+"src="+src+'}';
}
public static void main(String[] args) {
//教师对象
Teacher t1 = new Teacher("chendie","教师",5000.0,5.0);
System.out.println(t1);
Teacher t2 = new Teacher("Candice","教师",6000.0,3.0);
System.out.println(t1);
}
}
//定义一个课程类
public class Cource {
//定义成员变量
private String cNumber;//学科编号
private String cName;//学科名称
private int cUnit;//学分
//set、get方法
public void setNumber(String number){
cNumber=number;
}
public void setName(String name){
cName=name;
}
public void setUnit(int unit){
cUnit=unit;
}
public String getNumber(){
return cNumber;
}
public String getName(){
return cName;
}
public int getUnit(){
return cUnit;
}
//重载构造方法,传入实参
Cource(String cNumber,String cName,int cUnit) {
this.cName=cName;
this.cNumber=cNumber;
this.cUnit=cUnit;
}
//重写toString()方法
@Override
public String toString() {
return "Cource:"+"编号="+cNumber+"名称="+cName+"学分="+cUnit;
}
public static void main(String[] args){
//创建课程类
Cource c1 = new Cource("xk01","c",4);
System.out.println(c1);
Cource c2 = new Cource("xk02","java",4);
System.out.println(c2);
}
}
六、实验总结与体会