JavaSE(上)-Day9
集合
- 因为数组是不可变的,我们在不确定一个容器长度的时候,应该选择一个长度可变的容器,此时引出了ArrayList
- ArrayList需要指定泛型,泛型不可以是基本数据类型,我们可以使用基本数据类型的包装类
- 在创建ArrayList对象的时候,JDK7之前两个泛型位置都需要填写泛型,JDK7之后,只需要填写前面位置的泛型,但后面也需要<>
- ArrayList的容器默认的容量为0,可以自动扩容
- ArrayList有便捷的方法,新增add(E)->boolean,修改set(index,E) ->oldE,删除remove(E)->boolean 或 remove(index)->E,查询get(index)->E
static
静态变量
1.用static修饰的成员变量就是静态变量
2.静态变量创建是随着类的字节码文件加载到元空间后,在堆内存中的静态区添加该静态变量进行存储,先设置默认初始值,然后显式赋值,然后方法里赋值,成员变量是随着对象的创建,在堆内存中开辟空间存储
3.静态变量是属于类的,可以被这个类所有的对象共享编辑或使用
4.一般通过类名.静态变量名调用
5.同一种对象共用的一个属性就可以定义成静态变量
静态方法
1.用static修饰的成员方法就是静态方法
2.静态方法用于Test类和工具类
3.JavaBean类指的是描述一类事物的类
4.Test类是用于测试其他类的类
5.工具类是帮我们做一些事情的类,不描述一类事物
6.工具类要求见名知其义
7.私有化构造方法,不可以定义工具类的对象,因为工具类的对象是无意义的
8.方法定义成静态的,方便调用
9.用类名.静态方法名(…),是从元空间中找到这个类的字节码文件,找到对应的静态方法名进栈运行
静态方法的注意事项
- 静态方法中是没有this关键字的,其实是因为成员方法中this作为第一个形参隐藏起来啦,给的值就是调用者的地址,而静态方法没有this
- 静态方法不用成员变量和成员方法,原因就是没有this关键字
- 成员方法既可以调用成员方法又可以调用静态方法,每个对象都可以调用类创建的静态区的静态变量
重新认识main方法
- public给出足够大的访问权限,便于JVM调用
- staticJVM不需要实例化,直接调用
- voidJVM不提供返回值
- main为JVM查询的方法入口名称,固定
- String[] args过去接收一些参数,现在由Scanner代替
继承
为什么需要继承?
- 当类与类之前有相同的属性和方法时,并且这些类又是同一大类,就可以使用继承
- 可以把子类中共同的属性和方法提取到父类中,提高代码的复用性
- 子类 extends 父类,可以让子类使用父类的属性和方法,子类只需要补充编写特有的属性和方法
- extends关键字是让两个类建立继承关系,满足语句:子类是父类。
继承注意事项
- Java是单继承,只能继承一个直接父类,支持多层继承,可以有多个间接父类
- Java中所有的类都直接或间接的继承Object类
- 子类只能访问父类中非私有的成员变量和成员方法(代码层面)
子类到底能继承父类哪些内容
- 子类不能继承父类的构造方法,父类的构造方法拷贝过来不符合要求 public/private 类名
- 子类可以继承父类的成员变量, 虽然可以继承父类的私有成员变量,但无法直接使用
- 子类可以继承父类非private且非static且非final的成员方法,它们属于虚方法,会传给子类方便直接调用,如果不是虚方法,就需要先找子类,再找父类,周而复始,没有则报错
继承中成员变量和成员方法的访问特点
- 就近原则 先局部找,然后在本类找,最后再父类中找,逐级向上,找不到报错
- 可以用this,super改变找的起点
重写
- 当父类的方法不满足子类的需求,可以重写该方法
- 重写要求方法名和形参列表完全相同
- 要求访问修饰符权限子类>=父类
- 要求返回值范围子类 <= 父类
- 重写写@Override注解,方便进行重写格式的校验
- 重写只可以重写虚方法,重写本质就是覆盖虚方法
构造方法的访问特点
- 父类的构造方法不能被子类继承
- 子类构造方法默认情况调用父类的无参构造方法super();,为了给父类属性完成初始化,父类的属性初始化完毕,子类才可以调用
- super(); this();必须出现在构造方法的第一行,两者互斥
- 想要调用有参的父类构造方法,需要显式的在子类构造方法的第一行调用。
this & super
- this指的是调用者的地址值,可以理解一个形参变量
- super代表父类的存储空间