尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java:12-类和对象的概念
类和对象的概念面向对象编程的概念-----------------------------万物皆对象面向对象指以属性和行为的观点去分析现实生活中的事物面向对象编程指先以面向对象的思想进行分析然后使用面向对象的编程语言进行表达的过程C语言面向过程的语言C面向过程又面向对象的语言Java面向对象的语言面向过程规定什么时候干什么如老师布置的任务关注这个过程面向对象看是否符号该对象如是否符号老师的特征和行为关注老师本身举个例子打开洗衣机放衣服放洗衣粉清洗烘干这系列过程做成的结果就算面向过程而面向对象则会先定义人打开洗衣机放衣服放洗衣粉洗衣机清洗烘干所以面向对象就算在面向过程的基础上规定了对应的操作由谁干面向对象编程是软件产业化发展的需求理解面向对象的思想精髓封装继承多态至少掌握一种编程语言类和对象的概念------------------------------对象主要指现实生活中客观存在的实体在Java语言中对象体现为内存空间中的一块存储区域类简单来就是分类是对具有相同特征和行为的多个对象共性的抽象描述在Java语言中体现为一种引用数据类型里面包含了描述特征/属性的成员变量以及描述行为的成员方法类是用于构建对象的模板对象的数据结构由定义它的类来决定类的定义------------------------------class类名{类体;}//如以下类的定义classPerson{}注意通常情况下当类名由多个单词组成时要求每个单词首字母都要大写成员变量的定义------------------------------class类名{数据类型 成员变量名初始值;}//如以下成员变量的定义classPerson{Stringname;}注意当成员变量由多个单词组成时通常要求从第二个单词起每个单词的首字母大写对与命名规范可以看这个博客https://blog.csdn.net/lzy251168/article/details/126332645对象的创建------------------------------new类名();//没有名字的对象栈区没有东西存叫做匿名对象注意当一个类定义完毕后可以使用new关键字来创建该类的对象这个过程叫做类的实例化创建对象的本质就是在内存空间的堆区申请一块存储区域用于存放该对象独有特征信息引用的定义------------------------------使用引用数据类型定义的变量叫做引用型变量简称为引用引用变量主要用于记录对象在堆区中的内存地址信息便于下次访问语法格式类名 引用变量名;引用变量名.成员变量名//如下PersonpnewPerson();//new Person()在堆的类型是Person类型即引用也必须要与这个类型相关否则不匹配//类似于数组的定义如int[] i new int[4];//new int[4]在堆的类型是int类型那么i的类型也要与int类型相关否则不匹配p.name张飞;System.out.println(p.name);案例题目------------------------------编程实现Person类的定义和使用注意对于char来说虽然看起来它默认是0但是实际上他只有再计算的时候才代表0的所以直接打印时出现的是字符而不是数字也就是说他保存的是一个空字符再Ascii里面可以看到0对应的值在第6章博客中可以看到保存过的文件放在硬盘没保存的放在内存CPU只可读取内存cmd执行编译后的代码时JVM会将其加载到内存里让CPU解析和执行由上图可知在方法区里存放了这个所有代码实际上是字节码文件在运行时main方法是程序入口先找main方法main方法在栈区中即栈给main方法申请内存空间地盘而main方法又给他里面的一些变量分配内存空间地盘如0x10即p这个引用变量的内存空间里存放的是0x10而堆区的new Person()创建后到堆区由于没有设置初始值即他里面的值都是默认值那么就可以根据p这个引用来获取对应地址在堆空间的数据即可以说p就是0x10就是ox10来获取堆的数据类似于int a 2这个可以说a就是2一样那么就可以说将变量变为他内存空间的值后再使用所以就有p.name这样的操作即ox10.name)这里说明一下方法区了解即可具体的方法区实际上是最终指向我们在堆中基本只是操作变量方法还是方法区的具体可以看这个博客https://www.cnblogs.com/promonkeys/p/10178976.html局部变量都在栈区/* 编程实现Person类的定义 */publicclassPerson{// 数据类型 成员变量名 初始值;其中初始值 通常可省略不写Stringname;//用于描述姓名的成员变量intage;//用于描述年龄的成员变量//可以不初始化//自定义成员方法实现所有成员变量的打印方法不可以在方法里定义注意方法只有一份多个实例使用的都是同一个方法方法信息在方法区成员变量在堆由于方法区是线程共享线程共享所有线程都是同一个所以多个实例使用的都是同一个方法//在虚拟机中调用方法时会根据方法信息与变量进行一系列操作从而最终操作结果如返回值等等//简单来说由于最终是字节码所以解析后自然可以进行处理就如最开始的机器指令一样所以不只是方法如继承构造方法等等操作//返回值类型 方法名称(形参列表){ 方法体; }voidshow(){//成员变量和成员方法都属于类内部成员因此可以直接访问成员变量不需要再加引用.的前缀System.out.println(我是name,今年age岁了);}//自定义成员方法实现将姓名修改为参数指定数值的行为voidsetName(Strings){names;}//自定义成员方法实现将年龄修改为参数指定数值的行为voidsetAge(inti){agei;}//上面的两个可以降低耦合性方便修改//自定义成员方法实现将姓名和年龄修改为参数指定数值的行为 下面的方法不推荐使用voidsetNameAge(Strings,inti){//修改其中一个另外一个也会进行修改names;agei;}//自定义成员方法实现可变长参数的使用 看作一维数组使用即可voidshowArgument(intnum,String...args){//可变长参数若在有其他参数时一定要放在最后否则报错因为我无法判断该参数是可变长参数还是你的System.out.println(num num);for(inti0;iargs.length;i){System.out.println(第(i1)个参数为args[i]);}}//自定义成员方法实现姓名数值的获取并返回的行为StringgetName(){returnname;//返回数据并结束当前方法//...执行不到的}//自定义成员方法实现年龄数值的获取并返回的行为intgetAge(){//方法名可以改变的但最好这样写returnage;}publicstaticvoidmain(String[]args){inta;a0;//必须初始化除非不使用//也可以说是栈里面的要有值即必须初始化//声明_01Person类型的引用指向_01Person类型的对象注释有错不要紧没有完美的//数据类型(类名) 引用变量名 new 类名();PersonpnewPerson();//打印对象中的成员变量值//引用变量名.成员变量名//System.out.println(我是 p.name ,今年 p.age 岁了); //null 0p.show();System.out.println(--------------------------------------------------------------------);//修改成员变量的数值p.name关羽;p.age999;//再次打印修改后的数值//System.out.println(我是 p.name ,今年 p.age 岁了); //关羽 999p.show();System.out.println(--------------------------------------------------------------------);//通过成员方法的调用实现成员变量的修改p.setName(淳爸);//name 淳爸; //实参给形参赋值p.setAge(1000);//age 1000;p.show();System.out.println(--------------------------------------------------------------------);//通过成员方法同时修改姓名和年龄//p.setNameAge(大大,30);intia30;p.setNameAge(大大,ia);p.show();System.out.println(--------------------------------------------------------------------);//通过成员方法实现可变长参数的打印//当不确定形式参数个数时可以用可变长参数那么传入多少个实际参数就有多少个形式参数p.showArgument(1);System.out.println(--------------------------------------------------------------------);p.showArgument(1,参数1);System.out.println(--------------------------------------------------------------------);p.showArgument(2,参数1,参数2);System.out.println(--------------------------------------------------------------------);//通过成员方法的调用实现成员变量数值的获取和打印Stringstr1p.getName();System.out.println(获取到的姓名是str1);intibp.getAge();System.out.println(获取到的年龄是ib);}}案例题目------------------------------编程实现Point类的定义特征有横坐标整数要求在main方法中声明Point类型的引用指向Point对象并打印特征然后将横坐标修改为3和5后再次打印/* 编程实现Point类的定义 */publicclassPoint{intx;//用于横坐标的成员变量inty;//用于纵坐标的成员变量//自定义成员方法实现成员变量数值的打印voidshow(){System.out.println(横坐标是x,纵坐标是y);}//自定义成员方法实现将横坐标修改为参数指定数值的行为voidsetX(inti){xi;}//自定义成员方法实现将纵坐标修改为参数指定数值的行为voidsetY(intj){yj;}//自定义成员方法实现int类型的可变长参数的使用 看作一维数组使用即可voidshowArgument(int...args){//可变长参数若在有其他参数时一定要在最后for(inti0;iargs.length;i){System.out.println(下标为i的元素是args[i]);}}//自定义成员方法实现横坐标数值的获取并返回的行为intgetX(){returnx;}//自定义成员方法实现纵坐标数值的获取并返回的行为intgetY(){returny;}publicstaticvoidmain(String[]args){//声明Point类型的引用指向Point类型的对象PointpnewPoint();//打印成员变量的数值//System.out.println(横坐标是 p.x ,纵坐标是 p.y);//引用变量名.成员变量名(实参列表);//调用方法的本质就是根据方法名跳转过去执行方法体后再跳转回这个位置p.show();System.out.println(--------------------------------------------------------------------);//将横纵坐标修改为3和5后再次打印p.x3;p.y5;//System.out.println(横坐标是 p.x ,纵坐标是 p.y);p.show();System.out.println(--------------------------------------------------------------------);//通过成员方法实现横纵坐标的修改p.setX(10);p.setY(20);p.show();// 10 20System.out.println(--------------------------------------------------------------------);//通过成员方法实现可变长参数的使用p.showArgument(1,2,3,4,5);System.out.println(--------------------------------------------------------------------);//通过成员方法的调用实现横纵坐标数值的获取和打印intiap.getX();System.out.println(获取到的横坐标是ia);intibp.getY();System.out.println(获取到的纵坐标是ib);}}成员方法的定义------------------------------class类名{//属于类的才会有成员二字返回值类型 成员方法名(形参列表){成员方法体;}}//如下代码classPerson{voidshow(){System.out.println(没事秀一下);}}当成员方法名由多个单词组成时要求从第二个单词起每个单词的首字母大写成员变量也是这样返回值类型------------------------------返回值主要指从方法体内返回到方法体外的数据内容返回值类型主要指返回值的数据类型可以是基本数据类型也可以是引用数据类型当返回的数据内容是66时则返回值类型写int即可即返回值类型取决于返回的数据在方法体中使用return关键字可以返回具体的数据内容并结束当前方法return后面的代码不执行当返回的数据内容是66时则方法体中写return 66;即可当该方法不需要返回任何数据内容时则返回值类型写void即可形参列表------------------------------形式参数主要用于将方法体外的数据内容带入到方法体内部形式参数列表主要指多个形式参数组成的列表语法格式如下数据类型 形参变量名1,数据类型 形参变量名2,...当带入的数据内容是hello时则形参列表写String s即可当带入的数据内容是66和hello时则形参列表写int i,String s即可若该方法不需要带入任何数据内容时则形参列表位置啥也不写即可方法体详解------------------------------成员方法体主要用于编写描述该方法功能的语句块成员方法可以实现代码的重用重复利用简化代码方法的调用------------------------------引用变量名.成员方法名(实参列表);//如p.show(); //实参列表实际参数的列表实际参数列表主要用于对形式参数列表进行初始化操作因此参数的个数类型以及顺序都要完全一致实际参数可以传递直接量变量表达式方法的调用等可变长参数------------------------------返回值类型 方法名(参数的类型...参数名)//三个点表示省略就是后面还有很多参数方法参数部分指定类型的参数个数是可以改变的也就是0~n个就是当我们在里面可以加任意个参数一个方法的形参列表中最多只能声明一个可变长形参并且需要放到参数列表的末尾成员变量在类里方法体外局部变量属于方法体内部的所以局部变量通常都需要使用即必须初始化因为没默认值而成员变量可以不初始化因为有默认值因为用他的时候都会自动将他初始化局部变量作用域从方法声明开始一直到方法结束成员变量作用域从类声明开始一直到类结束如果有两个方法如voidfa(inti,intj,intn){System.out.println(1);}voidfa(int...i){System.out.println(1);}//在调用这个方法时若有具体参数的方法则调用有具体参数的方法若没有则调用有可变长参数的方法方法的传参过程------------------------------intmax(inta,intb){.........}inta5;intb6;intresm.max(a,b);//m是引用变量 //他的类型里有max方法为main方法中的变量abres分配空间并初始化调用max方法为max方法的形参变量iaib分配空间将实参变量的数值赋值到形参变量的内存空间中max方法运行完毕后返回形参变量空间释放main方法中的res变量得到max方法的返回值main方法结束后释放相关变量的内存空间参数传递的注意事项------------------------------基本数据类型的变量作为方法的参数传递时形参变量数值的改变通常不会影响到实参变量的数值因为两个变量有各自独立的内存空间引用数据类型的变量作为方法的参数传递时形参变量指向内容的改变会影响到实参变量指向内容的数值因为两个变量指向同一块空间若又将一个地址给arr1后那么arr1就会指向另外一个堆区内存空间当引用数据类型的变量作为方法的参数传递时若形参变量改变指向后再改变指定的内容则通常不会影响到实参变量指向内容的改变因为两个变量指向不同的内存空间内存结构之栈区------------------------------栈用于存放程序运行过程当中所有的局部变量一个运行的Java程序从开始到结束会有多次方法的调用JVM会为每一个方法的调用在栈中分配一个对应的空间这个空间称为该方法的栈帧一个栈帧对应一个正在调用中的方法栈帧中存储了该方法的参数局部变量等数据当某一个方法调用完成后其对应的栈帧将被清除传参的相关概念------------------------------参数分为形参和实参定义方法时的参数叫形参调用方法时传递的参数叫实参调用方法时采用值传递把实参传递给形参方法内部其实是在使用形参所谓值传递就是当参数是基本类型时传递参数的值比如传递i10真实传参时把10赋值给了形参当参数是对象时传递的是对象的值也就是把对象的地址赋值给形参/* 编程实现参数传递的测试 自己写代码时容易犯的错误 */publicclassArgumentTest{//自定义成员方法打印参数传入的整数数据//ia ib 10;voidshow1(intia){ia200;System.out.println(show方法中ia ia);//10 200}//自定义成员方法打印参数传入的数组内容voidshow2(int[]arr1){arr1newint[2];//加上该行代码后相当于在堆区中又重新申请一块内存空间arr1[0]200;System.out.println(show方法中arr1[0] arr1[0]);//10 200}publicstaticvoidmain(String[]args){// //声明ArgumentTest类型的引用指向该类型的对象ArgumentTestatnewArgumentTest();//使用引用变量调用show1方法进行测试intib10;at.show1(ib);System.out.println(main方法中ib ib);//10System.out.println(--------------------------------------------------------------------);//调用show2方法进行测试int[]arr2newint[]{10,20};at.show2(arr2);System.out.println(main方法中arr2[0] arr2[0]);//10 200}}
RELATED

相关推荐

SpringBoot学习之基础1

SpringBoot学习之基础1

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/5 1:10:56
24位Δ-Σ ADC + 8位MCU:工业与HVAC温度测量实战

24位Δ-Σ ADC + 8位MCU:工业与HVAC温度测量实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/5 1:05:56
工业级温度测量系统:ADS122U04IPWR+MKV44F128VLH16抗扰采样与实时校准方案

工业级温度测量系统:ADS122U04IPWR+MKV44F128VLH16抗扰采样与实时校准方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/5 1:05:56
MORE NEWS

更多资讯

📰

首次来到CSDN进行创作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

2027届计算机专业毕设选题指南:含AI技术新颖课题,这些题目可以直接借鉴参考!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

python实现本地图片查看器

创作灵感电脑上保存了旧照片,想打开看一下,结果打开图片查看软件不是广告就是会员,实在影响心情。所以自己做了个图片查看器,使用python pyqt实现,效果如下:

📰

MySQL 为什么默认是 RR 而不是 RC?隔离级别选型真相

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

先更新数据库还是先删缓存?八种方案里错的有几种

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Python 的哈希契约:为什么 list 不能当字典的键

原文链接:Python 的哈希契约:为什么 list 不能当字典的键 - 码日新 每日文章 Python 的哈希契约:为什么 list 不能当字典的键 上周帮同事看一个缓存问题:他用列表拼了个 key,运行时直接抛出 TypeError: unhashable t…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬