JAVA学习DAY-4

目录

一、NPE

1.什么是NPE?

2.什么情况下会发生NPE?

3.如何防止NPE?

二、new关键字的作用

 1.用于在堆区造数组

       

2.用于在堆区造对象

无参构造方法存在的意义

带参构造方法存在的意义

三、数组和对象的区别

1.数组

2.对象

3.不同之处

四、基本数据类型对应的引用数据类型

五、操作数组的函数

1.正序遍历

2.倒序遍历

3.数组求和

 4.求最大值

5.求最小值

6. 求平均数

 7.数组扩容

8.数组中插入元素

9.数组中删除元素

10.反转数组

11.冒泡排序

六、官方的Arrays工具类

七、二维数组

1.二维概述

2.二维数组的定义

八、类和对象

九、成员变量

十、构造方法

 十一、成员方法

 十二、this指针

1.引用成员变量

2.调用类的构造方法

3.返回对象的值

十三、什么是零值


一、NPE

1.什么是NPE?

NPE是空指针异常

2.什么情况下会发生NPE?

当程序运行中,试图在需要对象的地方使用某一个对象时,发现对象为 null ,此时抛出该异常。这种情况包括:

  • 调用 null 对象的实例方法。

  • 访问或修改 null 对象的字段。

  • 将 null 作为一个数组,获得其长度。

  • 将 null 作为一个数组,访问或修改其时间片。

  • 将 null 作为 Throwable 值抛出。

3.如何防止NPE?

  当使用指针进行操作的时候,如果不确定是否为null,应该对指针做非空判断,判断指针为null时,使用new关键字开辟内存空间。

if(指针 == null ){

  指针 = new 。。。

}

二、new关键字的作用

 1.用于在堆区造数组

 new 数据类型 [长度]

      数组的构造器是系统默认就有的,任何一种数据类型都可以使用数组构造器来构造数组

例如:new int [10]

2.用于在堆区造对象

  new 构造方法 ()

      1)对象的构造器是java类里面提供的

      2)对象的构造方法可以自定义

         1.构造方法使用public修饰

         2.构造方法没有返回值类型(连void都没有)

         3.构造方法的名字必须与当前类名相同

         4.构造方法的局部有一个特殊的this指针指向当前对象

        5.如果一个类没有手动制定构造方法,则编译器会提供一个默认的无参构造方法;

          如果手动制定了构造方法,则编译器将不再提供默认的无参构造方法。

例如:new Student()

       这个new后面的Student()是一个无参构造方法,是编译器给你自动生成的,在字节码文件中可以看到它。

 

三、数组和对象的区别

1.数组

数组的定义不能超出类型的范围

数组中所有元素都是同一种数据类型

数组中的元素没有名字,只有索引号

int[] arr = new int [10]

10个元素全是int,只能存储10个整数

2.对象

  对象就是一个真实世界中的实体,对象与实体是一一对应关系的,意思就是现实世界的每一个实体都是一个对象,所以对象是一个具体的概念。

3.不同之处

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

(2)调用方法不同

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

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

四、基本数据类型对应的引用数据类型

引用类型有null值

基本数据类型对应的引用类型
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

 数组的默认类型

其中char类型数组的默认值:

五、操作数组的函数

1.正序遍历

2.倒序遍历

3.数组求和

 4.求最大值

5.求最小值

6. 求平均数

 7.数组扩容

8.数组中插入元素

9.数组中删除元素

10.反转数组

11.冒泡排序

六、官方的Arrays工具类

Arrays:针对数组进行操作的工具类。比如说排序和查找。没有构造,方法全部是静态

静态函数用  类名.  构造

成员方法用  new对象  指针

package SecondArrays;

import java.util.Arrays;

public class SecondApp {
    public static void main(String[] args) {
        int[] app = {1, 2, 6, 54, 65, 73};
        System.out.println(app);// 打印的是数组在内存中的地址

//       1.把数组转化成字符串 Arrays.toString(array);
        System.out.println(Arrays.toString(app));

//        2. 比较数组
        int[] app2 = {1, 2, 6, 54, 65, 73};
        System.out.println("== : "+ (app == app2));// 涉及到内存中数组存储的方式,所以会返回false (后面会解释)

        System.out.println("Arrays.equals : "+ Arrays.equals(app, app2));

        int[] app3 = {1, 2, 54, 65, 73};
        System.out.println("Arrays.equals app app3 : "+ Arrays.equals(app, app3));

//        3. 排序数组
        int[] app4 = {78, 63, 99, 56, 79, 1, 23, 33, 63};
        System.out.println("原数组" + Arrays.toString(app4));

        Arrays.sort(app4);

        System.out.println("排序后的数组" + Arrays.toString(app4));

//        4. 数组的复制Arrays.copyOf
        int[] app5 = Arrays.copyOf(app4, 5);
        int[] app6 = Arrays.copyOf(app4, 15);
        System.out.println(Arrays.toString(app5));
        System.out.println(Arrays.toString(app6));

        /**@brief
         * 先前提到过,数组确定下来,长度就会固定
         * 所以可以用复制的方法,对数组进行扩容
         * 将原数组的值放在更大的数组中
         * 而不是去改变原数组
         */
        int[] nums = {5, 10, 23, 6, 36, 69};
        // 覆盖掉,得到一个最新的值
        nums = Arrays.copyOf(nums, nums.length + 1);
        nums[nums.length - 1] = (int) (Math.random() * 16 + 1);
        System.out.println(Arrays.toString(nums));
        /**func
         * 用这样的方式对数组去扩容
         * 其实没有改变原数组
         * 而是换了一个新数组 替换
         */
    }
}

七、二维数组

1.二维概述

1、二维数组其实就是一个特殊的一维数组,一维数组中每个元素就是一个一维数组

2、三维数组又是一个特殊的二维数组

2.二维数组的定义

        int[][] a=new int[10][10];
        String[][] b=new String[10][10];

八、类和对象

字节码文件就是类

类和对象的关系:

   类是静态的,对象是动态的。

  类是对象的模板,对象是在运行时用new关键字分配内存空间造出来的。

  类定义了对象将会拥有的特征(属性)和行为(方法)
  类是对象的类型,对象是类的实例

九、成员变量

十、构造方法

 十一、成员方法

成员方法可以操作对象中的数据

成员方法一定在构造方法之后被调用

无参构造方法存在的意义

new Student()在堆区里面构造一个对象,对象中的元素存储的数据还未知的时候,可以使用无参构造方法。后续的代码在获得数据以后,可以通过指针操作对象,读写数据。

带参构造方法存在的意义

在堆区里面构造一个对象的时候,已经很明确知道对象中存储的是什么内容,就可以使用带参构造方法更加便捷。

 

 十二、this指针

只在构造方法中有

1.引用成员变量

2.调用类的构造方法

public class Student { //定义一个类,类的名字为student。
 public Student() { //定义一个方法,名字与类相同故为构造方法
  this(“Hello!”);
 }
 public Student(String name) { //定义一个带形式参数的构造方法
 }
}
  this关键字除了可以调用成员变量之外,还可以调用构造方法。在一个Java类中,其方法可以分为成员方法和构造方法两种。
 

3.返回对象的值

如在代码中,可以使用return this,来返回某个类的引用。此时这个this关键字就代表类的名称。如代码在上面student类中,那么代码代表的含义就是return student。可见,这个this关键字除了可以引用变量或者成员方法之外,还可以作为类的返回值

十三、什么是零值

        定义数据类型后的初始默认值:

                byte 0;

                short 0;

                int 0;

                long 0;

                float 0.0;       

                double 0.0

                char \u0000

                Boolean false;

                string null。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值