📌Java基础_Day06
1. 面向对象编程
①什么是类?什么是对象?
②类与对象的简单代码定义?
以前存数据都是用“变量、数组”,而“对象”是新的一种存东西的方式!
面向对象的定义
具体操作过程
①新建一个class文件用来放“类”设计图
②再在主类中进行new对象!
2. 类与对象
①类与对象关系?
②对象的计算机硬件层次存储原理?
类是对象的模板,对象是类的实例
计算机底层中(java代码在JVM虚拟机中跑,而跑java代码时JVM在内存中)
①计算机先拿到Test类,把它放“方法区”。
②拿到main方法,把它放“栈内存”。
③在main方法中new一个对象,对象指向堆内存中新开的一片区域!
④新开的那片区域只存“属性”+“地址”,这个地址指向“方法区”中的模板类。
⑤当调用打印总成绩的方法时,会一路从“栈——堆——方法区”找到相应方法,然后放入“栈内存”中进行执行,执行完后出栈……
3. 类的设计(构造器)
①类的设计——构造器(定义、特点、使用场景、注意事项)?
无返回值,方法名=类名的方法就叫构造器。(有参、无参、重载)
特点(创建对象时初始化)
比如下面代码,写了下面那2行后,输出会自动运行打印上面那两个“输出”!
实际应用场景
一些注意事项
4. 类的设计(this关键字)
①类的设计——this关键字(定义、场景)?
②成员变量、局部变量?
this是用来拿到当前对象用的,方便后续.这个对应的属性与方法。
比如有个类如下图所示(当对象s1调用此方法时,会输出对象s1在“堆内存”中的首地址。)
那它有什么作用呢?【用于解决变量名称冲突问题】
下面举个具体的代码例子(下面那个输出第1个name是对象的name,第2个name是调用方法时传入的name)
当然,上面图片中你直接把类中那方法String name改成String n也是可以的,但会被员工骂,毕竟n无法做到见名知意!
开发中,我们把上图第1个String name称为“成员变量”(写在类最前面的);上图方法中形参的String name称为“局部变量(不在类前面定义的所有变量)”。(this用于解决这两变量冲突问题)
5. 类的设计(封装)
①类的设计——封装(定义、场景、private、get/set方法)?
封装的定义
封装的目标:(针对类中的属性与方法进行“合理隐藏&合理暴露”)
比如下图中,一个类中定义了下面那3个属性,在main方法中就不能用“s1.age、s1.chinese、s1.math”了。
上面是合理隐藏,对于合理暴露,java用于两种方法set与get
使用get与set后,就能进行对变量的赋值与取值了
6. Javabean类
①javabean含义?要求?应用场景?
②jb代码规范?
Javabean定义
为每一个私有属性自动生成get与set方法(无参/有参构造器的生成也可以使用这种方法)
应用场景(实际开发中,”学生类“中只存学生属性、get/set方法,对学生属性的操作一般再写一个“学生操作类”,这个“学生操作类”中有1个属性就是学生类数据结构)
下面是一个具体的使用例子
最后再总结一下,Javabean就是一个“实体类”,此类只有“私有属性+get/set方法”,引入这东西
是为了实现开发 中的“分层”思想,就是“数据”与“数据的处理业务”相分离!
7. static关健字
①static是什么,做什么用的?
②static修饰“变量”?
③static修饰“方法”?
④static注意事项?
static关键字是用于将变量、方法等变成静态的,然后让它可以直接“对象.变量/方法”,就不用单独new对象了……
static定义变量,使用类名进行调用
怎么说了,下面这图它这举的例子不好,不应该用name,应该用那“手机品牌”(同时为每个手机品牌创建一个类)(就是用这个类实例的所有对象都指向同一个内存区域)
就如上面例子一样,左边主函数访问的name都是访问同一个内存区域,不管输出哪个对象的类,返回的都是以最后修改的那个为准!所以计算机底层原理如下图,name不是存在相应对象内,而是重新开了一个内存区域放
应用场景(就比如理财通中账户,有一个总金额,以及一堆基金金额……金额就要被定义为静态变量)
static修饰方法(静态方法)
使用场景(用来做工具类)
静态方法中无法写类的实例属性,会报错(只能写静态属性);实例方法中可以写!(由使用场景决定)
再举个例子,比如经典的main方法就是静态的(JVM拿到java代码后,做的第一件事就是Test.main(……))
实际开发中,一般把这种方法写在一个工具类中,使用时直接“工具类名.方法”就行,不用new对象(少占内存),比如“验证码方法……”(创建工具类时,建议将它的构造方法私有一下,让它无法在main方法中new对象,优雅)
static注意事项:静态成员就是用staic修饰的“静态变量”、“静态方法”。
具体代码例子(count被static修饰,name没被static修饰,run方法没被static修饰)






