拉不拉稀肚拉稀 发表于 2022-8-11 21:07:21

面向对象基础

面向对象

首先面向对象是一种思想,要学会如何用这种思想去创建对象和使用别人已经创建好的对象!!!
要想创建对象需要一个类
类和对象是依赖关系,对象是根据类创建的
注意: 一般情况下会创建一个包,创建两个类,一般一个用来编写类中的对象以及成员变量!!!
另外一个用来测试!!!
可以把类可以想成一个设计图
例如:我有一个《同学》叫《彭于晏》,《升高七尺》,平时《爱好是普性》,然后和《程冠希打架》。
《》中包裹的都是对象,然后用类把这个人构造出来;
类和对象

类的组成


[*]成员变量 首先定义成员变量和之间定义变量是差不多的 但是!!!!!(注意成员变量是写在类中,方法外的)!!!
[*]成员方法 : 和之前学习到的方法差不多例如
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方法执行弹栈!!!!就完了
https://img2022.cnblogs.com/blog/2871261/202206/2871261-20220625155627737-1467332041.png
 
位置不同:成员变量在方法外 ,类中 局部变量在方法里,就是在方法里面定义的变量
初始化值不同:成员变量有类型,有类型就有默认值,局部变量你不赋值你压根用不了!1!!!
内存不同:成员变量在类中,创建对象的时候直接就进堆内存里了,而局部变量在方法中,方法却是在栈内存中的
生命周期不同:这个不使用或者使用过了就会消失!!
作用域:成员变量是在方法外,类那个大括号中的,所以都可以访问他,而成员变量则是,在方法中的别的方法调用不了,这个就是各自的作用域!!!
 

[*]this
this 就是代表当前对象的地址值,相当于只要对象中调用到this,那么谁调用,this就是那个对象的地址
特点: 哪一个对象调用方法 ,且方法中有this那么就代表哪个对象的地址值
https://img2022.cnblogs.com/blog/2871261/202206/2871261-20220625155656026-1813185731.png
 
特点: 哪一个对象调用方法 ,且方法中有this那么就代表哪个对象的地址值

[*]当成员变量和局部变量变量名是一样时,使用就近原则,会先输出局部变量的值<img data-local-refresh="true">
如果就要访问成员变量的话,可以在show方法中输出语句里加一个this.name,因为根据内存图来分析,当对象调用方法是如果方法里面有this ,那么this就是那个对象的地址值,然后this.就可以进入堆中访问成员变量~~~~!!!!!!!!!!!!!!!!!!!
方法构造(也可以叫构造器)

构造方法名和类名必须完全一致,;连大小写都得额一样;
构造方法没有返回值,连void都不能写;
因为如果用void来写的话,系统会认为这个是成员方法,所以不能写void
构造方法中不能有return语句,不能有return的返回类型
https://img2022.cnblogs.com/blog/2871261/202206/2871261-20220625155735780-1765133157.png
 
https://img2022.cnblogs.com/blog/2871261/202206/2871261-20220625155922514-494659139.png
 
面向对象三种特征:
封装 《 继承 多态》继承多态后面学;
封装:隐藏实现信息,仅暴露公共部分
将属性抽取到类中,是对数据的一种封装
将代码抽取到方法中是对代码的一种封装

https://img2022.cnblogs.com/blog/2871261/202206/2871261-20220625160012280-844667099.png
 
JavaBean
https://img2022.cnblogs.com/blog/2871261/202206/2871261-20220625160044973-644872404.png
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 面向对象基础