代码块
-
在Java中,使用{}括起来的代码被称为代码块。
-
分类
-
局部代码块 :定义在方法中,可以尽早的释放空间和资源
-
构造代码块:定义在在类中方法外,每次调用构造时(每创建一个对象)都会执行,并且在构造方法前执行
-
静态代码块:由static修饰的代码块,属于类本身,在类加载时执行,且仅执行一次。
class Student { static { System.out.println("Student 静态代码块"); } { System.out.println("Student 构造代码块"); } public Student() { System.out.println("Student 构造方法"); } } class StudentDemo { static { System.out.println("StudentDemo的静态代码块"); } public static void main(String[] args) { System.out.println("我是main方法"); Student s1 = new Student(); Student s2 = new Student(); } } //结果 /* StudentDemo的静态代码块 我是main方法 Student 静态代码块 Student 构造代码块 Student 构造方法 Student 构造代码块 Student 构造方法 */
-
继承
- 通过extends关键字可以实现类与类的继承:
class 子类名 extends 父类名 {} - 继承的特点:
- Java只支持单继承,不支持多继承,但是支持多层继承
- 子类只能继承父类所有非私有的成员
- 子类不能继承父类的构造方法,但是可以通过super关键字(父类空间的标识)去访问父类构造方,并且可以通过super关键字调用父类的成员变量和方法。
- 子类中所有的构造方法默认都会访问父类中空参数的构造方法,因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,需要先完成父类数据的初始化。
方法重写
- 当子类出现了和父类一摸一样的方法(方法名,参数列表一样,返回值类型一样)就会发生子类的方法覆盖父类的方法,我们也称之为方法重写.
- 父类中私有方法不能被重写,子类重写父类方法时,访问权限不能比父类低
public class Test {
public static void main(String[] args) {
Dog dog = new Dog("狗子",5,"黑");
dog.eat();
dog.run();
System.out.println("-------------------------------");
Cat cat = new Cat("猫咪",3,"花色");
cat.eat();
cat.run();
}
}
class Animal{
String name;
int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat(){
System.out.println("吃饭");
}
public void run(){
System.out.println("跑步");
}
}
class Dog extends Animal {
String colour;
public Dog() {
}
public Dog(String breed, int age, String colour) {
super(breed, age);
this.colour = colour;
}
public void eat(){
System.out.println("吃骨头");
}
}
class Cat extends Animal {
String colour;
public Cat() {
}
public Cat(String breed, int age, String colour) {
super(breed, age);
this.colour = colour;
}
public void eat(){
System.out.println("吃鱼");
}
}
//结果:
/*
吃骨头
跑步
-------------------------------
吃鱼
跑步
*/
final关键字
- 被final修饰的类不能被继承
- 被final修饰的方法不能被重写
- 被final修饰的变量不能被重新赋值