一.方法设计

1.方法引入

循环操作(while,do while,for循环): 循环操作解决的是代码重复的问题,重复做某一件事情;

此时得重复: 有规律的,语句格式是相同的,有规律的;

注意: 循环操作不能解决针对于某一种功能的重复操作,此时得使用方法;

开发遵循的原则之一:

  • DRY原则: Don’t Repeat Yourself(不要重复你自己的代码);
  • 原因: 重复意味着维护成本的增大;

2.方法的定义和调用

方法定义,方法(Method),函数(function),其实就指一个特定的功能操作:

程序中完成独立功能,可重复使用的一段代码的集合;

[修饰符] 返回值的类型 方法名称([形参,.......]){

方法体

[return 值]

}

  • 1
  • 2
  • 3
  • 4

注意:

  • 1.方法必须要调用才能生效
  • 2.如果方法使用了static修饰,此时我们使用方法所在的 类的名称.方法名(参数);
  • 3.如果方法没有使用static修饰,此时我们得使用方法所在的类的对象来调用;

// main方法专门由JVM来负责调用,我们只管启动JVM

public static void main(String[] args){

// TODO

}

  • 1
  • 2
  • 3
  • 4

方法定义的位置:

  • 1.在类中定义,在Java中最小的程序单元是类;
  • 2.方法定义在其他方法以外,方法和方法是兄弟关系;
  • 3.方法定义的先后顺序不影响;

示例:

JVM内存划分,人为的根据不同的内存空间的存储特点以及存储的数据:

  • 程序计数器: 当前线程所执行的字节码的行号指示器;
  • 本地方法栈: 为虚拟机使用的native方法服务;
  • Java虚拟机栈: 描述Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息;
  • Java堆: 被所有线程共享的一块内存区域,在虚拟机启动时创建;所有的对象实例以及数组都要在堆上分配(使用new关键字,就表示在堆中开辟一块新的存储空间);
  • 方法区: 线程共享的内存区域,存储已被虚拟机加载的类信息,常量,静态变量即时编译器编译后的代码数据等(这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载);

Java虚拟机栈

每一个方法,创建一个栈帧,栈帧存放了当前方法的数据信息(局部变量),当方法调用完毕,该方法的栈帧就被销毁了;

堆:

new在堆中开辟新空间

栈:

每一个方法存在栈帧

2.简述GC

GC:垃圾回收器

Java的自动垃圾回收机制,当JVM发觉内存资源紧张的时候,就是自动地去清理无用对象(没有被引用到的对象)所占用的内存空间;

注意:

Java的垃圾回收器,自动回收的是堆空间的内存,而栈空间内存会随着该方法的执行结束,自动释放该方法的栈帧内存;

三.一维数组

1.引出数组和数组定义

数组是在程序设计中,为了方便处理,把具有相同类型的若干变量按有序的形式组织起来的一种数据形式;这些按一定顺序排列的同类型数据的集合称为数组;而数组中的每一个数据称为数据元素;数组中的元素以索引来表示其存放的位置,索引从0开始,步长是1;

基本数据类型: byte,short,int,long,char,float,double,boolean

引用数据类型: 类,接口,数组

变量的定义:

数据类型 变量名; 如: int age

  • 1

数组的定义:

方式1: 数组元素的类型[] 数组名; int[] ages; 推荐的;可以把int看成是一种数据类型,int类型的数组类型;

方式2: 数组元素的类型 数组名[]; int ages[];

注意:

数组必须先初始化,才能使用,因为初始化表示在内存中分配空间;

2.数组初始化

Java中数组必先初始化后才能使用,所谓初始化就是给数组元素分配内存,并为每个元素赋初始值;

初始化数组的两种方式:

  • 静态初始化
  • 动态初始化

无论,以哪种方式初始化数组,一旦初始化完成,数组的长度就固定了,不能改变;除非重新初始化;也就是说数组是定长的;

数组是定长的: 数组一旦初始化成功,数组中的元素个数就已经固定了,不能更改,如果需要更改,只能重新做初始化;

1).静态初始化和内存分析

特点: 有我们自己来为每一个数组元素设置初始化值,而数组的长度有系统决定;

语法:

数组元素类型[] 数组名 = new 数组元素类型[]{元素1,元素2,元素3,......};

  • 1

示例:

int[] nums = new int[]{1,3,4,5};

  • 1

java 数组常用方法(Java基础方法和数组)(1)

2).动态初始化和内存分析

特点: 有我们来设置数组的元素个数(数组的长度),而每个数组元素的初始值由系统决定;

语法:

数组元素类型[] 数组名 = new 数组元素类型[length]

  • 1

示例:

int[] ages = new int[100];

  • 1

java 数组常用方法(Java基础方法和数组)(2)

1>.不同数据类型的初始值

类型初始值byte,short,int0long0Lfloat0.0Fdouble0.0Dbooleanfalsechar‘\u0000’(表示空)引用数据类型null

3.数组基本操作

1).获取/设置/遍历元素

数组的基本操作:

获取元素: 元素类型 变量= 数组名[index];

设置元素: 数组名[index] = 值;

遍历数组元素: 建议使用for循环,事先知道循环的次数;

数组的长度: int len = 数组名.length; length是属性,不是方法;

索引范围: 从0开始,逐一递增: [0,数组名.length - 1];

示例:

for(int index = 0;index < num.length;index ){

System.out.println(num[index]);

}

  • 1
  • 2
  • 3

2).操作数组常见异常

NullPointerException: 空指针异常(空引用);

当数组还未初始化,就是接操作数据;

ArrayIndexOutOfBoundsException: 数组的索引越界异常;

超出数组索引范围之外取值;

3).获取数组最大最小元素

class ArrayOptrateDemo{

// 获取数组最大元素

static int getMax(int[] nums){

// 假设第一个元素是最大值

int max = nums[0];

for(int index = 1;index < nums.length;index ){

if(nums[index] > max){

max = nums[index];

}

}

return max;

}

// 获取数组最小元素

static int getMin(int[] nums){

// 假设第一个元素是最小值

int min = nums[0];

for(int index = 1;index < nums.length;index ){

if(nums[index] < min){

min = nums[index];

}

}

return min;

}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

4).打印数组元素

// 打印数组元素

static void printArray(String[] arr){

if(arr == null){

System.out.println(null);

}

String ret = "[";

for(int index = 0;index < arr.length;index ){

ret = ret arr[index];

// 如果当前index不是最后一个索引,则拼接", "

if(index != arr.length -1){

ret = ret ", ";

}

}

ret = ret "]";

System.out.println(ret);

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

5).逆序排列数组元素

// 逆序排列数组元素

static String[] reverse(String[] oldArr){

// 创建一个新的数组,存储颠倒之后的元素

String[] newArray = new String[oldArr.length];

for(int index = oldArr.length -1;index >= 0;index --){

newArray[oldArr.length -1 - index] = oldArr[index];

}

return newArray;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

6).元素出现索引(第一次/最后一次)

// 元素出现索引第一次

static int indexOf(int[] arr,int key){

for(int index = 0;index < arr.length;index ){

if(arr[index] == key){

return index;

}

}

return -1;

}

// 元素出现索引最后一次

static int lastindexOf(int[] arr,int key){

for(int index = arr.length -1;index >= 0;index --){

if(arr[index] == key){

return index;

}

}

return -1;

}

,