this关键字和static关键字
this关键字
普通方法中,this总是指向调用该方法的对象。
构造方法中,this总是指向正要初始化的对象。
this区分成员变量和全局变量的作用,在当前类中可以省略。
this的常用方法:
让类中的一个方法,访问该类的另一个属性或方法。
使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中使用,并且必须位于构造方法的第一行。
并且this关键字不能与static共同使用。
示例:
public class Test{
int a,b,c;//全局变量
Test(){//无参构造
System.out.println("正要new一个对象");
}
Test(int a,int b){//有参构造
this();//调用无参构造要位于第一行
a=a;//这里指的是局部变量而不是成员变量
this.a=a;//这样就区分了成员变量和局部变量
this.b=b;
}
Test(int a,intb,int c){
this(a,b);//调用无参要位于第一行
this.c=c;
}
void sing(){}//方法
void chifan(){
this.sing//调用本类中的sing方法
System.out.println("回家吃饭");
}
public static void main(String[] args){
Test i=new Test(2,3);//创建对象并调用两个的有参构造方法
i.chifan;
}
}
}
static关键字:
在类中,用static声明的成员变量为静态成员变量(类属性,类变量)从属于类,代表整个类的属性,为该类所有对象共享。
对于该类的所有对象来说,static成员变量只有一份,所以被该类所有对象共享。
可以使用对象.属性调用,不过一般使用,类名的属性名。
用static声明的方法为静态方法
1.不需要对象,就可以调用(类名.方法名)
2.静态方法中不能使用this关键字(this必须优先创建对象)
3.在静态方法中无法访问非静态成员变量,反之可以。(内存中分配空间时间不一样)
示例:
public class TestP{
int a;//成员变量
static int width;//静态成员变量
static void gg(){//静态成员方法
System.out.println("gg");
}
void tt(){//普通方法
System.out.println("tt");
}
public static void main(Strin [] args){
Test hi=new Test();
Test.width=2;
Test.gg;
h.gg;//通过引用也可以访问static变量或方法,不过一般使用类名。static成员名来访问。
gg();
}
}
静态成员变量(类变量)和成员变量的区别?
1.内存中保存的位置不同,成员变量保存在堆中,静态成员变量在方法区中
2.内存中保存份数不同,成员变量是每个对象一份,类变量是所有对象一份。
3.访问方式不同,成员变量:对象名.属性 stu.name="张三";类变量:类名.属性Test.name="李四";
4.在内存中分配的时间不同:成员变量:在创建对象时。 类变量:在第一次加载类的时将数据保存到方法区中分配空间。
使用static修饰代码块: 创建对象之前会被执行并按先后顺序。
格式: {
//代码
}
类变量代码块:使用static修饰,先于代码块和构造方法执行,并只执行一次
格式:static {
//代码
}
使用场景:在创建对象之前只做一次对象初始化或在创建对象之前执行某段通用代码。
静态代码---->代码块---->构造器---->方法 (先后顺序)