当前位置: 首页 > 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…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...