七天冲刺计划(4/7)

我总是临时  抱佛脚  临时抱佛脚!

干啥都临时  抱佛脚  临时抱佛脚!

🥹🥹🥹

———————————————————————————————————————————

一、基础

继承,Arrays集合类,String字符串,super语法,方法重写,多态(方法多态、对象多态),equals

二、进阶

static,继承的进阶,多态进阶,包和final,接口,内部类

三、常用api学习

Math,System,Runtime,Object,BigInteger,BigDecima

四、算法

二分,哈希查找,分块,冒泡排序,选择排序,递归算法,快速排序

———————————————————————————————————————————

一、继承

/*
    extends继承:
    1.使用方法例如:public class student extends Person{}
    2.java只支持单继承,不支持多继承(只能有一个父类),支持多层继承(子类的父类可以继承于父类的父类,这样递推)
    3.java中有个最大父类,Object类,所有类直接或间接继承于Object

    一、子类可继承的内容:
        构造方法  完全不继承
        成员变量  可完全继承
        成员方法  可继承非私有  不可继承private
        (1)构造方法调用:
           ·可以认为extends父类是将父类的构造方法直接搬入子类中,其方法名仍旧是父类的名,若带参构造便会体现问题
        (2)成员变量的使用:
           ·非私有可以直接使用,private不能直接使用,要通过get&set使用
           ·从内存角度,子类在new创建后,继承父类,一同进入堆中,且用同一个地址标记。若以成员变量名直
            接调用赋值的形式给private变量赋值,由于被private保护,变量只能被父类本体直接调用修改,所以会报错
            所以建议用get&set调用
        (3)成员方法的使用:
           ·首先明白,jvm会将最大父类(除了Object)的常用方法找到并填写进一个虚方法表中,并传承给子类,代代相传
           ··虚方法表中,所谓常用方法,就是非private,非static,非final类方法
*/
  二、java内存工具(这边配合代码学习)
       (1)
       ·打开下面idea的terminal,输入jps,获取当前运行的类的id
       ·输入内存分析工具jhsdb hsdb,打开
       ·File->Atatch to xxxxx的,输入当前运行类的id,打开进程
       ·然后打开Tools->Memory Viewer,输入获取到的16进制地址,下面这个代码有误导致不能获得16进制地址
       ·然后就可以查询到地址对应的内容了
           ··通过分析可以知道,其实private也被继承下来了
       (2)
       ·在刚刚的HotSpotDeBug中Tools打开inspector,查看自解码文件中类的信息
       ·将刚刚在memory viewer中查询到的类的具体内容的16进制码直接粘贴到inspector中
       ·删掉前八位,并在最前面补一个8,可查询其c++形式的自解码文件
       ·可查询到super父类,vtable虚方法表,_java_fields_count成员变量数量等信息
import java.io.IOException;
import java.util.Scanner;
public class MainDraft {
    public static void main(String[] args) throws IOException{
        Zi z = new Zi();
        System.out.println(z);//打印z的地址

        Scanner sc = new Scanner(System.in);
        sc.next();
    }
}
class Fu {
    private int a = 0x111;
    int b = 0x222;
    public void fushow1(){
        System.out.println("public  Fushow");
    }
    private void fushow2(){
        System.out.println("private  Fushow");
    }
}
class Zi extends Fu{
    int c =0x333;
    public void zishow(){
        System.out.println("public  Zishow");
    }
}

三、继承的进阶及细节

/*
    继承进阶:
    一、语法特点
        (1)子类的成员变量的访问特点
           ·与往常相同,若无this关键字,则采用就近原则
           ·有this关键字,则调用调用者的成员变量(即本类)
           ·有super关键字(如:super.name),则直接调用父类的成员变量
        (2)子类的成员方法的访问特点
           ·与往常相同,仍采用就近原则,先局部,再找本类,再找父类
           ·this与super关键字仍适用
           ·当子类与父类有同名方法时,可以用方法重写
           ··用this调用子类方法,用super调用父类方法,称之为方法的重写
           ··须用@Override重写注解标注,注解,用来给程序员和虚拟机检查用的,在每个重写前加上注解
           ··重写的原理是子类覆盖父类继承下来的虚方法表中同名方法
           ··重写注意事项:
              a.必须与父类的构造完全一致,访问权限必须大于等于父类(空着<protected<public)
              b.私有方法不能重写,因私有方法不能被虚方法表继承,static同理
        (3)子类的构造方法的访问特点
           ·父类中的构造方法完全不继承
           ·子类的所有构造方法默认先访问父类的空参构造,再执行自己
           ·子类的构造方法第一行语句默认是super();。不写虚拟机默认存在,且必在第一行
           ·若调用父类的带参构造,必用手动super调用
*/
  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值