Day-04

目录

1.什么是NPE,什么情况下会发生NPE      如何防止NPE?当你使用指针进行操作的时候,如果不确定指针是否为null应该对指针做非空判断,判断指针为null时,使用new关键字开辟内存空间if (指针 == null) { 指针 = new ...}

2.   new关键字的作用

3.数组和对象的区别

4.基本数据类型对应的引用数据类型

5.正序逼历数组,倒序逼历数组

6.数组求和

7.数组求最大值和最小值

8.数组求平均数

9.数组扩容的策略

10.数组中插入元素

11.数组中删除元素

12.反转数组

13.使用冒泡排序算法排序数组

14.官方的Arrays工具类

15.   二维数组

16.类和对象

17.成员变量

18.构造方法

19.成员方法

20.   this关键字

21.什么是零值


1.什么是NPE,什么情况下会发生NPE
      如何防止NPE?当你使用指针进行操作的时候,如果不确定指针是否为null应该对指针做非空判断,判断指针为null时,使用new关键字开辟内存空间if (指针 == null) { 指针 = new ...}

NPE(java.lang.NullPointerException):空指针异常

1.返回类型为基本数据类型,return包装数据类型的对象时,自动拆箱有可能产生NPE。
2.数据库的查询结果可能为null。
3.集合里的元素即使isNotEmpty,取出的数据元素也可能为null。
4.远程调用返回对象时,一律要求进行空指针判断,防止NPE。
5.对于Session中获取的数据,建议NPE检查,避免空指针。
6.级联调用obj.getA().getB().getC();一连串调用,易产生NPE。
 


2.   new关键字的作用

new关键字用于创建一个对象,在其创建对象的过程中大致经历了一下三个步骤;

1、将类加载到方法区

JVM首先会检查这个new指令的参数能否在常量池中定位到一个类的符号引用;如果找不到就将该类加载到方法区并经过解析和初始化等步骤,计算实例化对象所需要的内存;为类的静态变量赋予正确的初始值。

2、在堆中开辟一块内存用于存储新创建的对象

将类实例化出一个新的对象,根据类加载时计算所需的内存大小;在堆中开辟一块内存,用于存储新对象的成员属性和方法区地址的引用。成员方法引用指向方法区中该对象对应的方法。

3、在栈中创建指向对象的引用

在栈中创建一个栈针,用于指向堆中创建的对象。
 


3.数组和对象的区别

(1)创建方式不同:数组表示有序数据的集合,而对象表示无序数据的集合。数组的数据没有”名称”(name),对象的数据有”名称”(name)。

(2)调用方法不同

(3)对象键值唯一,数组可以重复

(4)对象没有长度,不能用for循环


4.基本数据类型对应的引用数据类型

java 中一共分为 8 种基本数据类型:

byte、short、int、long、float、double、char、boolean

java 为每种基本类型都提供了对应的封装类型:

Byte、Short、Integer、Long、Float、Double、Character、Boolean

5.正序遍历数组,倒序遍历数组

通过for循环就可以遍历数组。因为数组的每个元素都可以通过索引来访问,因此,使用标准的for循环可以完成一个数组的遍历:

正序遍历数组:

倒序遍历数组:

6.数组求和


7.数组求最大值和最小值

8.数组求平均数


9.数组扩容的策略

数组扩容的策略:1.创建新数组 2.把原数组中的元素转移到新数组中 3.把新数组的地址赋给原数组

10.数组中插入元素

11.数组中删除元素

12.反转数组


13.使用冒泡排序算法排序数组

14.官方的Arrays工具类

Arrays类是一个工具类,其中包含了数组操作的很多方法。这个Arrays类里均为static修饰的方法(static修饰的方法可以直接通过类名调用),可以直接通过Arrays.xxx(xxx)的形式调用方法。

1)intbinarySearch(type[]a,typekey)

使用二分法查询key元素值在a数组中出现的索引,如果a数组不包含key元素值,则返回负数。调用该方法时要求数组中元素己经按升序排列,这样才能得到正确结果。

2)intbinarySearch(type[]a,intfromIndex,inttoIndex,typekey)

这个方法与前一个方法类似,但它只搜索a数组中fromIndex到toIndex索引的元素。调用该方法时要求数组中元素己经按升序排列,这样才能得到正确结果。

3)type[]copyOf(type[]original,intlength)

这个方法将会把original数组复制成一个新数组,其中length是新数组的长度。如果length小于original数组的长度,则新数组就是原数组的前面length个元素,如果length大于original数组的长度,则新数组的前面元索就是原数组的所有元素,后面补充0(数值类型)、false(布尔类型)或者null(引用类型)。

4)type[]copyOfRange(type[]original,intfrom,intto)

这个方法与前面方法相似,但这个方法只复制original数组的from索引到to索引的元素。

5)booleanequals(type[]a,type[]a2)

如果a数组和a2数组的长度相等,而且a数组和a2数组的数组元素也一一相同,该方法将返回true。

6)voidfill(type[]a,typeval)

该方法将会把a数组的所有元素都赋值为val。

7)voidfill(type[]a,intfromIndex,inttoIndex,typeval)

该方法与前一个方法的作用相同,区别只是该方法仅仅将a数组的fromIndex到toIndex索引的数组元素赋值为val。

8)voidsort(type[]a)

该方法对a数组的数组元素进行排序。

9)voidsort(type[]a,intfromIndex,inttoIndex)

该方法与前一个方法相似,区别是该方法仅仅对fromIndex到toIndex索引的元素进行排序。

10)StringtoString(type[]a)

该方法将一个数组转换成一个字符串。该方法按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号,和空格隔开。


15.   二维数组

    1、二维数组其实是一个特殊的一维数组,特殊在这个一维数组当中的每一个元素是一个一维数组。
              int[] array ={86,79,50}; // 一维数组
              int[][] a ={ {16,9,3,6}, {9,7,3,90}, {6,76,0} }; // 二维数组
        3、二维数組 静态初始化
         int[][] a ={ {16,9,3,6}, {9,7,3,90}, {6,76,10} };
 


16.类和对象

类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。

可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的

17.成员变量

        成员变量也称属性,是事物静态特征的抽象。成员变量分为两种:类的成员变量和对象的成员变量(又称为实例变量)

声明成员变量语法如下:

[public|protected|private][static][final]<type><variable_name>
各参数的含义如下:
public、protected、private:用于表示成员变量的访问权限。
static:表示该成员变量为类变量,也称为静态变量。
final:表示将该成员变量声明为常量,其值无法更改。
type:表示变量的类型。
variable_name:表示变量名称。
 

18.构造方法

 定义:就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。
    概念:构方法是一种特殊的“成员方法”
         1,构造方法作用:(1)构造出来一个类的实例 (2)对构造出来个一个类的实例(对象)初始化
         2,构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有
         3,主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的
         4,类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法
         5,不能被static、final、synchronized、abstract和native修饰
         6,构造方法在初始化对象时自动执行,一般不能显式地直接调用.
            当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应
            完成构造函数的调用]
         7,构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动
               但是经常将他设计为进行各种初始化活动,比如初始化对象的属性
         8,构造代码块:
               (1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行
                  (2)构造代码块和构造函数的区别:
                       构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
         9,自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。
                  如果写了一个有参的构造方法,就一定要写无参构造方法。一般情况下,我们自定义的类都要手动给出无参构造方法。

19.成员方法

        成员方法描述对象所具有的功能或操作,反映对象的行为,
是具有某种相对独立功能的程序模块。它与过去所说的子程序、
函数等概念相当。一个类或对象可以有多个成员方法,对象通过
执行它的成员方法对传来的消息作出响应,完成特定的功能。成
员方法一旦定义,便可在不同的程序段中多次调用,故可增强程
序结构的清晰度,提高编程效率。
 

20.   this关键字

通过this关键字可以明确的访问一个类的成员变量,解决成员变量与局部变量名称冲突问题

通过this关键字调用成员方法

在构造方法中访问构造方法使用this([参数1,参数2,…])

21.什么是零值
 

零值不是任何实例。null 仅仅是一个标识符,标识这个对象还没初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值