this 关键字
##补充
成员变量:类体之中,方法体之外的变量
静态变量【static】
实例变量【有static】
##this
1. this关键字是指当前的对象
this是 一个引用,是一个变量,this变量中保存了内存地址指向自身,this存储在jvm堆内存Java对象的内部中
每个对象都有这个this关键
简单来说,this相当于以一种介质,栈内存中局部变量的地址传递到this关键字中,再传递给对象
当使用引用名局部变量名)访问这个对象的话,整个过程中出现的this表示引用名(局部变量名)
this表示当前正在执行这个行为的对象(当前对象)
(就是谁要去访问那么该对象的局部变量名(对象名)这个this将会变成这个对象名(局部变量名))
this可以出现在实例方法中
this不能使用在带有static的方法中
2. 没有static关键字的 方法 称为“实例方法”(对象方法)
3. 没有static关键字的 变量 称为“实例变量”(对象变量)堆内存的对象内部存储
4. 有static关键字:
方法调用的不是对象去调用,是一个类名调用, 执行过程中没有"当前对象"
static的方法调用不需要对象,直接使用类名,所以不能使用 this
想要访问 带有static关键字的实例变量的步骤:
* 创建对象
* 通过对象去访问这个变量
* 其他的一些步骤
* 注意
- 带有static的方法即使采用创建对象的方式去访问,但是,过程中没有使用过创建对象
- 不会出现空指针异常(因为没有用到对象)
5. 实例方法
格式:public void 类名(){
}
要想访问,必须的步骤:
先创建对象
通过引用方式访问
6. this什么时候不可以省略?
用来区分 局部变量 和 实例变量 时候不能省略this
如:public void setId(int id(这是局部变量)){
this.id = id ;(实例变量)
}
7.this可以使用在那里:
* 可以使用在实例方法中,代表当前对象【语法格式:this.】
* 可以使用在构造方法中,通过当前的构造方法调用其它的构造方法【this.(实参);】
* this.()只能出现在构造方法中的第一行
如://有参数的构造方法
public Date(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
//无参数的构造方法
public Date (){
this.();//这里直接调用有参数的构造方法。this.()中直接写参数就行了
如 this.(year);
}
static关键字
带static是类级别的方法
带有static类级别的特征可以进一步提升为 模板 的特征【如:像类一的模板特征】
不带static是对象级别的
1. 静态变量,静态变量在类加载的时候就初始化,不需要创建对象,就可以开辟了内存空间
静态变量存储在方法区当中,访问直接用:类名.属性名;
2. 什么时候成员变量声明为实例变量呢?
* 所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化【不同对象的这个属性值不同】
* 比如:对象的特征属性【人的身高】
3. 什么时候成员变量声明为静态变量呢?
* 所有对象都有这个属性,并且所有对象的这个属性值是一样的,建议定义为静态变量,节省内存的使用
* 就是在所有对象中都这个特征
* 比如【中国人的国籍就是一个固定的属性】
4. 关于Java中的static关键字:
* static 修饰的 方法 叫做静态方法
* static 修饰的 变量 叫做静态变量
* 所有static修饰的元素都称为 静态的,都可以用 “类名.” 形式访问
* 所修饰的元素都是 类级别特征
5. 语法格式:【静态代码块】
static{
语法句;
};
注意:* 静态代码块在 类加载 的时候,main方法之前,只执行一次
* 静态代码块在一个类中可以编写多个,遵循从上到下的顺序
* 通常静态代码块当完成预备工作,先完成数据的准备工具 ,如:初始化连接池
6. 方法什么时候定义为静态的方法?
* 方法描述的是动作,当所有的对象执行这个动作的时候,最终产生的影响是一样的,那么这个动作
已经不再是属于某个对象的动作,可以将这个动作提升为模板的动作
* 静态方法不能直接访问 实例变量和实例方法
7. 总结:
class 类{【一个类所讲述的内容】
静态代码块
示例代码快
静态变量
实例变量【构造方法执行的时候进行初始化】
构造方法
静态方法
实例方法
}
8. 大多数方法都定义为 实例方法,一般一个行为或者一个动作在发生的时候,都需要对象的参与
但是也有例外的,比如:大多数 工具类 【】中的方法是静态方法