一。StaticDemo
package day24;
public class StaticDemo {
public static void main(String[] args) {
Father f = new Father(); // 创建一个对象
f.test();
}
}
class Father{
// static修饰的静态变量或者静态代码块会在创建的对象的时候按顺序进行初始化
// 只要实例化对象 自动触发静态变量和静态代码块 类.静态变量
public static int a = getNumber();
static // 静态代码块 作用是对类进行初始化
{
System.out.println("static(1)");
}
public static int b = getNumber();
static {
System.out.println("static(2)");
}
public static int getNumber(){
System.out.println("Father Test");
return 1;
}
public void test(){
System.out.println("test static");
}
}
二。StaticDemo02
package day24;
public class StaticDemo02 {
public static void main(String[] args) {
// Son01 s = new Son01();
// s.test(); 对象调用 需要方法是非静态方法
Son01.test(); // 需要test方法是静态方法,类方法
}
}
class Father01{
// 经过子类和父类的初始化 发现先执行父类的初始化 再执行子类的初始化
// static 是对类进行初始 构造方法是对类的对象进行初始化
public static int a = getNumber(); // 类的初始化 第一步
static{
System.out.println("Father(1)"); // 第二步
}
public static int b = getNumber(); // 第三步
static {
System.out.println("Father(2)"); // 第四步
}
public static int getNumber(){
System.out.println("Father getNumber()");
return 1;
}
}
class Son01 extends Father01{
// 经过子类和父类的初始化 发现先执行父类的初始化 再执行子类的初始化
// static 是对类进行初始 构造方法是对类的对象进行初始化 (实例初始化)
public static int a = getNumber(); // 第五步
static {
System.out.println("Son(1)"); // 第六步
}
public static int b = getNumber(); // 第七步
static {
System.out.println("Son(2)"); // 第八步
}
public static int getNumber(){
System.out.println("Son getNumber()");
return 1;
}
public static void test(){
System.out.println("Son test()"); // 第九步
}
}
三。Task
package day24;
public class Task {
public static void main(String[] args) {
/*
1.示例代码3:父子类,方法有重写 (自己敲一遍)
*/
}
}
四。 Test01
package day24;
public class Test01 {
public static void main(String[] args) {
Father02 f1 = new Father02(); // 触发无参数构造方法
System.out.println("========================================");
Father02 f2 = new Father02("新迈尔"); // 触发有参数的构造方法/
}
}
class Father02{
public int a = getNumber(); // 非静态变量 第一步
private String info; // 私有变量
{// 用于进行实例初始化 可以有多个 非静态代码块
System.out.println("Father01非静态代码块(1)"); // 第二步
}
Father02(){
System.out.println("Father() 无参数的构造方法"); // 最后一步 第五步
}
Father02(String info){
this.info = info; // this 就是实例化对象,给类的初始化对象赋值
System.out.println("Father(info) 有参数的构造方法");
}
public int b = getNumber(); // 第三步
{
System.out.println("Father01非静态代码块(2)"); // 第四步
}
public int getNumber(){
System.out.println("Father getNumber()");
return 1;
}
}
五。Test02
package day24;
public class Test02 {
public static void main(String[] args) {
Son03 s1 = new Son03(); // 实例化对象
System.out.println("==================================");
Son03 s2 = new Son03("有参数的构造方法");
}
}
class Father03{
public int a = getNumber(); // 非静态变量
{
System.out.println("Father 非静态代码块(1)");
}
public int b = getNumber();
{
System.out.println("Father 非静态代码块(2)");
}
Father03(){
System.out.println("Father 无参数的构造方法");
}
private String info;
Father03(String info){ // 有参数的构造方法
this.info = info;
System.out.println("Father " + info);
}
public static int getNumber(){ // 静态方法 类方法
System.out.println("Father getNumber()");
return 1;
}
}
class Son03 extends Father03{
public int a = getNumber(); // 非静态变量
{
System.out.println("Son 非静态代码块(1)");
}
public int b = getNumber();
{
System.out.println("Son 非静态代码块(2)");
}
Son03(){
System.out.println("Son 无参数构造方法");
}
private String info;
Son03(String info){ // 有参数的构造方法
super(info); // 触发父类的有参数的方法
this.info = info;
System.out.println("Son " + info);
}
public static int getNumber(){
System.out.println("Son getNumber()");
return 1;
}
}
六。Test03
package day24;
public classTest03{
public static void main(String[] args) {
// 类初始化 实例对象初始化执行顺序
Son04 s1 = new Son04();
System.out.println("========================");
Son04 s2 = new Son04();
}
}
class Father04{
// 1.类的初始化 优先于 实例的初始化
// 2.类的初始化 只做一次 实例初始化 可以做多次
// 3.实例初始化的时候 都要进行执行
static { // 类初始的时候执行
System.out.println("Father static");
}
{ // 实例初始化的时候执行
System.out.println("Father no_static");
}
Father04(){
System.out.println("Father no_para");
}
}
class Son04 extends Father04{
static {
System.out.println("Son static");
}
{
System.out.println("Son no_static");
}
Son04(){
System.out.println("Son no_para");
}
}