this
this总的来说表示指向当前对象的指针。
/**
*
* @ClassName: Test
* @Description: this example
* @author: Loser
* @date:2016年9月12日 下午8:54:26
*/
public class Test {
private int i=0;
//构造1
Test(int i){
this.i=i+1; //此时this表示引用成员变量i,而非函数参数i
System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));
}
//构造2
Test(int i,int s){
this(s); //this调用第一个构造器,必须为于其第一行,构造方法也只能调
//用一个且仅一次构造器!
System.out.println("Int constructor: "+i+"/n"+"String constructor: "+s);
}
public Test increment(){
this.i++;
return this;//返回的是当前的对象
}
public static void main(String[] args){
Test t1=new Test(10);
Test t2=new Test(20,50);
System.out.println(t1.increment().i);
}
}
就是说是哪个变量new了该对象就表示谁
this 还可以用于构造函数的调用,例如:上述代码构造2中的this(s)
this不能和static同时使用,因为static修饰的方法和属性归类所有,而不是某个对象特有
super
super用于在子类中操作父类隐藏的属性和方法
super在子类的构造函数中调用父类的构造函数,注意:super调用构造函数必须位于子类构造函数的第一条语句,因为构造顺序为先构造父类的构造函数,再构造子类的构造函数,如果不位于第一条,那么就违背了这原则,会报错!
static
static不能和this同时使用,因为static是供类所有,是所有对象共享的,类似全局变量。首次加载类的时候就分配了内存,并且被static修饰的方法和变量JVM只加载一次。
被static修饰的变量称为类变量,被static修饰的方法称为类方法或者静态方法;没被修饰的称为实例变量,实例方法。
类方法只能访问类变量和类方法,实例方法都可以访问,关系如图所示:
关于static访问的误区:
public class TestStatic {
private int i=0;
public void increment(){
System.out.println("i="+i++);
}
public static void main(String[] args){
int j=10;
Test t1=new Test(10);
Test t2=new Test(20,50);
j=t1.z;
System.out.println(j);
}
}
对于被static修饰方法的访问是指方法本身外部的访问。在上段代码中,关于static方法的访问是指main之外的访问,比如说:main方法无法访问i,但是如果在main中实例化对象,通过对象去访问对象里面的变量是没问题的,还有在main方法里面可以声明实例变量,例如j。记住:我们所说static修饰方法的访问是它对于外部的访问。
final
final在Java中字面意思表示常量
对于final的理解:
被final修饰的方法不能够被重写
被final修饰的类不能被继承
被final修饰的变量开两种情况:1.如果是基本类型变量那么它的值是不能改变的,并且声明时最好初始化;如果是引用类型变量,那么他的指向不能变,即地址不能变,但是类里面的值是可以改动的
充分利用this和super可以减少重复代码