面向对象编程之基础
思想:
一切皆对象,客观事物都是对象。对象具有特征(属性)和行为(方法)。
类:一类事物的抽象描述(共同的特征和行为),可以将类看成是同一类事物的模板。
对象:是类的具体化的实例,是由类创建的。
Java中如何声明类:
class 类名{
类体
}
类体的组成:
属性:静态属性(类名.)、实例属性(类实例对象名.)
方法: 静态方法,实例方法、构造方法
代码块:静态代码块,实例代码块
1.1 初识类与实例
packageday06;
/**
* 创建学生类,具有学号、姓名、年龄特征和 学习 的方法
*/
classStudent {
// 类的成员变量
longsid;
Stringname;
intage;
// 构造方法: 不能手动调用,是实例化时被动调用, 构造方法可以重载的
Student(longsid, Stringname, intage){
// 类的成员变量的名称 与 方法中的局部变量的名称 相同时,成员变量名前需要 加 this. 前辍
this.sid=sid;
this.name=name;
this.age=age;
}
voidstudy(Stringcourse){
// name 是类的成员变量
System.out.printf("%s 正在学习 %s\n", name, course);
}
}
publicclassOOB1 {
publicstaticvoidmain(String[] args) {
// 实例化2位学生
Students1=newStudent(1001, "罗星", 20);
Students2=newStudent(1002, "李星", 18);
// 通过对象名(s1, s2)可以访问对象的属性和调用它的方法
// 对象名.属性, 对象名.方法名(实参列表)
System.out.println(s1.sid+","+s2.sid)
s1.study("Java语法基础");
s2.study("面向对象");
}
}
1.2 类的组成
成员变量
静态成员变量
普通成员变量
构造方法:实例化时被动调用的,可以重载的
成员方法:实例对象调用的
代码块
静态代码块: 可以初始化静态成员变量
一般代码块: 可以访问静态成员,也可以访问普通成员变量
如:
packageday06;
classA {
// 类的成员变量存在默认值吗? 存在默认值
staticintpos; // 静态成员变量
intdirect; // 普通成员变量
Stringname; // 普通成变量,String属于引用类的类型,默认值为null
{
// 普通代码块, 可以初始化成员变量
// new 实例化时,触发代码块中的语句
pos+=200;
direct=100;
}
static {
// 静态代码块, 可以初始静态成员变量
// 随着类加载执行,装载到方法区中(静态区)
pos+=300;
// direct = 1;
}
// 构造方法: 无返回值,方法名同类名
A(Stringname){
this.name=name;
}
// 实例方法
voidshow(){
System.out.println(pos+","+direct+","+name);
}
// 类的静态方法
staticvoidshow2(){
// 静态方法中可以调用实例方法吗?
System.out.println(pos);
}
}
publicclassOOB2 {
publicstaticvoidmain(String[] args) {
// 静态成员变量访问: 类名.变量名
System.out.println(A.pos); // 300
// 普通的成员变量访问: 类实例对象名.变量名
// 创建类实例的语法: 类名 对象名 = new 类名(构造方法的参数列表);
// 没有声明任何的构造方法时,Java编译器,自动提供一个无参的构造方法
// 如果提供了构造方法,则Java编译器不会提供无参的构造方法
Aa=newA("张三");
// 修改实例的name和direct属性
a.name="disen";
// a.direct = 20;
System.out.println(a.direct+","+a.name); // 100, disen
// 修改pos属性
// A.pos = 22;
// a.pos = 23; // 静态成员是所有实例对象共享的
// System.out.println(a.direct+"--->"+A.pos);
System.out.println(A.pos); // 200, 300? 是 200,在实例化的过程中修改了pos静态成员变量
Aa2=newA("李四");
a2.show2();
}
}
1.3 例题
定义学生类
属性
学号(sid)
姓名(name)
年龄(age)
性别(sex)
分数(score)
方法
打招呼(sayHi) //打印学生所有信息
加分 (addScore) // 加分
成绩等级(scoreLevel) //返回学生的成绩级别
>=90 A
>= 80 B
>= 60 C
<60 D
packageday06;
classStudent{
intsid;
Stringname;
intage;
Stringsex;
doublescore;
Student(intsid, Stringname, intage, Stringsex){
this.sid=sid;
this.name=name;
this.age=age;
this.sex=sex;
}
voidsayHi(){
System.out.printf("(%d, %s, %d, %s, %.2f)\n", sid, name, age,sex, score);
}
booleanaddScore(doublescore){
if(score>0&&score<=100){
this.score+=score;
returntrue;
}
returnfalse;
}
StringscoreLevel(){
if(score>=90) return"A";
elseif(score>=80) return"B";
elseif(score>=60) return"C";
elsereturn"D";
}
}
publicclassOOB3 {
publicstaticvoidmain(String[] args) {
//创建多个学生对象,为其各个属性赋值,并调用方法
Students1=newStudent(1,"disen",20,"男");