前言:
学到了面向对象编程,整理下相关知识点。打牢基础,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("---------");}}}
}
实验结果:运行成功
整理结束!撒花!!!!