Java面试要点16 - 面向对象基础:类与对象

在这里插入图片描述

本文目录

    • 一、引言
    • 二、类的定义与对象创建
    • 三、成员变量与封装
    • 四、构造方法
    • 五、this关键字
    • 六、静态成员
    • 七、总结


一、引言

面向对象编程是Java的核心特性之一,它通过类和对象的概念来组织和管理代码,使代码更加模块化、可复用和易于维护。本文将深入探讨Java中类与对象的基本概念,包括类的定义、对象的创建、成员变量、方法、构造函数等重要内容。

二、类的定义与对象创建

类是对象的模板,它定义了对象的属性和行为。在Java中,我们使用class关键字来定义类。类中可以包含成员变量(属性)和方法(行为)。对象则是类的实例,是类定义的具体实现。

通过一个简单的学生类来理解这些概念:

public class Student {
    // 成员变量(属性)
    private String name;        // 学生姓名
    private int age;           // 学生年龄
    private String studentId;  // 学生学号
    private double score;      // 学生成绩
    
    // 构造方法
    public Student(String name, int age, String studentId) {
        this.name = name;
        this.age = age;
        this.studentId = studentId;
        this.score = 0.0;  // 初始成绩为0
    }
    
    // 成员方法(行为)
    public void study(String subject) {
        System.out.println(name + "正在学习" + subject);
    }
    
    public void takeExam(String subject) {
        System.out.println(name + "正在参加" + subject + "考试");
    }
    
    public void setScore(double score) {
        if (score >= 0 && score <= 100) {
            this.score = score;
        } else {
            System.out.println("成绩必须在0-100之间");
        }
    }
}

三、成员变量与封装

封装是面向对象编程的重要特性之一,它通过访问修饰符来控制类的成员变量和方法的可见性。在Java中,通常将成员变量声明为private,然后通过public的getter和setter方法来访问和修改这些变量。这样可以确保数据的安全性和可控性。

public class Person {
    private String name;
    private int age;
    private String idCard;
    
    // getter方法
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    // setter方法
    public void setName(String name) {
        if (name != null && !name.trim().isEmpty()) {
            this.name = name;
        }
    }
    
    public void setAge(int age) {
        if (age >= 0 && age <= 150) {
            this.age = age;
        } else {
            System.out.println("年龄必须在0-150之间");
        }
    }
    
    // 身份证号码只提供getter方法,不允许修改
    public String getIdCard() {
        return idCard;
    }
}

四、构造方法

构造方法是创建对象时自动调用的特殊方法,用于初始化对象的状态。一个类可以有多个构造方法,这就是构造方法的重载。当没有显式定义构造方法时,Java会提供一个默认的无参构造方法。

public class Book {
    private String title;
    private String author;
    private double price;
    private int pageCount;
    
    // 无参构造方法
    public Book() {
        this.title = "未命名";
        this.author = "佚名";
        this.price = 0.0;
        this.pageCount = 0;
    }
    
    // 带参数的构造方法
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
        this.price = 0.0;
        this.pageCount = 0;
    }
    
    // 完整的构造方法
    public Book(String title, String author, double price, int pageCount) {
        this.title = title;
        this.author = author;
        this.price = price;
        this.pageCount = pageCount;
    }
    
    // 使用前一个构造方法的构造方法
    public Book(String title, String author, double price) {
        this(title, author, price, 0);
    }
}

五、this关键字

this关键字代表当前对象的引用,它可以用来访问对象的成员变量和方法,也可以用来调用其他构造方法。使用this可以避免成员变量和局部变量的命名冲突,使代码更加清晰。

public class Employee {
    private String name;
    private double salary;
    private String department;
    
    public Employee(String name, double salary) {
        this.name = name;       // 使用this区分成员变量和参数
        this.salary = salary;
        this.department = "未分配";
    }
    
    public void updateInfo(String name, String department) {
        this.name = name;
        this.department = department;
        this.printInfo();  // 使用this调用当前对象的方法
    }
    
    public void printInfo() {
        System.out.println("员工信息:");
        System.out.println("姓名:" + this.name);
        System.out.println("部门:" + this.department);
        System.out.println("薪资:" + this.salary);
    }
}

六、静态成员

使用static关键字声明的成员变量和方法属于类本身,而不是类的实例。静态成员可以通过类名直接访问,不需要创建对象。静态方法只能访问静态成员,不能访问非静态成员。

public class Calculator {
    // 静态常量
    public static final double PI = 3.14159;
    
    // 静态变量
    private static int operationCount = 0;
    
    // 静态方法
    public static double calculateCircleArea(double radius) {
        operationCount++;
        return PI * radius * radius;
    }
    
    // 静态方法获取操作次数
    public static int getOperationCount() {
        return operationCount;
    }
    
    // 实例方法可以访问静态成员
    public void printOperationCount() {
        System.out.println("当前操作次数:" + operationCount);
    }
}

七、总结

理解类与对象的概念是掌握Java面向对象编程的基础。通过合理的类设计和封装,可以创建出结构清晰、易于维护的代码。在实际开发中,我们需要根据具体需求设计类的结构,包括成员变量、方法、构造函数等。同时,还要注意遵循封装原则,合理使用访问修饰符来保护数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914733.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载

软件介绍 下载iOS旧版应用&#xff0c;简化繁琐的抓包流程。 一键生成去更新IPA&#xff08;手机安装后&#xff0c;去除App Store的更新检测&#xff09;。 软件界面 支持系统 Windows 10/Windows 8/Windows 7&#xff08;由于使用了Fiddler库&#xff0c;因此需要.Net环境…

LeetCode 热题100 之 多维动态规划

1.不同路径 思路分析&#xff1a;动规五部曲 dp数组定义&#xff1a;dp[i][j]表示从起点&#xff08;0&#xff0c;0&#xff09;到位置(i,j)的路径数量递推公式&#xff1a;dp[i][j] dp[i-1][j] dp[i][j-1] 从 (i-1, j) 位置到 (i, j) 需要走一步向下的路径。从 (i, j-1) 位…

文件操作(3)

前言&#xff0c;在上篇博客介绍了如何正确的打开一个文件和关闭一个文件&#xff0c;今天我们来学习如何在文件中输出和输入数据。 对文件数据的读写可以分为顺序读写和随机读写。顺序读写&#xff0c;即挨着顺序对文件中的数据进行输入或输出。 在这片博客中&#xff0c;我们…

Openstack7--安装消息队列服务RabbitMQ

只需要在控制节点安装 安装RabbitMQ yum -y install rabbitmq-server 启动RabbitMQ并设置开机自启 systemctl start rabbitmq-server;systemctl enable rabbitmq-server 创建 rabbitmq 用户 并设置密码为 000000 rabbitmqctl add_user rabbitmq 000000 如果你不慎创错了…

Unity图形学之Shader2.0 模板测试

1.模版测试&#xff1a;符合条件的 通过 不符合条件的 像素 丢弃 比较公式&#xff1a; if&#xff08;&#xff08;referenceValue&readMask&#xff09; comparisonFunction &#xff08;stencilBufferValue&readMask&#xff09;&#xff09; 通过像素 else 抛弃…

020_Servlet_Mysql学生选课系统(新版)_lwplus87

摘 要 随着在校大学生人数的不断增加&#xff0c;教务系统的数据量也不断的上涨。针对学生选课这一环节&#xff0c;本系统从学生网上自主选课以及课程发布两个大方面进行了设计&#xff0c;基本实现了学生的在线信息查询、选课功能以及教师对课程信息发布的管理等功能&…

SpringBoot教程(二十五) | SpringBoot配置多个数据源

SpringBoot教程&#xff08;二十五&#xff09; | SpringBoot配置多个数据源 前言方式一&#xff1a;使用dynamic-datasource-spring-boot-starter引入maven依赖配置数据源动态切换数据源实战 方式二&#xff1a;使用AbstractRoutingDataSource1. 创建数据源枚举类2. 创建数据源…

Python 正则表达式进阶用法:分组与引用详解

Python 正则表达式进阶用法&#xff1a;分组与引用详解 正则表达式是一种用于字符串匹配和处理的强大工具。它不仅能识别简单的文本模式&#xff0c;还能通过更高级的特性来完成复杂的文本处理任务。本文将深入探讨 Python 正则表达式中的“分组”和“引用”——两个在高级匹配…

米家通过HomeAssistant控制笔记本电脑开关机

米家通过HomeAssistant控制笔记本电脑开关机 配置HomeAssistant配置EMQX mqtt自动化配置电脑关机实现电脑开机实现&#xff08;网络唤醒WOL包&#xff09; 环境准备&#xff1a; HomeAssistant&#xff1a;能配置接入米家的设备&#xff0c;我这里采用fnos安装MQTT服务器&…

前端环境配置

对于换公司的小伙伴来讲&#xff0c;重新安装环境&#xff0c;百度或许稍微有点麻烦&#xff0c;本文章让你无脑式直接操作&#xff0c;保证环境畅通无阻。 1.安装nvm-setup 该插件是一款管理nodeJs的包&#xff0c;无需你单独下载nodeJs去安装&#xff0c;只需要下载安装此…

[CKS] K8S AppArmor Set Up

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于AppArmor Pod操作权限的问题。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] …

提升自然排名的有效策略与方法

内容概要 在数字营销的快速发展背景下&#xff0c;自然排名的提升日益显得重要。自然排名不仅影响网站的流量&#xff0c;同时也直接关系到品牌的曝光度和市场竞争力。针对这个主题&#xff0c;我们将探讨多个关键因素&#xff0c;帮助读者更好地理解自然排名的重要性及其影响…

golang go语言 组建微服务架构详解 - 代码基于开源框架grpc+nacos服务管理配置平台

整体介绍&#xff1a; 本文主要介绍如何用go语言 来组建微服务的框架&#xff0c;grpc服务管理 示例框架 代码由grpcnacos go sdk 组成。 grpc负责将调用序列化并传递到远端&#xff0c;nacos负责服务发现和服务管理。 grpc和nacos都是开源产品。代码复制下来就能跑。 微服…

软件测试项目实战

软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 在软件投入使用前&#xff0c;要经过一系列的严格测试&#xff0c;才能保证交付质量。 一、引言 1.编写目的 本文档…

基于百度飞桨paddle的paddlepaddle2.4.2等系列项目的运行

PPASR 必看&#xff01;&#xff01;&#xff01; PaddleSpeech develop --> PaddlePaddle 2.5.0/2.5.1 PaddleSpeech < 1.4.1 --> PaddlePaddle < 2.4.2 1.创建虚拟环境 conda create --name test python3.10 2.激活环境&#xff0c;安装ppasr的paddlepaddl…

MySQL数据库专栏(四)MySQL数据库链接操作C#篇

摘要 本篇文章主要介绍C#链接MySQL数据库的接口介绍&#xff0c;使用实例及注意事项&#xff0c;辅助类的封装及调用实例&#xff0c;可以直接移植到项目里面使用。 目录 1、添加引用 2、接口介绍 2.1、MySqlConnection 2.2、MySqlCommand 2.3、MySqlDataReader…

【Pikachu】File Inclusion文件包含实战

永远也不要忘记能够笑的坚强&#xff0c;就算受伤&#xff0c;我也从不彷徨。 1.File Inclusion(文件包含漏洞)概述 File Inclusion(文件包含漏洞)概述 文件包含&#xff0c;是一个功能。在各种开发语言中都提供了内置的文件包含函数&#xff0c;其可以使开发人员在一个代码…

计算机网络基本概念总结

IP地址 概念 使网络中的设备都有唯一的地址标识&#xff0c;用于表示其在网络中的位置。 格式 IP地址是一个32位的二进制数&#xff0c;通常被分割为4个8位二进制数&#xff08;也就是4个字节&#xff09;&#xff0c;如&#xff1a;01100100.00001000.00001010.00000110。通常…

CSS回顾-基础知识详解

一、引言 在前端开发领域&#xff0c;CSS 曾是构建网页视觉效果的关键&#xff0c;与 HTML、JavaScript 一起打造精彩的网络世界。但随着组件库的大量涌现&#xff0c;我们亲手书写 CSS 样式的情况越来越少&#xff0c;CSS 基础知识也逐渐被我们遗忘。 现在&#xff0c;这种遗…

RabbitMq项目实战--延迟队列实现超时订单处理

简单实现版 RabbitMq创建队列绑定交换机_rabbitmq 绑定交换机-CSDN博客 Configuration public class RabbitmqConfig {Value("${rabbitmq.exchange}")private String exchange;Value("${rabbitmq.host}")private String host;Value("${rabbitmq.por…