本章主要内容:
- 类的定义
- 成员变量和成员方法
- 类及成员的修饰符
- 对象的创建与使用
- 成员变量的访问与方法的调用
- 参数的传递
- 匿名对象
具体的概念在原书上,老师讲到的时候你应该在书上用笔画出来作为强调,这里只贴一些总结性的概念,请仔细查阅原书和ppt,记住它们。最后贴实验答案。
类是一种抽象的概念;对象则是实际存在的属于该类的具体的个体。
对象是面向对象技术的核心,是构成系统的基本单元,所有面向对象的程序都是由对象组成。
类是对象之上的抽象,它为属于该类的全部对象提供了统一的描述。类是一种抽象的数据类型,是对象的模板;对象则是类的实例化,是类的实例。
一般说来,类是由数据成员和函数成员封装而成的,其中数据成员表示类的属性,函数成员表示类的行为。从大的方面来看,你可以把类看做是一种高级的数据类型,这种数据类型由属性和行为组成。属性用来描述这个类的特征,行为描述这个类所具有的功能。
比如:
class People //这是一个描述人的类
{
int age,weight,height; //这个类有4个变量(可以更多,这里做示例)
String name; //这四个变量描述了人的特征,名字、年龄、身高、体重
void speak{ //人会说话,人具有这个行为
System.out.print("Hello!"); //这里用打印来表征说话,人会说Hello
}
}
定义类(类的一般结构、成员变量、成员方法)参见原书。
对象的创建与使用:
People person = new People(); //我们用这个类创建了一个对象person,它具有People的全部特征
//请注意,创建对象必须遵循这个格式,就像你说英语“你好”必须说Hello而不是hallo,语法即约定的交流规则,你只有遵循语法,编译器或者解释器才能理解你到底在说什么。
对象名和对象成员之间用”.“相连,这个点是引用的一种形式,你可以把小圆点看做是一个运算符,这个运算符执行的是从一个从一个对象中找到它的组成这个对象的某个成员。
例:person.name;表示从person这个对象中找到组成person的name变量。
在类定义内调用方法:
常规调用不在赘述,重点介绍this关键字。
this关键字强调调用的方法就在这个类中,即告诉编译器,我让你调用的功能就在这里,你不需要再去别的文件中找了。
格式:this.成员名
参数传递类似于C语言,但是没有指针,属于传什么类型就声明什么类型。
匿名对象:
使用条件
①只需要一次调用,
②只是作为实参传递给一个方法,用完即止。
格式:
new People().speak
即跳过了给对象起名字的步骤直接调用了People里的speak方法。
实验6-16-26-3原代码:
/*三次实验的代码写到一个文件中,这个文件可以实现三个实验的所有要求,你也可以把里面的两个类放在两个文件中*/
import java.util.*; //声明用到的类库,放在两个文件中时,该声明应该跟在Test前,想一想原因?
class Student
{
String name;
int age;
double i,j,k; //i,j,k表示三科成绩,这里偷了懒,推荐chinese、math、english
double total(){
return i+j+k;
}
double average(){
return (i+j+k)/3;
}
}
public class Test
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
Student s1 = new Student();
Student s2 = new Student();
System.out.println("输入学生名:");
s1.name = reader.nextLine();
System.out.println("年龄:");
s1.age = reader.nextInt();
System.out.println("各科成绩:");
s1.i = reader.nextDouble();
s1.j = reader.nextDouble();
s1.k = reader.nextDouble();
s2.name = "Steve";
s2.age = 19;
s2.i = 96.0;
s2.j = 93.1;
s2.k = 92.0;
System.out.println("学生名:" +s1.name);
System.out.println("总成绩:" +s1.total());
System.out.println("平均成绩:" +s1.average());
System.out.println("学生名:" +s2.name);
System.out.println("总成绩:" +s2.total());
System.out.println("平均成绩:" +s2.average());
}
}
常见问题:
1.Scanner reader = new Scanner(System.in);忘记System.in。
2.Student s1 = new Student();忘记括号。
3.System.out.println(“平均成绩:” +s1.average());忘记average后面的括号。
zhihu: Solo | weibo@从流域到海域