目录
1.什么是NPE,什么情况下会发生NPE
NPE:NullPointerException 空指针异常
注意:java语言严格规定当前指针是null的时候,不允许通过指针进行操作
什么情况下会发生NPE:
1.返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。
2.数据库的查询结果可能为 null。
3.集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
4.远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
5.对于Session中获取的数据,建议进行 NPE检查,避免空指针。
6.级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。
如何防止NPE?很多方法都会出现NPE,因为null不能进行+操作,null不能进行>操作,null不能进行<操作 解决:if (arr[i]==null){break;}
当你使用指针进行操作的时候,如果不确定指针是否为null应该对指针做非空判断,判断指针为nu11时,使用new关键字开辟内存空间if(指针==null){指针=new...}
2. new关键字的作用:
new关键字的作用是在堆区开辟内存空间,并返回该内存空间的内存地址
1.用于在堆区造数组
new 数据类型[长度]
数据类型[长度]:数组的构造器(是系统默认就有的,任何一种数据类型都可以使用数组构造器来构造数组)
例如:new int[10],数组构造器只能用这个格式
2.用于在堆区造对象:
new 构造方法():
3.数组和对象的区别:
数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。
数组和对象的另一个区别是,数组的数据没有”名称”(name),对象的数据有”名称”(name)。
数组中所有的元素都是同一种类型
数组中的元素没有名字,只有索引
例如:int[] arr=new int[10]; 10个元素全是int,只能存储10个整数
4.基本数据类型对应的引用数据类型:
Java中的数据类型可以分为两大类:基本数据类型和引用数据类型。
例如:
5.正序遍历数组,倒序遍历数组:
正序遍历数组:
倒序遍历数组:
6.数组求和:
7.数组求最大值和最小值:
求最大值:
求最小值:
8.数组求平均数:
9.数组扩容的策略:
10.数组中插入元素:
11.数组中删除元秦:
12.反转数组:
13.使用冒泡排序算法排序数组:
14.官方的Arrays工具类:
JDK 提供了一个工具类专门用来操作数组的工具类,即 Arrays,该 Arrays 工具类提供了大量的静态方法,在实际项目开发中,推荐使用,这样既快捷又不会发生错误。
Arrays:针对数组进行操作的工具类。
15.二维数组:
二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
16.类和对象:
类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们的关系是,对象是类的实例,类是对象的模板。对象是通过new classname产生的,用来调用类的方法;类的构造方法 。
17.成员变量:
静态变量可以直接使用类名操作
成员变量不能使用类名操作
静态变量在类加载的时候初始化,可以被加载出来,成员变量在类加载的时候没有初始化,不能被加载出来
18.构造方法:
new 构造方法():对象的构造器,对象的构造器是类里面提供的
例如:new student();
这个new后面的student()是一个构造方法,是编译器给你自动生成的,在字节码文件中可以看到他
对象的构造方法可以自定义,可以自定义参数
1.构造方法使用public修饰
2.构造方法没有返回值类型(连void都没有)
3.构造方法的名字必须与当前类名相同,大小写也必须一样
4.构造方法的内部有一个特殊的this指针,指向当前对象
5.如果一个类没有手动指定构造方法,则编译器会提供一个默认的无参构造方法,如果手动指定了构造方法,则编译器不再提供默认的无参构造方法。
无参构造方法存在的意义?
new Student()在堆区里面构造一个对象,对象中的元素存储的数据还未知的时候,可以使用无参构造方法,后续的代码在获得数据以后,可以通过指针操作对象,读写数据
带参构造方法存在的意义?
在堆区里面构造一个对像,已经很明确知道对象中存储的是什么内容,就可以使用带参构造方法,更加便捷
19.成员方法:
成员方法就是对象所具有的动态功能。
成员方法基本格式如下: 访问修饰符:public(公共的);protected(受保护的);无修饰符和private(私有的)。 修饰符:对属性特征的描述:如static,final,abstract 等等。 返回值类型:方法返回数据的类型。 方法名称:任何合法标识符。 参数:可以有多个,使用逗号分隔。 方法体:该方法具体实现功能的地方。 构造函数:是特殊的成员方法,他的作用是创建对象并初始化成员变量。 构造函数定义规则:构造方法的方法名,必须和类名一致。 每个类都有一个隐藏的无参构造函数。
20. this 关键字:
this 关键字指代类的当前实例,还可用作扩展方法的第一个参数的修饰符。
用哪一个指针调用成员方法入栈执行,那么栈帧中的this就指向哪个对象,只有构造方法和成员方法有this,静态函数中没有this.
21.什么是零值:
零值是指当你声明变量(分配内存)并未显式初始化时,始终为你的变量自动设置一个默认初始值的策略。
'':空字符,"":空字符串,null空地址(真正意义上的空值)