java整理学习笔记10

Lambda表达式

匿名内部类:为了防止过多 没有本身作用的类出现,就只是为了重写一些抽象方法,可以定义为匿名内部类
Lambda表达式 : 可以简化匿名内部类
前提: 函数式接口
函数式接口: 只有一个抽象方法的接口
强制检查函数式接口: @FunctionalInterface

@FunctionalInterface
interface Swimming{
	 String swim(int a);
}

语法:
() -> {}
() : 匹配要重写的抽象方法的参数列表
-> : lambda符号,箭头符号,具有上下文推到的作用
{} : 匹配要重写的抽象方法的方法体

//{}中的语句只有一句,并且是return返回值的语句,前后{}+return关键字都可以省略
		Swimming s=x->"哈哈"+x;
		System.out.println(s.swim(5));

异常

Error: 一般是由虚拟机生成并脱出的,程序不关注

Exception : 异常,一旦出现异常,如果不解决,程序无法继续向下执行
检查时异常|编译时异常:编译期出现的异常,如果不处理,程序无法运行
运行时异常: 出现在程序运行期间,可以通过程序的健壮性处理

异常处理:

  • throw : 制造异常
  • 处理异常的方式:
  • throws : 抛出异常
  • try…catch :捕获异常
		try {
				可能会出现异常的代码;
			} catch (FileNotFoundException e) {
				如果出现这个异常会执行的代码;
				e.printStackTrace();  //打印异常的栈信息,标红色的打印异常信息
			} catch (NullPointerException e){
				如果出现这个异常会执行的代码;
			}.....
			finally{
				无论是否出现异常,都会执行finally中的代码
			}

如果一旦try中出现异常了,try中后面的代码都不会执行了
一个try后面可以跟一个或者多个catch
如果多个catch,大范围的在后面

public static void main(String[] args) {

		try {
			hehe();
			String str="abc";
			System.out.println(str.length());
			System.out.println(5/0);
			System.out.println("try中的代码执行完了...");
			
			
		} catch (FileNotFoundException e) {
			System.out.println("这是文件未找到异常了...");
			e.printStackTrace();
		} catch (NullPointerException e){
			System.out.println("空指针异常");
		} catch (Exception e){
			System.out.println("接盘侠出现了...");
		} finally{
			System.out.println("最后的最后我们都会离开");
		}
		
		System.out.println("我才是程序的最后");
	
	}
	public static void hehe() throws FileNotFoundException{
		
		InputStream is=new FileInputStream("D:/test.txt");	
	}

Console结果

java.io.FileNotFoundException: D:\test.txt (系统找不到指定的文件。)
这是文件未找到异常了...
最后的最后我们都会离开
我才是程序的最后

二维数组

二维数组: 了解

  • 数组中还是数组

  • 数组的声明

  • 数据类型 数组名[][] -----------推荐;

  • 数据类型[] 数组名[];

  • 数组的初始化

  • 动态初始化:先创建后赋值

  •  数据类型[][] 数组名 = new 数据类型[一维的长度][二维的长度];
    
  •  数据类型[][] 数组名 = new 数据类型[一维的长度][];
    
  •  	其中内层数组可以使用一维数组的常见方式
    
  • 静态初始化:创建的同时赋值

  •  数据类型[][] 数组名 = new 数据类型[][]{{1,2,3},{1,2},{1},{2,2}...};
    
  •  数据类型[][] 数组名 = {{1,2,3},{1,2},{1},{2,2}...};
    
  •  	第一次创键并且赋值可以使用简易写法
    
  • 遍历:

  •  双重循环嵌套
    
  • 操作二维数组中的数据:

  •  数组名[一维索引][二维索引]
    
//二维数组的声明
		int[][] arr1;
		//二维数组的初始化
		//动态初始化
		arr1= new int[3][2];
		arr1[0][0]=1;
		arr1[0][1]=2;
		arr1[1][0] =3;
		arr1[1][1] =4;
		arr1[2][0] =5;
		arr1[2][1] =6;
		//双重for循环遍历
		for(int i=0;i<=arr1.length-1;i++){
			for(int num:arr1[i]){
				System.out.println(num);
			}
		}

		arr2=new int[2][];
		arr2[0] = new int[3];
		arr2[0][0] = 0;
		arr2[0][1] = 1;
		arr2[0][2] = 2;
		
		arr2[1]=new int[]{4,5,6,7};
		
		for(int[] arr:arr2){
			for(int i:arr){
				System.out.println(i);
			}
		}

Arrays的常用方法

//toString(Object[] a) 返回指定数组内容的字符串表示形式 
Arrays.toString(arr)

//deepToString(Object[] a)   返回指定数组“深层内容”的字符串表示形式。 
Arrays.deepToString(arr2)

//equals(Object[] a, Object[] a2)  如果两个指定的 Objects 数组彼此相等,则返回 true。
Arrays.equals(arr, arr3)

//deepEquals(Object[] a1, Object[] a2)如果两个指定数组彼此是深层相等 的,则返回 true。
Arrays.deepEquals(arr2, arr4)

Arrays.toString(Arrays.copyOf(arr, 3))
Arrays.copyOf(arr, 3)//截取或者填充 

Arrays.toString(Arrays.copyOfRange(arr, 1,3))
//copyOfRange(T[] original, int from, int to)将指定数组的指定范围复制到一个新数组。
Arrays.copyOfRange(arr, 1,3)

//fill(Object[] a, Object val)   将指定的 Object 引用分配给指定 Object 数组的每个元素。 
	Arrays.fill(arr3, "哈哈");
	
//fill(Object[] a, int fromIndex, int toIndex, Object val)  将指定的 Object 引用分配给指定 Object 数组指定范围中的每个元素。 
Arrays.fill(arr3,1,2, "呵呵");  //结束索引没有包含


/* static void sort(char[] a) 
对指定的 char 型数组按数字升序进行排序。 
static void sort(char[] a, int fromIndex, int toIndex) 
对指定 char 型数组的指定范围按数字升序进行排序。 
 */
 int[] arrs={3,1,7,4,6,2};
		System.out.println("原数组:"+Arrays.toString(arrs));
		Arrays.sort(arrs);
		System.out.println("原数组:"+Arrays.toString(arrs));
/*前提 要求: 先升序排序才可以
 * static int binarySearch(int[] a, int key) 
 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。 
 */
System.out.println("原数组:"+Arrays.toString(arrs));
System.out.println("原数组:"+Arrays.binarySearch(arrs,-1));  //(-插入点 )-1

可变参数
可变参数: 方法的参数数据类型一致,参数个数不确定,可以有可以没有,可以有多个

  • 1.数据类型 … 参数名 可变参数
  • 2.自动在方法内部为可变参数构建数组,存储0~多个数据
  • 3.如果参数列表中存在多个 参数,可变参数一定要放在参数列表的最后位置
public static void main(String[] args) {
		getSum(1,2,3,4,5,6);
	}
	
	static void getSum(int num,int...i){//可变参数 参数可以是0~多个,但是都是int类型
		int sum=0;
		for(int j=0;j<=i.length-1;j++){
			sum+=i[j];
		}
		System.out.println(sum);
		System.out.println(num);
		System.out.println(Arrays.toString(i));
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值