代码块
1.定义:被单独包裹在一对花括号里的代码段
2.分类:
静态代码块:在类成员位置的代码块且被static修饰
语法结构:class 类名 {static{代码段}...}
作用和意义:能帮助类一次性完成静态成员的初始化及类加载时机需要完成的任务。
特征:只在被类加载器加载到jvm时执行一次。
构造代码块:在类成员位置的代码块。
语法结构:class 类名 {{代码块}...}
作用和意义:能帮助类的对象完成非静态成员的初始化及对象创建时机需要做的事情。
特征:在每次类通过构造方法创建对象时,在构造方法前要执行一次,相当于将代码段放到构造方法中代码前。
局部代码块:在方法中的代码块
语法结构:fn(){...{代码段}}
作用和意义:限定代码段变量的作用范围,遇到程度可以优化栈内存空间。
特征:在栈中执行,执行完后,在其中定义的变量就在栈中被释放。
被继承的类称为父类或起类
继承的类称为子类。
继承的作用和意义
1.提高代码的复用性。2.提高代码的维护性。3.为多态提供了前提条件。
成员属性的特征
在调用成员变量时采用就近原则。
super:指的是子类对父类的空间引用,可以在子类中通过super调用父类的成员。
成员方法的特征
在调用成员方法时采用就近原则。
方法的重写(覆盖)
子类有和父类相同的方法(方法名,参数列表,返回值类型都相同)
注意事项
子类方法的修饰符不能低于父类
子类方法的异常不能大于父类的异常。
构造方法的特征
子类在构造自身实例对象之前,优先完成父类的构造。
子类继承了父类可能会用到父类的数据,所以在完成自身实例化前,必须先完成父类的构造实例化,才能使用父类的数据。
子类的构造方法默认的第一个是super()无参构造,多个子类构造必须有一个对父类的构造引用。
继承使用的注意事项
子类只能继承父类非私有的成员(成员变量,成员方法)但可以通过get set使用。
子类不能继承父类构造方法,但可以通过super间接调用完成父类的构造。一个类不能因为要使用另一个类相同的代码去继承另外一个类。
package com.hpf.fengzhang;
public class Human {
public static void main(String[] args) {
Teacher ts = new Teacher();
ts.getAge();
System.out.println(new Teacher("吴潘", 18));
}
}
//学生类
class Studentr{
//静态代码块
static String xm ="苏沐橙";
static {
System.out.println("学生类静态代码块"+xm);
}
//构造代码块
{
System.out.println("学生类构造代码块"+"加油!未来可期");
}
String name="吴潘";
int age=18;
//无参构造()
public Studentr() {
System.out.println("学生类构造方法代码块");
}
//全参构造
public Studentr(String name, int age) {
this.name = name;
this.age = age;
}
//get方法
public static String getXm() {
return xm;
}
//set方法
public static void setXm(String xm) {
Studentr.xm = xm;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//老师类
class Teacher extends Studentr{
Studentr st =new Studentr();
//静态代码块
static {
System.out.println("老师类静态代码块我也喜欢你");
}
String name;
int age=20;
//无参构造
public Teacher(){
System.out.println("我喜欢");
}
//全参构造
public Teacher(String name,int age){
this.name=name;
this.age=age;
System.out.println("姓名:"+name+"年龄:"+age);
}
//get和set方法
public String getName(){
return name;
}
public void setName(){
this.name=name;
}
public int getAge(){
int age =21;
System.out.println(age);
System.out.println(this.age);
System.out.println(super.age);
return age;
}
public void setAge(){
this.age=age;
}
}