类和对象
类(设计图):是对象共同特征的描述
对象:是真实存在的具体东西
定义类:
public class 类名{
1.成员变量 (代表属性,一般是名词)
2.成员方法 (代表行为,一般是动词)
3.构造器
4.代码块
5.内部类
}
得到类的对象:
类名 对象名 = new 类名();
使用对象:
① 访问属性:对象名.成员变量
② 访问行为:对象名.方法名(…)
定义类的补充注意事项:
① 用来描述一类事物的类,专业叫做:Javabean类。在Javabean类中,是不写main方法的
② 在以前,编写main方法的类,叫做测试类。我们可以在测试类中创建javabean类的对象并进行赋值调用
③ 类名首字母建议大写,需要见名知意,驼峰模式
④ 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议一个文件定义一个class类
⑤ 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;
一般无需指定初始化值,存在默认值
数据类型 | 明细 | 默认值 |
---|---|---|
基本类型 | byte、short、int、long | 0 |
float、double | 0.0 | |
boolean | false | |
引用类型 | 类、接口、数组、String | null |
封装
原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
private关键字:被private修饰的成员只能在本类中才能访问
针对private修饰的成员变量,如果需要被其他类使用,需要提供相应的操作:
① "setXxx(参数)"方法,用于给成员变量赋值,方法用public修饰
② "getXxx()"方法,用于获取成员变量的值,方法用public修饰
this关键字:可以区别成员变量和局部变量
this的本质:代表方法调用者的地址值
构造方法的格式:
public class Student{
修饰符 类名(参数){
方法体;
}
}
特点:
① 方法名与类名相同,大小写也要一致
② 没有返回值类型,连void都没有
③ 没有具体的返回值(不能由return带回结果数据)
执行时机:
① 创建对象的时候由虚拟机调用,不能手动调用构造方法
② 每创建一次对象,就会调用一次构造方法
构造方法注意事项:
① 构造方法的定义:如果没有定义构造方法,系统将给出一个默认的无参构造方法;如果定义了构造方法,系统将不再提供默认的构造方法
② 构造方法的重载:带参构造方法和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载
③ 推荐的使用方式:无论是否使用,都手动书写无参构造方法和带全部参数的构造方法
标准的JavaBean类:
① 类名需要见名知意
② 成员变量使用private修饰
③ 提供至少两个构造方法:无参构造方法、带全部参数的构造方法
④ 成员方法:提供每一个成员变量对应的setXxx()/getXxx()。如果还有其他行为,也需要写上
快捷生成类方法:alt + insert(IDEA)
对象内存图
一个对象的内存图:
Student s = new Student();
1.加载class文件
2.声明局部变量
3.在堆内存中开辟一个空间
4.默认初始化
5.显示初始化
6.构造方法初始化
7.将堆内存中的地址赋值给左边的局部变量
从内存的角度去解释:
基本数据类型:数据值是存储在自己的空间中
特点:赋值给其他变量,也是赋的真实的值
引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值
特点:赋值给其他变量,赋的是地址值
成员变量和局部变量的区别:
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 方法内,方法声明上 |
初始化值不同 | 有默认初始化值 | 没有,使用之前需要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
作用域 | 整个类中有效 | 当前方法中有效 |
对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 | |
作用域 | 整个类中有效 | 当前方法中有效 |