0808总结
代码块
放在一对 {} 里面的叫代码块
根据位置与修饰符等的不同可分为四大类:
局部代码块
在方法里
{
代码块的代码
}
优点:生命周期是随着代码块的执行,执行完便销毁,节省内存空间
构造代码块
在类里
{
代码块的代码
}
优点:1、可以给成员变量赋值
2、如果类里面的某一个方法要在实例化的时候执行,就可以把这个代码块放入方法里
说明:
这个代码是由jvm执行;每次new对象时,都会执行这个代码块;代码块优先于构造方法执行
静态代码块
在类里
static{
代码块的代码
}
优点:用于驱动加载
说明:
这个代码是由jvm执行的;只会加载一次;优先于构造执行
同步代码块
在方法里
synchronized (Student.class){
System.out.println();
}
作用:确保多线程的安全
继承
父类:超类、基类
子类:派生类
必须满足 is -a关系才能使用继承
父类
与创建普通类的语法一样
子类继承父类的关键字是 extends
继承的时候,父类拿不到子类的东西,子类能够拿到父类的东西(包括属性和方法)
子类与父类中有同一个成员变量,实例化子类的对象,首先获取子类的成员变量,如果子类没有,便一次找其父类的成员变量,都没有则报错
获取变量的方法
1、直接获取(一般是获取局部变量)
2、通过this(获取成员)
3、获取super(父类的变量)
获取父类的方法
1、本类调用本类的方法通过 this.方法名
this.play();
2、在父子关系中,如果实例化是子类的对象,子类在调用其方法的时候;若子类有就调用自己的方法、没有就依次往上找,调用父类的方法,都没有就报错
方法的重载:同一个类里,方法名相同,参数的个数或者类型不同,与返回值没关系
方法的重写:在继承中,方法名相同,参数是一样的
重写的注意点
1、子类的方法作用域不能大于父类方法的返回值的作用域(所有类的直接或者间接父类都是 Object() )
2、子类的访问修饰符权限不能严于父类(父类给的是 public ,子类不能给 private )
3、重写的标记:@Override
4、重写的含义:子类调用父类的方法时,也可以做自己想做的事情
在子类中有两种情况:
在子类中,调用自己本身的方法通过this调用(可以省略)
调用父类的方法是使用super关键字 super.方法名()
子父类中构造的使用
1、如果没有调用父类的其它构造,系统会默认调用父类的无参构造
2、子类可以调用父类重载的构造语法: super(参数的值)
3、调用父类的构造必须放在第一句,一个构造只能放一个 super(),否则报错
this三种获取方式
1、this. 成员变量名
2、this. 方法名()
3、this();构造方法
继承中不能继承的
1、父类所有私有的子类都拿不到(private)
2、不能继承父类的构造,但是可以用父类的构造
总结
得到父类的属性、方法、构造都可以通过 super 关键字来拿
属性:super.属性名
方法:super.方法名()
构造:super();
java里的单继承
只能存在一父类,所有类有一个直接父类或者间接父类是 Object
继承的好处:可扩展性,可维护性
坏处:耦合性比较高
final
修饰类
在类前面加关键字 final(被final修饰的类不能被继承)
修饰方法
父类里被 final 修饰的方法不能被继承
修饰成员变量
final 修饰成员变量时必须给其默认的值,设置后就不能改变了
修饰局部变量
在局部变量中 final 可以不给默认值,若设置了默认值就不能变改变
在开发中 final 一般与 static 配合的使用