• 从c++到Java,关于Java面向对象基础的学习(二)


    继续补充完成java面向基础对象学习的第二部分,本章内容主要包括构造器和this以及javabean和封装等思想,感觉仍然需要更多练习才能帮助熟练java面向对象基础部分

     

    目录

    一、构造器

    构造器的作用

    构造器的定义格式  

     初始化对象的格式

    构造器的分类

    注意事项

    ​编辑

    具体案例 

    二、this关键字 

    this关键字

    this在成员方法中的用法

    三、封装

     封装的实现步骤

                       Javabean综合案例(猫眼电影系统)


    一、构造器

    构造器的作用

      用于初始化一个类的对象,并返回对象的地址
    Car c = new Car ();

    构造器的定义格式  

    修饰符 类名 ( 形参列表 ){
    ...
    }

     public class Car {

    ...
    // 无参数构造器
    public Car (){
    ...
    }
    // 有参数构造器
    public Car ( String n, String b){
    ...
    }
    }

     初始化对象的格式

    类型 变量名称 = new 构造器;
    Car c = new Car ();

    构造器的分类

    类型 变量名称 = new 构造器;
    (1)无参数构造器(默认存在的):初始化的对象时,成员变量的数据均采用默认值。
    (2)有参数构造器:在初始化对象的时候,同时可以为对象进行赋值。

    注意事项

    任何类定义出来,默认就自带了无参数构造器,写不写都有。
      一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了。

    具体案例 

    调用无参数构造器

    调用有参数构造器

     

    二、this关键字 

    this关键字是什么

    代表当前对象的地址

    上图中this表示与 c 的地址一样,都指向new Car(), 如果调用了c.run(),那么run里面的c也指向new Car()

    this关键字

    作用:出现在成员方法、构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法

     在写代码的时候如果用以下的代码去写往往是被诟病的,因为n,和p没有实际意义,

    1. public class Car {
    2. String name;
    3. double price;
    4. public Car(String n , double b){
    5. name = n;
    6. price = b;
    7. }
    8. }

    如果用了this关键字就可以正确的表示,表示为上面第一个String name里面的name赋值和double price 里面的price赋值

    1. public class Car {
    2. String name;
    3. double price;
    4. public Car(String name , double price){
    5. this.name = name;
    6. this.price = price;
    7. }
    8. }

     样例

    this在成员方法中的用法

    错误的表示

    public class Car {
       String name ;
       double price ;
       public void goWith ( String name){
       System . out .println(name + " 正在和 " + name + " 一起比赛!! " );
       }
    }

     

    正确的表示

    public class Car {
        String name ;
        double price ;
        public void goWith ( String name){
        System . out .println( this .name + " 正在和 " + name + " 一起比赛!! " );
        }
    }

     例子

    三、封装

    面向对象的三大特征: 封装,继承,多态
    什么是封装? 隐藏实现细节,暴露出合适的访问方式。( 合理隐藏、合理暴露0
    封装的原则: 对象代表什么,就得到对应的数据并提供数据对应的行为

    封装的实现步骤

    一般对成员变量使用private(私有)关键字修饰进行隐藏,private修饰后该成员变量就只能在当前类中访问。

    提供public修饰的公开的getter、setter方法暴露其取值和赋值。

    在赋值给一个学生年龄的例子中非常容易出现,入过学生的年龄错误了,为负数,仍然会继续输入,那么该如何修改呢,这是就需要封装,通过一定暴露和封装完成

     

    Javabean综合案例(猫眼电影系统)

    测试案例 对象

    1. package movieDemo;
    2. public class Test {
    3. public static void main(String[] args) {
    4. //1、设计电影类
    5. //2、创建三个电影对象,分装电影信息
    6. //3、定义一个电影类型数组,存储电影的对象
    7. Movie[] movies = new Movie[3];
    8. movies[0] = new Movie("长津湖",9.7,"吴京");
    9. movies[1] =new Movie("我和我的父辈",9.6,"吴京");
    10. movies[2] = new Movie("五个扑水的少年",9.5,"王川");
    11. //4、遍历数组中每个对象
    12. for(int i = 0;i < movies.length;i++) {
    13. Movie m = movies[i];
    14. System.out.println("电影名:" + m.getName());
    15. System.out.println("得分:" + m.getScore());
    16. System.out.println("主演:" + m.getActor());
    17. System.out.println("-------------------");
    18. }
    19. }
    20. }

    1. package movieDemo;
    2. import javax.swing.*;
    3. public class Movie {
    4. //1、成员变量
    5. private String name;
    6. private double score;
    7. private String actor;
    8. //创建无参数构造器
    9. public Movie() {
    10. }
    11. //创建有参数构造器
    12. public Movie(String name, double score, String actor) {
    13. this.name = name;
    14. this.score = score;
    15. this.actor = actor;
    16. }
    17. // 2、getter +setter
    18. public String getName() {
    19. return name;
    20. }
    21. public void setName(String name) {
    22. this.name = name;
    23. }
    24. public double getScore() {
    25. return score;
    26. }
    27. public void setScore(double score) {
    28. this.score = score;
    29. }
    30. public String getActor() {
    31. return actor;
    32. }
    33. public void setActor(String actor) {
    34. this.actor = actor;
    35. }
    36. }

  • 相关阅读:
    猿创征文|Python基础——Visual Studio版本——DBHelper-MySQL版本
    Matlab|【EI复现】电动汽车集群并网的分布式鲁棒优化调度模型
    SQL Server 存储过程(spSelect):实现打印 select 语句(显示所有字段)
    WPF ComboBox MVVM 获取选中的值、选择改变事件
    一个IT人员面试大都会人寿的过程
    洗地机什么牌子好用?洗地机排名
    【PTA】蛇形矩阵
    leetCode 115.不同的子序列 动态规划 + 滚动数组(优化)
    【Java|golang】791. 自定义字符串排序---使用桶排序
    mybatisplus动态sql整型数组使用in踩坑
  • 原文地址:https://blog.csdn.net/qq_64691289/article/details/126842806