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;能使得…

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

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

使用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;能够最大限度地一次性见到…

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;其它像石油、电力等行业也经常…

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

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

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

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

OceanBase详解及如何通过MySQL的lib库进行连接

OceanBase详解及如何通过MySQL的lib库进行连接 一、引言二、OceanBase概述1. 起源与发展2. 核心技术特点3. 应用场景三、OceanBase架构解析1. 系统架构2. 存储引擎3. 分布式架构四、如何使用MySQL的lib库连接OceanBase1. 前提条件2. 安装MySQL Connector/C3. 编写连接代码4. 编…

GPT原理;ChatGPT 等类似的问答系统工作流程如下;当用户向 ChatGPT 输入一个问题后:举例说明;ChatGPT不是通过索引搜索的传统知识库

目录 GPT原理 GPT架构 GPT 主要基于 Transformer 的解码器部分 ChatGPT 等类似的问答系统工作流程如下: 用户输入 文本预处理 模型处理 答案生成 输出回答 当用户向 ChatGPT 输入一个问题后:举例说明 文本预处理: ChatGPT不是通过索引搜索的传统知识库 GPT GPT…

【系统设计——认证授权——基本概念知识】

1. 认证和授权的区别 Authentication&#xff08;认证&#xff09; 是验证您的身份的凭据&#xff08;例如用户名/用户 ID 和密码&#xff09;&#xff0c;通过这个凭据&#xff0c;系统得以知道你就是你&#xff0c;也就是说系统存在你这个用户。所以&#xff0c;Authenticat…

Java:数据结构-再谈String类

字符串常量池 首先我们来思考这段代码&#xff0c;为什么运行结果一个是true&#xff0c;一个是false呢&#xff1f; public class Test {public static void main(String[] args) {String s1"123";String s2"123";String s3new String("555")…

centos7,yum安装mongodb

yum安装mongodb 1.配置MongoDB的yum源2.安装Mongodb3.启动Mongodb4.配置远程访问5.设置mongo密码 1.配置MongoDB的yum源 1.创建yum源文件&#xff0c;输入命令&#xff1a; vim /etc/yum.repos.d/mongodb-org-5.0.repo然后在文件中输入以下内容并保存&#xff1a; [mongodb-…

关于软测面试的20个终极问题,春招软测人快来看..

1. 项目测试流程你是怎么开展的&#xff1f; 【参考回答】 首先&#xff0c;需求分析阶段&#xff0c;主要参与需求评审会议&#xff0c;阅读理解业务需求&#xff0c;分析需求点。 需求确定后&#xff0c;进入测试计划阶段&#xff0c;参考软件需求规格说明书及项目总体计划…

风华高科签约实在RPA,引领粤港澳大湾区制造业数字化腾飞

近日&#xff0c;制造业单项冠军 “广东风华高新科技股份有限公司”&#xff08;以下简称 “风华高科”&#xff0c;股票代码&#xff1a;000636.SZ)与实在智能达成合作。 为贯彻落实党中央、国务院决策部署和国务院国资委《国有企业数字化转型行动计划》要求&#xff0c;培育…