1:static关键字
静态变量可以使用类名来调用 也可以使用对象来调用
但是同一个类的同一个静态变量存储的位置是一样的
所以无论改变那个对象的静态变量的值其他对象的同一个变量的值也会改变
静态函数中使用的变量必须是静态的
可以这样理解
静态函数中若使用的非静态的变量的话 相当于this.变量 而这里的this就不明确了
静态代码块在类装载的时候执行
为了给类中的静态变量赋值
2:继承
子类可以继承父类的成员变量和成员函数 不会继承构造函数
当实例化一个子类对象时 必须会调用父类的构造函数 而且必须先调用父类的构造函数 我们也可以在子类的构造函数里使用super函数 super也必须为第一个函数
super的作用:可以避免写重复的代码
一个简单的继承
Persion类:
class Persion { String name; int age; Persion(){ System.out.println("Persion无参构造函数"); } Persion(String name , int age){ this.name = name; this.age = age; System.out.println("Persion有参构造函数"); } void eat(){ System.out.println("吃饭"); } }
Student类:
class Student extends Persion { int grade; Student() { System.out.println("Student无参构造函数"); } Student(String name,int age,int grade ) { this.grade = grade; //this.age = age; //this.name= name; System.out.println("Student有参参构造函数"); } }
主函数:
class Text{ public static void main(String args[]) { Student aStudent = new Student("李鹏",2,3); System.out.println(aStudent.name); System.out.println(aStudent.age); System.out.println(aStudent.grade); } }
结果:
可见当参数为3个 会先调用父类的无参构造函数 然后是子类的3个参数的构造函数 所以这样的话:如果子类没有给父类的变量赋值 父类变量是不会被赋值的 所以子类必须为父类变量赋值
①可以直接在子类为父类变量赋值
②可以调用super方法为来调用父类构造函数
修改后的Student类:
class Student extends Persion { int grade; Student() { System.out.println("Student无参构造函数"); } Student(String name,int age,int grade ) { super(name,age); this.grade = grade; //this.age = age; //this.grade = grade; System.out.println("Student有参参构造函数"); } }
运行结果:
这样便可以使代码尽量的减少