this和static
static
成员变量包括 【实例变量和静态变量】
实例变量是成员级别的,必须通过对象引用方式访问【存储在堆内存中】
静态变量直接通过“类名”访问【存储在方法区中】
什么情况下用静态变量?
package com.demo;
public class Man {
//ID
int Id_card;
//sex
static boolean sex = true;
//有参数构造方法
public Man(int I){
this.Id_card = I;
}
}
package com.demo;
public class ManTest {
public static void main(String[] args) {
Man man1 = new Man(222);
Man man2 = new Man(333);
System.out.println("ID:"+man1.Id_card+"-->性别"+Man.sex);
}
}
运行结果
ID:222–>性别true
总结
每一个“男人对象”的身份证号都不一样,该属性应该每个对象持有一份,所以应该定义为实例变量,而每一个“男人对象”性别都是“男”,不会随着对象的改变而变化。【不占用堆内存空间】
方法在什么情况下会声明为静态的呢?
方法实际是描述对象的实际行为
跟实例方法的区别
实例方法: 我(对象)–>打篮球(行为)
你(对象)–>打篮球(行为)【效果是不一样的】
当方法体中需要直接访问当前对象的实例变量或者实例方法的时候----方法必须定义为实例方法
静态方法: “工具类”当中的方法一般定义为静态方法,因为工具类就是为了方便大家的使用,将方法定义为静态方法,比较方便调用,不需要创建对象,直接使用类名就可以访问。
this
package com.demo;
public class ThisTest {
public static void main(String[] args) {
Customer c1 = new Customer("张三");
Customer c2 = new Customer("李四");
c1.shopping();
c2.shopping();
}
}
//顾客类
class Customer{
//实例变量
String name;
//构造方法
public Customer(){
}
public Customer(String name){
this.name = name;
}
//实例方法
public void shopping(){
//this指代当前对象
//c1调用就是c1.name
//c2调用就是c2.name
System.out.println(this.name+"正在购物---"); //实例变量只能通过"引用."的方式进行访问
}
}
运行结果
张三正在购物—
李四正在购物—