------- android培训、java培训、期待与您交流! ----------
一.代码块:
1.代码块的种类:
1).局部代码块:定义在某个方法中;
2).成员(构造)代码块:定义在类体中,每次实例化此类对象时被调用;
3).静态代码块:定义在类体中,第一次实例化此类对象时被调用;
2.代码块的作用:
1).跟构造方法一样,用于做一些初始化的操作;
3.如果同时存在静态代码块、构造代码块、构造方法:
静态代码块--->构造代码块--->构造方法;
class Fu{
{
System.out.println("构造代码块");
}
Fu(){
System.out.println("构造方法");
}
static {
System.out.println("静态构造方法");
}
}
public class Demo {
public static void main(String[] args) {
Fu f=new Fu();
}
}
结果为
静态构造方法
构造代码块
构造方法
二.继承:
1.可以将一些相同性质的类中,相同的成员,提取出来,形成一个"概念性的父类"
子类继承了父类,就拥有了父类允许继承的成员。
2.使用关键字:extends
3.继承的特点:
1).只能单继承;
2).允许多级继承;
4.注意事项:
1).父类中的私有成员不能被继承;
2).构造方法不能被继承;
3).不要为了部分功能而去继承;
5.具有 is a 的关系时,可以使用继承;
6.this和super的区别:
1.this指向的本类的对象,可以访问成员变量、成员方法、构造方法
2.super指向的父类的对象,可以访问父类的变量、成员方法、构造方法;
class Fu{
int x=10;
void show(){
}
}
class Zi extends Fu{
int x=20;
void show(){
System.out.println(this.x);
System.out.println(super.x);
}
}
public class Demo {
public static void main(String[] args) {
Zi z=new Zi();
z.show();
}
}
如上,this.x就是子类的20,super.x就是父类的10
7.继承中构造方法的注意事项:
1.如果父类中有"无参"构造方法时,实例化子类时,JVM会自动调用父类中"无参构造方法"
2.如果父类中没有"无参构造方法"时,子类的构造方法中,必须显示的使用super去调用父类中
带参的构造方法。
8.类的实例化过程:
1.如果有父类,先处理父类:
2.如果有静态成员,先处理静态的;
3.总体过程:
父类静态成员
子类静态成员
父类普通成员变量
父类的构造代码块
父类的构造方法
子类的普通成员变量
子类的构造代码块
子类的构造方法
class Fu {
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu() {
System.out.println("构造方法Fu");
}
}
class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi() {
System.out.println("构造方法Zi");
}
}
class Demo
{
public static void main(String[] args){
new Zi();
}
}
执行结果为
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
9.子类成员覆盖父类成员:
1.子类可以定义和父类相同的"成员变量":
this.num:本类的
super.num:父类的
2.子类可以定义和父类相同的方法:叫:方法重写
返回值类型、方法名、形参列表都完全相同;
子类拥有跟父类相同,或更宽的访问修饰符;
3.子类可以覆盖父类的静态方法;
三.fianl关键字:
1.类:表示"最终类",不能被继承;
2.成员变量、局部变量:表示拥有最终的值,其值不能被更改;
3.成员方法:表示最终的方法,不能被重写;