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

简介: 继续补充完成java面向基础对象学习的第二部分,本章内容主要包括构造器和this以及javabean和封装等思想,感觉仍然需要更多练习才能帮助熟练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)有参数构造器:在初始化对象的时候,同时可以为对象进行赋值。

注意事项

任何类定义出来,默认就自带了无参数构造器,写不写都有。

 一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了。

image.png

具体案例

调用无参数构造器

image.png

调用有参数构造器

image.png

二、this关键字

this关键字是什么

代表当前对象的地址

image.png

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


this关键字

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

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

public class Car {
   String name;
   double price;
   public Car(String n , double b){
   name = n;
   price = b;
  } 
}

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

public class Car {
    String name;
    double price;
    public Car(String name , double price){
    this.name = name;
    this.price = price; 
    } 
}

样例

image.png

this在成员方法中的用法

错误的表示

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

image.png

正确的表示

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

例子

image.png

三、封装

面向对象的三大特征: 封装,继承,多态 。

什么是封装? 隐藏实现细节,暴露出合适的访问方式。( 合理隐藏、合理暴露0 )

封装的原则: 对象代表什么,就得到对应的数据并提供数据对应的行为

封装的实现步骤

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


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


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

image.png

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

测试案例 对象

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

package movieDemo;
import javax.swing.*;
public class Movie {
    //1、成员变量
    private  String name;
    private  double score;
    private  String actor;
    //创建无参数构造器
    public Movie() {
    }
    //创建有参数构造器
    public Movie(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }
    // 2、getter +setter
    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 getActor() {
        return actor;
    }
    public void setActor(String actor) {
        this.actor = actor;
    }
}
相关文章
|
2月前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
43 10
|
2月前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
169 4
|
2月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
42 4
|
2月前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
58 1
|
2月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
84 19
|
2月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
79 13
|
2月前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
68 5
|
2月前
|
存储 C++
【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】
本任务要求使用C++读取二进制文件并在每行前添加行号后输出到控制台。主要内容包括: 1. **任务描述**:用二进制方式打开指定文件,为每一行添加行号并输出。 2. **相关知识**: - 流类库中常用的类及其成员函数(如`iostream`、`fstream`等)。 - 标准输入输出及格式控制(如`cin`、`cout`和`iomanip`中的格式化函数)。 - 文件的应用方法(文本文件和二进制文件的读写操作)。 3. **编程要求**:编写程序,通过命令行参数传递文件名,使用`getline`读取数据并用`cout`输出带行号的内容。 4. **实验步骤**:参考实验指
66 5
|
2月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
52 5
|
2月前
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
59 4