对象
例如学生的姓名成绩等数据。
以上代码存在代码冗余的现象,出现这种需要多次进行某种操作的清空,可以利用封装思想(把数据和数据的处理放到同一个类中),把重复的操作放到学生类当中后调用,减少代码冗余。
对象的底层逻辑
java程序是在内存当中的JVM虚拟机里跑的(当运行java程序的时候,虚拟机会先运行到内存,然后再把程序放到虚拟机里跑)
虚拟机把内存划分了几个区域:
栈内存(先进后出、后进先出):方法,变量。
堆内存:放new出来的对象。
方法区:放class类文件。
大致运行流程图:
类的基本语法
构造器
构造器有无参构造和有参构造。
构造器是一个无返回值的方法且方法名和类名一致,它常用于完成对象的初始化,构造器要么全都有(有参和无参)要么就都没有,如果只定义了有参构造,那么原本程序默认自带的无参构造就会消失。
this关键字
this可以解决变量名称冲突的问题。
代码运行的结果为:唱歌喜欢唱歌!
为了防止出现这种情况,我们可以利用this来获取对象。
封装:
类就是封装(合理暴露,合理隐藏):
eg:一辆封装好的汽车,有的器件会暴露,有的零件会隐藏,封装就是如何把一个对象合理暴露合理隐藏。
合理隐藏:为了防止数据被随意获取以及更改(合法更改、不合法更改,eg:age= -18),需要对成员变量(姓名年龄等添加私有private标签(只能在本类中访问其他地方不能访问))。
合理暴露:不完全封闭数据获取渠道,利用set、get方法来对数据进行访问和修改。
JavaBean(实体类)
1、成员变量必须私有,要提供get、set方法,必须要有无参构造
2、把数据的存取和处理分开,实体类只对数据进行存取,对数据的处理方法要在另一个类当中。
static修饰成员变量
当创建学生对象的时候,真正属于学生对象的属性只有age,而name是属于所有学生对象的,只有一个值,不管是用类名.静态变量来修改name的值还是用对象.静态变量来修改name的值,name的值都以最后一次修改的值为基准,且每个对象的name的值都一样。
static修饰方法
静态方法:如果一个方法只是为了实现一个功能并且不需要访问对象的数据就可以把方法定义为静态方法。
实例方法:如果这个方法是对象的行为并且需要访问对象的数据,则这个方法就要定义为实例方法。
静态方法的应用
在现实生活中,登录需要验证码、注册也需要验证码,如果登录和注册界面都各包含一个验证码生成方法的话就会导致代码重复冗余,利用静态方法设计工具类,将验证码生成设置为静态方法,直接利用类名.静态方法调用验证码生成方法,因为工具类和创建对象没有关系,所以把构造方法私有化(private),让其他类无法创建对象。
static注意事项
1、因为实例成员是属于对象的,静态方法访问实例成员不知道它属于哪个对象。
2、静态成员是所有对象共享的。
3、this指代的是对象。