类初始化学习笔记

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:52   1248   0

类:是描述某一类事物的特性。

对象:是对某类事物的具体描述,对象就是类的实例。

例:person (人)就是,王思聪就是这个"person"类的对象,他的身高、体重等就是对象的属性

类初始化(类),实例初始化(对象)过程

类名 对象名 = new 类名()

先执行静态代码块,且只执行一次。构造代码块每次调用构造方法都执行。

class Fu {
    public int i = 5;
    private int h = test();
    private static int j = method();

    static {
        System.out.println("父类静态代码块");
    }

    {
        System.out.println("父类构造代码块");
    }

    public Fu() {
        System.out.println("父类构造方法");
    }

    public int test(){
        System.out.println("父类非静态成员变量方法");
        return 1;
    }

    public static int method(){
        System.out.println("父类静态成员变量方法");
        return 1;
    }
}

class Zi extends Fu {
    public int i = 10;
    private int h = test();
    private static int j = method();

    static {
        System.out.println("子类静态代码块");
    }

    {
        System.out.println("子类构造代码块");
    }

    public Zi() {
        System.out.println("子类构造方法");
    }

    public int test(){
        System.out.println("子类非静态成员变量方法");
        return 1;
    }

    public static int method(){
        System.out.println("子类静态成员变量方法");
        return 1;
    }
    public void result(){
        int i = 30;
        System.out.println(i); //30
        System.out.println(this.i); //10
        System.out.println(super.i); //5
    }
}

public class ExtendsTest {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.result();
    }
}

执行结果

父类静态成员变量方法
父类静态代码块
子类静态成员变量方法
子类静态代码块
子类非静态成员变量方法
父类构造代码块
父类构造方法
子类非静态成员变量方法
子类构造代码块
子类构造方法
30
10
5

静态代码块 > 构造代码块 > 构造方法

子类初始化之前先会进行父类的初始化

静态成员变量方法和静态代码块从上到下的顺序依次执行

非静态成员变量方法和构造代码块从上到下的顺序依次执行,构造方法最后执行

非静态成员变量方法前面有一个默认的对象this,this表示正在创建的对象,这里是在创建Son对象,所以test()执行的是子类的非静态成员变量方法(方法的重写)

this:调用本类(当前类)。

super:调用父类。

方法的重写(Override)

用于继承关系中,方法名,返回值,参数列表必须相同

例:

class Father {
 
 public void show() {
  System.out.println("show Father");
 }

}

class Son extends Father {
 
 public void show() {
  System.out.println("show Son");
 }

}

哪些方法不可以被重写

被final修饰的方法

被static修饰的方法

被private修饰的方法

对象的多态性

1.向上转型(自动完成):父类 父类对象 = 子类实例

class Fu{
 public void show() {
   System.out.println("Fu");
 }
}
class Zi extends Fu{
 public void show() {
     System.out.println("Zi");
 }
}
public class Test {
       public static void main(String[] args) {
        Fu a=new Zi(); //向上转型
        a.show();
 
} 

2.向下转型(强制转换):子类 子类对象 =(子类) 父类实例;

class Fu{
 public void show() {
   System.out.println("Fu");
 }
}
class Zi extends Fu{
 public void show() {
     System.out.println("Zi");
 }
}
public class Test {
       public static void main(String[] args) {
       Fu1 a=new Zi1(); //向下转型
          Zi1 b=(Zi1) a;
          b.show();
} 

方法的重载(Overload)

方法名一致,方法的参数个数不同或参数类型不同,与返回值无关

例:

public class Test {   

public void add(int x){
    
 }
public int add(int y, int x){
    return ;
 }
}

方法的参数传递机制

public class Parameter {
     public static void main(String[] args) {
        Parameter P = new Parameter();
        // 实际参数为“王思”
        p.show("王思");
    }

    public void show(String name) {
        // 形式参数为 name
        System.out.print(name);
    }   
}

1.形参是基本数据类型(在栈里面开内存):值传递;不会影响到实际参数。

(byte、short、char、int、long、float、double、boolean)

public class Test2 {
    public static void main(String[] args) {
        Test2 t = new Test2();
        int x = 13;
        t.method(x);
        System.out.println("method调用完后的x: " + x); //13
    }
    private void method(int x){
        System.out.println("method中重新赋值之前的x: " + x); //13
        x = 20;
        System.out.println("method中重新赋值之后的x: " + x); //20
    }
}

2.实参是引用数据类型(在堆里面开内存 new):地址值传递;会影响到实际参数。

特殊类型:String,包装类(Byte、Short、Character、Integer、long、Float、Double、Boolean)

public class Test2 {
    public static void main(String[] args) {
        int[] a = new int []{1, 2, 4};
        method(a);
        System.out.println("调用完method方法之后:" + a[1]); //1
    }
    public static void method(int[] a){
        System.out.println("method内修改a[1]之前:" + a[1]); //15
        a[1] = 15;
        System.out.println("method内修改a[1]之后:" + a[1]); //15
    }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP