5.5java学习笔记

数组的定义和使用

什么是数组

所谓数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。

在js中,数组没有数据类型限制,并且可以随意扩容。Java中的数组 就是 将相同数据类型的数据 进行存储的数据格式。并且存储到数组中的数据都会自动生成一个编号,称之为索引值或者下标。然后数组是通过操作索引值对数据进行存取。索引值从0开始。并且java中的数组是定容,统一数据类型的。

java数组的特点

java数组是一种引用数据类型

java数组中的数据类型必须统一

java数组是定长的(长度一旦确定就不能变化)

数组的重新赋值,只能通过标准格式,不能使用简化格式赋值

初始化数组时如果没有直接赋值,那么数组中元素的默认值

整数: 0 浮点数: 0.0 字符:'\u0000' 布尔型:false 引用类型:null

因为数组是定长的,如果想扩容只能创建一个新的数组。Arrays.copyOf(原始数组,长度) (重要,这个方法是ArrayList集合实现扩容的核心方法)

// 定义有容量的数组
数据类型[] 数组变量 = new 数据类型[数组容量];

// 定义有初始化数据的数组.后面的中括号中不能写长度
数据类型[] 数组变量 = new 数据类型[]{数据1,数据2...};

// 直接赋值创建(静态创建),定义和赋值必须写在一起
数据类型[] 数组变量 = {数据1,数据2...};

// 创建数组
数据类型[] 数组变量 = new 数据类型[数组容量];

// 通过数组变量+下标 为数组元素赋值。数组的最大下标只能取到"数组容量-1"
数组变量[下标1] = 数据1;
数组变量[下标2] = 数据2;...
数组变量[数组容量-1] = 数据n;

// 通过数组变量+下标 访问数组元素
System.out.println(数组变量[下标])

 

数组的遍历

for+索引

for each 遍历

Arrays数组工具类

// 定义数组
int[] nums = {20,30,40,12,17};

// 排序
Arrays.sort(nums);
for (int n : nums){    
    System.out.println(n);}

// 字符串
String res =  Arrays.toString(nums);
System.out.println(res);

// 扩展数组(重点内容,是后面ArrayList集合扩容的核心方法)
int[] my = Arrays.copyOf(nums,20);
System.out.println(Arrays.toString(my));

 对象数组及二维数组

public static void main(String[] args) {
        Student[] students = new Student[3];
        students[0] = new Student("张三",20);
        students[1] = new Student("李四",21);
        students[2] = new Student("王五",22);
        for (Student s : students) {
            s.introduce();
        }
    }
public static void main(String[] args) {
        String[][] namesAry = {
                {"张三","李四","王五"},
                {"赵六","陈七","钱二"}
        };
//        for (int i = 0; i < namesAry.length; i++) {
//            for (int j = 0; j < namesAry[i].length; j++) {
//                System.out.print(namesAry[i][j] + "\t");
//            }
//            System.out.println();
//        }
        for (String[] s: namesAry) {
            for (String ss : s) {
                System.out.print(ss + "\t");
            }
            System.out.println();
        }
    }

什么是封装

封装,即隐藏对象属性和实现细节,仅对外公开接口(方法/函数),控制在程序中属性的读和修改访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中属性数据和函数都是类的成员。

​ 封装的目的:是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

广义来说:一切公共代码的抽取都可以叫封装。

​ 一般体现在公共方法的封装。工具类。

狭义来说:隐藏对象的属性和实现细节。

将属性私有化 ,使用private关键字修饰。

为使用private关键字修饰的属性添加 getter和setter方法。通过get和set方法来操作属性。

在setter方法中,添加数据的逻辑校验。

封装的作用

保护属性的有效性

什么是继承

 

继承面向对象软件技术当中的一个概念,与多态封装共称为面向对象的三个基本特征。继承可以使得子类具有父类的非私有属性方法或者可以重新定义、追加属性和方法等。

继承(英语:inheritance)。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

如果某类B“继承”另某类A,就把这个B称为“A的子类派生类(subclass)”,而把类A称为“B的父类”也可以称为“A是B的超类基类(superclass)”。

如何判断两个类之间是否有继承关系?

看这两个类之间是否存在is-a(是一个)关系:

学生是一个人类,老师是一个人类,苹果是一个水果

为什么需要继承

提升代码的可重用性

  • 子类通过继承可以得到父类有的内容

能够扩展功能

  • 通过继承,子类可以扩展父类已有的功能

方便维护

  • 多个子类都继承了父类的某个功能,当功能需要修改时,只要修改父类的这个功能即可

使用面向对象思想编程的时候,需要考虑的两个方面:

​ 1.功能实现了没有?

​ 2.后期维护方便吗?

java语言是单继承的,java类只能由一个父类。

方法重写 @Override注解

什么是方法重写

​ 在Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖

方法重写和方法重载的区别:

​重载(overload):发生在同一个类中 , 方法名相同,参数列表不同,不考虑返回值。

重写(overrides):发生在父子类中,子类继承父类的方法,方法名相同,参数也相同,但是实现方法体不同。

  • 重写的注意事项
  • 必须保证父子类中重写的方法,方法名相同,参数列表相同。
  • 子类方法的返回值必须小于或等于父类方法的返回值范围。
  • 子类方法的权限必须要大于等于父类方法的权限(不包括 private)
  • 子类重写方法异常声明必须是父类的异常或子级异常
  • 私有的不能被继承

toString()方法

  • 任何类都是Object类的直接子类或者间接子类,在Object类中有一个toString()方法。当输出一个对象时,先调用当前类的toString()方法,如果当前类没有toString() ,就去找当前类的父类,看是否有toString()方法,如果过父类也没有,就去找Object类中的toString()方法并运行。

super关键字(父类对象),this关键字(当前类对象)

作用:如果子类既想使用自己的方法,又想使用父类的成员变量和成员方法,需要通过super关键字。

super 关键字的用法:

  1. 在子类的成员方法中访问父类的成员变量和成员方法。
  1. 在子类的构造方法中访问父类的构造方法。

继承中构造方法的特点(父子类)

特点

  • 构造方法不能被继承(构造方法是一个类独有的方法)
  • 创建子类对象一定是先调用父类构造,再调用子类构造。(并且只有子类构造才能调用父类构造)。
  • 子类构造可以通过super关键字调用父类有参构造 无参super() 有参super(参数列表) 。
  • super父类构造调用,必须是子类构造中的第一行语句。(并且一个子类构造,只能调用一次super())。必须先有父再有子。

继承的特点: java中类与类之间是单继承的。但是可以多级继承。一个父类可以有多个子类。

Object类

Object是所有类的父类,任何类都默认继承Object

理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类。由于所有的类都继承在Object类,因此省略了extends Object关键字。

该类中主要有以下方法: toString(),getClass(),equals(),clone(),finalize(), 其中toString(),getClass(),equals()是其中最重要的方法。

注意:

​ Object类中的getClass(),notify(),notifyAll(),wait()等方法被定义为final类型,因此不能重写。

equals()方法 在比较字符串时 比较的是俩个字符串的值。但是实际上equals方法比较的是地址值。

为什么String就可以用equals()比较值呢

因为String类中重写了equals()方法,所以可以比较值。

什么样的类可以构成继承关系?

如果两个类之间符合is-a(是一个)描述,

则这两个就具有继承关系

苹果是一个水果: 苹果类 继承 水果类

宝马车是一个车:宝马车 继承 车类

张三是一个人  : 张三  继承 人类

小结

继承关键字:extends

单继承,一个类只能有一个直接父类

子类可以继承父类:public protected 同包默认的属性和方法,不能继承private私有方法

子类可以书写自己的属性和方法

子类可以重写父类的方法

在子类中可以通过super调用父类的方法和属性。super.方法名/属性名

无父无子

a. 父类构造不能继承,但是必须调用

b. new子类的时候,子类构造的第一行必须调用父类的构造方法

c.如果子类不写super(),系统默认调用父类无参构造

d.可以通过super(参数)调用有参,并且必须第一行,并且只能有一个super()。

如果通过子类调用方法,优先调用自己的方法。子类重写方法之后调用自己的方法,如果子类没有重写方法则使用父类的方法。

先子类---》再父类---》再父类--》。。。。--》Object

所有类都直接或者间接的继承了Object类。Object是所有类的基类,超类。

继承的作用:

A. 减少代码冗余

B. 书写一个父类,子类可以对父类进行扩展

C. 子类可以对父类重新定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值