1.Java中,用{}括起来的代码称为代码块。
代码块分为局部代码块,构造代码块,静态代码块,同步代码块
局部代码块:在方法中出现,限定生命周期,及早释放,提高内存利用率
构造代码块:在类中方法外出现,多个构造方法中相同的代码块放到一起,每次调用构造都执行,并且在构造方法前执行
静态代码块:在类中方法外出现,并加上static修饰符;用于给类进行初始化,在加载的时候就执行,并且只执行一次。一般用于加载驱动,位于主方法类中的静态代码块先于主方法执行。
2.静态代码块——构造代码块——构造方法
3.让类与类之间产生关系,子父类关系。
4.a.提高了代码的复用性
b.提高了代码的维护性
c.让类与类之间产生了关系,是多态的前提
5.a:java只支持单继承,不支持多继承
b:java支持多重继承
6.注意事项:
a:子类只能继承父类所有非私有的成员(成员方法和成员变量)
b:子类不能继承父类的构造方法,但是可以通过关键字super去访问父类的构造方法
c:不要为了部分功能而去继承
继承体现的是一种关系“is a”,如果有两个类A,B,只有他们符合A是B的一种或者B是A的一种,就可以考虑使用继承。
7.A:如果子类中没有这个成员变量就访问父类中的该成员变量,如果子类中有这个成员变量,就默认使用该成员变量。
B:子类中所有的构造方法都会访问父类中的空参构造。
8.在继承中,子类中所有的构造方法都会访问父类中的空参构造。假如父类中没有无参构造,会报错。
有几种解决方式:1.在父类中加一个无参构造;2.在子类中用super关键字取访问父类中的带参构造;3.子类通过this去调用本类中的其他构造方法
9.方法重写是子类重出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致的;方法重载是本类中出现的方法名一样,参数列表不同的方法,与返回值类型无关。
overload可以改变返回值类型,看参数列表。
this:谁来引用我,我就代表谁
super:代表当前对象父类的引用
this.成员变量:调用本类的成员变量,也可以调用父类的成员变量(本类没有的情况下)
super.成员变量:调用父类的成员变量
class Test_Extends { public static void main(String[] args) { /*Son s = new Son(); s.son();*/ Cat c = new Cat(); c.show1(); c.show2(); System.out.println("------------------------"); Dog d = new Dog(); d.show1(); d.show2(); } } /*class Father { private aint num1 = 10; int num2 = 20; } class Son extends Father { int num1 = 20; public void son(){ System.out.println(super.num1); System.out.println(this.num2); } }*/ class Animal { String color = "white"; int legs = 4; public void show1(){ System.out.println("白色"); } public void show2(){ System.out.println("有4条腿"); } } class Cat extends Animal { } class Dog extends Animal { }
11.1.修饰类,类不能被继承
2.修饰变量,变量就变成了常量,只能被赋值一次
3.修饰方法,方法不能被重写
12.A.final关键字修饰局部变量
1.基本类型,是值不能被改变
2.引用类型,是地址值不能被改变,对象中的属性可以改变。
B.final修饰变量的初始化时机
1.显式初始化(此时成员的默认初始化值0,是无效值)
2.在对象构造完毕前即可(错误:变量 num 未在默认构造器中初始化)