Java面向对象
Java的祖师爷,詹姆斯高斯林认为,在这个世界中 万物皆对象!任何一个对象都可以包含一些数据,数据属于哪个对象,就由哪个对象来处理。
这样的话,只要我们找到了对象,其实就找到了对数据的处理方式。
所以面向对象编程的好处就是:面向对象的开发更符合人类的思维习惯,让编程变得更加简单、更加直观。
注意事项
- 第一:一个代码文件中,可以写多个class类,但是只能有一个是public修饰,且public修饰的类必须和文件名相同,如下面代码
1 2 3 4 5 6 7 8 9 10 11 12
| 假设文件名为`Demo1.java`,这个文件中假设有两个类`Demo1类和Student类`
如
public class Demo1{ }
class Student{ }
|
this关键字
- this是什么?this就是一个变量,用在方法中,可以拿到当前类的对象。
- this有什么作用?通过this在方法中可以访问本类对象的成员变量。
- 记住:哪一个对象调用方法,方法中的this就是哪一个对象
构造器
什么是构造器?构造器其实是一种特殊的方法,但是这个方法没有返回值类型,方法名必须和类名相同。
构造器什么时候执行?new 对象就是在执行构造方法;
构造方法的应用场景是什么?在创建对象时,可以用构造方法给成员变量赋值
构造方法有哪些注意事项?
- 在设计一个类时,如果不写构造器,Java会自动生成一个无参数构造器。
- 一定定义了有参数构造器,Java就不再提供空参数构造器,此时建议自己加一个无参数构造器。
如何快速生成构造器
- 在代码空白界面鼠标右键,然后选择Generate -> Constructor -> 生成无参数构造器的点None
- 生成有参数的构造器按住shift全选
构造器练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package com.itcast;
public class Student { String name; double score; public Student(){ System.out.println("无参数构造器触发执行了!"); } public Student(String name, double score){ System.out.println("有参数构造器触发执行了!"); this.name = name; this.score = score; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package com.itcast;
public class Demo { public static void main(String[] args) { Student s = new Student(); s.name = "小威"; s.score = 89.0;
Student s2 = new Student("小李", 99); System.out.println(s2.name); System.out.println(s2.score); } }
|
封装
1. 什么是封装呢?
所谓封装,就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理数据的方法,都设计到一个对象中去。
比如:在设计学生类时,把学生对象的姓名、语文成绩、数学成绩三个属性,以及求学生总分、平均分的方法,都封装到学生对象中来。
2. 封装在代码中的体现
知道什么是封装之后,那封装在代码中如何体现呢?一般我们在设计一个类时,会将成员变量隐藏,然后把操作成员变量的方法对外暴露。
这里需要用到一个修饰符,叫private,被private修饰的变量或者方法,只能在本类中被访问。
如,private double score;
就相当于把score变量封装在了Student对象的内部,且不对外暴露,你想要在其他类中访问score这个变量就,就不能直接访问了;
如果你想给Student对象的score属性赋值,得调用对外暴露的方法setScore(int score)
,在这个方法中可以对调用者传递过来的数据进行一些控制,更加安全。
实体JavaBean
- 面向对象编程中,经常写的一种类——叫实体JavaBean类。JavaBean实体类,是一种特殊的;它需要私有化成员变量,有空参数构造方法、同时提供getXxx和setXxx方法;JavaBean实体类仅仅只用来封装数据,只提供对数据进行存和取的方法
- JavaBean实体类,只负责封装数据,而把数据处理的操作放在其他类中,以实现数据和数据处理相分离。
JavaBean练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package com.itcast;
public class Student1 { private String name; private double score; public Student1(){ } public Student1(String name, double score){ this.name = name; this.score = score; } 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; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package com.itcast;
public class StudentOperator { private Student1 student1; public StudentOperator(Student1 student1){ this.student1 = student1; } public void printPass(){ if (student1.getScore() >= 60){ System.out.println("成绩合格"); }else { System.out.println("成绩不合格"); } } }
|
面向对象之电影票信息管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| package com.itcast;
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 String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
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; } }
|
- MovieOperator类,用来封装一些查找,打印电影票信息的操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package com.itcast;
public class MovieOperator {
private Movie[] movies; public MovieOperator(Movie[] movies) { this.movies = movies; } 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]; int mvid = m.getId(); if (mvid == id){ System.out.println("找到了"); System.out.println("编号:" + m.getId()); System.out.println("名称:" + m.getName()); System.out.println("价格:" + m.getPrice()); }else continue; } } }
|
- Test类,对接用户,接收用户的输入并调用对象方法对数据进行处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package com.itcast;
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, "出拳吧", 39, 7.8, "唐晓白", "田雨","3.5万人想看"); movies[2] = new Movie(3,"月球陨落", 42, 7.9, "罗兰", "贝瑞","17.9万人想看"); movies[3] = new Movie(4,"一点就到家", 35, 8.7, "许宏宇", "刘昊然","10.8万人想看"); MovieOperator mvop = new MovieOperator(movies); mvop.printAllMovies(); Scanner sc = new Scanner(System.in); while (true){ System.out.println("==电影信息系统=="); System.out.println("1、查询全部电影信息"); System.out.println("2、根据id查询某个电影的详细信息展示"); System.out.println("请您输入操作命令:"); int choice = sc.nextInt(); switch (choice){ case 1: mvop.printAllMovies(); break; case 2: System.out.println("请您输入这个电影的id:"); int i = sc.nextInt(); mvop.searchMovieById(i); break; default: System.out.println("您输入的id有问题!"); } } } }
|