| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> JavaSE复习巩固 -> 正文阅读 |
|
[数据结构与算法]JavaSE复习巩固 |
第三天:数组,方法 1.什么是数组? 数组:内存中开辟的一块连续的空间,是用来临时存储同种数据的,要想永久性存储数据,可以存储在数据库里面,也可以通过流存储到文件中。 为什么会出现(需要)数组? 因为我们需要一次存储多个数据,而之前学的变量一次只能存储一个数据。 数组与变量的区别? 1.变量是内存中一块小的空间,而数组是内存中一块连续的空间 2.变量一次只能存储一个数据,而数据一次可以存储多个数据 3.变量在内存中分布是无序的,凌乱的,随机的,而数组分布是连续的,有序的。 4.变量没有默认值,而数组是有默认值的。 定义数组的两种方式(动态声明,静态声明) 1.动态定义 数组类型[] 数组名=new 数据类型[数组长度]; 例子: int[] arr=new int[10];//在内存中开辟一块长度为10的连续空间。 如何给数组赋值?需要借助索引(下标,角标) 在计算机中下标一般都是从0开始的 赋值方式:数组名[下标]=值; 例子:arr[0]=1; 取值方式也是通过下标(索引):arr[0] 输出arr[0]即可得到值 注意:超出数组取值范围,就会报数组角标越界异常 数组的遍历:for(int i=0;i<arr.length;i++){ System.out.println("数组:"+arr[i]) } 数组的长度:arr.length 数组名.属性名 数组的默认值:byte short int long: 0 float double: 0.0 char : 空字符 String : null boolean : false 数组的第二种声明方式:静态声明 数据类型[] 数组名={值1,值2,.....值n}; 例子:int[] arr={10,20,30,40}; 特点:一步到位,赋值,长度全都有,有多少个值,数组的长度就是多少。 思考?数组只能存储同种数据类型吗?本意是对的,编译的时候会把数据统一转为同种数据类型。 基本练习题: ?1.数组的复制 //数组的复制 int[] arr={1,2,34,5}; int[] arr1=new int[arr.length]; //遍历循环 for (int i = 0; i <arr.length ; i++) { //把arr数组里面的元素复制复制给arr1 arr1[i]=arr[i]; } 2.数组的合并 //数组的合并 int[] brr={1,2,3,5}; int[] brr1={4,5,9}; int[] crr=new int[brr.length+brr1.length]; for (int i = 0; i <brr.length; i++) { crr[i]=brr[i]; } //因为前面brr数组里面元素的值已经复制给了crr,现在将brr1的值赋值给crr,在brr数组长度上+i即可 for (int i = 0; i <brr1.length ; i++) { crr[brr.length+i]=brr1[i]; } //遍历crr for (int i = 0; i <crr.length ; i++) { System.out.print(crr[i]+" "); } 3.求出数组元素的最大值和最小值以及总和(sum),和反向遍历数组 //数组的求和和最大值,最小值 int[] arr={1,2,3,4,5}; int sum=0; int min=arr[0];//默认数组的第一个元素为最小值 int max=arr[0];//默认数组的第一个元素为最大值 for (int i = 0; i <arr.length ; i++) { if (arr[i]>max){ max=arr[i]; } if (arr[i]<min){ min=arr[i]; } sum+=arr[i];//先遍历数组中的元素,在进行累加 } System.out.println("数组的长度:"+arr.length); System.out.println("sum="+sum); System.out.println("最大值:"+max); System.out.println("最小值:"+min); //反过来遍历数组 for (int i = arr.length-1; i >=0 ; i--) { System.out.println("数组"+arr[i]); } 4.从键盘输入一个数字在数字找它的小标并且打印出来。 //从键盘输入一个数字在数字找它的小标并且打印出来。 System.out.println("请输入要查找的数据:"); int[] arr={11,22,333,222,111}; Scanner sc = new Scanner(System.in); int number = sc.nextInt(); int index=-1;//索引为负数表示数组找那个没有这个数据 for (int i = 0; i <arr.length ; i++) { //判断数组中是否有这个数 if(number==arr[i]){ index=i;//输出number的小标 System.out.println(number+"的下标是"+index); break;//找到了跳出这个循环 } } if (index==-1){ System.out.println("没有找到这个数据"); } 2.方法 2. 1 方法是什么,作用? 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。 方法就是将某些具有独立的功能的代码,把它包(封装)起来 如何定义方法?----可以照着主方法声明 方法定义好之后,使用(调用)方法 如何去定义一个方法? 方法的语法结构: public 返回值类型 方法名(参数1,参数2.....){ ? ? ? ? ?方法体; } 例子: //调用方法并输出方法的结果 System.out.println(FuntionDemo1.sum(1,2)); } //定义方法 public static int sum(int a,int b){ return a+b; } } 2.2方法的分类----共分为四类 1.无参无返:没有参数,也没有返回值 例如:public void A{ System.out.println("这是无参无返的方法"); } 自己不用给别人东西,别人也不用给自己东西 一般用于直接输出打印 自己定义方法: 格式: public static 返回值类型 方法名(参数){ 方法体-------这个方法封装的功能代码 } 没有返回值的标志: void 有返回值的标志: return public static void 方法名(){ 方法体 } static:静态的 void:无返回值的 2.无参有返:没有参数,但是有返回值,调用者不用给方法东西,方法需要返回给调用东西, 自己不用给别人东西,别人需要给自己东西 例如:public int A{ System.out.println("这是无参有返的方法"); return 1; } 3.有参无返(有参数,没有返回值):调用者给方法东西,而方法不需要给调用者东西 自己给别人东西,而别人不需要给自己东西 huanQian() public void 方法名(int a){ 方法体; System.out.println("这是无参有返的方法"+a); } 4.有参有返(有参数有返回值)?:自己要给别人东西,别人也要给自己东西 public 参数类型 方法名(参数1,参数2...){ 方法体 } 例子: //变量如果是基本数据类型,必须先赋值,才能去使用,因为基本数据类型没有默认值 //定义方法 public static int sum(int a,int b){ return a+b; } 2.3参数和返回值进行理解 写好一个方法之后,需要被调用。角色: 方法本身(别人)-----调用者(主方法)(自己) 参数与返回值就是这两个角色之间的数据传递 参数:调用者传给方法的数据 返回值:方法返回给调用者的数据 2.4方法重载的概念 什么是方法重载? 方法重载是在同一个类中方法名相同,参数列表不同(参数包含参数个数,参数类型,参数顺序)与返回值无关(跟返回值没有关系)。 面试题?方法重载与方法重写的区别? ?方法重载是在同一个类中方法名相同,参数列表不同(参数包含参数个数,参数类型,参数顺序)与返回值无关(跟返回值没有关系)。 ?方法重写是在子父类中,子类继承父类的方法,当父类的方法不满足子类时候,我们就可以对父类的方法进行重写。 2.5方法在内存中是如何存储的 @1b6d3586------理解成是数组在内存中位置的表现形式(地址值) int[] arr=new int[]{1,2,3}; arr这个对象名携带的是一个地址值(对象的引用)例如:xx001 这个地址值指向堆内存中的内存空间。 数组会存储到堆空间中,在堆空间开辟一块空间。如下图所示: ? ? 2.6理解形参与实参的区别 什么是形参?参数(形式参数) 形参:在自定义方法(方法)的声明上面(参数声明上面) 例子: int a=10;//实参 System.out.println(A(a)) public int A(int a){//形参 ? ? ?retrun a; } 什么是实参?实际参数 在main方法中定义的一个实际变量 2.7?形参是基本数据类型和引用数据类型时,形参的改变是否对 实参有影响? 形参如果是基本数据类型,形参的改变会不会影响实参?不会 形参如果是引用数据类型,形参的改变会不会影响实参?会 为什么? 1.形参是基本数据类型,形参发生改变不会直接影响实参,基本数据类型保存在栈内存中,在栈中开辟一块内存空间可以称为栈帧, 栈帧1和栈帧2本质上是两个不同的空间,没有直接的联系,形参改变之后,方法(method)执行完后,method直接就弹栈了, 被jvm虚拟机中的垃圾回收机制(GC)释放了,跟main方法中的实参没有任何联系。 2.形参是引用数据类型,形参发生改变会直接影响实参,因为中间有地址值做牵引,两个参数指向的是同一个堆内存的地址。 8.使用方法需要注意的细节 细节: 1.方法可以调用其他方法吗?可以 2.方法可以调用自己本身吗?可以,但是会出现栈内存溢出,因为方法加载进栈中,会占用栈内存的空间,如果一直调用方法本身,最终栈内存空间会消耗完,没有多余的空间去加载了,所有会出现栈内存溢出。 3.方法里面可以写方法吗?不可以 无返回值的方法可以有return吗?可以,是用来结束方法的,结束(跳出)循环时break。 4.方法中的参数只能是同种数据类型吗?不是,可以是不同种类的数据类型的,只是传参数的时候对应好(匹配)参数类型即可。 今日学习感受: ? ? ? ?学习java其实比较容易的,有些之前不懂得,现在也有了新的领悟,真的,需要自己一步一个脚印扎扎实实的走好每一步,才能不负自己的付出。学习java不难,难的是坚持,希望自己能继续,日复一日的坚持下去。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 5:23:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |