Java中容易遗漏的常用的知识点( 二 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)

我是小康小白,一个平平无奇的Java小白。热爱有趣的文字,生活和远方。
个人博客:https://blog.csdn.net/weixin_45791445

在这里插入图片描述

小白最近快考试了,复习的顺便总结一下一些小白认为容易忘记的知识点,希望能帮助到大家。

紧接Java中容易遗漏的小知识点( 一 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂),小白的系列二出来了

系列三已上线:Java中容易遗漏的常用的知识点( 三 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)

  1. 数组(数组的东西比较多,但小白会尽力将相关的知识点都写上
    数组是相同类型的数据按顺序组成的一种复合数据类型,每个数据称为一个数组元素,用下标来表示同一数组中的不同数组元素。

1) 数组的特点:

	(1)一个数组中的元素应该是相同数据类型的; 
	(2)数组中的各个元素是有序的,它们在内存中是按照先后顺序连续存放在一起的; 
	(3)每个数组元素用其所在数组的名字和数组下标来确定; 
	(4)数组的下标是从0开始的,数组的长度是指其所包含的数组元素的个数。

Java提供数组类型,数组元素可以是简单数据类型,也可以是引用数据类型(对象或数
组)。数组元素是基本数据类型,则为一维数组,数组元素仍为数组的称为多维数组。
在这里插入图片描述
2) 数组的初始化
在这里插入图片描述
如果数组元素是对象等引用数据类型,元素的默认初始化值是null。

静态初始化

在程序运行前就能确定数组的大小和数组中的初始数据我们称之为静态初始化。
例如:

float[] stuScores = {80.0f,70.0f,90.0f,66.5f};
int[] nums = {80,70, 90,66};
char[] chs = {‘a’,’b’, ‘c’,’d’};

在这里插入图片描述
动态初始化

数组的大小或数组中数据在程序运行时才能决定,且用到new这个关键字来确定数组的大小或初始数据我们称之
为动态初始化。

定义数组:变量类型[] 数组名 = new  数据类型 [ 数组长度 ];

3) 计算数组的长度使用length方法

注意:
在这里插入图片描述
在二维数组中

获得行数的方法如下:数组名.length // 获得数组的行数 
获得指定行所包含列数的方法如下: 数组名[行号].length// 获得数组指定行的列数

4) 数组的复制(两种方法)

  • 方法一:= (这种方法会使得你 = 复制出的那个数组变量和原先的数组变量指向同一内存空间,当你通过其中一个变量修改了数组,那么使用另一个数组变量访问出的也是修改过数组)

例如:int [] num ={4,2,3,1,9,0};
int [] numCopy = num;
numCopy[2]=2;

图解:
在这里插入图片描述

  • 方法二:通过System类提供的arrayCopy( )方法(可以将数组中的元素的值复制给另外一个元素,而又不想改变原数组的值。即相当于重新生成了一个和原数组里元素相同的数组,但两数组位于不同的内存空间。两者相互独立)

格式:
System.arraycopy(src, srcPos, dest, destPos, length)
该方法可以将src 源数组中从srcPos 开始的连续length 个元素复制到dest 数组的从destPos
开始位置,且src 和dest 数组指向不同的内存空间。

5) 数组的排序:
方法:

  • 冒泡排序:

  • 原理:

      将序列当中的左右元素,依次比较,如果左边的元素大于右边元素则交换位置,保证右边的元素始终大于
      左边的元素;( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)对序列当中剩下的n-1个元
      素再次执行步骤1。对于长度为n的序列,一共需要执行n-1轮比较。
    
这个是升序排列,
		for(int i = 1 ; i< arr.length ; i++){
			for(int j = 0;j<arr.length-i;j++ ){
			//if这种写法是升序排列
				if(arr[j]>arr[j+1]){
			//if这种写法是降序排列
//				if(arr[j]<arr[j+1]{  
				//交换元素位置
					int sum = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = sum;
				}	
			}
		}		
		System.out.print(Arrays.toString(arr));
  • 选择排序:

  • 原理:

      首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
      再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
      重复第二步,直到所有元素均排序完毕。
    
这个是升序排列,降序排列与其原理相同
        // 总共要经过 N-1 轮比较
        for (int i = 0; i < arr.length - 1; i++) {
            int min = i;
            // 每轮需要比较的次数 N-i
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[min]) {
                    // 记录目前能找到的最小值元素的下标
                    min = j;
                }
            }
            // 将找到的最小值和i位置所在的值进行交换
            if (i != min) {
                int tmp = arr[i];
                arr[i] = arr[min];
                arr[min] = tmp;
            }
        }

6) 数组类Arrays
使用时需要导包:import java.util.Arrays;

方法 作用
Arrays.equals() 比较两个数组是否相同
Array.fill() 以用某个值来填充整个数组
Arrays.sort() 用于对数组排序(默认为升序排列,可以通过倒叙输出实现降序排列)
Arrays.binarySearch() 在已经排序的数组中查找元素
Arrays.asList() 接受任意的数组为参数,并将其转变为List容器
Arrays.toString(要输出的数组) 快速输出数组的内容
  • 对于Arrays.equals()方法,如果未重写,那么此方法比较的是两数组的地址是否相同。
    在这里插入图片描述

  • 对于Arrays.toString()需要注意:
    Arrays.toString(要输出的数组) 输出时结果为类似于下面这种外侧有方括号
    例如:[1, 2, 3]
    Arrays.toString(要输出的数组).replace("[", “”).replace("]", “”);这种形式输出的就没有了外侧的方括号
    例如:1,2,3

  • 数组经典题目:实现输出99乘法表
    实现代码:

 public static void Print99() {
        for ( int i=1;i<=9;i++  ) {
            for(  int j = 1 ;j<=i;j++ ) {
                System.out.print(j + " * " + i + " = " + i * j + "\t");
            }
            System.out.println();
        }
    }

啊,数组终于大致总结完了。累,来,兄弟们,下一波即将来临。

在这里插入图片描述

  1. 字符串

常用方法及作用

  • 获得字符串长度:public int length ();

  • 截取一个字符:public char charAt(int index)

  • 取得子串:
    1)public String substring(int beginIndex);//1
    返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。
    2)public String substring(int beginIndex, int endIndex);//2
    返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。

  • 字符串相等比较:public boolean equals (String s) 比较字符串内容是否相同
    ==用于判断两个对象是否引用同一实例
    在这里插入图片描述

  • 字符串连接: public String concat(String str)
    该方法将指定字符串联到此字符串的结尾。如果参数字符串的长度为 0,则返回此 String对象。否则,创建一个新的 String 对象,用来表示由此 String 对象表示的字符序列和由参数字符串表示的字符序列串联而成的字符序列。

  • 字符串内容比较:public int compareTo(String anotherString)
    返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
    如果参数字符串等于此字符串,则返回值 0;
    如果此字符串小于字符串参数,则返回一个小于 0 的值,即他们的差值;
    如果此字符串大于字符串参数,则返回一个大于 0 的值,即他们的差值。

  • 字符串检索:
    public int indexOf(int ch)
    public int indexOf(int ch,int fromIndex)
    public int indexOf(String stringName2)
    public int indexOf(String stringName2,int fromIndex)
    字符串检索是指确定一个字符串是否(或从指定位置开始)包含某一个字符或子字符串,如果包含则返回其位置;如果没有,则返回负数。

  • 字符串与字符数组的相互转换
    在这里插入图片描述

  • 去掉起始和结尾的空格
    public String trim()
    trim()返回删除字符串起始和结束的空格后的字符串,如果没有起始和结束空格,则返回此字符串。

  • 字符串替换
    将字符串中的大写全部转换为小写: public String toLowerCase()
    将字符串中的小写全部转换为大写: public String toUpperCase()

  • 将其他数据类型转换为字符串
    在这里插入图片描述

  • StringBuffer类的主要方法
    在这里插入图片描述
    StringBufferStringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

  1. 正则表达式
    正则表达式中的限定符
    在这里插入图片描述
    正则表达式中的[ ]
    在这里插入图片描述

  2. 异常

  • 异常的产生:
    (1)程序中存在非法操作,最简单的例子就是除数为0的除法操作。这种原因常常是程序员出于无意或考虑不周造成的,所以称为隐式异常。
    (2)程序员在程序中使用了throw语句引起的异常。这种异常是程序员出于某种考虑有意安排的,所以称为显式异常。

  • 异常类的方法:
    在这里插入图片描述
    一般用printStackTrace方法

  • 异常种类:
    (1)Error类:它指的是一个合理的应用程序不应有的严重问题,通常是灾难性的致命错误。所以,错误是很难处理的,一般的开发人员是无法处理这些错误的。
    (2)RunTimeException类异常,即运行异常。主要是程序设计或实现问题,如数组下标越界、算术异常、使用空引用等,正确设计与实现的程序不应该产生这类异常。对这类异常可以通过调试程序尽量避免而不是去捕获。当然在必要的时候,也可以声明抛出或捕获这类异常。
    (3)有些异常在程序编写时无法预料,如中断异常、文件没有找到异常、无效的URL异常等,是除RunTimeException类异常的其它Exception异常,又称编译异常。在正常条件下这些异常是不会发生的,什么时候发生也是不可预知的。为了保证程序的健壮性,Java要求必须对可能出现的这类异常进行捕获并处理。

  • 异常处理:
    使用try-catch-finally语句处理异常
    (1) 将要异常监控的程序段放在try代码块中;
    (2) 如果try代码块中发生异常,抛出的异常会被捕获;
    (3) 抛出的异常用catch捕获,然后用某种合理的方法处理该异常。

finally程序块中通常都包含一些用于资源释放的代码块。例如,在finally程序块中应将try程序块中打开的所有文件关闭。

格式:

try{ 
	//可能发生异常的语句块
 }catch(ExceptionType1 e){ 
 	//处理ExceptionType1异常的语句块 
 }catch(ExceptionType2 e){ 
 	//处理ExceptionType2异常的语句块 
 }catch( „„ ){ 
 	//处理其它异常的语句块 
 }finally{ 
 	//无论异常是否发生都一定执行的语句块
 }

注意:
执行catch语句块中的语句。有多个catch子句时,最多只会执行其中一个catch语句块中的异常处理代码;若处理的多个异常之间存在继承关系,则应先处理其子类异常,即处理子类异常的catch子句要放在前面,否则编译通不过。

  • throw和throws语句
    程序中存在非法操作,会导致异常发生(隐式异常);在程序中也可以使用throw语句人为抛出异常(显式异常)。2种方法。
    在这里插入图片描述
    显式异常必须在定义该方法时使用throws子句作异常显式抛弃声明,否则编译不能通过。
    格式:
修饰符 返回类型 方法名(参数列表) throws 异常类名列表 { 
	//方法体中的语句 
}

例子:
在这里插入图片描述
注意:
(1)方法声明了异常并不代表该方法肯定产生异常,也就是异常是有条件发生的。
(2)在调用带异常的方法时,编译程序将检查调用者是否有异常处理代码,除非在调用者的方法头中也声明抛弃相应的异常,否则编译会给出异常未处理的错误提示。
(3)在编写类继承代码时要注意,子类在覆盖父类带throws子句的方法时,子类的方法声明中的throws子句抛出的异常不能超出父类方法的异常范围,因此,throws子句可以限制子类的行为。换句话说,子类方法抛出的异常可以是父类方法中抛出异常的子集,子类方法也可以不抛出异常,但不能出现父类对应方法的throws子句中没有的异常类型。
(4)在主方法中使用throw语句显式抛出异常,如果不使用try-catch-finally语句捕获和处理,则必须在主方法说明中增加异常抛弃声明:throws OutOfRangException ,否则有编译错误提示。

补充:

点一:当try语句块中的代码执行时发生异常,程序的正常执行便会中断,并抛出异常对象,然后在try后面的各个catch()中查找于异常对象相匹配的异常类。当找到第一个与之匹配的参数类时,就执行包含这一参数类的catch语句块中的代码。如果未捕获那么,程序终止运行。

问题二:异常处理中的finally语句块在什么情况不执行?

(1)在try块或者catch块中调用了退出虚拟机的方法(即System.exit(1);)
(2)异常对象没有匹配到对应的异常类。(此时程序直接终止,finally语句自然就不会运行了)。

这次先写到这里小白明天接着写。

Java中容易遗漏的小知识点( 一 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
Java中容易遗漏的常用的知识点( 三 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
在这里插入图片描述


在这里插入图片描述
兄弟们,小白编写不易。希望各位兄弟们,点赞评论收藏加关注。小白在此谢谢各位老爷们,也祝福和我一样面临考试的兄弟们高分通过。
在这里插入图片描述
对于白嫖的兄弟们,
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45791445/article/details/106613881