前言:
学到了面向对象编程,整理下相关知识点。打牢基础,daydayup!
面向对象基础概述
1,什么是面向对象,面向对象的思考逻辑是什么?
面向对象就是把任何事物都看成一个又一个对象。思考逻辑为万物皆对象,谁的数据谁处理。
2,什么是对象?
对象是一种特殊的数据结构。同时,对象也称为类的具体实例。对象==实例
3,如何得到对象?
通过class(也就是类)创建出对象,同时class(类)也被称为对象的设计图(或者对象的模板)。java中必须先定义类,才能得到对象。
4,什么是面向对象编程?
通过创建或者寻找对象过来编程解决问题。
5,为什么使用面向对象编程?
符合人类的思维逻辑,使编程更加简单,更加直观。
通过类创建对象
定义的格式:
public class 类名{
1,成员变量(代表属性,一般是名词):数据类型 名称
2,成员方法(代表行为,一般是动词)
3,构造器
4,代码块
5,内部类
}
定义的注意事项:
1,建议使用有意义的名称,满足驼峰模式
2,一个java文件中可以创建多个类,但是只能一个类是public修饰的。同时public修饰的类名必须成为java代码的文件名称,否则报错。
如图:
具体如何定义:
1,定义成员变量(属性)
格式:修饰符 数据类型 变量名称 =初始值;
注:成员变量非必要不建议给初始化值。不定义初始化值会存在默认值,
默认值的规则:整型是0,浮点型是0.0,引用类型是null,布尔型是false
2,定义成员方法(行为)
格式如下:
修饰符 返回值类型 方法名(形参列表){
需要执行的代码
return 返回值;
}
定义示例:
public class Study {
private String name;
private double score;
public void print (){
System.out.println(name + "的成绩为" + score);
}
}
创建对象
格式:
类名 对象名 =new 构造器();
对象怎么使用
格式:
对象名.成员变量
对象名.成员方法
注:创建对象时,对象会调用构造器
构造器:
构造器是一种特殊的方法,名字必须与所在类的名字一模一样。同时不需要写返回值类型,如下图:
构造器的作用:
初始化一个类的对象,并返回对象的地址
格式:
修饰符 类名(形参){……}
构造器的分类:
无参构造器:初始化一个类的对象,并返回这个对象的地址,里面数据都是默认值
有参数构造器:初始化一个类的对象,并返回这个对象的地址,同时可以为对象赋值
如何使用构造器
类名 对象名 = new 构造器(参数)
如下图:上面为无参构造器,下面为有参构造器
注意:
1,类在设计时,如果不写构造器,java会为类自动生成一个无参构造器
2,当设计了一个有参构造器后,java就不会自动设计无参构造器了,需要再手动设计一个无参构造器
this关键字
this的作用:
代表了当前对象的地址,可以访问当前对象的成员变量和成员方法。
this的使用场景:
1,可以用于方法中(谁调用方法,this就代表谁)如下
public class Study {
String name;
double score;
public void print (String name,double score){
System.out.println(this.name + "的成绩为" + this.score +";"+name +"的成绩为"+score);
}
}
结果:this。name所指向的是lala,而形参变量里的name指向的是ku。
2,可以用于有参构造器中(赋值初始值),如下
public Study(String name,double score){
this.name = name;
this.score = score;
}
封装
1,什么是封装
用类设计对象处理某一个事物的数据时,把要处理的数据,以及处理这些数据的方法涉及到一个对象中去的过程称为封装。
2,封装的核心思想是什么
合理隐藏,合理暴露
3,代码层面如何控制对象的成员公开或隐藏
公开成员:可以使用public(公开)进行修饰
隐藏成员:使用private(私有/隐藏)进行修饰
当设置成private时,便无法进行处理
需要提供方法才可以使用
目的:在方法里可以给值施加限定,防止值被轻易篡改。
实体类 (标准java bean)
实体类是一种特殊的类,成员变量必须私有,而且要提供get/set方法;同时必须有无参数构造器。
例:如下图,隐藏成员变量,提供get/set方法,并含有无参构造器
使用目的:
实体类只负责数据存取,而对数据的处理交给其他类完成。以实现数据和数据业务处理相分离。
例:如下图,Car为实体类(负责数据存取),CarOperator为操作类(负责功能),CarDemo负责组合,运行结果如右边。
案例:模拟电影票查询系统
目标需求:输入按键1,可以输出全部电影信息。输入按键2,可以查询电影信息。输入其他按键返回界面。
实验思路:1,创建一个实体类用于记录信息;2创建一个操作类用于实现显示和查询功能;3,在main方法中运行查看结果
1,实体类:
public class Moive {
private int no;
private String name;
private String director;
private double score;
public Moive() {
}
public Moive(int no, String name, String director, double score) {
this.no = no;
this.name = name;
this.director = director;
this.score = score;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
2,操作类
public class MoiveOperator {
private Moive[] moives ;
public MoiveOperator(){}
public MoiveOperator(Moive [] moives){
this.moives = moives;
}
public void Operator(){
System.out.println("电影目录如下");
for (int i = 0; i < moives.length; i++) {
System.out.println("编号:"+moives[i].getNo());
System.out.println("电影名:"+moives[i].getName());
System.out.println("导演:"+moives[i].getDirector());
System.out.println("评分:"+moives[i].getScore());
System.out.println("----------------------");
}
}
public void Operatorid(int id){
for (int i = 0; i < moives.length; i++) {
Moive m = moives[i];
if (id == m.getNo()){
System.out.println(m.getNo());
System.out.println(m.getName());
System.out.println(m.getDirector());
System.out.println(m.getScore());
System.out.println("-------------");
return;
}
}
System.out.println("没有相关电影");
System.out.println("----------");
}
}
运行测试:
public class MoiveDemo {
public static void main(String[] args) {
Moive [] m1 = new Moive[4];
m1 [0]=new Moive(1,"开心做账","lala",9.9);
m1 [1]=new Moive(2,"开心学习","la",9.8);
m1 [2]=new Moive(3,"开心放弃","lal",9.7);
m1 [3]=new Moive(4,"开心愤怒","l",9.6);
MoiveOperator m2 = new MoiveOperator(m1);
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("欢迎来到电影系统");
System.out.println("1为查询全部信息");
System.out.println("2为查询电影");
int bu=sc.nextInt();
switch(bu){
case 1:
m2.Operator();
break;
case 2:
System.out.println("请输入编号:");
int id =sc.nextInt();
m2.Operatorid(id);
break;
default:
System.out.println("请重新输入");
System.out.println("---------");
}
}
}
}
实验结果:运行成功
整理结束!撒花!!!!