您的位置:首页 > 数码常识数码常识
java数组基础知识(JAVA数组的方法)
2025-05-10人已围观
java数组基础知识(JAVA数组的方法)
一.方法设计
JAVA数组的方法
1.方法引入
循环操作(while,do while,for循环): 循环操作解决的是代码重复的问题,重复做某一件事情;
此时得重复: 有规律的,语句格式是相同的,有规律的;
注意: 循环操作不能解决针对于某一种功能的重复操作,此时得使用方法;
开发遵循的原则之一:
DRY原则: Don’t Repeat Yourself(不要重复你自己的代码);原因: 重复意味着维护成本的增大;
2.方法的定义和调用
方法定义,方法(Method),函数(function),其实就指一个特定的功能操作:
程序中完成独立功能,可重复使用的一段代码的集合;
[修饰符] 返回值的类型 方法名称([形参,.......]){
方法体
[return 值]
}
1234
注意:
1.方法必须要调用才能生效2.如果方法使用了static修饰,此时我们使用方法所在的 类的名称.方法名(参数);3.如果方法没有使用static修饰,此时我们得使用方法所在的类的对象来调用;
// main方法专门由JVM来负责调用,我们只管启动JVM
public static void main(String[] args){
// TODO
}
1234
方法定义的位置:
1.在类中定义,在java中最小的程序单元是类;2.方法定义在其他方法以外,方法和方法是兄弟关系;3.方法定义的先后顺序不影响;
示例:
public class MethodDemo{
static void doWork(){
System.out.println("重复的功能代码");
}
public static void main(String[] args){
MethodDemo.doWork();//调用方法
}
}
12345678
3.方法中的术语
方法的定义格式:
[修饰符] 返回值类型 方法名称([形参1,形参2,...]){
方法体;
[如果方法需要给调用者一个返回结果,此时使用 [return 值]; ];
}
1234
方法中的术语:
修饰符: public,static等,static修饰符的方法属于类,直接使用类名调用即可,现在都用static修饰;返回值类型 方法其实是在完成一个功能,该功能操作完毕之后,是否需要给调用者返回一个结果;如果不需要给调用者返回结果,此时使用关键字void来声明,无返回的意思;方法名称: 遵循标识符的规范,使用动词表示,首字母小写,若是多个单词组成,使用驼峰表示法,以后的每一个单词首字母都大写;形式参数: 方法圆括号中的变量,仅仅只是占位而已,参数的名称其实无所谓,形式参数可以有多个;参数列表: 参数列表==参数的类型 + 参数的个数 + 参数的顺序;方法的签名: 方法签名==方法名称 + 方法参数列表;方法体: 方法的{}中的代码,表示具体完成该功能的代码;返回值: 在方法内部,使用return关键字;功能1:给调用者返回一个结果值,此时该方法不能使用void参数;功能2:结束当前方法;实际参数: 调用者在调用某一个具体方法的时候,实际传递的参数值;方法的调用者: 在哪里调用了某一个方法,那么哪里就是该方法的调用者;
4.如何设计方法
1).是否需要定义返回值类型
方法其实就是在完成某一个功能,那么完成该功能之后,是否需要给调用者返回一个结果数据,如果不需要返回结果数据,此时使用void声明( 无返回);
如果需要返回一个结果数据,我们就把该结果数据的类型作为该方法的返回值类型;
打印操作: 我们在乎的是方法执行的过程,而不是结果,所以此时使用void声明;
求两个数之和: 我们在乎的是方法执行的过程,并且执行完毕之后,需要给调用者一个反馈;
2).是否需要形式参数
该方法在完成该功能的过程之中,是否有未知的因数参与,如果有请作为参数传递,如果没有则没有形参;
求两个数之和的时候,这两个数到底是多少,其实对于方法来说是未知的,仅仅是调用者知道,而且不同的调用者传递不同的参数值;
针对有返回的方法,调用者应该定义一个变量去接收返回的结果;
示例:
// 无参数无返回
static void p(){
System.out.println("无");
}
// 有参数无返回
static void pValue(val){
System.out.println(val);
}
// 无参数有返回
static int getAge(){
return 17;
}
//有参数有返回
static int getSum(int a,int b){
return a + b;
}
12345678910111213141516171819
5.方法特点-执行流程
// 求两个数之和
static int getSum(int a,int b){
return a + b;
}
public static void main(String[] args){
int sum=MethodDemo.getSum(3,4);// 调用方法并传递两个实际参数
}
12345678
6.方法设计练习
// 发送短信,本身就是一个功能
// 方法名称: sendMsg
static int sendMsg(String phoneNumber,String content){
// TODO
// 发送短信的逻辑代码
retrun int 类型的值;
}
// 调用
...... main ......
{
int ret=sendMsg("10086","你好");
ret=sendMsg("10010","Hello");
}
1234567891011121314151617181920
7.方法重载设计
方法重载的作用: 屏蔽了同一功能的方法由于参数不同所造成方法名称不同;
方法重载判断原则: 两同一不同;
两同: 同类中,方法名相同;
一不同: 方法参数列表不同(参数类型,参数个数,参数顺序);
只要参数类型,参数个数,参数顺序有一个不同,参数列表就不同;
注意: 方法重载和方法的返回值类型无关,只是一般要求返回值类型一致;
参数列表和参数的名称没关系,方法的重载和形参没关系;
示例:
// 求两个整数之和
// 重载两个方法
static int getSum(int x,int y){
return x + y;
}
// 求两个小数之和
static double getSum(double x,double y){
return x + y;
}
12345678910
8.方法递归操作
// 斐波那契数列的代码实现
static int fn(int n){
if(n==0){
return 0;
}else if(n==1){
return 1;
}else{
// n不等于0和1
return fn(n -1) + fn(n -2);// 方法的递归(自己调用自己)
}
}
1234567891011
二.JVM内存模型
1.内存模型分布
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
2).动态初始化和内存分析
特点: 有我们来设置数组的元素个数(数组的长度),而每个数组元素的初始值由系统决定;
语法:
数组元素类型[] 数组名=new 数组元素类型[length]
1
示例:
int[] ages=new int[100];
1
1>.不同数据类型的初始值
类型初始值byte,short,int0long0Lfloat0.0Fdouble0.0Dbooleanfalsechar‘’(表示空)引用数据类型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]);
}
123
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;
}
}
1234567891011121314151617181920212223242526
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);
}
12345678910111213141516
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;
}
123456789
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;
}
上面就是小居数码小编今天给大家介绍的关于(JAVA数组的方法)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
excel入门基础和怎样制作表格(excel入门基础知识)
怎么计算数组中元素的个数(PHP如何计算数组中元素的个数)
PHP数组转字符串教程(php字符串转字节)
php一维数组排序教程+(php多维数组排序函数)
155849
一.方法设计
JAVA数组的方法
1.方法引入
循环操作(while,do while,for循环): 循环操作解决的是代码重复的问题,重复做某一件事情;
此时得重复: 有规律的,语句格式是相同的,有规律的;
注意: 循环操作不能解决针对于某一种功能的重复操作,此时得使用方法;
开发遵循的原则之一:
DRY原则: Don’t Repeat Yourself(不要重复你自己的代码);原因: 重复意味着维护成本的增大;
2.方法的定义和调用
方法定义,方法(Method),函数(function),其实就指一个特定的功能操作:
程序中完成独立功能,可重复使用的一段代码的集合;
[修饰符] 返回值的类型 方法名称([形参,.......]){
方法体
[return 值]
}
1234
注意:
1.方法必须要调用才能生效2.如果方法使用了static修饰,此时我们使用方法所在的 类的名称.方法名(参数);3.如果方法没有使用static修饰,此时我们得使用方法所在的类的对象来调用;
// main方法专门由JVM来负责调用,我们只管启动JVM
public static void main(String[] args){
// TODO
}
1234
方法定义的位置:
1.在类中定义,在java中最小的程序单元是类;2.方法定义在其他方法以外,方法和方法是兄弟关系;3.方法定义的先后顺序不影响;
示例:
public class MethodDemo{
static void doWork(){
System.out.println("重复的功能代码");
}
public static void main(String[] args){
MethodDemo.doWork();//调用方法
}
}
12345678
3.方法中的术语
方法的定义格式:
[修饰符] 返回值类型 方法名称([形参1,形参2,...]){
方法体;
[如果方法需要给调用者一个返回结果,此时使用 [return 值]; ];
}
1234
方法中的术语:
修饰符: public,static等,static修饰符的方法属于类,直接使用类名调用即可,现在都用static修饰;返回值类型 方法其实是在完成一个功能,该功能操作完毕之后,是否需要给调用者返回一个结果;如果不需要给调用者返回结果,此时使用关键字void来声明,无返回的意思;方法名称: 遵循标识符的规范,使用动词表示,首字母小写,若是多个单词组成,使用驼峰表示法,以后的每一个单词首字母都大写;形式参数: 方法圆括号中的变量,仅仅只是占位而已,参数的名称其实无所谓,形式参数可以有多个;参数列表: 参数列表==参数的类型 + 参数的个数 + 参数的顺序;方法的签名: 方法签名==方法名称 + 方法参数列表;方法体: 方法的{}中的代码,表示具体完成该功能的代码;返回值: 在方法内部,使用return关键字;功能1:给调用者返回一个结果值,此时该方法不能使用void参数;功能2:结束当前方法;实际参数: 调用者在调用某一个具体方法的时候,实际传递的参数值;方法的调用者: 在哪里调用了某一个方法,那么哪里就是该方法的调用者;
4.如何设计方法
1).是否需要定义返回值类型
方法其实就是在完成某一个功能,那么完成该功能之后,是否需要给调用者返回一个结果数据,如果不需要返回结果数据,此时使用void声明( 无返回);
如果需要返回一个结果数据,我们就把该结果数据的类型作为该方法的返回值类型;
打印操作: 我们在乎的是方法执行的过程,而不是结果,所以此时使用void声明;
求两个数之和: 我们在乎的是方法执行的过程,并且执行完毕之后,需要给调用者一个反馈;
2).是否需要形式参数
该方法在完成该功能的过程之中,是否有未知的因数参与,如果有请作为参数传递,如果没有则没有形参;
求两个数之和的时候,这两个数到底是多少,其实对于方法来说是未知的,仅仅是调用者知道,而且不同的调用者传递不同的参数值;
针对有返回的方法,调用者应该定义一个变量去接收返回的结果;
示例:
// 无参数无返回
static void p(){
System.out.println("无");
}
// 有参数无返回
static void pValue(val){
System.out.println(val);
}
// 无参数有返回
static int getAge(){
return 17;
}
//有参数有返回
static int getSum(int a,int b){
return a + b;
}
12345678910111213141516171819
5.方法特点-执行流程
// 求两个数之和
static int getSum(int a,int b){
return a + b;
}
public static void main(String[] args){
int sum=MethodDemo.getSum(3,4);// 调用方法并传递两个实际参数
}
12345678
6.方法设计练习
// 发送短信,本身就是一个功能
// 方法名称: sendMsg
static int sendMsg(String phoneNumber,String content){
// TODO
// 发送短信的逻辑代码
retrun int 类型的值;
}
// 调用
...... main ......
{
int ret=sendMsg("10086","你好");
ret=sendMsg("10010","Hello");
}
1234567891011121314151617181920
7.方法重载设计
方法重载的作用: 屏蔽了同一功能的方法由于参数不同所造成方法名称不同;
方法重载判断原则: 两同一不同;
两同: 同类中,方法名相同;
一不同: 方法参数列表不同(参数类型,参数个数,参数顺序);
只要参数类型,参数个数,参数顺序有一个不同,参数列表就不同;
注意: 方法重载和方法的返回值类型无关,只是一般要求返回值类型一致;
参数列表和参数的名称没关系,方法的重载和形参没关系;
示例:
// 求两个整数之和
// 重载两个方法
static int getSum(int x,int y){
return x + y;
}
// 求两个小数之和
static double getSum(double x,double y){
return x + y;
}
12345678910
8.方法递归操作
// 斐波那契数列的代码实现
static int fn(int n){
if(n==0){
return 0;
}else if(n==1){
return 1;
}else{
// n不等于0和1
return fn(n -1) + fn(n -2);// 方法的递归(自己调用自己)
}
}
1234567891011
二.JVM内存模型
1.内存模型分布
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
2).动态初始化和内存分析
特点: 有我们来设置数组的元素个数(数组的长度),而每个数组元素的初始值由系统决定;
语法:
数组元素类型[] 数组名=new 数组元素类型[length]
1
示例:
int[] ages=new int[100];
1
1>.不同数据类型的初始值
类型初始值byte,short,int0long0Lfloat0.0Fdouble0.0Dbooleanfalsechar‘’(表示空)引用数据类型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]);
}
123
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;
}
}
1234567891011121314151617181920212223242526
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);
}
12345678910111213141516
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;
}
123456789
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;
}
上面就是小居数码小编今天给大家介绍的关于(JAVA数组的方法)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
excel入门基础和怎样制作表格(excel入门基础知识)
怎么计算数组中元素的个数(PHP如何计算数组中元素的个数)
PHP数组转字符串教程(php字符串转字节)
php一维数组排序教程+(php多维数组排序函数)
155849
很赞哦! ()