当前位置: 首页 > news >正文

Java---类和方法的再学习

        上一篇主要介绍了面向对象的思想以及内存实现,关于类与对象感觉写的不够好,因此才会有这一篇作为补充;


        一:类与对象
 

(1)类

一些相同属性和行为的事物的统称,比较广泛、抽象,比如人类,动物类,鸟类;

含有属性和行为(可以有其中一个,也可以都有),属性一般用来描述对象的特征,行为用来描述对象可以干什么。

比如动物类中有一个对象:狗;        属性:狗有名字,体重;        行为:狗会吃饭,睡觉;

在Java中,先有类再有对象的;

public class ClassAnimal {/*属性:狗有名字,体重;行为:狗会吃饭,睡觉;*///成员变量(属性)}

(2)属性:(成员变量)

属性:狗有名字,体重;    

  权限修饰符 数据类型 变量名(一般不对变量名赋值,毕竟对象的属性一般不相同);

如:public String name ;  // 名字属性

后面我们再说说 权限修饰符 的事情;

public class ClassAnimal {/*属性:狗有名字,体重;行为:狗会吃饭,睡觉;*///成员变量(属性)public String name;public int weight;}

(3)  行为:(成员方法)

行为:狗会吃饭,睡觉;

我们先了解基本的行为的创建:权限修饰符  返回值类型 方法名

无返回值类型无形参列表:

      public void eat ( ) {

        System.out.println( " 爱吃骨头头 " ) ;

}

public class ClassAnimal {/*属性:狗有名字,体重;行为:狗会吃饭,睡觉;*///成员变量(属性)public String name;public int weight;//成员方法(行为)public void eat(){System.out.println("爱吃骨头头");}public void sleep(){System.out.println("睡觉睡得死");}
}

(4)对象:

类的具体表现,用于调用类的 属性 和 行为 ;

对象的创建:类名  对象名 = new 类名();

如:ClassAnimal dog = new ClassAnimal ( ) ;

可以仿照 Scanner 的用法,毕竟都是引用类型 : Scanner scn = new Scanner ( ) ; 

如果类与对象不在同一包下,第一步需要导包:import  包名 . 类名

public class dog {public static void main(String[] args) {ClassAnimal dog=new ClassAnimal();}
}

对象调用类的属性和方法:对象名 .

public class dog {public static void main(String[] args) {ClassAnimal dog=new ClassAnimal();dog.name="大黄";dog.weight=50;dog.eat();dog.sleep();System.out.println(dog.name+"\t"+dog.weight);}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=13016:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo dog
爱吃骨头头
睡觉睡得死
大黄	50进程已结束,退出代码0

(5)注意事项

类的 属性 和 行为 在 main 方法外创建 ;

成员变量有默认值,规则与数组相同;

二:案例演示

        定义一个手机类,有 颜色,品牌,价格的属性,有打电话,发消息的行为,创建对象并调用;

 如下,为定义的手机类:

public class ClassPhone {//成员变量:颜色,品牌,价格public String color;public String brand;public int price;//成员方法:打电话,发消息public void call(String who){System.out.println("给"+who+"打电话");}public void message( ){System.out.println("总爱发消息!");}
}

         如下,为创建的类的对象,并进行调用;可以看出,成员变量的默认值符合数据类型的默认值的规则;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();System.out.println(c.brand);//nullSystem.out.println(c.color);//nullSystem.out.println(c.price);//0System.out.println(" ");c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999System.out.println(c.brand);System.out.println(c.price);System.out.println(c.color);c.call("刘备备");c.message();}
}

 (2)两个对象使用同一个类;

两个对象互不干扰;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999System.out.println(c.brand);System.out.println(c.price);System.out.println(c.color);c.call("刘备备");c.message();System.out.println(" ");//再次创建对象ClassPhone c1=new ClassPhone();c1.brand="小米";//华为c1.color="blue";//黑色c1.price=5999;//6999System.out.println(c1.brand);System.out.println(c1.price);System.out.println(c1.color);c1.call("曹操");c1.message();}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=6083:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
huawei
6999
black
给刘备备打电话
总爱发消息!小米
5999
blue
给曹操打电话
总爱发消息!进程已结束,退出代码0

 (3)两个引用指向同一个对象

将 c 的地址赋给 c1,因此 c1 根据地址找到 c 的属性;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999System.out.println(c.brand);System.out.println(c.price);System.out.println(c.color);c.call("刘备备");c.message();System.out.println(" ");//再次创建对象ClassPhone c1=c;System.out.println(c1.brand);System.out.println(c1.price);System.out.println(c1.color);c1.call("曹操");c1.message();}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=6228:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
huawei
6999
black
给刘备备打电话
总爱发消息!huawei
6999
black
给曹操打电话
总爱发消息!进程已结束,退出代码0

三:使用对象作为方法的参数

当一个对象作为形参传递给方法时,传递的是对象的地址;

public class phone {public static void main(String [] args){//创建对象ClassPhone c=new ClassPhone();c.brand="huawei";//华为c.color="black";//黑色c.price=6999;//6999//调用方法method(c);}public  static void method(ClassPhone c){System.out.println(c.brand);System.out.println(c.color);System.out.println(c.price);c.message();}
}

四:使用对象作为方法的返回值类型

public class phone {public static void main(String [] args){//赋值调用ClassPhone cc=method();System.out.println(cc.price);//调用System.out.println(cc.brand);//调用System.out.println(cc.color);//调用cc.call("刘备");         //调用方法cc.message();                //调用方法}//方法的返回值类型为 对象public  static ClassPhone method( ){//创建对象ClassPhone c=new ClassPhone();c.brand="小米";c.price=3999;c.color="红色";return c;}
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=8352:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo phone
3999
小米
红色
给刘备打电话
总爱发消息!进程已结束,退出代码0

五:局部变量与成员变量

(1)位置不同:

成员变量定义在 main 方法中 ,局部变量定义在方法中;

public class Extend {public static void main(String[] args) {String name;//全局变量}public void method(){int a=20;//局部变量//System.out.println(a);}
}

(2)作用域不同:

成员变量在整个类中都可以使用,局部变量只能在该方法内使用;

public class Extend {public static void main(String[] args) {int age=100;//全局变量System.out.println(age);method();//无法调用}public void method(){int a=20;//局部变量System.out.println(a);}
}

(3)默认值不同

局部变量在栈内存中,无默认值,必须赋值才能使用;

成员变量在堆内存中,默认值的规则与数组相同;

(4)生命周期不同

局部变量随方法的入栈而创建,随方法的出栈而消失;

成员变量随随对象的创建而产生,随着对象被垃圾回收而消失;

相关文章:

Java---类和方法的再学习

上一篇主要介绍了面向对象的思想以及内存实现,关于类与对象感觉写的不够好,因此才会有这一篇作为补充; 一:类与对象 (1)类 一些相同属性和行为的事物的统称,比较广泛、抽象,比如…...

C语言每日一练(12、水仙花数)

在编程的领域中,我们常常会遇到一些有趣而富有挑战性的问题。今天,让我们一起来探讨一个经典的编程题目——打印出所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153 …...

HTML5实现酷炫个人产品推广、工具推广、信息推广、个人主页、个人介绍、酷炫官网、门户网站模板源码

文章目录 1.设计来源1.1 主界面1.2 我的产品界面1.3 关于我们界面1.4 照片墙界面1.5 发展历程界面1.6 优秀人才界面1.7 热门产品界面1.8 联系我们界面 2.灵活调整模块3.效果和源码3.1 动态效果3.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.c…...

系统如何做好安全加固?

一、Windows系统 Windows系统出厂时,微软为了兼容性,默认并未对系统安全做严格的限制,因此还需要做一些基本的安全加固,方可防止黑客入侵。 1、系统补丁更新 为什么要更新系统补丁?很多人感觉漏洞更新没必要&#x…...

对NI系统和PLC系统的应用比较

以下是对这两种系统的基本比较: 1. 设计和功能性 NI系统: 通常基于LabVIEW等软件平台,提供强大的数据采集、信号处理和图形界面开发能力。高度模块化和可扩展,支持各种传感器和信号类型。适合进行复杂的数据分析和高级控制算法的…...

微服务架构中的挑战及应对方式:Outbox 模式

使用 Outbox 模式保持微服务数据一致性 在一个由许多小型服务组成的系统中保持数据一致性是困难的,因为它们分散在各处。以下是一些常见问题以及如何处理它们的方法:当服务发送消息时,同时更新数据库和发送消息是棘手的问题。 在微服务中发出…...

使用Docker安装MySQL5.7.36

拉取镜像并查看 docker pull mysql:5.7.36拉取成功后查看(非必须) docker images创建并设置宿主机 mysql 配置文件目录和数据文件目录 创建相关文件夹将容器中的mysql数据保存到本地,这样即使容器被删除,数据也不会丢失。 mkd…...

【PyTorch】6-可视化(网络结构可视化、CNN可视化、TensorBoard、wandb)

PyTorch:6-可视化 注:所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/),下文仅为学习记录 6.1:可视化网络结构 Keras中可以调用model.summary()的API进行模型参数可视化 torchinfo…...

C++容器——map和pair对组

pair&#xff08;对组&#xff09; 是一种模板类&#xff0c;允许将两个不同类型的值组合在一起。它由两个数据成员first和second组成&#xff0c;分别用来保存这两个值。 头文件 加头文件 #include<utility> 对于 C11 及以上标准&#xff0c;pair 类型可以在不包含头…...

MVC和DDD的贫血和充血模型对比

文章目录 架构区别MVC三层架构DDD四层架构 贫血模型代码示例 充血模型代码示例 架构区别 MVC三层架构 MVC三层架构是软件工程中的一种设计模式&#xff0c;它将软件系统分为 模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Contro…...

如何利用AI提高内容生产效率?

如何利用AI提高内容生产效率? 简介&#xff1a;探讨如何通过AI技术提升内容生产的效率和质量。 方向一&#xff1a;自动化内容生成 自动化内容生成是一种利用人工智能技术来自动创建文本、图像、音频等内容的方法。 以下是一些常见的自动化内容生成方式&#xff1a; 基于…...

C++ stack、queue以及deque

1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口&#xff1a; 栈&#xff1a;top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列&#xff1a;top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…...

科沃斯,「扫地茅」荣光恐难再现

作者 | 辰纹 来源 | 洞见新研社 科沃斯恐怕已经很难再回到被市场誉为“扫地茅”时的荣光了。 不久前&#xff0c;科沃斯发布2023年财报&#xff0c;报告期内营业收入155亿&#xff0c;同比仅增长1.16%&#xff0c;归母净利润6.12亿元&#xff0c;同比下降63.96%&#xff0c;直…...

双向BFS算法学习

双向BFS算法学习 推荐练习题 力扣“127”题&#xff1a;单词接龙 “752”题&#xff1a;打开轮盘锁 这里推荐一篇力扣题解 双向BFS 这里使用打开轮盘锁的题干进行举例&#xff1a; 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字&#xff1a; ‘0’, ‘1’, ‘2’,…...

C++从入门到精通---模版

文章目录 泛型编程函数模版模版参数的匹配原则类模版类模版的定义格式类模版的实例化 总结 泛型编程 泛型编程是一种编程范式&#xff0c;旨在实现通用性和灵活性。它允许在编写代码时使用参数化类型&#xff0c;而不是具体的类型&#xff0c;从而使代码更加灵活和可重用。 在…...

Unity数据持久化之Json

Json概述 Json是什么? 全称:JavaScript对象简谱(JavaScript Object Notation) Json是国际通用的一种轻量级的数据交换格式 主要在网络通讯中用于传输数据,或本地数据存储和读取 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 我们一般使用Json文件来…...

LeetCode 35.搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入…...

速来get!多微信聚合聊天功能大揭秘!

随着网络时代的发展&#xff0c;微信成为了职场中不可或缺的沟通工具&#xff0c;很多人都有着多个微信号&#xff0c;而要想高效管理这些账号&#xff0c;那就少不了工具的帮忙。 通过微信管理系统&#xff0c;可以轻松实现多个微信号聚合聊天&#xff0c;提高沟通效率。 1、…...

【跟我学RISC-V】(一)认识RISC-V指令集并搭建实验环境

目录 写在前面 一、RISC-V指令集简介 1、什么是ISA 2、有哪些ISA 3、CISC和RISC 4、什么是RISC-V 1. RISC 的起源 2. RISC-I 和 RISC-II 3. RISC 发展和商业化 4. RISC-V 的诞生 5、RISC-V生态的特点 6、RISC-V指令集的特点 1. 开源 2. 社区化 3. 设计简洁 4. 模…...

如何使用google.protobuf.Struct?

google.golang.org/protobuf/types/known/structpb 包提供了一种方式来创建和操作 google.protobuf.Struct 类型的数据。google.protobuf.Struct 是一种灵活的数据类型&#xff0c;可以表示任何结构化数据。 以下是如何使用 structpb 包的一些示例&#xff1a; 创建 Struct&a…...

【2026年5月16日最新】别再用Cursor了!这5款AI编程神器让我效率暴涨300%

2026年5月&#xff0c;AI编程工具迎来了史诗级更新潮。OpenAI发布GPT-5.5后&#xff0c;代码理解和工程重构能力达到历史最强&#xff1b;字节跳动Trae凭借全链路AI原生IDE和免费无限制政策迅速崛起&#xff1b;DeepSeek V4更是用极致算法效率撕开了算力铁幕 。作为一名每天和代…...

手把手教你用TTL线刷救活咪咕MGV3200盒子(GK6323V100C芯片/安卓9系统)

咪咕MGV3200盒子救砖全指南&#xff1a;从TTL焊接到底层刷机实战 当你的咪咕MGV3200电视盒子因为一次鲁莽的卡刷操作变成"砖头"&#xff0c;指示灯不再亮起&#xff0c;屏幕一片漆黑时&#xff0c;那种绝望感只有经历过的人才能体会。不同于普通刷机教程&#xff0c;…...

基于rsync的嵌入式Ubuntu系统镜像定制与批量部署实战

1. 项目概述&#xff1a;为什么我们需要在开发板上“冻结”Ubuntu文件系统&#xff1f;在基于ARM架构的嵌入式开发中&#xff0c;尤其是使用像飞凌OK3399-C这样搭载RK3399处理器的开发板时&#xff0c;我们常常会面临一个看似简单却非常实际的痛点&#xff1a;环境部署的效率问…...

MobaXterm实战:一站式打通串口调试与远程SSH管理

1. 为什么选择MobaXterm作为全能终端工具 第一次接触嵌入式开发时&#xff0c;我被各种终端工具搞得晕头转向——串口调试要用SecureCRT&#xff0c;SSH连接得开PuTTY&#xff0c;文件传输还得额外装WinSCP。直到同事推荐了MobaXterm&#xff0c;这个法国开发者打造的免费工具彻…...

ElevenLabs导航语音部署失败的11个致命原因,92%开发者踩过第5个——现在修复还来得及!

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs导航语音部署失败的全局认知与根本定位 当 ElevenLabs 的语音合成 API 集成至车载或移动导航系统时&#xff0c;常见“静默无响应”“HTTP 429 频繁限流”或“TTS 流中断”等表象故障&#x…...

前端光标定制:从原生限制到自定义渲染的技术实现

1. 项目概述&#xff1a;从“Cursorify”看现代IDE的插件化革命最近在逛GitHub的时候&#xff0c;又看到了一个挺有意思的项目&#xff0c;叫“cursorify/cursorify”。光看这个名字&#xff0c;你可能会有点懵&#xff0c;因为它和当下另一个非常火的AI编程工具“Cursor”撞名…...

求职时间管理神器:3秒智能标记招聘岗位时效性实战指南

求职时间管理神器&#xff1a;3秒智能标记招聘岗位时效性实战指南 【免费下载链接】NewJob 一眼看出该职位最后修改时间&#xff0c;绿色为2周之内&#xff0c;暗橙色为1.5个月之内&#xff0c;红色为1.5个月以上 项目地址: https://gitcode.com/GitHub_Trending/ne/NewJob …...

不只是优化和频率:用GaussView 5.0玩转HOMO/LUMO、电子密度与反应位点预测

不只是优化和频率&#xff1a;用GaussView 5.0玩转HOMO/LUMO、电子密度与反应位点预测 在计算化学领域&#xff0c;Gaussian和GaussView的组合堪称黄金搭档。但许多研究者往往止步于基础的几何优化和频率计算&#xff0c;未能充分挖掘这套工具在反应机理研究和论文写作中的潜力…...

如何让Windows资源管理器完美预览iPhone照片:HEIC缩略图插件全解析

如何让Windows资源管理器完美预览iPhone照片&#xff1a;HEIC缩略图插件全解析 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你…...

物联网设备网络无缝切换与多网融合:exnetif模块实战指南

1. 项目概述&#xff1a;为什么我们需要exnetif&#xff1f; 在物联网项目的实际开发中&#xff0c;我遇到过太多因为网络环境不稳定而导致的“玄学”问题。比如&#xff0c;一个部署在工厂车间的智能网关&#xff0c;原本通过稳定的有线以太网连接云端&#xff0c;一旦生产线调…...