今天学习了以下知识:
一、static修饰的方法和属性,既可通过类来调用,也可通过实例来调用;没有使用static修饰的普通方法和属性,则只可通过实例来调用。
二、对象的this引用
this关键字是一个对象的默认引用。this关键字总是指向调用该方法的对象。
根据this出现位置的不同,this作为对象的默认引用有两种情形:
1.在方法中引用调用该方法的对象。
this可以代表任何对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的,它所代表的对象只能是当前类;只有当这个方法被调用时,它所代表的对象才被确定下来:谁在调用这个方法,this就代表谁。
public class Dog
{
public void jump()
{
System.out.println("正在执行jump方法");
}
public void run()
{
this.jump();
System.out.println("正在执行run方法");
}
}
public class TestDog
{
public static void main(String[] args)
{
Dog dog = new Dog();
dog.run();
}
}
上方代码中,this代表的是dog对象。
大部分时候,普通方法访问其他方法、属性时无须使用this前缀,但如果方法里有个局部变量和属性同名,但程序又需要在方法里访问这个被覆盖的属性,则必须使用this前缀。
对于static修饰的方法而言,则可以使用类来直接调用该方法。如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。所以,static修饰方法中不能使用this引用。
2.构造器中引用该构造器执行初始化的对象。
由于构造器是直接使用new关键字来调用,而不是使用对象来调用,所以this在构造器中引用的是该构造器进行初始化的对象。
三、Java里方法的参数传递方式为值传递。所谓值传递,就是将实际参数值的副本传入方法内,而参数本身不会受到任何影响。
四、形参长度可变的方法
Java允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时,在最后一个形参的类型后增加三点(...),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。
public class Varargs
{
//定义了形参长度可变的方法
public static void test(int a, String... books)
{
//books被当成数组处理
for (String tmp : books)
{
System.out.println(tmp);
}
System.out.println(a);
}
public static void main(String[] args)
{
//调用test方法
test(5,"Struts2权威指南","基于J2EE的Ajax宝典","Java");
}
}
五、类的继承
Java里子类继承父类的语法格式如下:
修饰符 class SubClass extends SuperClass
{
//类定义部分
}
六、方法的重写
方法的重写要遵循“两同两小一大”规则。“两同”即方法名相同、形参列表相同。“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常应比父类方法声明抛出的异常类更小或相等。“一大”指的是子类方法的访问权限应比父类方法更大或相等。
如需要在子类方法中调用父类中被覆盖的方法,可以使用super(被覆盖的是实例方法)或者父类类名(被覆盖的方法是类方法)作为调用者来调用父类中被覆盖的方法。