加了static表示这个变量或者方法是存储在类空间当中的,可以直接通过类进行调用,如:第二种写法。而不加static 表示这个变量或者方法是存储在对象空间当中的,只有通过类实例化一个对象,通过对象调用。
public class Student {
private int age;
private String name;
public Student(int age,String name){
this.age=age;
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int x){
age=x;
}
public void showInfo(){
System.out.println("年龄"+age+"姓名"+name);
}
/*第二种写法
public static void showInfo(){
System.out.println("年龄"+age+"姓名"+name);
}*/
}
public class Test {
public static void main(String[] args) {
Student stu=new Student(20,"孙菲");
stu.showInfo();
//第二种
//Student.showInfo();
}
}
this
this: 指向当前对象
在现实世界中我们说“我行!”,这里的“我”直接代指说话者,同样当执行一个对象的方法的时候,方法体内的this就指向当前这个对象。
别人不可能用“我”来指向你,“我”只能是说话者自己来引用自已。同样this只能是对象在执行方法的时候指向自己,而不能用来指向其它对象。
class T{
int id;
void think(){
System.out.println(this.id);
}
}
T t1 = new T(); t1.id = 3; t1.think();
T t2 = new T(); t2.id = 2; t2.think();
当执行t1的think方法时,上面的this代指对象t1;
当执行t2的think方法时,上面的this代指对象t2;
this在构造方法中的使用
class T{
T(){
this(2); //调用下面的构造方法(构造方法中调用构造方法只能这种方式)
}
T(int a){}
}
this对当前对象的引用
class T{
T friend;
void setFriend(T friend){
if(this.friend == friend){ return; }
this.friend = friend;
friend.setFriend(this);
}
}
重载
构造方法的重载
class T{
T(int a){}
T(){}
}
重载的误用
class T{
void fun(int a){}
void fun(int b){}
}
正确写法:
class T{
void f(int a, String s){}
void f(String s, int a){}
}