this关键字
1:在类的方法定义中使用的this关键字代表使用该方法的对象的引用
(对哪个对象调用的方法,this指的就是谁)。
2:当必须指出当前使用方法的对象是谁要使用this。
3:有时使用this可以处理方法中非成员变量和参数重名的情况。
4:this可以看做是一个变量,它的值是当前对象的引用。
实例:
public class Leaf{
int i = 0 ; //成员变量。
Leaf ( int i ) { this.i = i ; } //构造方法。另:此处有两个变量 “i”,此处的“i”是形参,无法区分,遵循就近声明的原则,即大括号中的第二个“i”是形参,而“this.i”中的“i”是成员变量。(即第三条)
Leaf increament () { //返回值是Leaf类型。
i++;
return this; //返回Leaf类型。
}
void print () { System,out.println ("i = "+ i ); }
public static void main(String [] args){
Leaf leaf = new leaf(100); //自身这个“i”变成了100.
leaf.increament().increament ().print (); 调用了两次方法“Leaf increament”,成员变量“i”的值从100变为101再变为102,之后调用print方法,打印出102.
}
}
static关键字:
1:在类中,用static声明的成员变量为静态成员变量,它为该类的公共变量,在第一次使用时被初始化,对于该类中的所有对象来说,static成员变量只有一份。
2:用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。
3:静态方法不再是针对于某个对象调用,所以不能访问非静态成员。
4:可以通过对象引用或类名(不需要实例化)访问静态成员。
实例:
public class Cat{
private static int sid = 0; //成员变量“sid”(权限修饰,static修饰),静态变量存放在“date segment(数据区)。属于整个类”
private String name;
int id;
Cat(String name) { //构造方法。
this.name = name; //使用this关键字,把输入的name值传给成员变量name。
id = sid++;
}
public void info(){
System.out.println
( “My name is”+name+" No." +id);
}
public static void main(String args[]){
Cat.sid = 100; //此时还未new处对象,sid的值变成100。
//new了两只猫,两个“id”两个“name”。
Cat mimi = new Cat("mimi");
Cat pipi = new Cat("pipi");
mimi.info(); //输出的id为100,sid变成101;
pipi.info(); //输出的id为101,sid变成102.
}
}
如果把static去掉:
public class Cat{
private int sid = 0;
private String name;
int id;
Cat(String name) { //构造方法。
this.name = name; //使用this关键字,把输入的name值传给成员变量name。
id = sid++;
}
public void info(){
System.out.println
( “My name is”+name+" No." +id);
}
public static void main(String args[]){
//Cat.sid = 100; (无法执行,因为去掉了static,sid属于某一个对象,不new出任何的对象,sid不存在。故删除这条语句。)
//new了两只猫,两个“id”两个“name”。
Cat mimi = new Cat("mimi");
Cat pipi = new Cat("pipi");
mimi.info(); //输出的id为0,sid变成1。
pipi.info(); //输出的id为0,sid变成1。
}
}
另:
public static void main(String args[]){ //static,注明main方法是静态,即main方法执行时不需要new对象。
static id = 9; // id不装在某一个对象中是无法访问的。name加一个static,main方法就可以直接访问了。
//Cat.sid = 100;
Cat mimi = new Cat("mimi");
Cat pipi = new Cat("pipi");
mimi.info();
pipi.info();