目录
一、面向对象编程快速入门
二、深刻认识面向对象
三、对象在计算机中的执行原理
四、类和对象的一些注意事项
五、其他语法:this
六、其他语法:构造器
七、其他语法:封装
八、其他语法:实体JavaBean
九、面向对象编程综合案例
十、补充知识:成员变量、局部变量的区别小结
文章来源地址https://www.toymoban.com/news/detail-626404.html
前言
Student类
package com.ctgu.object; public class Student { String name; double chinese; double math; public void printTotalScore(){ System.out.println(name + "的总成绩是:" + (chinese + math)); } public void printAverageScore(){ System.out.println(name + "的平均成绩是:" + (chinese + math) / 2); } }
Test类
package com.ctgu.object; public class Test { public static void main(String[] args) { // 目标:面向对象编程快速入门 // 1、创建一个学生对象,封装波妞的数据 Student s1 = new Student(); s1.name = "波妞"; s1.chinese = 100; s1.math = 100; s1.printTotalScore(); s1.printAverageScore(); // 2、再创建一个学生对象,封装波仔的数据 Student s2 = new Student(); s2.name = "波仔"; s2.chinese = 59; s2.math = 100; s2.printTotalScore(); s2.printAverageScore(); } }
一、面向对象编程快速入门
- 开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。
二、深刻认识面向对象
1、面向对象编程有啥好处?
- 汽车的数据 找汽车对象处理
- 手机的数据 找手机对象处理
- 学生的数据 找学生对象处理
- 符合人类思维习惯,编程更简单、更直观
2、程序中的对象到底是个啥?
- 对象本质上是一种特殊的数据结构。
- class也就是类,也称为对象的设计图(或者对象的模板)。
总结
1、面对对象编程有啥好处?
- 凡事找对象的编程思路,更加符合人类思维习惯,编程也会更直观。
2、对象是啥?如何得到?
- 对象是一种特殊的数据结构。
- 对象是用类new出来的,有了类就可以创建出对象。
3、面向对象编程这种套路是咋回事?
- 祖师爷认为万物皆对象,谁的数据谁处理。
三、对象在计算机中的执行原理
多个对象在计算机中的执行原理
总结
1、对象在计算机中的执行原理是怎么回事?
- Student s1 = new Student();
- 每次new Student(),就是在堆内存中开辟一块区域代表一个学生对象。
- s1变量里面记住的是学生对象的地址。
四、类和对象的一些注意事项
类和对象的一些注意事项
- 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car...
- 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
- 成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。
- 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
- 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
- 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。
如果某个对象没有任何变量指向它,需要注意说明?
注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。
java存在自动垃圾回收机制,会自动清除掉垃圾对象,程序员不用操心。
五、this
this是什么
- this就是一个变量,可以用在方法中,来拿到当前对象。
Student类
package com.ctgu.thisdemo; public class Student { public void printThis(){ System.out.println(this); } }
Test类
package com.ctgu.thisdemo; public class Test { public static void main(String[] args) { // 目标:认识this,掌握this的应用场景。 Student s1 = new Student(); System.out.println(s1); s1.printThis(); System.out.println("---------------------"); Student s2 = new Student(); System.out.println(s2); s2.printThis(); } }
This的执行原理
this有啥应用场景呢?
- this主要用来解决:变量名称冲突问题的。
package com.ctgu.thisdemo; public class Student { double score; public void printThis(){ System.out.println(this); } public void printPass(double score){ if(this.score > score){ System.out.println("恭喜您,您成功考入了哈弗大学了~~"); }else{ System.out.println("落选了"); } } }
总结
1、this关键字是什么?
- this就是一个变量,可以用在方法中,用来拿到当前对象;哪个对象调用方法,this就指向哪个对象,也就是拿到哪个对象。
2、this关键字在实际开发中常用来干啥?
- 用来解决对象的成员变量与方法内部变量的名称一样时,导致访问冲突问题的。
多学一招:方法里的this到底是如何拿到调用它的对象的
六、构造器
关于构造器,需要同学们掌握的目标
构造器是什么样子?
构造器有什么特点?
- 创建对象时,对象会去调用构造器。
Student s = new Student();
构造器的常见应用场景
- 创建对象时,同时完成对对象成员变量(属性)的初始化赋值。
Student类
package com.ctgu.constructor; public class Student { String name; double score; // 无参构造器 public Student(){ System.out.println("无参数构造器被触发执行了~"); } // 有参构造器 public Student(String name,double score){ System.out.println("有参数的构造器被触发执行了~"); } }
Test类
package com.ctgu.constructor; public class Test { public static void main(String[] args) { // 目标:认识构造器,并掌握构造器的特点,应用场景,注意事项 Student s1 = new Student(); s1.name = "波妞"; s1.score = 100; Student s2 = new Student("小黑",59); System.out.println(s2.name); System.out.println(s2.score); } }
构造器的注意事项
- 类在设计时,如果不写构造器,java是会为类自动生成一个无参构造器的。
- 一旦定义了有参数构造器,java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。
总结
1、构造器长什么样子?
2、构造器在哪里调用,我们常用它来干嘛?
- 对象创建时,我们可以指定对象去调用哪个构造器执行。
- 构造器常用于完成对象初始化(常见的应用场景是完成对象的成员变量的初始化赋值)
3、构造器在使用时,有哪2个注意事项?
- 类在设计时,如果不写构造器,java是会为类自动生成一个无参构造器的。
- 一旦定义了有参数构造器,java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。
七、封装
面对对象的三大特性:封装、继承、多态
什么是封装?
- 就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。
封装的设计规范:合理隐藏、合理暴露
Student类
package com.ctgu.encapsulation; public class Student { private double score; private void printPass(){ System.out.println(score >= 60 ? "成绩及格" : "成绩不及格"); } public void setScore(double score) { if(score >= 0 && score <= 100) { this.score = score; }else{ System.out.println("数据非法"); } } public double getScore() { return score; } }
Test类
package com.ctgu.encapsulation; public class Test { public static void main(String[] args) { // 目标:掌握封装的设计规范:合理隐藏、合理暴露。 Student s1 = new Student(); s1.setScore(-99); } }
总结
1、什么是封装?
- 就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。
- 面向对象三大特征:封装、继承、多态。
2、封装的设计规范是什么样的?
- 合理隐藏,合理暴露。
3、代码层面如何控制对象的成员公开或隐藏?
- 公开成员,可以使用public(公开)进行修饰。
- 隐藏成员,使用private(私有,隐藏)进行修饰。
八、实体JavaBean
什么是实体类?
- 就是一种特殊形式的类。
get、set快捷生成
- 右键Generate..,再点击Getter and Setter,选择成员变量。
有参、无参构造器快捷生成
- 右键Generate..,再点击Constructor,选择参数。
Student类
package com.ctgu.javabean; public class Student { // 1、必须私有成员变量,并为每个成员变量都提供get、set方法。 private String name; private double score; // 2、必须为类提供一个公开的无参构造器 public Student(String name, double score) { this.name = name; this.score = score; } public Student() { } 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; } }
Test类
package com.ctgu.javabean; public class Test { public static void main(String[] args) { // 目标:掌握实体类的书写要求,特点,应用场景。 Student s1 = new Student(); s1.setName("波妞"); s1.setScore(99); System.out.println(s1.getName()); System.out.println(s1.getScore()); } }
StudentOpreator类
package com.ctgu.javabean; public class StudentOperator { private Student student; public StudentOperator(Student student){ this.student = student; } public void printPass(){ if(student.getScore() >= 60){ System.out.println(student.getName() + "学生成绩及格"); }else{ System.out.println(student.getName() + "学生成绩不及格"); } } }
实体类有啥应用场景?
- 实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。
总结
1、什么是实体类?有啥特点?
- 成员变量必须私有,且为他们提供get、set方法;必须有无参数构造器。
- 实体类仅仅只是一个用来保存数据的java类,可以用它创造对象,保存某个事物的数据。
2、实体类有啥应用场景?
- 实体类对应的是软件开发里比较流行的开发方式,数据和数据的业务处理相分离。
九、面向对象编程综合案例
案例 面向对象综合案例-模仿电影信息系统
需求
- 展示系统中的全部电影(每部电影展示:名称、价格)
- 允许用户根据电影编号(id)查询出某个电影的详细信息。
目标
- 使用所学的面向对象编程实现以上2个需求。
实训
movie类
package com.ctgu.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; } /** * 获取 * @return id */ public int getId() { return id; } /** * 设置 * @param id */ public void setId(int id) { this.id = id; } /** * 获取 * @return name */ public String getName() { return name; } /** * 设置 * @param name */ public void setName(String name) { this.name = name; } /** * 获取 * @return price */ public double getPrice() { return price; } /** * 设置 * @param price */ public void setPrice(double price) { this.price = price; } /** * 获取 * @return score */ public double getScore() { return score; } /** * 设置 * @param score */ public void setScore(double score) { this.score = score; } /** * 获取 * @return director */ public String getDirector() { return director; } /** * 设置 * @param director */ public void setDirector(String director) { this.director = director; } /** * 获取 * @return actor */ public String getActor() { return actor; } /** * 设置 * @param actor */ public void setActor(String actor) { this.actor = actor; } /** * 获取 * @return info */ public String getInfo() { return info; } /** * 设置 * @param info */ public void setInfo(String info) { this.info = info; } }
MovieOperator类
package com.ctgu.demo; public class MovieOperator { private Movie[] movies; public MovieOperator(Movie[] movies){ this.movies = movies; } /** 1、展示系统全部电影信息 */ 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("----------------------"); } } /**2、根据电影的编号查询出该电影的详细信息并展示 */ 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; //已经找到了电影信息,没有必要再执行看 }else{ System.out.println("查询无果"); } } } }
Test类
package com.ctgu.demo; import java.util.Scanner; public class Test { public static void main(String[] args) { // 1、设计一个电影类 Movie // 2、设计一个电影的操作类 MovieOperator // 3、准备 全部电影数据 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,"徐宏宁","刘昊然","18.8万人想看"); // 4、创建一个电影操作类的对象,接受电影数据,并对其进行业务处理 MovieOperator operator = new MovieOperator(movies); operator.printAllMovies(); operator.searchMovieById(3); Scanner sc = new Scanner(System.in); while (true) { System.out.println("==电影信息系统=="); System.out.println("1、查询全部电影信息"); System.out.println("2、根据id查询某个电影的详细信息展示"); int commend = sc.nextInt(); switch (commend){ case 1: // 展示全部电影信息 operator.printAllMovies(); break; case 2: // 根据id查询某个电影的详细信息展示 System.out.println("请您输入查询的电影id:"); int id = sc.nextInt(); operator.searchMovieById(id); break; default: System.out.println("您输入的命令有问题~"); } } } }
十、补充知识:成员变量、局部变量的区别
成员变量和局部变量的区别
文章来源:https://www.toymoban.com/news/detail-626404.html
到了这里,关于JAVA SE基础《八》 ---- 面对对象编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!