面向对象2.0
1. this关键字
1.1 this关键字到底是一个什么
this关键字表示调用当前方法的类对象本身,哪一个类对象调用当前方法,this关键字就表达哪一个对象。
【注意】
不管是哪一种开发语言,只要两个内存空间首地址一致,就表示同一个空间!!!同一个内容!!!
1.2 this关键字用途
区分成员变量和参数变量
在构造方法中,参数名字和成员变量名字冲突,这里可以使用this关键字明确告知编译器,this.fieldName 对应的就是成员变量,非参数变量。
this关键字调用其他构造方法
public Student(int id, String name, char gender) {
/*
就近原则问题
id = id;
name = name;
gender = gender;
这里是因为成员变量名字和参数变量名字冲突,导致编译器
在运行代码的过程中,会采用就近原则方式,同名变量情况下
会只使用参数变量
*/
// 使用this关键字来明确当前操作的变量是成员变量,非参数变量
// 当前this表示 new 关键字 + 构造方法创建的类对象本身
this.id = id;
this.name = name;
this.gender = gender;
System.out.println("Constructor:" + this);
}
2. 成员变量和局部变量
2.1 局部变量概述
除class大括号之外,其他大括号以内的变量都是局部变量!!!
class Demo2 {
public static void main(String[] args) {
// for 循环条件中定义的循环变量i是一个局部变量
// 有且只能在for循环以内使用,超出无效
for (int i = 0; i < 10; i++) {
}
// System.out.println(i);
// 变量不得重复定义
// int i = 10;
// int i = 20;
// System.out.println(i);
for (int i = 0; i < 10; i++) {
// 变量先定义,后使用,从定义位置开始才可以使用对应变量
// System.out.println(num);
if (0 == i) {
// if大括号以内的num有效范围只能是大括号以内
int num = 10;
}
int num = 10;
}
}
}
2.2 对比
区别 |
成员变量 |
局部变量 |
位置 |
在class大括号以内 |
除class大括号,其他大括号以内 |
内存存储 |
是随着类对象存储于内存的堆区 |
存储于内存的栈区 |
初始值 |
成员变量初始值在没有被构造方法赋值的情况下,默认是对应数据类型的"0"值 |
Java中规定,局部变量未赋值情况下,不得参与其他运算 |
作用域 |
成员变量作用域是受到当前所在类对象作用范围控制 |
局部变量作用域范围有且只在当前大括号以内,并且是从定义位置开始往后 |
生存期 |
是随着类对象的创建而出现,随着类对象的销毁而终止。JVM的GC |
在所处大括号以内,从定义位置开始到大括号结束 |
【补充知识点 "0"值】
所谓零值就是当前变量对应的内存空间中,所有的二进制为都是"0",这就是"0"值。
"0"值最重要的是对应数据对外效果,不同的数据类型"0"值是不一样的
byte short int ==> 0
long ==> 0L;
float ==> 0.0F;
double ==> 0.0;
char ==> '\0' 当前编码集中编号为0的字符 ==> nul
boolean ==> false
所有的引用数据类型 ==> null
String 自定义类
【补充知识点 JVM的GC机制】
JVM虚拟机 GC机制是用于处理Java程序中所使用内存回收功能,该功能可以极大的简化程序员的开发压力。
内存管理
是用于管理程序开辟的内存空间,内存空间需要合理使用和回收。内存的使用不单
单是你自己的程序运行问题,同时会影响到同平台软件的运行。
如果程序中对于内存只有申请,没有关闭,会导致内存【泄漏】!!!
GC垃圾回收机制是如何运行。
图书管理员
image.png
JVM GC机制概述
1. GC会在单位时间内不间断巡视当前程序使用内存空间情况
2. 如果发现无主内存【标记】
3. 下一次单位时间内,发现上一次【标记】内存无主使用,收回当前内存,如果有程序
使用,撤回标记,不收回内存。
3. 面向对象三大特征
3.1 封装
面向对象的封装,只是整个开发思路中封装的一小部分!!!
方法是用于封装功能代码。
方法看做是工具 ==> 组合成 工具箱
工具箱 如果比较复杂 会提供 ==> 说明书
封装建议
一段功能代码使用了三遍,封装成一个方法
一堆处理功能类似的方法使用了三遍,封装成一个工具类
一个工具类使用了三遍,完成对于的完整说明
说明内容在公司中广为流传,发一个博客,GitHub
3.2 实体类JavaBeans规范封装
实体类:
人类,狗类,猫类
真实存在的数据类型,Java中使用class对于当前事物进行数据封装
权限修饰符
private
私有化,私有修饰
private修饰的成员变量,成员方法和构造方法有且只能当前类内使用。
private修饰成员变量,可以保证数据操作统一性,和数据操作安全性
private修饰成员方法,可以保证私密性方法运行,类外无法执行操作
private修饰构造方法,限制构造方法使用,后期用于【单例模式】
public
公开的,所修饰的成员变量,成员方法和构造方法,都是可以直接类外使用。
在JavaBeans规范中,要求成员变量全部【private修饰】
private修饰成员变量类外无法操作,需要提供对应的Setter和Getter方法。
Setter方法格式
public void set成员变量名(对于成员变量数据类型参数) {
赋值语句
}
Person ==> String name;
public void setName(String name) {
this.name = name;
}
Getter方法格式:
public 对于成员变量数据类型返回值 get成员变量() {
return 成员变量;
}
Person ==> String name;
public String getName() {
return name;
}
特殊情况:
如果成员变量数据类型是boolean, 对应get方法
Person ==> boolean married;
这里要求is开头
public boolean isMarried() {
return married;
}
/**
* @author Anonymous 2020/7/25 11:50
*/
public class Cat {
private String name;
private String color;
private int age;
public Cat() {
}
public Cat(String name, String color, int age) {
this.name = name;
this.color = color;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
网友评论