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)生命周期不同

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

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

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

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

相关文章

Echarts柱状图横坐标不显示

本人遇到的问题:折线图横坐标可以正常显示 柱状图接收一样的数据在横坐标却显示不了 1.在前端打印是否能够正常接收数据、数据类型是否有误以及数据是否有内容 console.log(typeof optionbar.xAxis.data)console.log(optionbar.xAxis.data) 2.如上确定能够接收到数…

netty 高性能架构设计--零拷贝

文章目录 前言一、直接内存1.1 什么是直接内存1.2 代码实现1.3 使用直接内存的优缺点 二、netty 零拷贝设计2.1 netty 直接内存2.2 netty 内存池 三、零拷贝的两种方式 前言 本篇从源码层面剖析 netty 高性能架构设计之零拷贝,并且扩展讲述零拷贝的两种实现方式。 …

有没有不使用技术分析工具的?众汇10年交易经验发现还真有

不知道各位投资者有没有遇见过不使用技术分析工具的投资者,众汇用自己的10年外汇交易经验保证,别不信还真有,并且不在少数。 其实道理很简单,这些投资者不相信技术分析工具的效率!在这些投资者看来技术分析工具通常比较滞后、需要…

前置知识储备

基本认知 什么是模式 在一定环境中解决一些问题的方案(通俗来说:特定环境中用固定的套路解决问题) 什么是设计模式 设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结 设计模式最终的目…

2024蓝桥杯CTF writeUP--缺失的数据

压缩包的内容 里面有secret.txt文件,用ARCHPR工具套上字典,爆破压缩包密码。密码为pavilion 解压得到原图,并且有了加密后的图片,根据代码里的key和参数直接运行脚本解密水印图片: import cv2 import numpy as np imp…

Linux随记(九)

一、在bclinux Euler 21.10 安装oracle19c客户端 (为了使用sqlplus 、expdp、impdp、sqlldr等指令) #环境和说明 系统:BigCloud Enterprise Linux For Euler 21.10 LTS 为了使用sqlplus 、expdp、impdp、sqlldr等指令。 下面是安装步骤 &…

【Golang】VSCode进行GO的调试

原来的launch.json {"version": "0.2.0","configurations": [{"name": "Golang","type": "go","request": "launch","program": "${workspaceFolder}","…

`DeferredResult`用法简单介绍

目录 简介案例 简介 DeferredResult是Spring Framework中用于处理异步请求的一个类,通常与Spring MVC的Controller一起使用。它允许控制器在请求处理完成后,异步地生成响应,而不必阻塞线程等待结果。这对于处理需要耗时的操作或长时间等待外…

CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板

CopyClip for Mac,一款专为Mac用户打造的剪贴板管理工具,让你在复制粘贴的日常任务中,享受到前所未有的高效与便捷。 它常驻在菜单栏中,时刻准备为你服务。一旦你复制了内容,CopyClip就会自动将其保存至历史记录中&…

为什么Qt这么强大却不受欢迎?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Qt的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!虽然这个问题并不被广泛讨论,但我根…

docker-compose安装es+kibana 8.12.2

小伙伴们,你们好,我是老寇,我又回来辣,几个月不见甚是想念啊!!! 因云平台需要改造,es7升级为es8,所以记录一下,es8需要开启ssl认证,需要配置证书…

项目1:STM32+DHT11+FreeRTOS+emwin+LCD

【屏幕显示DHT11数据】 面向对象的思想编写硬件驱动程序,DHT11采集环境中的温湿度数据。使用FreeRTOS提供的任务间通信、同步、互斥,将DHT11的数据传递给显示任务。显示任务中,使用emWin中间件,制作屏幕的各种界面,并将…

基于零一万物多模态大模型通过外接数据方案优化图像文字抽取系统

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模…

vue3+ts+vant选择器选中文字效果

所需要的样式: 选中某个选项后文字有放大和改变颜色的效果 主要就是在van-picker上加class, 给对应的style样式即可 <van-pickerclass"custom-picker":title"pickerData.titleText"v-if"pickerData.ispicker"show-toolbar:columns"col…

今日刷三题(day11):不同路径的数目(一)+短距离最小路径和+把数字翻译成字符串

题目一&#xff1a;不同路径的数目&#xff08;一&#xff09; 题目描述&#xff1a; 一个机器人在mn大小的地图的左上角&#xff08;起点&#xff09;。机器人每次可以向下或向右移动。机器人要到达地图的右下角&#xff08;终点&#xff09;。可以有多少种不同的路径从起点…

ICME2024 | 基于半监督对比学习的表现力语音合成

人类的语音极富表现力&#xff0c;不仅包括语调和重读&#xff0c;还包括风格和情感等多种元素。表现力语音合成的目标是要精准捕捉并再现这些元素。先前表现力语音合成方面的研究通常将表现力视为单一维度&#xff0c;如风格或情感。但实际上&#xff0c;风格可以随着文本和场…

Matlab实现分段函数拟合(分段点未知)| 源码分享 | 视频教程 | 三种分段函数拟合方法

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

Davinci工程CANTP模块讲解

配置CAN的TP模式&#xff0c;涉及BSW\CanTp\CanTp.c和CanTp.h CanTpChannels 他有两组收发&#xff0c;功能诊断和物理诊断。 功能诊断有自己的参数要求 物理诊断的接收要求相对多一些 由于发送只有一个&#xff0c;所以我们把它放在物理诊断接收那组里面。 CanTpGeneral 也…

DDD架构学习

文章目录 领域建模事件风暴四色建模法 DDD名称解析领域子域核心域通用域支撑域限界上下文战术设计实体值对象聚合和聚合根工厂资源库领域服务领域事件 DDD代码的分层名词解析实体值对象聚合根领域服务领域事件 VO&DTO&DO&PO博客 领域建模 领域驱动设计的核心在于领…

厚德提问大佬答3:让AI绘画更有效率

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你解…