Java-面向对象基础

在面向对象编程(Object-Oriented Programming, OOP)中,类(Class)是一种用来描述对象共同特征的蓝图或模板。它是创建对象的原型,定义了对象可以有的属性(字段)和行为(方法)。简单来说,类是一种抽象数据类型的实现方式。

1-类的基本概念

  1. 属性(Fields): 类的属性也称为字段(Fields),是描述类的特征或状态的变量。例如,一辆汽车类可能有颜色、品牌、型号等属性。

  2. 方法(Methods): 类的方法定义了可以对对象执行的操作或行为。方法通常用来修改对象的状态或返回对象的属性。例如,汽车类的方法可以是启动引擎、加速、刹车等。

  3. 构造函数(Constructor): 构造函数是特殊的方法,用于在创建对象时初始化对象的状态。它的名称与类名相同,不返回任何值。每次创建新对象时,构造函数都会自动调用。

  4. 实例化: 类本身只是一个模板或蓝图,实际的对象是根据这个模板创建出来的。创建对象的过程称为实例化,通过 new 关键字调用类的构造函数来实现。

举例

// 定义一个汽车类
public class Car {// 属性private String brand;private String model;private String color;private int year;// 构造函数public Car(String brand, String model, String color, int year) {this.brand = brand;this.model = model;this.color = color;this.year = year;}// 方法public void start() {System.out.println("Starting the " + color + " " + brand + " " + model);// 执行启动汽车的操作}public void accelerate() {System.out.println("Accelerating...");// 执行加速汽车的操作}public void brake() {System.out.println("Applying brakes...");// 执行刹车的操作}// Getter 和 Setter 方法用于访问和修改私有属性public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public String getModel() {return model;}public void setModel(String model) {this.model = model;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getYear() {return year;}public void setYear(int year) {this.year = year;}
}

2-对象的基本概念

  1. 实例化: 对象是通过类的构造函数(Constructor)来创建的。每次调用构造函数 new 时,都会生成一个新的对象。例如,在上一个例子中,Car 类通过 new Car("Toyota", "Camry", "Red", 2022) 创建了一个具体的汽车对象。

  2. 属性和方法的继承: 对象从其类继承了所有的属性和方法。类定义了对象的结构和行为,对象则具体体现了这些定义。例如,汽车对象具有颜色、品牌、型号等属性,以及启动、加速、刹车等方法。

  3. 独特性: 每个对象是独特的,即使是从同一个类创建的多个对象也可以有不同的状态。例如,两辆相同品牌的汽车可以有不同的颜色和型号,它们是不同的对象实例。

示例

继续以汽车类为例,假设我们创建了两个不同的汽车对象:

Car car1 = new Car("Toyota", "Camry", "Red", 2022);
Car car2 = new Car("Honda", "Accord", "Blue", 2023);

在这里,car1car2 是两个不同的汽车对象。它们共享相同的类定义(Car 类),但具体的属性值和方法调用可以是不同的。

对象的特性

  • 封装性:对象封装了其状态(属性)和行为(方法),外部只能通过公共接口访问对象的数据,从而实现数据隐藏和保护。

  • 多态性:不同对象可以对同一消息(方法调用)作出不同的响应,这取决于对象所属的类和方法的实现方式。

  • 继承性:对象可以继承其类的属性和方法,并且可以通过扩展类来增加或修改其行为。

总结

对象是面向对象编程的核心概念之一,它使得程序可以更加模块化、可复用和易于维护。通过对象,程序员可以将复杂的系统分解为更小的部分,并通过类和对象之间的交互来实现系统的功能。

3- 成员变量和局部变量的区别

成员变量(Member Variables)

  1. 定义位置: 成员变量是定义在类中的变量,可以是实例变量(Instance Variables)或类变量(Class Variables)。实例变量属于对象的一部分,每个对象都有自己的一份,而类变量则属于类本身,被所有对象共享。

  2. 作用域: 成员变量的作用域是整个类,可以被类中的任何方法访问和修改,也可以通过对象访问或修改。在堆内存当中

  3. 生存期: 成员变量的生存期取决于其所属对象或类的生存期。实例变量存在于对象的整个生命周期中,而类变量存在于类加载的整个生命周期中,直到程序结束或类被卸载。

  4. 初始化: 成员变量可以在声明时初始化,或者在构造函数中初始化,或者使用初始化块进行初始化。

  5. 示例

    public class Car {// 实例变量private String brand;private String model;// 类变量private static int carCount;// 构造函数public Car(String brand, String model) {this.brand = brand;this.model = model;carCount++; // 类变量的增加}// 其他方法可以访问实例变量和类变量
    }
    

局部变量(Local Variables)

  1. 定义位置: 局部变量定义在方法、构造函数或语句块中,仅在定义它们的代码块内部可见和有效。

  2. 作用域: 局部变量的作用域仅限于其所在的代码块。例如,方法内部声明的局部变量只能在该方法内使用。在栈内存当中

  3. 生存期: 局部变量的生存期从其声明处开始,到所在代码块执行结束时结束。一旦离开其作用域,局部变量就会被销毁。

  4. 初始化: 局部变量必须在声明时初始化,否则编译器会报错。初始化可以在声明时直接赋值,或者在后续代码中进行赋值。

  5. 示例

    public class Example {public void calculate() {int x = 10; // x 是一个局部变量System.out.println(x);}public void test() {// x 在此处不可见,因为它是在 calculate() 方法中定义的局部变量}
    }
    

    总结

成员变量和局部变量在作用域、生存期和初始化方式等方面有显著差异。理解它们的区别对于正确地设计和实现程序至关重要,可以帮助开发者有效地管理数据的作用范围和生命周期。

4-private关键字

在Java中,private 是一个访问修饰符,用于限定类的成员(字段和方法)的访问权限。它可以应用于实例变量、类变量(静态变量)、构造方法和方法。

使用私有访问修饰符的目的:

  1. 封装性private 关键字帮助实现类的封装性,即隐藏类的内部实现细节。通过将类的成员设为私有,可以控制外部类、子类以及其他包中的类对这些成员的访问权限,从而有效地隔离和保护类的内部状态和行为。

  2. 安全性: 通过限制访问权限,可以防止外部类意外或恶意地修改对象的内部状态,从而确保数据的完整性和安全性。

在不同成员中的应用:

  • 实例变量(字段)

    public class Car {private String brand; // 私有实例变量private int year;     // 私有实例变量// 其他类可以通过公共方法访问这些私有变量
    }
    
  • 类变量(静态变量)

    public class Example {private static int count; // 私有类变量// 其他类可以通过公共静态方法访问这些私有类变量
    }
    
  • 构造方法

    public class Person {private String name; // 私有实例变量private Person(String name) { // 私有构造方法this.name = name;}// 其他类无法直接创建 Person 对象,必须通过公共静态方法或者工厂方法来创建
    }
    
  • 方法

    public class Account {private double balance; // 私有实例变量private void deposit(double amount) { // 私有方法balance += amount;}// 其他类无法直接调用私有方法,但可以通过公共方法间接访问
    }
    

总结

private 关键字是Java语言中实现封装的重要手段之一。通过合理地使用私有访问修饰符,可以确保类的安全性和封装性,使得代码更加可靠和可维护。

5-this关键字

在Java中,this 是一个关键字,代表当前对象的引用。它可以用来引用当前对象的实例变量、实例方法或者调用当前对象的构造方法。

主要用途:

  1. 引用当前对象的实例变量: 当方法的参数名与实例变量名相同时,可以使用 this 关键字来区分。例如:

    public class Person {private String name;public void setName(String name) {this.name = name; // 使用this引用实例变量name,区分方法参数name}
    }
    

     

 6-构造方法

构造方法(Constructor)是一种特殊类型的方法,在对象实例化时被调用,用于初始化对象的状态。在 Java 中,构造方法的名称必须与类名完全相同,它没有返回类型,甚至没有 void。以下是构造方法的基本特点和使用方法:

基本特点:

  1. 方法名称与类名相同: 构造方法的名称必须与定义它的类的名称完全相同,包括大小写。

  2. 没有返回类型: 构造方法没有返回类型,包括 void,因为它的任务是初始化对象,而不是返回值。

  3. 用于对象的初始化: 构造方法在创建对象时被调用,用来初始化对象的状态。它们通常用于初始化实例变量,分配内存或者执行其他必要的初始化任务。

  4. 可以重载: 一个类可以定义多个构造方法,只要它们的参数列表不同(即方法的签名不同),这叫做构造方法的重载。

public class MyClass {// 默认构造方法public MyClass() {// 可选的初始化代码}
}

举例

public class Person {private String name;private int age;// 无参构造方法public Person() {this.name = "Unknown";this.age = 0;}// 带参构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 其他构造方法// ...
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网应用,了解一点 WWAN全球网络标准

WWAN/蜂窝无线电认证,对跨地区应用场景,特别重要。跟随全球业务的脚步,我们像大唐先辈一样走遍全球业务的时候,了解一点全球化的 知识信息,就显得有那么点意义。 NA (北美):美国和加…

OpenSSH漏洞(CVE-2024-6387)

漏洞信息 请参考:OpenSSH远程代码执行漏洞 (CVE-2024-6387) 影响范围 8.5p1 <= OpenSSH < 9.8p1 参考链接中内容补充 利用方式 关于OpenSSH漏洞CVE-2024-6387,攻击者可以利用一个有用的代码路径并在正确的时间点上被SIGALRM信号打断,从而导致sshd(OpenSSH守护…

基于Python的哔哩哔哩数据分析系统设计实现过程,技术使用flask、MySQL、echarts,前端使用Layui

背景和意义 随着互联网和数字媒体行业的快速发展&#xff0c;视频网站作为重要的内容传播平台之一&#xff0c;用户量和内容丰富度呈现爆发式增长。本研究旨在设计并实现一种基于Python的哔哩哔哩数据分析系统&#xff0c;采用Flask框架、MySQL数据库以及echarts数据可视化技术…

工控、物联网、电力行业调试工具大全

工控、物联网、电力行业调试工具大全 文章目录 工控、物联网、电力行业调试工具大全Modbus调试工具MQTT调试工具IEC104/IEC101调试工具IEC61850 调试工具DL/T645 调试工具 Modbus调试工具 Modbus 是一种用于工业自动化系统中的通信协议&#xff0c;最早由 Modicon&#xff08;…

信号111

2、核心转储 当进程出现魔种异常的时候&#xff0c;是否有OS将当前进程在内存中的相关核心数据&#xff0c;转存到磁盘中&#xff01; 一般而言云服务器的核心转储功能是关闭的。 3、验证进程等待中的core dump标记位。 4、为什么生产环境一般都要关闭 core dump 系统调用接口…

解释器模式在金融业务中的应用及其在Spring框架中的实现

引言 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它为特定语言定义了一个解释器&#xff0c;用于解释语言中的语句。该模式用于需要解释和执行特定语言或表达式的场景&#xff0c;例如脚本引擎、规则引擎等。在金融业务中&#xff…

NSObject‘s MetaClass 的 super_class 指向谁 ?

在 Objective-C 运行时系统中&#xff0c;NSObject 是所有类的根类。为了理解 NSObject 的元类&#xff08;MetaClass&#xff09;以及它的 super_class 指针指向谁&#xff0c;我们需要理解元类的继承关系。 类和元类的关系 每个类对象都有一个 isa 指针&#xff0c;指向其元…

46、lvs集群- 博客

1、lvs集群&#xff1a; lvs&#xff1a;linux virtual server----章文嵩发起的开源项目&#xff0c;阿里。linux的内核层面实现负载均衡的软件。 主要作用&#xff1a;将多个后端服务器组成一个高可用&#xff0c;高性能的服务器集群&#xff0c;通过负载均衡的算法将客户端的…

资讯类app怎么应对DDOS攻击

资讯类app怎么应对DDOS攻击&#xff1f;在数字化时代&#xff0c;资讯类App作为信息传播的重要载体&#xff0c;其稳定运行直接关系到用户的信任与满意度。日益猖獗的DDoS攻击成为了这类应用不可忽视的威胁。为了有效抵御这一挑战&#xff0c;业界涌现出了多种创新的防护方案&a…

基于cmake为项目自动获取git分支tag的版本号和commitid

目录 1. 引言2. 实现过程2.1 工程目录规划2.2 c程序文件2.3 CMakeLists.txt2.4 GitVersion.cmake文件2.5 BuildNumber.cmake文件1. 引言 在项目构建的时候,我们经常会希望能够将git提交的分支信息和提交号(commitid)以及当前版本发布的tag信息作为版本号自动构建到程序里面,以…

留学生的作业形式有哪些???

作业是在海外求学中不可避免的一部分&#xff0c;在国外留学&#xff0c;课程种类丰富多样&#xff0c;每一门课程都有其独特的学习要求和作业形式。课业压力很大&#xff0c;不仅要应对各项quiz&#xff0c;日常各类作业也丝毫不能松懈。无论是文学、艺术&#xff0c;还是理工…

【JavaScript脚本宇宙】实时协同编辑:JavaScript 库和框架全面解析

实时协同编辑&#xff1a;探秘JavaScript实时协同编辑利器## 前言 在当今互联网时代&#xff0c;实时协同编辑成为了许多应用程序的重要功能之一。无论是团队协作办公软件&#xff0c;还是在线教育平台&#xff0c;都需要实现多人同时编辑文档的功能。为了满足这一需求&#x…

自建搜索引擎-基于美丽云

Meilisearch 是一个搜索引擎&#xff0c;主程序完全开源&#xff0c;除了使用官方提供的美丽云服务&#xff08;收费&#xff09;进行对接之外&#xff0c;还可以通过自建搜索引擎来实现完全独立的搜索服务。 由于成本问题&#xff0c;本博客采用自建的方式&#xff0c;本文就…

通过git将文件push到github 远程仓库

1.先git clone 代码地址 git clone htttp://github.com/用户名/test.git 2. 添加文件 例如&#xff1a;touch 1.txt 3.将文件添加到暂存区 git add 1.txt 4.提交 git commit -m "commit 1.txt" 5.与远程仓库建立关联 git remote add 远程仓库名 远程仓库…

(2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)

前言 本系列最初的想法就是搭建一个多项目的环境, 包含nginx, nodejs, php, html, redis, MongoDB, mysql.本文使用的PHP镜像为php:7.3.6-apache, 这里可以使用上一篇文章中生成好的镜像.LAMP或包含react或vue的前端项目, 本文就各写了一个, 可以按照实际需求, 自行添加多个容…

LLM 研究方向(一): LLM Prompts--p-tuning、LoRA

目录 1. prompt-tuning background 2. Prompt Tuning 模型介绍 2.1 2021 prefix-tuning 2.2 2021 P-tuning v1 2.3 2021 Parameter-efficient prompt tuning (PET) 2.4 2022 P-tuning v2 2.5 2019 Adapter ​2.6 2021 LoRA (Low-Rank Adaptation) 2.7 2024 DoRA (…

详解[USACO07OPEN] Cheapest Palindrome G(洛谷PP2890)(区间DP经典题)

题目 思路 考虑区间DP。 设dp[i][j]为从i到j这段区间被修正为回文串的最小花费 c[cc][1]为添加字符cc的花费 c[cc][2]为删去字符cc的花费 s为题目给出的字符串。 用[i 1,j]区间转移&#xff1a;这种转移相当于在[i1,j]区间的左边加入一个字符&#xff0c;让[i,j]变为回文的方…

SQL 游标

关系数据库中的操作会对整个行集起作用。 例如&#xff0c;由 SELECT 语句返回的行集包括满足该语句的 WHERE 子句中条件的所有行。 这种由语句返回的完整行集称为结果集。 应用程序&#xff0c;特别是交互式联机应用程序&#xff0c;并不总能将整个结果集作为一个单元来有效地…

安装Go语言常用工具

好的&#xff0c;这里是常用的Go工具&#xff0c;包括下载地址、在线安装指令和离线安装步骤。 1. gopls (Go language server) 功能: 提供代码补全、跳转定义、文档提示等IDE功能。 下载地址: golang.org/x/tools/gopls 在线安装命令 : sh 复制代码 go install golang.org/…

云仓适合什么商家?

1、电商平台和网店&#xff1a; 对于拥有大量在线订单但没有自建仓储和物流能力的小型和中型电商企业&#xff0c;云仓可以在成本和效率上提供显著优势&#xff0c;帮助快速处理订单并缩短配送时间。 —————————————————————————————————— …