六、数组
1. 概念:
一组连续的存储空间,存储多个相同数据类型的值。
2. 数组的创建:
数据类型[] 数组名 = new 数据类型[长度]; // int [] a = new int[5];
3. 数组的组成概述:
I. 数组中的每个“格子”称为“数组的元素”。
II. 对元素的访问分为:“赋值”、“取值”。
III. 访问元素时,需要通过“下标”(从0开始,依次+1,自动生成)
IV. 访问的语法:数组名[下标]; //存:a[0] = 10; 取:a[0]
V. 下标的范围:0 ~ 数组的长度-1 ,如果不在有效下标内,产生java.util.ArrayIndexOutOfBoundsException:错误下标
语法层面:硬性要求
一套:《Java语言规范》:规定了什么,就能用什么。没有规定的,绝不能用。
一套:《Java虚拟机规范》:规定了怎么用,就支持怎么用,没有规定的,随便用。(支持自我创造)
作业:
Question3:第6题,函数的题
Question4:第1、2、3、4题
4. 数组的“扩容”:
I. 创建数组时,必须显示指定长度,并在创建之后不可更改长度。
II. 扩容的思路:
1). 创建长度大于原数组的新数组。
2). 将原数组中的数据依次复制到新数组当中。
III. 数组的复制:
1). 循环将原数组中的所有元素数据逐一赋值给新数组。
2). System.arraycopy(原数组 , 原数组起始位置 , 新数组 , 新数组起始位置 , 长度);
3). 数组类型的变量 = java.util.Arrays.copyOf(原数组 , 新长度); //根据长度创建新数组,并将原数组中的元素赋值到新数组中
5. 地址的替换:
I. 基本数据类型的变量存储的是值
II. 引用数据类型的变量存储的是地址
III. nums = newNums; //将新数组的地址,赋值给nums变量,进而在后续操作nums时,则操作长度更大的新数组。
6. 数组类型的参数:
I. 基本数据类型的传递,是“值”的传递,一方改变,不会影响另一方
II. 引用数据类型的传递,是“地址”的传递,一方改变,会影响另一方
7. 可变长参数:
I. 概念:可接收多个同类型实参,个数不限,使用方式与数组相同。
II. 语法:数据类型... 形参名 //必须定义在形参列表的最后,且只能有一个,支持0~N个参数。
int... = int[] String... = String[] char... = char[] double... = double[]
method(xxx , xxx[] , xxx... ); //可变长参数,是对数组的一种便利写法的补充(80%的场景用数组,20%的场景用可变长参数)
8. 排序:
I. 冒泡排序:
1). 相邻的两个值比较大小,互换位置。
2). 记忆:外层 length - 1 ;内层 length -1 - i
补充:嵌套循环约定俗称的变量命名,一重循环 i;二重循环j;三重循环k;
II. 选择排序:
1). 固定值与其他值比较大小,互换位置。
2). 记忆:外层 length - 1 ;同时外层i作为固定值,内层的j = i+1作为其他值的起始
9. 二维数组:
I. 概念:一维数组中的一维数组,数组中的元素,还是数组。
II. 语法:
III. 注意:高维数组中的每一个元素,保存了低维数组的地址。访问array[0]等价于在访问0x0000A111("二维数组的内存分配图")
作业:课后习题,杨辉三角
Eclipse工具的基本使用:
修改编辑字体:windows -> Preferences -> General -> Appearance -> Colors And Fonts -> Basic -> Text Font
修改输出字体:windows -> Preferences -> General -> Appearance -> Colors And Fonts -> Debug ->
重置窗口布局:windows -> Perspective -> Reset Perspective
七、面向对象:
1. 程序的概念:
I. 程序是为了模拟现实世界、解决现实问题而使用计算机语言编写的指令集合。
2. 现实世界组成:
I. 程序员眼中,世界是由无数个对象组成的。
3. 什么是对象:
I. 一切客观存在的事物都是对象,万物皆对象。
II. 初期:看得见、摸得着、并真实存在,都是对象。
4. 对象有什么:
I. 任何对象,一定有自己的特征和行为。
5. 特征和行为:
I. 特征:称为属性,一般为名词,代表对象都有什么。
II. 行为:称为方法,一般为动词,代表对象能做什么。
6. 分析一个对象都有什么(属性)
颜色 - 黑色
品牌 - apple
价格 - 5000
型号 - 11pro
重量
尺寸
材质
7. 分析一个对象能做什么(方法)
打电话(拨号 -> 发射)
发短信
拍照
上网(app聊天、游戏、听音乐)
8. 程序中的对象:
I. 程序如何模拟现实世界?
1). 现实世界中,都是对象,程序中也应有对象。
2). 程序当中必须具有和现实中相同的对象,用以模拟。
3). 使用程序中的对象,代表现实中的对象,并执行操作,解决现实问题。
II. 现实生活中的对象从哪里来?
手机 -> 工厂 -> 图纸(模板)
III. 现实与程序:
1). 现实中的对象,来自于模板,通过模板造出来的实体,即是现实的对象。
2). 程序中的对象,来自于模板(“类”),通过类造出来的实体,即是程序中的对象。
2月14日-- 17:00职业素养课
2月15日-- 14:30 ~ 16:00 扩展课堂
9. 定义类、创建对象
10. 类与对象的关系:
I. 类:定义了对象应具有的特征和行为,类是对象的模板。
II. 对象:拥有多个特征和行为的实体,对象是类的实例。
PS:
属性、实例变量、成员变量,三者等价
实例方法、成员方法,二者等价
reference - 引用、句柄、指针
11. Eclipse导入外部项目:
File -> Import -> General -> Existing Projects into Workspace -> Browse -> 项目的根文件夹 -> Finish
格式化代码:Ctrl + Shift + F
作业:
I. 复盘一下面向对象之前的相关内容
II. 类、对象相关的概念、逻辑
III. 如何定义类、如何创建对象、如何访问属性、如何调用方法
12. 方法重载(Overload):
I. 在一个类中定义多个相同名称的方法。
II. 要求:
1). 方法名称相同
2). 参数列表不同
3). 与访问修饰符、返回值无关
III. 好处:
1). 屏蔽用户的使用差异,方便。
13. 构造方法(Constructor):
I. 概念:类中的特殊方法,主要用于创建对象。
II. 特点:
1). 名称与类名完全相同(包括大小写)。
2). 没有返回值类型。
3). 创建对象时(new对象时),触发构造方法的调用,不可通过句点的形式手工调用。
III. 注意:如果没有在类中显示定义过构造方法,则编译器默认提供无参构造方法。
IV. 注意:如果已经手动添加过有参构造方法,则无参构造方法不再默认提供,可结合需求自行添加。(建议,必须手动添加无参构造方法)
14. this关键字:
I. this代表“当前实例”,即是模板中的当前对象,模板服务与哪个对象,this就指向哪个对象。
II. this第一种用法:调用本类中的实例属性、实例方法。例如:this.name、this.run() ,
III. this第二种用法:调用本类中的其他构造方法。例如:this()、this(实参)。注意:必须在构造方法的首行。
IV. 默认来讲,实例属性和方法前的this.隐式存在