6-1.Java 面向对象 - 初级(对象与属性、对象与方法、递归、重载、可变参数、作用域、构造器、对象创建流程详解、this 关键字)

一、对象与属性

1、基本介绍
  • 属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型
  1. 属性的定义语法类似变量
【访问修饰符】 【属性类型】 【属性名】;
  1. 属性的定义类型可以为任何类型(基本数据类型、引用数据类型)

  2. 属性如果不赋值,有默认值

2、对象创建与属性访问
  1. 创建对象
// 先声明再创建
Cat cat;
cat = new Cat();
// 直接创建
Cat cat = new Cat();
  1. 访问属性
cat.name;
cat.age;
3、Java 内存结构
  1. 栈:一般存放基本数据类型

  2. 堆:存放对象

  3. 方法区:包括常量池(如字符串)和类加载信息(属性和方法信息)

4、Java 对象创建流程
Person p = new Person();
p.name = "jack";
p.age = 10;
  1. 加载 Person 类信息

  2. 在堆中分配空间,进行默认初始化

  3. 把地址赋给 p,p 指向对象

  4. 进行指定初始化


二、对象与方法

1、基本介绍
public 【返回数据类型】 【方法名】(【参数列表】) {【方法体】;return 【返回值】;
}
-说明
public访问修饰符
返回数据类型表示成员方法输出的数据类型,void 表示没有返回值
参数列表表示成员方法的输入
方法体表示为实现某一功能的代码块
return表示成员方法的输出(不是必须的)
2、注意事项
(1)返回数据类型
  1. 一个方法最多有一个返回值

  2. 返回类型可以为任何类型(基本数据类型、引用数据类型)

  3. 如果方法有返回数据类型,则方法中最后的执行必须为 return 语句,且 return 的值类型必须和要求返回的数据类型一致

  4. 如果方法有 void,则方法体中可以没有 return 语句

(2)参数列表
  1. 一个方法可以没有参数,也可以有多个参数,中间用逗号隔开

  2. 参数类型可以为任何类型(基本数据类型、引用数据类型)

  3. 调用带参方法时,一定要对应参数列表传入相应类型或兼容类型的参数

  4. 方法定义时的参数成为形式参数,简称形参,方法调用时的参数成为实际参数,简称实参,实参和形参的类型要一致或兼容,个数、顺序必须一致

(3)方法体
  • 里面编写完成功能的具体语句,但里面不能再定义方法
(4)方法调用
  1. 同一个类中的方法可直接调用

  2. 跨类方法调用需要通过对象名调用,受访问修饰符影响

【对象名】.【方法名】(【参数】);
(5)方法名
  • 建议遵循小驼峰式命名法

三、递归

1、基本介绍
  • 递归就是方法自己调用自己,每次调用时传入不同的变量
  1. 执行一个方法就是创建一个新的受保护的独立空间(栈空间)

  2. 方法的局部变量是独立的,不会互相影响

  3. 如果方法中使用的是引用类型变量,会共享该引用类型的数据

  4. 递归必须向退出条件逼近,否则会无限递归

  5. 当一个方法执行完毕或遇到 return 时返回,遵循谁调用,就将结果返回给谁

2、实例实操
  • RecursionTest.java
package com.my.primary;public class RecursionTest {public static void main(String[] args) {System.out.println(factorial(10));printNum(5);}// 递归阶乘public static int factorial(int num) {if (num == 1) {return 1;} else {return factorial(num - 1) * num;}}// 递归打印public static void printNum(int num) {if (num > 2) {printNum(num - 1);}System.out.println(num);}
}

四、重载

  • Java 中允许同一个类中有多个同名方法的存在,但需要满足以下需求
  1. 方法名相同

  2. 参数列表(参数类型,个数)必须不同,参数名无要求

  3. 返回类型无要求


五、可变参数

  • 可变参数可将一个类中多个同名同功能,但参数个数不同的方法,封装成一个方法
【访问修饰符】 【返回数据类型】 【方法名】(【数据类型】... 【形参名】) {【方法体】;return 【返回值】;
}
  1. 可变参数的实参可以为 0 个或多个

  2. 可变参数的实参可以是数组

  3. 可变参数的本质就是数组

  4. 可变参数可以和普通类型的参数一起放在形参列表,但是必须保证可变参数放在最后

  5. 一个形参列表中只能出现一个可变参数


六、作用域

1、属性和局部变量命名
  1. 属性和局部变量可以重名,访问时遵循就近原则

  2. 在同一个作用域中,两个局部变量,不能重名

2、属性和局部变量生命周期
  1. 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁

  2. 局部变量生命周期较短,伴随的代码的创建而创建,伴随着代码块的销毁而销毁

3、属性和局部变量作用范围
  1. 属性可以被本类或其他类使用

  2. 局部变量只能在本类对应的方法中使用

4、属性和局部变量修饰符使用
  1. 属性可以加修饰符

  2. 局部变量不可以加修饰符


七、构造器

1、基本介绍
【访问修饰符】 【方法名】(【形参列表】) {【方法体】;
}
  1. 构造器的访问修饰符可以是默认

  2. 一个类可以定义多个不同的构造器,即构造器重载

  3. 构造器名和类名必须一致

  4. 构造器没有返回值

  5. 构造器是完成对象的初始化,不是创建对象

  6. 在创建对象时,系统自动的调用该类的构造器

  7. 如果没有定义构造器,系统会自动给类生产一个默认的无参构造器

  8. 一旦定义了构造器,默认的无参构造器就会被覆盖,无法使用,但可以显式定义

2、基本使用
  • ConstructorTest.java
package com.my.primary;public class ConstructorTest {public static void main(String[] args) {Dog dog = new Dog("阿黄", 2);System.out.println(dog.name);System.out.println(dog.age);}
}class Dog {String name;int age;public Dog(String name, int age) {this.name = name;this.age = age;}
}

八、对象创建流程详解

1、示例代码
class Dog {String name;int age;public Dog(String name, int age) {this.name = name;this.age = age;}
}
// 创建对象
Dog dog = new Dog("阿黄", 2);
2、流程详解
  1. 加载 Dog 类信息(Dog.class),只会加载一次

  2. 在堆中分配空间(地址)

  3. 默认初始化

age = 0; 
name = null;
  1. 显式初始化
age = 1;
name = null;
  1. 构造器初始化
age = 2;
name = "阿黄";
  1. 把对象在堆中的地址赋给 dog

九、this 关键字

  • this 关键字代表当前对象
  1. this 关键字可以用来访问本类的属性、方法、构造器

  2. this 关键字可用于区分当前类的属性和局部属性

  3. 访问成员

this.【方法名】(【参数列表】);
  1. 访问构造器,只能在构造器中使用,即只能在构造器中访问另外一个构造器,且必须作为第一条语句
this(参数列表);
  1. this 关键字不能在类的外部使用,只能在定义类的方法中使用

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

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

相关文章

Maven(六)mvn 命令将 jar 包推送到 远程/本地仓库

目录 一、deploy - 推送到远程仓库1.1 命令语法:1.2 执行结果:1.3 可能遇到的问题问题1:with status code 401问题2:with status code 405问题3:Cannot deploy artifact from the local repository 二、install - 推送…

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…

JVM 由多个模块组成,每个模块负责特定的功能

Java虚拟机&#xff08;JVM, Java Virtual Machine&#xff09;是一个抽象的计算机&#xff0c;它提供了一个运行环境&#xff0c;使得Java字节码可以在不同的平台上执行。JVM 由多个模块组成&#xff0c;每个模块负责特定的功能。以下是 JVM 的主要模块及其功能&#xff1a; …

Java 中基于优先级执行任务的线程池实现

在日常开发中&#xff0c;我们经常遇到这样一种需求&#xff1a;需要按照任务的优先级顺序来执行&#xff0c;而不是简单的先进先出&#xff08;FIFO&#xff09;。Java 提供了 PriorityBlockingQueue&#xff0c;这是一个基于优先级排序的线程安全队列&#xff0c;可以用于实现…

CES2025展会媒体发布现场邀约采访计划来啦!海外科技电子媒体报纸新闻宣传方案

【本篇由 言同数字全球媒体投放 原创】一、CES 2025 展会概述 CES&#xff08;国际消费电子展&#xff09; 是全球规模最大、最具影响力的消费电子展会之一&#xff0c;由美国消费技术协会&#xff08;CTA&#xff09;主办。每年1月&#xff0c;CES吸引来自全球各地的行业领袖…

Axure设计之三级联动选择器教程(中继器)

使用Axure设计三级联动选择器&#xff08;如省市区选择器&#xff09;时&#xff0c;可以利用中继器的数据存储和动态交互功能来实现。下面介绍中继器三级联动选择器设计的教程&#xff1a; 一、效果展示&#xff1a; 1、在三级联动选择器中&#xff0c;首先选择省份&#xff…

【1】 Kafka快速入门-从原理到实践

文章目录 🔍 一、引言📜 二、Kafka 的历史🏗️ 三、Kafka 的核心结构🖥️ (一)Broker📋 (二)Topic📄 (三)Partition📤 (四)Producer📥 (五)Consumer🐒 (六)Zookeeper💡 四、Kafka 的重点概念📨 (一)消息📏 (二)偏移量(Offset)🔄 (…

使用Docker-Compose安装redis,rabbitmq,nacos,mysql,nginx,tomcat,portainer组件教程

因为开发经常会用到一些组件&#xff0c;又不想在本地启动&#xff0c;所以买了个服务器&#xff0c;然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用docker-compose安装组件的教程以及一些需要注意的地方。 关于docker和docker-compose的安装在另一篇博客中有…

安装PyG

PyG安装 官方链接 Installation — pytorch_geometric documentation (pytorch-geometric.readthedocs.io) 安装步骤&#xff1a; 步骤一&#xff1a;安装Anaconda和CUDA 安装Anaconda-CSDN博客安装CUDA-CSDN博客 步骤二&#xff1a;查看支持的Python版本 步骤三&#xf…

如何在Linux中使用Cron定时执行SQL任务

文章目录 前言一、方案分析二、使用步骤1.准备脚本2.crontab脚本执行 踩坑 前言 演示数据需要每天更新监控数据&#xff0c;不想手动执行&#xff0c;想到以下解决方案 navicat 创建定时任务java服务定时执行linux crontab 定时执行sql脚本 一、方案分析 我选择了第三个方案…

夜天之书 #103 开源嘉年华纪实

上周在北京参与了开源社主办的 2024 中国开源年会。其实相比于有点明显班味的“年会”&#xff0c;我的参会体验更像是经历了一场中国开源的年度嘉年华。这也是在会场和其他参会朋友交流时共同的体验&#xff1a;在开源社的 COSCon 活动上&#xff0c;能够最大限度地一次性见到…

鸿蒙开启无线调试

DevEco Studio没找到通过WI-FI连接手机的可视化操作按钮&#xff0c;就去官网看了下hdc - TCP连接场景 操作也比较简单&#xff1a; 第1步&#xff1a;PC通过USB连接手机/平板&#xff1b; 第2步&#xff1a;在手机/平板的“开发者选项”中打开“无线调试”并记录下IP和端口…

Android Handler

Handler用于多线程消息分发和处理。与handler相关的几个对象&#xff1a;Message, Looper&#xff0c;MessageQueue, ThreadLocal. Handler是Message的消费者。 MessageQueue是容器。 Looper是整个Message分发的驱动。 Handler中有多种发送消息的方法&#xff0c;其中postxx…

C语言操作符详解(下)

⽬录 1. 单⽬操作符 2. 逗号表达式 3. 下标访问[]、函数调⽤() 4. 结构成员访问操作符 5. 操作符的属性&#xff1a;优先级、结合性 6. 表达式求值 一 单⽬操作符 1 分类 &#xff01;、 、 -- 、 & 、 * 、 、 - 、 ~ 、 sizeof 、 ( 类型 ) 1.1 "&q…

【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!

数据集介绍 【数据集】道路事故识别数据集 8939 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含2种分类&#xff1a;{0: accident, 1: non-accident}。数据集来自国内外图片网站和视频截图。检测范围道路事故检测、监控视角检测、无人机视角检测、等&…

跑批为什么这么难

业务系统产生的明细数据通常要经过加工处理&#xff0c;按照一定逻辑计算成需要的结果&#xff0c;用以支持企业的经营活动。这类数据加工任务一般会有很多个&#xff0c;需要批量完成计算&#xff0c;在银行和保险行业常常被称为跑批&#xff0c;其它像石油、电力等行业也经常…

C++类型推导decltype和auto

auto用于变量声明时根据表达式自动推导其类型 int x 10; auto y x; // y 的类型是 int double a 5.5; auto b a * 2; // b 的类型是double decltype 是 C11 引入的一个关键字&#xff0c;用于查询表达式的类型。它允许编译器在编译时推断出一个表达式的类型&#xff0c;…

Flutter 鸿蒙next 中使用 MobX 进行状态管理

Flutter & 鸿蒙next 中使用 MobX 进行状态管理 在应用开发中&#xff0c;状态管理是一个至关重要的环节&#xff0c;特别是在复杂的Flutter或鸿蒙next项目中。状态的变化往往会影响UI的更新&#xff0c;因此&#xff0c;选择一种高效、灵活的状态管理工具显得尤为重要。Mo…

A012-基于Spring Boot的私房菜定制上门服务系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统私房菜定制上门服务系统信息管理难度大&#xff0c;容错率…

配有生物振膜的FPS电竞耳机,血手幽灵M760,精准定位每一声脚步

在PC上玩游戏的时候&#xff0c;一款高性能的游戏耳机是提升游戏体验的关键&#xff0c;特别是在吃鸡等FPS类游戏中&#xff0c;耳机不仅是听觉享受的工具&#xff0c;更是决定胜负的关键装备。如果耳机的环绕立体声效果能够及时准确的做出反应&#xff0c;我在游戏中就能清晰地…