面向对象
首先面向对象是一种思想,要学会如何用这种思想去创建对象和使用别人已经创建好的对象!!!
要想创建对象需要一个类
类和对象是依赖关系,对象是根据类创建的
注意: 一般情况下会创建一个包,创建两个类,一般一个用来编写类中的对象以及成员变量!!!
可以把类可以想成一个设计图
例如:我有一个《同学》叫《彭于晏》,《升高七尺》,平时《爱好是普性》,然后和《程冠希打架》。
《》中包裹的都是对象,然后用类把这个人构造出来;
类和对象
类的组成
-
成员变量 首先定义成员变量和之间定义变量是差不多的 但是!!!!!(注意成员变量是写在类中,方法外的)!!!
-
成员方法 : 和之前学习到的方法差不多例如
public static void main (注意 !成员方法是没有static这个关键字的 !!!)
-
然后定义对象的格式是
3.1 类名 对象名 = new 类名();!!!注意new其实和之前学到的数组new是一样的,这个new也是在堆内存中开辟一个空间,然后将地址值赋值给对象!!!
3.2 这个和之前调用别人写好的,例如Scanner,和Redome(就是召唤精灵)是一样的,一样通过
类名 对象名 = new 类名(),这种格式创建!!!!
-
举个栗子
package com.heima.Test04;
//首先创建一个类
public class StudentDemo1 {
//成员变量
String name = "程冠希";
int age = 18;
//成员方法
public void eat() { 一个类中可以创建多个方法!!!
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void study() {
System.out.println("学习");
}
}
这个是类
static .sout.println("--------------------------------------------------")
这个是用另外一个类进行创建对象! -
细节,不应该在类中给成员变量赋值,(不推荐)
就相当于默认值,调用就会输入这个默认值,除非已经确实数据,可以这样写
-
创建对象之后赋值
//成员变量,中不要赋值
String name = ;
int age = ;
static .sout.println("--------------------------------------------------")
//格式 类名 对象名 = new 类名
StudentDemo1 stu = new StudentDemo1();
//类创建成功就可以调用里面的,成员变量以及,成员方法
//那么直接输出这种格式就不行了!!!!!
//System.out.println(stu.name);
//System.out.println(stu.age);
格式应该是
对象名 . 成员变量进行手动赋值!!
stu.name"张三"
stu.age(26)
stu.eat();
stu.study();
static .sout.println("--------------------------------------------------")
//创建多个对象的时候也是手动赋值
StudentDemo1 stu1 = new StudentDemo1();
stu.name"彭于晏"
stu.age(16)
stu.eat();
stu.study();
手动输入要录入的值然后再
-
-
成员变量和成员方法是平级关系!!!!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那么就代表哪个对象的地址值
-
当成员变量和局部变量变量名是一样时,使用就近原则,会先输出局部变量的值
如果就要访问成员变量的话,可以在show方法中输出语句里加一个this.name,因为根据内存图来分析,当对象调用方法是如果方法里面有this ,那么this就是那个对象的地址值,然后this.就可以进入堆中访问成员变量~~~~!!!!!!!!!!!!!!!!!!!
方法构造(也可以叫构造器)
构造方法名和类名必须完全一致,;连大小写都得额一样;
构造方法没有返回值,连void都不能写;
因为如果用void来写的话,系统会认为这个是成员方法,所以不能写void
构造方法中不能有return语句,不能有return的返回类型
面向对象三种特征:
封装 《 继承 多态》继承多态后面学;
封装:隐藏实现信息,仅暴露公共部分
将属性抽取到类中,是对数据的一种封装
将代码抽取到方法中是对代码的一种封装
JavaBean
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律