JAVA基础课程
第六天
面向对象
面向对象学习的三大主线
(1)Java类及类的成员:属性,方法,构造器,代码块,内部类
(2)面向对象的三大特征:封装,继承,多态
(3)其他关键字:this,super,static,final,abstract,interface,package
面向对象(OOP)和面向过程(POP)的区别
是两种思想,面向对象是相对于面向过程而言的。
面向过程强调的是功能行为,以函数为最小单位,考虑怎么做
面向对象将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
面向对象分析方法分析问题的思路和步骤
(1)根据问题需要,选择问题针对的现实世界的实体
(2)从实体中寻找解决问题相关属性和功能,这些属性和功能形成概念世界中得类
(3)把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。
(4)将类实例化成计算机世界中的对象。对象是解决问题的最终工具
类=抽象概念的人;对象 = 实实在在某个人
面向对象程序设计的重点是类的设计——》设计类就是设计成员
类中的成员{
属性(Field)也叫成员变量:
行为(Method)也叫方法,也叫函数:
}
类和对象的使用
创建一个类,设计成员
创建类对象
通过对象.属性,或者对象.方法调用对象结构
局部变量和成员变量的区别
(1)在类中声明的位置不同
成员变量声明在类的{}里
局部变量声明在方法内,方法形参,代码块中,构造器形参,构造器内部。
(2)权限修饰符不同
成员变量可以声明当前变量的访问权限,可以使用权限修饰符修饰
局部变量不可以用权限修饰符修饰
(3)默认初始值
成员变量根据类型都有初始值
局部变量,没有默认初始值,在使用之前一定要显式赋值,(做形参的时候不用)
(4)内存中加载的位置
成员变量:加载到堆空间中
局部变量:加载到栈空间
方法
(1)方法分类
无返回值 | 有返回值 | |
---|---|---|
无形参 | void 方法名(){} | 返回类型 方法名(){} |
有形参 | void 方法名(形参列表){} | 返回类型 方法名(形参列表){} |
(2)方法声明
权限修饰符 返回值类型 方法名(形参列表){
方法体
}
static,abstract,final 修饰后边章节说
(3)权限修饰符:private,public,缺省,protected
(4)返回值
如果一个方法有返回值,则必须在方法声明时,指定返回值类型,同时方法中,需要使用return 数据;返回指定类型的变量或常量
如果没有返回值,则不用return,如果用了return;表示结束此方法
(5)方法名,标识符
(6)形参列表,声明多个形参,传到方法中,格式(数据类型1:参数1,数据类型2:形参2)
(7)方法体,方法功能体现
练习代码
定义一个Student类,包含id,年级state(1-6年级),成绩score(0-100分),创建20个学生对象,学号1到20,年纪和成绩随机数确定。
(1)打印三年级的学生信息。
(2)使用冒泡排序按学生成绩排序,并遍历学生信息
package com.test.course;
/**
* @author PitterWang
* @create 2020/4/23
* @since 1.0.0
*/
public class Student {
int id;
int status;
int score;
@Override
public String toString() {
return "Student{" +"id=" + id +", status=" + status +", score=" + score +'}';
}
}
package com.test.course;
/**
* 〈类和对象使用练习〉
*定义一个Student类,包含id,年级state(1-6年级),成绩score(0-100分),创建20个学生对象,学号1到20,年纪和成绩随机数确定。
*
* (1)打印三年级的学生信息。
* (2)使用冒泡排序按学生成绩排序,并遍历学生信息
* @author PitterWang
* @create 2020/4/23
* @since 1.0.0
*/
public class StudentTest {
public static void main(String[] args) {
Student[] student = new Student[20];
StudentTest studentTest = new StudentTest();
/***
* 给学生赋值
*/
for(int i = 0; i<student.length; i++){
student[i] = new Student();
student[i].id = i;
student[i].status = studentTest.getRandom(6,1);
student[i].score = studentTest.getRandom(100,0);
}
//打印三年级的学生信息
for(Student s: student){
if(s.status == 3){
System.out.println(s.toString());
}
}
System.out.println("-------------------");
//使用冒泡排序按学生成绩排序,并遍历学生信息
for(int i = 0; i < student.length;i++){
for(int j = 0; j < student.length - 1 - i; j++){
if(student[j].score < student[j+1].score){
Student stu = student[j+1];
student[j+1] = student[j];
student[j] = stu;
}
}
}
for(Student s: student){
System.out.println(s.toString());
}
}
/***
* 获取min到max之间的一个随机数
* @param max
* @param min
* @return
*/
public int getRandom(int max,int min){
return (int)(Math.random()*(max-min)+min);
}
}