论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
企业信息化/数字化
›
MES
›
面向对象基础
面向对象基础
拉不拉稀肚拉稀
论坛元老
|
2022-8-11 21:07:21
|
显示全部楼层
|
阅读模式
楼主
主题
1792
|
帖子
1792
|
积分
5378
面向对象
首先面向对象是一种思想,要学会如何用这种思想去创建对象和使用别人已经创建好的对象!!!
要想创建对象需要一个类
类和对象是依赖关系,对象是根据类创建的
注意: 一般情况下会创建一个包,创建两个类,一般一个用来编写类中的对象以及成员变量!!!
另外一个用来测试!!!
可以把类可以想成一个设计图
例如:我有一个《同学》叫《彭于晏》,《升高七尺》,平时《爱好是普性》,然后和《程冠希打架》。
《》中包裹的都是对象,然后用类把这个人构造出来;
类和对象
类的组成
成员变量 首先定义成员变量和之间定义变量是差不多的 但是!!!!!(注意成员变量是写在类中,方法外的)!!!
成员方法 : 和之前学习到的方法差不多例如
public static void main (注意 !成员方法是没有static这个关键字的 !!!)
复制代码
然后定义对象的格式是
3.1 类名 对象名 = new 类名();!!!注意new其实和之前学到的数组new是一样的,这个new也是在堆内存中开辟一个空间,然后将地址值赋值给对象!!!
3.2 这个和之前调用别人写好的,例如Scanner,和Redome(就是召唤精灵)是一样的,一样通过
类名 对象名 = new 类名(),这种格式创建!!!!
举个栗子
package com.heima.Test04;<br>//首先创建一个类<br>public class StudentDemo1 {<br> //成员变量<br> String name = "程冠希";<br> int age = 18;<br>//成员方法<br> public void eat() { 一个类中可以创建多个方法!!!<br> System.out.println("吃饭");<br> }<br><br> public void sleep() {<br> System.out.println("睡觉");<br> }<br><br> public void study() {<br> System.out.println("学习");<br> }<br>}<br>这个是类<br>static .sout.println("--------------------------------------------------")<br>这个是用另外一个类进行创建对象!@!!!!!!!<br>package com.heima.Test04;<br><br>import com.heima.test.Student;<br><br>public class StudentDemo1Test {<br> //首先测试方法 main方法<br> public static void main(String[] args) {<br> //格式 类名 对象名 = new 类名()<br> StudentDemo1 stu = new StudentDemo1();<br> //类创建成功就可以调用里面的,成员变量以及,成员方法<br> System.out.println(stu.name);<br> System.out.println(stu.age);<br> stu.eat();<br> stu.study();<br> }<br>}<br>这个就是最基本的一个编写<br>在一个类中可以创建多个对象<br>static .sout.println("--------------------------------------------------")<br> //格式 类名 对象名 = new 类名()<br> StudentDemo1 stu1 = new StudentDemo1();<br>但是注意这个时候,再去用里面的成员变量和成员方法,依旧会和上面的值一样,因为这个值已经在类中赋值了<br>是固定死的,这个时候调用只会和stu输出一个同样的结果<br>
复制代码
细节,不应该在类中给成员变量赋值,(不推荐)
就相当于默认值,调用就会输入这个默认值,除非已经确实数据,可以这样写
创建对象之后赋值
//成员变量,中不要赋值<br> String name = ;<br> int age = ;<br><br>static .sout.println("--------------------------------------------------")<br> <br> //格式 类名 对象名 = new 类名<br> StudentDemo1 stu = new StudentDemo1();<br> //类创建成功就可以调用里面的,成员变量以及,成员方法<br>//那么直接输出这种格式就不行了!!!!!<br> //System.out.println(stu.name);<br> //System.out.println(stu.age);<br>格式应该是 <br>对象名 . 成员变量进行手动赋值!!<br>stu.name"张三"<br>stu.age(26)<br> stu.eat();<br> stu.study();<br>static .sout.println("--------------------------------------------------")<br> //创建多个对象的时候也是手动赋值<br> StudentDemo1 stu1 = new StudentDemo1();<br>stu.name"彭于晏"<br>stu.age(16)<br> stu.eat();<br>stu.study();<br> 手动输入要录入的值然后再
复制代码
成员变量和成员方法是平级关系!!!!1
面向对象的内存图
8.1 :首先第一种情况,当在测试类中只定义了一个对象时!
第一步:是在方法区中先载入一个TestClass字节码文件然后里面有个main方法
第二步 :在方法区中然后加载被测试的字节码文件class 里面有成员变量以及成员方法
第三步:jvm虚拟机自动运行然后将main方法进入栈内存,然后执行里面代码,
首先创建一个对象,new一个对象会在堆内存中开辟一个空间,产生地址值,然后地址值赋值给对象,
第四步:在main方法中如果运行改变堆内存中某一个值的时候,是用对象名点然后进入堆中找到对应名称进行赋值 然后输出
第五步:main方法中更改值之后如果运行成员方法,那么久调用堆内存中特有的一一个专门放置方法的一部分空间!!!!!!(记住方法不调用不执行!!!)然后成员方法进栈,运行完方法中的程序之后结束后弹栈
第六步 main方法结束,然后main方法执行弹栈!!!!就完了
8.2 ;首先第二种情况,当在测试类中定义了两个对象时!
第一步:是在方法区中先载入一个TestClass字节码文件然后里面有个main方法
第二步 :在方法区中然后加载被测试的字节码文件class 里面有成员变量以及成员方法
第三步:jvm虚拟机自动运行然后将main方法进入栈内存,然后执行里面代码,
首先创建一个对象,new一个对象会在堆内存中开辟一个空间,产生地址值,然后地址值赋值给对象,
第四步:在main方法中如果运行改变堆内存中某一个值的时候,是用对象名点然后进入堆中找到对应名称进行赋值 然后输出
第四步:创建另外一个对象,会在堆内存中开辟另外一个空间,注意是另外开辟一个空间,一样成员方法也有属于自己的一块在地址中的小区域,然后main方法执行赋值等操作一样是,通过对象名点然后进入堆中赋值,注意被测试的那个类,就是有成员变量和成员方法的那个类,只会运行一次,当多个对象是也只会运行一次!
第五步:main方法中更改值之后如果运行成员方法,那么久调用堆内存中特有的一一个专门放置方法的一部分空间!!!!!!(记住方法不调用不执行!!!)然后成员方法进栈,运行完方法中的程序之后结束后弹栈
第六步 main方法结束,然后main方法执行弹栈!!!!就完了
8.3;首先第三种情况,当在测试类中定义了两个对象时!
第一步:是在方法区中先载入一个TestClass字节码文件然后里面有个main方法
第二步 :在方法区中然后加载被测试的字节码文件class 里面有成员变量以及成员方法
第三步:jvm虚拟机自动运行然后将main方法进入栈内存,然后执行里面代码,
首先创建一个对象,new一个对象会在堆内存中开辟一个空间,产生地址值,然后地址值赋值给对象,
第四步:在main方法中如果运行改变堆内存中某一个值的时候,是用对象名点然后进入堆中找到对应名称进行赋值 然后输出
第四步:创建另外一个对象时如果其他的的对象对这个对象进行赋值,那么他就不会在堆内存中开辟新的空间在,只会额共用一块空间,如果被赋值的这个对象需要对空间的某个变量进行赋值的话,那么就可以直接通过地址进到这个区域进行改变!!!
第五步:main方法中更改值之后如果运行成员方法,那么久调用堆内存中特有的一一个专门放置方法的一部分空间!!!!!!(记住方法不调用不执行!!!)然后成员方法进栈,运行完方法中的程序之后结束后弹栈
第六步 main方法结束,然后main方法执行弹栈!!!!就完了
位置不同:成员变量在方法外 ,类中 局部变量在方法里,就是在方法里面定义的变量
初始化值不同:成员变量有类型,有类型就有默认值,局部变量你不赋值你压根用不了!1!!!
内存不同:成员变量在类中,创建对象的时候直接就进堆内存里了,而局部变量在方法中,方法却是在栈内存中的
生命周期不同:这个不使用或者使用过了就会消失!!
作用域:成员变量是在方法外,类那个大括号中的,所以都可以访问他,而成员变量则是,在方法中的别的方法调用不了,这个就是各自的作用域!!!
this
this 就是代表当前对象的地址值,相当于只要对象中调用到this,那么谁调用,this就是那个对象的地址
特点: 哪一个对象调用方法 ,且方法中有this那么就代表哪个对象的地址值
特点: 哪一个对象调用方法 ,且方法中有this那么就代表哪个对象的地址值
当成员变量和局部变量变量名是一样时,使用就近原则,会先输出局部变量的值<img data-local-refresh="true">
如果就要访问成员变量的话,可以在show方法中输出语句里加一个this.name,因为根据内存图来分析,当对象调用方法是如果方法里面有this ,那么this就是那个对象的地址值,然后this.就可以进入堆中访问成员变量~~~~!!!!!!!!!!!!!!!!!!!
方法构造(也可以叫构造器)
构造方法名和类名必须完全一致,;连大小写都得额一样;
构造方法没有返回值,连void都不能写;
因为如果用void来写的话,系统会认为这个是成员方法,所以不能写void
构造方法中不能有return语句,不能有return的返回类型
面向对象三种特征:
封装 《 继承 多态》继承多态后面学;
封装:隐藏实现信息,仅暴露公共部分
将属性抽取到类中,是对数据的一种封装
将代码抽取到方法中是对代码的一种封装
JavaBean
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
拉不拉稀肚拉稀
论坛元老
这个人很懒什么都没写!
楼主热帖
c语言学习4
【Atlas 800 训练服务器(型号:9000) ...
Docker 基础 - 3
IOS OpenGL ES GPUImage 黑白色调模糊 ...
WinUI3 FFmpeg.autogen解析视频帧,使 ...
第四次打靶
【最新最详细】SQL Server 2019 安装教 ...
【主流技术】ElasticSearch 在 Spring ...
制造型企业的数字化转型离不开 MES 系 ...
SQLI-LABS(Less-11、12)
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
linux
中间件
人工智能
物联网
快速回复
返回顶部
返回列表