JavaSE之数组、方法知识点总结

JavaSE之数组、方法知识点总结


一、方法

1.方法

  (1)定义:将一个独立的代码块{}抽取出来,并为其起名字(方法名)。
  (2)作用:减少代码的冗余,提高代码的复用性
  (3)方法的类别:
    有返回值类型的方法
    没有返回值类型的方法

2.方法的定义与调用

  (1)有返回值类型的方法格式:

		public static 返回值类型 方法名(形式参数类型1 参数名称1,形式参数类型2 参数名称2...)
		{
				业务逻辑...
				return 结果;
		}

  (2)没有返回值类型的方法格式:

		public static void 方法名(形式参数类型1 参数名称1,形式参数类型2 参数名称2...)
		{
				业务逻辑...
		}

  (3)格式的详细介绍
    权限修饰符:public(公共的,访问权限足够大) static(静态)
    返回值类型:基本数据类型和引用数据类型
    方法名:遵循标识符的规则
    形式参数类型:基本数据类型和引用数据类型
    参数名称(变量名称):遵循标识符的规则
    return: 这个方法调用完毕了,带回具体的结果
    void:没有返回值

  (4)方法调用
    有返回值类型
      1)单独调用(没有意义)
      2)输出调用:不推荐
      3)赋值调用:推荐
    没有返回值:单独调用

3.方法重载 (Overload)

  (1)定义:在同一个类里,方法名相同,参数列表不同,与返回值无关。

  (2)参数列表不同:
    1)数据类型一样的,参数个数不同
    2)参数个数一样,类型不同!
    3)参数个数不一样,参数类型不同

  (3)应用:调用方法,实际传入的参数类型和个数,系统会自动匹配到相应的方法。

  (4)需要使用重载的情况:一个类里,有多个方法,且功能大致一样,细节实现不一样就可以考虑使用重载。

4.实参与形参

  (1)形式参数(形参):声明方法时,规定参数类型和变量名

  (2)实际参数(实参):调用方法时,传入的数据

  (3)注意:
    1)形参必须声明类型
    2)实参不用声明类型
    3)多个形参用逗号隔开
    4)实参与实参之间也是用逗号隔开
    5)形参规定的类型及顺序,实参必须遵守

5.基本类型和引用类型做形参的特点

  (1)基本类型作为形参进行传递,形参的改变对实参没有影响。

  (2)引用类型作为形参进行传递,形参改变,实参也随之发生改变。

  (3)String类型作为形参,形参的改变对实参没有影响。

  (4)基理:
    1)基本数据类型做形参传递的是值;
    2)引用类型做形参传递的是内存地址;
    3)字符串是一个常量,一旦被赋值,其值不能被更改。

6.注意事项

  (1)方法和方法平级关系,不能嵌套使用。
    特殊:方法递归:方法调用方法本身的一种现象。

  (2)定义方法注意两个明确
    明确返回值类型
    明确参数类型以及参数个数

  (3)定义方法的时候:
    如果有参数必须得有参数类型
    举例:public static int add(int x,int y){}

  (4)定义方法的时候,()后面不要出现; (目前来说没意义的方法!)

  (5)调用方法的时候,实际参数不需要携带数据类型。

7.递归:方法调用方法自身

  (1)注意
    如果方法一直调用自身,就是个死循环,程序会崩溃掉, 因为每次调用方法都会在栈内存中开辟空间,如果栈内存满   载了,程序就会报栈内存溢出的错误,这种错误是不可恢复的,程序百分百崩溃掉。真正去玩递归,一定要根据需求找规   律和找出口。

  (2)找规律:什么情况下方法应该调用方法自身

  (3)找出口:防止死循环,返回具体的值时,才能一层一层往上返回。

二、数组

1.数组

  (1)数组:一组数据的集合,是可以存储多个数据的一种容器。

  (2)定义格式:
    数据类型[ ] 数组名称 ;
    数据类型 数组名称[ ] ;

		举例:
			int[] arr; (习惯于第一种) 定义了一个int类型数组arr变量
			int arr[] ;定义了一个int类型的arr数组

  (3)注意:
    1)数组只能存一种类型,数组声明时使用什么类型,里面的数据就必须是什么类型。
    2)数组里的数据又叫做元素。
    3)数组里的元素都有从0开始的编号,叫做下标/索引。
    4)数组是引用数据类型。
    5)数组一旦创建,该数组的长度就不可以更改。

2.数组的初始化

  (1)初始化(创建数组):
    1)动态初始化:指定了数组长度,系统默认给定数组的元素值。
    2)静态初始化:指定了具体的元素内容,系统默认指定数组的长度。

  (2)默认值:
    整数类型:0 (int[] is = new int[4];)
    浮点类型:0.0
    字符类型:’ '(空格)
    布尔类型:false
    引用类型:null(空)

  (3)动态初始化:
    数据类型[ ] 数组名称 = new 数据类型[数组长度] ;
    数据类型 数组名称[ ] = new 数据类型[数组长度] ;

		举例:
			int[] arr = new int[3] ;//创建了一个数组对象,分配3个长度
			int arr[] = new int[2] ;//.创建了一个数组对象,分配2个长度

  (4)静态初始化
    1)标准格式:
      数据类型[ ] 数组名称 = new 数据类型[ ] {元素1,元素2,元素3…} ;
      数据类型 数组名称[ ] = new 数据类型[ ] {元素1,元素2,元素3…} ;

			举例:
				int[] arr = new int[]{11,22,33} ;

    2)简化格式:
      数据类型[ ] 数组名称 ={元素1,元素2,元素3…} ;
      数据类型 数组名称[ ] ={元素1,元素2,元素3…} ;

			举例:
				int[] arr = {1,2,3} ;

  (5)数组中元素的的访问方式:数组名称[角标]来访问

			举例:arr[0]:数组arr的0号下标元素(第一个元素)

  (6)数组的遍历:将数组中的元素一一输出。

  (7)数组的length属性: 获取数组的长度。
    可以通过数组对象名称.length,获取长度。

3.for循环遍历 vs foreach循环遍历

  (1)格式:
    for循环遍历

			for(初始化语句;循环条件;步进语句){
				Systen.out.println(数组名[下标]);
			}

    foreach循环遍历

			for(数组的数据类型 变量名 : 数组名){
				Systen.out.println(变量名);
			}

  (2)应用场景:
    for循环遍历:遍历时,可以拿到下标进行操作。
    foreach循环遍历:遍历时,拿不到下标,只能拿到数据。

  (3)使用
    遍历要用到下标,只能用for循环。如果仅仅是输出数组内的数据,用foreach即可。

4.冒泡排序(从小到大)

  (1)思想:两两比较,将较大的值往后放;第一次比较完毕,最大值就出现在最大索引处,依次这样比较。

  (2)规律:
    N个数字来排序
    两两(相邻)相比,小靠前
    外层循环N-1(轮数)
    内层循环N-1-i(每轮比较次数)

  (3)代码实现

		for(int i = 0; i<arr.length-1; i++){
			for(int j = 0; j<arr.length-1-i ;j++){
				if(arr[j] > arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}

5.二维数组

  (1)定义:它就是一个包含多个一维数组的数组。

		举例:
			排队:将一个班的人排成m排n列的方阵
			一排看成一个有n个元素的一维数组
			总共有m排,即为m个一维数组
			组成方阵即为一个二维数组

  (2)二维数数组的定义格式
    数据类型[ ] 数组名称[ ] ;
    数据类型[ ][ ] 数组名称 ;

  (3)注意

		int x,y[] ; //x是普通遍量,y是一维数组
		int x[][],y[] ;//x是二维数组,y是一维数组。

6.二维数组的初始化

  (1)动态初始化: 指定数组长度,系统给数组中元素分配默认值。

  (2)静态初始化: 指定了具体的元素内容,系统默认指定数组的长度。

  (3)动态初始化格式1
    数据类型[ ][ ] 数组名称 = new 数据类型[m][n] ;
    m:表示当前二维数组中的一维数组的个数。
    n:表示每一个一维数组的长度。

		举例:			
			int[][] arr = new int[3][2] ;
			或
			int[] arr[] = new int[3][2] ;
			System.out.println(arr) ; //二维数组对象 [[I@6d06d69c
		
			[[I@6d06d69c解释:
				[[:表示二维数组
				I:int类型
				@:地址值标记
				6d06d69c:十六进制数据

  (4)动态初始化格式2
    数据类型[ ][ ] 数组名称 = new 数据类型[m][ ] ;
    数据类型[ ] 数组名称[ ] = new 数据类型[m][ ] ;

		举例:
			int[] arr[] = new int[2][] ;
			arr[0]=new int[3];
			arr[1]=new int[4];
		上面:当前二维数组arr中有2个一维数组,但是不知道2个一维数组的长度,所以需要动态给定一维数组的长度	

  (5)静态初始化格式
    1)标准格式
      数据类型[ ][ ] 数组名称 = new 数据类型[ ][ ]{{元素1,元素2,…},{元素1,元素2…},{元素1,元素2…}};

    2)简化格式
      数据类型[ ][ ] 数组名称 = {{元素1,元素2,…},{元素1,元素2…},{元素1,元素2…}};

  (6)注:要么动态初始化/要么静态初始化,动静结合会报错

			int[][] arr = new int[3][2]{{1,2,3},{4,5,6}} ;

7.二维数组遍历

   二维数组是由多个一维数组组成,需要将每一个一维数组的元素获取到,一一输出,使用嵌套for循环遍历,或者嵌套   foreach。

三、提及的知识

1.转移字符

   定义:字母前面加上右手杠(\)来表示常见的那些不能显示的ASCII字符,称为转义字符。

序号转义字符含义ASCII码值(十进制)
1\a响铃(BEL)007
2\b退格(BS) ,将当前位置移到前一列008
3\f换页(FF),将当前位置移到下页开头012
4\n换行(LF) ,将当前位置移到下一行开头010
5\r回车(CR) ,将当前位置移到本行开头013
6\t水平制表(HT) (跳到下一个TAB位置)009
7\v垂直制表(VT)011
8\\代表一个反斜线字符"\"092
9\’代表一个单引号(撇号)字符039
10\"代表一个双引号字符034
11\?代表一个问号063
12\0空字符(NUL)000
13\ddd1到3位八进制数所代表的任意字符三位八进制
14\xhh十六进制所代表的任意字符十六进制

2.Math

  java.lang.Math
  包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

	获取随机数的方法:
		public static double random() :取值范围[0.0,1.0)

3.异常(Throwable)

  (1)定义:程序出问题了。

  (2)分类:
    1)error : 内存异常了 (通过一些第三方工具避免了!)

			举例:  一些软件通过一些特殊的操作:造成软件崩溃了!

    2)Exception: 能够通过本身代码来解决问题

  (3)编译时期异常:只要不是运行时期的异常都属于编译时期。

  (4)RuntimeExcetion:运行时期异常,在执行过程中,由于代码结构不严谨,导致的问题。

		举例:
			第一个异常:数组角标越界!
			java.lang.ArrayIndexOutOfBoundsException:
			出现的原因:访问不存在的角标!就出异常了
			解决方案:改动角标值即可!
	
			第二个异常:空指针异常:
			java.lang.NullPointerException:
			出现的原因:某个对象都为null,还需要使用对象访问内容或者调用其他功能!
			解决方案:只需要对某个对象做一个非空判断!(逻辑判断)

4.java内存分配

   栈内存:存储一般都是局部变量(在方法定义中/方法声明上);
   堆内存:new出来的东西都在堆内存中;
   方法区:存储相关class区,相关static区域、字符串常量池等。


总结

  本文主要从方法的作用与分类、方法的定义与调用、方法的重载、实参与形参、值传递和地址传递、方法的递归调用、一维数组的概念与定义格式、一维数组的初始化、一维数组的遍历、冒泡排序、二维数组的概念与定义格式、二维数组的初始化、二维数组的遍历等方面总结了JavaSE数组和方法部分的知识点。并就数组中的常见问题作了另外的简单整理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值