- Eclipse
- 数组Array
- 一维数组
- 二维数组
- 常见的数组算法练习
- Arrays常用工具类
- 常见异常
- 面向对象
- 类和对象
- 类的属性
- 类的方法
- retrun关键字
- 方法的注意点
- 方法的补充
- 匿名对象
- (补充)
- 计组
- 其他
按照使用说明进行安装配置即可,熟悉过程和常用快捷操作
属于引用数据类型 ,元素可以是任意数据类型
1.数组名
2.元素 (相同类型数据,按一定顺序排列)
3.索引 (index,下标,元素的编号)
4.长度 (元素的个数,一旦确定不能修改)
5.在内存中开辟一段连续的空间
6.分类 : ①按照维数 ②按照元素的类型
①声明和初始化
1.静态初始化, 初始化与元素赋值同时进行
int[] ids;
ids = new int[]{1000,1001,1002};// 元素之间是逗号
int[] ids1 ={1,2,3}; //类型推断
2.动态初始化,初始化与元素赋值分开进行
String[] names = new String[5];
3.动态、静态不能一起写,初始化后长度就确定。
②如何调用数组的指定位置的元素
通过索引的方式调用(从0开始,到names.length-1)
names[0] = “刘”;
names[1] = “廖”;
names[2] = “李”;
names[3] = “王”;
names[4] = “张”;
③如何获取数组的长度
names.length
④如何遍历数组
for(int i = 0;i < names.length; i++){
System.out.println(names[i]);}
⑤数组元素的默认初始化值
元素未赋值,整型默认值为0;浮点型默认值为0.0;char型默认值为0或’u0000’而不是‘0’;
boolean型默认值为false;String型默认值为null而不是‘null’;
⑥数组的内存解析
(补充)内存简化结构:
栈stack【局部变量】;
堆heap【new出来的结构:对象(非static属性),数组,……】
注意:区分 arr[1] 和new int[1] 中,前是索引,后是长度
数组的元素也是一个数组,从内存运行机制去理解
①声明和初始化【多维的全部数据类型在声明时就已确定(除了嵌套array)】
1.静态初始化, 初始化与元素赋值同时进行
int[][] arr1 = new int[][]{{1,2,3},{1,2},{1,2,3}};
2.动态初始化,初始化与元素赋值分开进行
int[][] arr2 = new int[3][2]; // 三行二列
int[][] arr3 = new int[3][];
3.动态、静态不能一起写,初始化后长度就确定。
②如何调用数组的指定位置的元素
通过索引的方式调用(从0开始,到arr.length-1)
System.out.println(arr1[0][1]);
arr3[0] = new int[3]; //必须先声明,否则会空指针异常
System.out.println(arr3[0][1]);
③如何获取数组的长度
names.length
System.out.println(arr1.length); //栈指向堆的第一层长度
System.out.println(arr1[1].length); //对于行(数组)的长度
④如何遍历数组
for(int i = 0;i < arr1.length;i++){
for(int j = 0;j < arr1[i].length;j++){
System.out.print(arr1[i][j]);
}
System.out.println();
}
⑤数组元素的默认初始化值
元素未赋值,外层元素arr[0] , 内层元素arr[0][0]
(1)初始化时,内层数组已指定 String[][] arr3 = new String[3][2];
外层:地址值 内层:与一维数组对应
整型默认值为0;浮点型默认值为0.0;char型默认值为0或’u0000’而不是‘0’;
boolean型默认值为false;String型默认值为null而不是‘null’;
(2) 初始化时,内层数组未指定 String[][] arr3 = new String[3][];
外层:null (内层是数组,引用数据类型) 内层:空指针异常
注:引用数据类型:地址值 或 null
⑥数组的内存解析
1.数组元素的赋值(理解并熟悉杨辉三角、回形数)
2.求数值型数值元素的最值、平均数、和等 (遍历过程中对元素进行操作)
3.1数组的复制
arr2 = arr1只是将地址值赋值,都指向内存堆中的唯一一个数组;
复制需要重新new一个,在遍历的过程中一一复制元素
3.2反转(临时变量,[i]与[arr.length -1 -i]交换; i
3.3查找
①线性查找,按顺序查找
②二分法查找 【前提是数组有序,熟悉查找过程即可,可以调用】
4.排序算法
①冒泡排序【比较相邻两个元素,逆序则交换位置。熟悉实现代码】平均时间复杂度 n^2
②快速排序 【low/high指针,从两头开始递进扫描,实现[小]+[标准元素]+[大]】 n*log2 n
③堆排序、归并排序
④其他
定义在java.util包下
1.两个数组是否相等
boolean isEquals = Arrays.equals(arr1, arr2);
2.输出数组信息
System.out.println(Arrays.toString(arr1)); //把整体转成String输出
String[] arr3 = new String[]{“a”,“b”,“c”};
System.out.println(arr3[0].toString()); //String类型的元素单独输出
3.填充
Arrays.fill(arr1, “haha”);
4.排序(底层Quicksort)
Arrays.sort(arr2);
5.查找(二分法)
int index = Arrays.binarySearch(arr, 243);
注意:先排序,返回index正值为目标索引,负值为无目标值。
1.角标越界异常 ArrayIndexOutOfBoundsException [0, arr.length -1]
2.空指针异常 NullPointerException
① arr = null //赋地址值
② int[][] arr1 = new int[3][]; //arr1[0][0]空指针
③ String[] arr2 = new String[]{“1”,“2”,“3”}
String[0] = null;
System.out.println(arr2[0].toString());
1.Java的类及类成员 :属性、方法、构造器;代码块,内部类
2.面向对象的三大特征:封装性,继承性,多态性
3.其他关键字
面向过程Procedure Oriented:功能行为,以函数为最小单位,考虑怎么做
面向对象Object Oriented:把功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
类:对一类事物的抽象/概念的定义
对象:实际存在的每一个个体,实例
程序设计的重点:类的设计,即类的成员的设计
对象是类的实例化,new
1.类的设计
public class 类名{
属性(field 成员变量)
方法(method 成员方法 函数)
}
2.创建类的对象(类的实例化)
person p1 = new person(); //其中person是类class,p1是新的对象
3.调用对象的结构:属性及方法
对象.属性 //p1.name = “tim”; 对象.方法 // p1.eat();
创建一个类的多个对象,每个对象的类的属性独立(非static)
//区分 new一个对象 or 只是声明一个对象(地址赋值)
对象的内存解析
类的属性属性(成员变量)和局部变量
局部变量:方法内、方法形参、构造器内、构造器形参、代码块内
1.相同:定义变量的格式一样,先声明后使用,变量都有其对应的作用域
2.不同:
2.1在类中声明的位置不同
属性:直接定义在类的一对{}内
局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内的变量
2.2 权限修饰符的不同
属性:可以在声明属性时,指明其权限,使用权限修饰符(常有private,public,缺省,protected)
局部变量: 不可以使用权限修饰符
2.3 默认初始化值
属性:根据其类型有默认初始化值,与数组时一样
局部变量:没有默认初始化值,调用前一定要显式赋值 (形参可以调用时再赋值)
2.4 在内存中加载的位置不同
属性:加载在堆中(非static) 局部变量:加载在栈空间
//注: 先new对象,调用属性结构: .属性
类的方法描述类具有的功能
①分类:是否有形参(); 是否有返回值(void)
②方法的声明:【修饰符暂用public】(还有static,final,abstract等关键字)
权限修饰符 返回值类型 方法名(形参列表){
方法体
}
//注: 先new对象,调用方法结构: .方法名(形参)
1.权限修饰符(private,public,缺省,protected)暂略,现用public
2.返回值类型 有 or 无
2.1 如果方法有返回值,必须在方法中声明返回值的类型,同时方法中要用return关键字来返回指定的数据
2.2 如果无返回值,声明时用void,不用return,或"retrun;"结束方法
2.3 怎么选择?看情况
3.方法名【标识符】
4.形参列表 格式:(数据类型1 形参1,数据类型2 形参2,数据类型3 形参3,……)【可以无】
5.方法体
1.使用范围:方法体内
2.作用:①结束方法 ②返回值: return 数据;
1.方法体内可以调用当前类的属性或方法 【特殊情况:递归方法,方法A调用方法A】
2.方法内不能定义新的方法
3. 同一个类的不同对象之间的关系,p1和p2各自new,互不影响
1.方法的重载
在同一个类中,可以定义同名的多个方法,只要它们的参数个数或参数类型不同
public void sort(int[] a);
public void sort(String[] b);
在通过对象调用方法时,如何确定一个指定的方法:
①方法名 ②形参列表
2.可变个数形参的方法
public void show(String … strs){}
test.show(“Hello”,“World”); //传入的形参个数可以是 0,1,2,多个
可变形参的方法与本类中同名不同形参的方法构成重载
与public void show(String[] strs){}不可构成重载,(形参是数组,需要new数组)
可变形参需要放在形参列表的最后,可变形参在当前方法中最多只能声明一个
3.方法参数的值传递机制
形参:方法定义时()内的参数; 实参:方法调用时,实际传递给形参的数据
①实参是基本数据类型,实参赋给形参的是实参真实存储的数据值【对形参的操作不影响实参的数据值】
②实参是引用数据类型,实参赋给形参的是实参存储数据的地址值【指向堆空间的同一对象,地址值含数据的类型,操作有影响】
4.方法递归Recursion
一个方法内调用它自身
例:factorial;QiuckSort;fibonacci.
创建的对象没有显式地赋给一个变量名,只能调用一次,可以作为形参在方法内重复使用
new person().name =“tom”;
new person().showName; //null 是新new的对象
应用场景:
PhoneMall mall = new PhoneMall();
mall.show(new Phone());
class Phone(){
public void show(Phone ph){
ph.price();
}
}
变量的赋值:
基本数据类型:数据值 引用数据类型: null或地址值
文档注释 /**
源文件编译后生成字节码文件,用JVM中的加载器和解释器对字节码文件进行运行解析,将对应的类加载到内存中;
虚拟机栈,局部变量存储在栈空间中;new出来的结构(数组,对象)、属性在堆空间中;
跟着课程大致过一遍,了解基础。
第一章 计算机系统概论
第二章 计算机的发展及应用
第三章 系统总线
学习方向:大数据
学习路线:
①【开发】JAVA->MySQL->JDBC->(框架等)
②【基础】计组->操作系统->计网->数据结构与算法
③【课题】西瓜书->



