this关键字、引用传递与值传递、接口与抽象类总结
一、this关键字
1.含义:指的是当前方法对应的对象。
例:
public class Student{
private String name;
public void setName(String n){
this.name = n;
}
}
这里this即指调用setName()方法是的对象。
2.作用:
1、区分方法中同名的参数与属性
例:public Student(String name){
this.name = name ;
}
这里的this把参数与属性加以区分,否则根据就近原则,等号两边的name都会被当做参数name处理。
2、调用本类中重载的构造方法
例:public student(){
this(”名字”);
}
public student(String name){
this.name = name;
}
这里this(”名字”);语句调用了下面的另一个构造方法。
二、值传递与引用传递
1.值传递:
1、适用于8个基本数据类型(byte、int、short、long、char、float、double、boole与 String
2、特点:单项传递,传递数值,传递后互不影响
2.引用传递(参数传递)
1、适用于对象、数组
2、由于对象名是储存的是对象的首地址,所以对象作为参数传递或整体赋值时,其地址被传递给形参或变量名,两变量名指向同一存储空间所以对新对象的操作直接作用于原对象。
3、java中,当对象名指向发生变化,使得没有任何变量名指向原对象时,系统的垃圾及回收机制(GC)会启动,释放掉该对象的内存空间。
例:public class Student(){
private String name;
public void playWith(Student s){}
}
Student stu1 = new Student();
Student stu2 = new Student();
stu1.playWith(stu2);
stu2 = stu1;
执行stu1.playWith(stu2);时,stu2存储的地址被赋给形参s,两者共用一片存储空间;
执行stu2 = stu1;时,stu1存储的地址被赋给形参stu2,同时stu2所指的对象空间被释放。
二、接口与抽象类
1. 接口:
1、定义格式:
public interface 接口名 extends 接口名,... {
//常量
public static final 数据类型 常量名 = 值;
//抽象方法
public 返回值数据类型方法名(数据类型参数名,...);
}
2、实现格式
public class 类名 extends 类名 implements 接口名,... {
}
同时,必须实现接口中所有的抽象方法,否则仍有抽象方法,无法作为类。
2、注意:
1.只能定义常量和抽象方法。
2.接口中默认的访问修饰符是public。
3.常量名的每一个字母要全部大写。
4.接口可以继承接口,而且可以同时继承多个接口。
5.接口不能用来实例化对象。(因为有抽象方法)
例:public interface ButtonListener extends ActionListener{
}
public class MyListener implements ButtonListener{
publicvoid actionPerformed(ActionEvent e) {
}
}
2. 抽象类
1、定义格式:
public abstract class 类名extends 类名implements 接口名{
public abstract 方法名();
}
2、注意:抽象类是介于接口与类之间的类型,含有抽象方法,也不能实例化对象。
定义抽象方法时abstract不能省略;定义时必须先继承类再继承接口。