面向对象编程
面向对象编程的三大特点:封装,多态,继承。
前言
记录面向对象编程的基本概念,以及在计算机中的执行原理,所谓面向对象,个人认为是它像一个结构体,例如一个学生对象,里边可能会包含学生的一些学号,名字,籍贯等信息,也可以叫做该对象的属性。又类似于数据表的表头,我们在使用该对象时,为该对象赋予一些值,就像是数据表中各项信息的填写。
一、对象执行原理
二、this变量的执行原理以及应用场景
用于解决变量名称重复的问题,也就是说,该对象本来定义的参数,在进行参数接收和比较时,会出现命名冲突的问题,那么this就很好的解决了这个问题。
三、构造器
构造器产生的原因,是为了我们更加便捷的在使用对象的过程中进行赋值。免去属性太多,需要一个一个以 对象.属性的形式进行赋值,有了构造器,我们只需在构造器中设置对应的传递参数语句即可。如下图:
要注意的是我们在日后的开发过程中,如果有了有参构造器,还是需要写一个无参的,因为其他人在写代码时可能会用到。
四、封装以及实体JavaBean
1.封装
关于封装,即我们封装好一个类来供其他人来使用,但是使用的过程中要注意数据的隐私性问题,比如个人的成绩,它需要设置为私有变量,用private修饰,那么我们在调用这个对象时便不能直接访问到具体的值,但是我们可以通过设置方法的方式来开放权限,也就是所谓的set,get方法,之前开发时常常见到,但不知何意,现在才明白,实在惭愧。
2.实体JavaBean
实体类的存在是为了实现分工,仅仅作为数据的存取,而不是像之前的类中变量定义和方法混在一起写,这样更加的清晰和明了,在写实体类的过程中,IDEA为我们提供了快速生成get,set方法和构造器的方法,右键寻找generate。对于一些具体的方法可以创建操作类。
举例:
五、综合案例
一个技巧,假设有movies数组,要写循环时可以 movies.for i直接生成循环。
为实现这个案例,我们需要一个测试类,一个实体类来处理数据,一个操作类来写具体的方法
实体类:
movie.java`
package com.object.demo;
//只负责保存数据
public class movie {
private int id;
private String name;
private double price;
private double score;
private String director;
private String actor;
private String info;
public movie() {
}
public movie(int id, String name, double price, double score, String director, String actor, String info) {
this.id = id;
this.name = name;
this.price = price;
this.score = score;
this.director = director;
this.actor = actor;
this.info = info;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
方法操作类:
package com.object.demo;
public class movieOperator {
private movie[] movies;
public movieOperator(movie[] movies) {
this.movies = movies;
}
//展示系统所有电影信息,不用返回值,故直接用void
public void printAllMovies() {
System.out.println("系统全部电影信息如下");
for (int i = 0; i < movies.length; i++) {
movie m = movies[i];
System.out.println("编号" + m.getId());
System.out.println("名称" + m.getName());
System.out.println("价格" + m.getPrice());
System.out.println("----------------");
}
}
//根据电影编号查询完整电影信息
public void searchMovieById(int id) {
for (int i = 0; i < movies.length; i++) {
movie m = movies[i];
if (m.getId() == id) {
System.out.println("该电影详情如下");
System.out.println("编号" + m.getId());
System.out.println("名称" + m.getName());
System.out.println("价格" + m.getPrice());
System.out.println("得分"+m.getScore());
System.out.println("导演"+m.getDirector());
System.out.println("主演"+m.getActor());
System.out.println("其他信息"+m.getInfo());
return;
}
}
System.out.println("没有该电影信息");
}
}
测试类:
package com.object.demo;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
movie[] movies=new movie[4];
movies[0] =new movie(1,"水门桥",38.9,9.8,"徐克","吴京","12万人想看");
movies[1]=new movie(2,"长津湖",37.9,9.9,"1","某某某","13万人想看");
movies[2]=new movie(3,"血观音",39.9,9.5,"2","某某","14万人想看");
movies[3]=new movie(4,"爆裂无声",35.9,9.3,"3","某某","15万人想看");
//创建一个电影操作类的对象,接收电影数据,并对其进行业务处理。
movieOperator operator=new movieOperator(movies);
//operator.printAllMovies();
//operator.searchMovieById(2);
Scanner sc=new Scanner(System.in);
while (true) {
System.out.println("==电影信息系统==");
System.out.println("1、查询全部电影信息");
System.out.println("2、根据id查询某个电影的详细信息");
System.out.println("请你输入操作指令");
int command =sc.nextInt();
switch(command){
case 1:
operator.printAllMovies();
break;
case 2:
System.out.println("请你输入查询的电影id");
int id =sc.nextInt();
operator.searchMovieById(id);
break;
default:
System.out.println("你输入的指令有问题");
}
}
}
}
补充信息:
对于成员变量和局部变量的区别,个人理解,成员变量一般指我们创建对象中的属性值,此后我们在生成新的对象时,这些属性都是自带的。这些值存于堆内存中,与对象共存亡。而局部变量一般是我们在方法中定义的变量,只有我们调用这个方法时,这个变量才会使用,存于栈内存中,当我们方法调用完毕,它也随之出栈。也就是随着方法的运行结束而结束。