一、this关键字this是什么呢this就是一个变量用在方法中可以拿到当前类的对象。我们看下图所示代码通过代码来体会这句话到底是什么意思。哪一个对象调用方法方法中的this就是哪一个对象this有什么用呢通过this在方法中可以访问本类对象的成员变量。二、构造器什么是构造器构造器其实是一种特殊的方法但是这个方法没有返回值类型方法名必须和类名相同。作用创建对象 Student stu new Student();格式public class 类名{修饰符 类名( 参数 ) {}}功能主要是完成对象数据的初始化构造器分为有参构造和无参构造如下图所示宝子们写构造器也是有快捷键的哦如下Fn Atl ins构造器的特点在创建对象时会调用构造器。也就是说new Student()就是在执行构造器当构造器执行完了也就意味着对象创建成功。宝子们我们记住一句话new 对象就是在执行构造方法构造器的应用场景其实构造器就是用来创建对象的。可以在创建对象时给对象的属性做一些初始化操作。构造器方法有那些注意事项1)在设计一个类时如果不写构造器Java会自动生成一个无参数构造器。2)一旦定义了有参数构造器Java就不再提供无参数构造器此时建议自己加一个无参数构造器。三、封装性1.什么是封装呢所谓封装就是用类设计对象处理某一个事物的数据时应该把要处理的数据以及处理数据的方法都设计到一个对象中去。(面向对象包含三大特征: 封装, 多态, 继承)封装的设计规范用8个字总结就是合理隐藏、合理暴露2. 封装在代码中的体现一般我们在设计一个类时会将成员变量隐藏然后把操作成员变量的方法对外暴露。这里需要用到一个修饰符叫private被private修饰的变量或者方法只能在本类中被访问接下来我来给你们一张代码图来帮助你们更好的理解如果你想给Student对象的score属性赋值得调用对外暴露的方法setScore(int score)在这个方法中可以对调用者传递过来的数据进行一些控制更加安全。3.运用setScore 方法主要有以下原因数据验证与错误处理在 setScore 方法中可以添加数据验证逻辑确保输入的成绩在合理范围内。若输入的分数不在 0 - 100 之间会给出错误信息且不对 score 进行修改。这避免了因不合理数据如负数或超过满分的成绩进入系统而导致的潜在错误保证了数据的有效性和一致性。封装特性通过将 score 属性设置为私有private并提供公共的 setScore 方法来访问和修改该属性外部代码无法直接访问和修改 score 属性只能通过 setScore 方法进行操作。这增强了类的安全性防止外部代码意外或恶意修改 score 属性的值保护了对象的内部状态。便于维护和扩展维护将 score 属性赋值的逻辑集中在 setScore 方法中避免了在多个地方直接操作 score 属性。这样当需要修改 score 属性赋值的逻辑时只需在 setScore 方法中进行修改而不需要在所有直接操作 score 属性的地方进行修改。扩展随着业务的发展可能需要对 score 属性的赋值逻辑进行更多的扩展如添加成绩的等级转换、与其他系统的交互等。使用 setScore 方法可以方便地进行这些扩展而不会影响到其他部分的代码提高了代码的可维护性和可扩展性。当你想获取socre变量的值时就得调用对外暴露的另一个方法getScore()四、实体JavaBean1. 什么是实体类实体类就是一种特殊的类它需要满足下面的要求1这个类的成员变量都要私有并且要对外提供相应的get行行行setxxx方法2类中那个必须有一个公共的无参构造器2.JavaBean实体类有什么特点JavaBean实体类仅仅只用来封装数据只提供对数据进行存和取的方法3.JavaBean实体类的应用场景JavaBean实体类只负责封装数据把数据处理的操作放在其他类中以实现数据和数据处理相分离。五、面向对象综合案例宝子们下面我将给大家展示一个面向对象的综合案例以便帮助大家更好的理解呦~1. 第一步定义电影类package test; //定义电影类 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.score score; this.price price; 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; } }2. 第二步定义电影操作类package test; //定义电影操作类 public class MovieOperator { //因为系统中有多部电影所以电影操作类中需要有一个movie数组 private Movie[] movies; //? public MovieOperator(Movie[] movies) { this.movies movies; } //展示系统全部电影信息 movies [m1,m2,m3,...] public void printMovies() { 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;//已经找到了电影信息没必要再执行了 } } System.out.println(没有该电影信息~); } }3. 第三步定义测试类package test; import java.util.Scanner; public class MovieTest { public static void main(String[] args) { //创建一个Movie类型的数组 Movie[] movies new Movie[4]; //创建4个电影对象分别存储到movies数组中 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 movieOperator new MovieOperator(movies); // 键盘录入对象 Scanner sc new Scanner(System.in); while (true) { System.out.println(-------电影信息系统-------); System.out.println(1.查询所有电影信息); System.out.println(2.根据电影编号id查询当前电影详情); System.out.println(请输入操作命令: ); int num sc.nextInt(); // 1 2 3 // 判断 switch (num) { case 1: // 查询所有电影信息 movieOperator.printMovies(); break; case 2: // 让用户输入对应的编号id System.out.println(请您输入要查询的电影编号: ); int id sc.nextInt(); //根据电影编号id查询当前电影详情 movieOperator.searchMovieById(id); break; default: } System.out.println(您输入的命令有误, 请重新输入...); } } }到这里电影信息系统就完成了。 小伙伴们自己尝试写一下吧六、成员变量和局部变量的区别成员变量是在类中方法外局部变量常见于方法中成员变量有默认值不需要初始化局部变量则没有使用之前必须完成赋值成员变量作用域于整个对象局部变量作用于所归属的大括号中希望我的总结能帮助的宝子们哦~如果觉得不错记得点赞收藏啊如果有不懂的的地方或者一些提议可以下方评论哦我会尽量回复的宝子们的OK宝子们我们下篇文章见哦~
Java面向对象基础(二)
一、this关键字this是什么呢this就是一个变量用在方法中可以拿到当前类的对象。我们看下图所示代码通过代码来体会这句话到底是什么意思。哪一个对象调用方法方法中的this就是哪一个对象this有什么用呢通过this在方法中可以访问本类对象的成员变量。二、构造器什么是构造器构造器其实是一种特殊的方法但是这个方法没有返回值类型方法名必须和类名相同。作用创建对象 Student stu new Student();格式public class 类名{修饰符 类名( 参数 ) {}}功能主要是完成对象数据的初始化构造器分为有参构造和无参构造如下图所示宝子们写构造器也是有快捷键的哦如下Fn Atl ins构造器的特点在创建对象时会调用构造器。也就是说new Student()就是在执行构造器当构造器执行完了也就意味着对象创建成功。宝子们我们记住一句话new 对象就是在执行构造方法构造器的应用场景其实构造器就是用来创建对象的。可以在创建对象时给对象的属性做一些初始化操作。构造器方法有那些注意事项1)在设计一个类时如果不写构造器Java会自动生成一个无参数构造器。2)一旦定义了有参数构造器Java就不再提供无参数构造器此时建议自己加一个无参数构造器。三、封装性1.什么是封装呢所谓封装就是用类设计对象处理某一个事物的数据时应该把要处理的数据以及处理数据的方法都设计到一个对象中去。(面向对象包含三大特征: 封装, 多态, 继承)封装的设计规范用8个字总结就是合理隐藏、合理暴露2. 封装在代码中的体现一般我们在设计一个类时会将成员变量隐藏然后把操作成员变量的方法对外暴露。这里需要用到一个修饰符叫private被private修饰的变量或者方法只能在本类中被访问接下来我来给你们一张代码图来帮助你们更好的理解如果你想给Student对象的score属性赋值得调用对外暴露的方法setScore(int score)在这个方法中可以对调用者传递过来的数据进行一些控制更加安全。3.运用setScore 方法主要有以下原因数据验证与错误处理在 setScore 方法中可以添加数据验证逻辑确保输入的成绩在合理范围内。若输入的分数不在 0 - 100 之间会给出错误信息且不对 score 进行修改。这避免了因不合理数据如负数或超过满分的成绩进入系统而导致的潜在错误保证了数据的有效性和一致性。封装特性通过将 score 属性设置为私有private并提供公共的 setScore 方法来访问和修改该属性外部代码无法直接访问和修改 score 属性只能通过 setScore 方法进行操作。这增强了类的安全性防止外部代码意外或恶意修改 score 属性的值保护了对象的内部状态。便于维护和扩展维护将 score 属性赋值的逻辑集中在 setScore 方法中避免了在多个地方直接操作 score 属性。这样当需要修改 score 属性赋值的逻辑时只需在 setScore 方法中进行修改而不需要在所有直接操作 score 属性的地方进行修改。扩展随着业务的发展可能需要对 score 属性的赋值逻辑进行更多的扩展如添加成绩的等级转换、与其他系统的交互等。使用 setScore 方法可以方便地进行这些扩展而不会影响到其他部分的代码提高了代码的可维护性和可扩展性。当你想获取socre变量的值时就得调用对外暴露的另一个方法getScore()四、实体JavaBean1. 什么是实体类实体类就是一种特殊的类它需要满足下面的要求1这个类的成员变量都要私有并且要对外提供相应的get行行行setxxx方法2类中那个必须有一个公共的无参构造器2.JavaBean实体类有什么特点JavaBean实体类仅仅只用来封装数据只提供对数据进行存和取的方法3.JavaBean实体类的应用场景JavaBean实体类只负责封装数据把数据处理的操作放在其他类中以实现数据和数据处理相分离。五、面向对象综合案例宝子们下面我将给大家展示一个面向对象的综合案例以便帮助大家更好的理解呦~1. 第一步定义电影类package test; //定义电影类 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.score score; this.price price; 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; } }2. 第二步定义电影操作类package test; //定义电影操作类 public class MovieOperator { //因为系统中有多部电影所以电影操作类中需要有一个movie数组 private Movie[] movies; //? public MovieOperator(Movie[] movies) { this.movies movies; } //展示系统全部电影信息 movies [m1,m2,m3,...] public void printMovies() { 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;//已经找到了电影信息没必要再执行了 } } System.out.println(没有该电影信息~); } }3. 第三步定义测试类package test; import java.util.Scanner; public class MovieTest { public static void main(String[] args) { //创建一个Movie类型的数组 Movie[] movies new Movie[4]; //创建4个电影对象分别存储到movies数组中 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 movieOperator new MovieOperator(movies); // 键盘录入对象 Scanner sc new Scanner(System.in); while (true) { System.out.println(-------电影信息系统-------); System.out.println(1.查询所有电影信息); System.out.println(2.根据电影编号id查询当前电影详情); System.out.println(请输入操作命令: ); int num sc.nextInt(); // 1 2 3 // 判断 switch (num) { case 1: // 查询所有电影信息 movieOperator.printMovies(); break; case 2: // 让用户输入对应的编号id System.out.println(请您输入要查询的电影编号: ); int id sc.nextInt(); //根据电影编号id查询当前电影详情 movieOperator.searchMovieById(id); break; default: } System.out.println(您输入的命令有误, 请重新输入...); } } }到这里电影信息系统就完成了。 小伙伴们自己尝试写一下吧六、成员变量和局部变量的区别成员变量是在类中方法外局部变量常见于方法中成员变量有默认值不需要初始化局部变量则没有使用之前必须完成赋值成员变量作用域于整个对象局部变量作用于所归属的大括号中希望我的总结能帮助的宝子们哦~如果觉得不错记得点赞收藏啊如果有不懂的的地方或者一些提议可以下方评论哦我会尽量回复的宝子们的OK宝子们我们下篇文章见哦~