6月24日

这篇博客详细介绍了Java中的NullPointerException,强调了在使用指针时进行非空判断的重要性。内容涵盖new关键字的用途,数组与对象的区别,基本数据类型与其引用类型的关系,以及数组的各种操作,包括遍历、求和、求最大值、最小值、平均数、扩容、插入、删除、反转和排序。此外,还讨论了Java官方的Arrays工具类的使用方法和二维数组的概念。博客还涵盖了类与对象、成员变量、构造方法、成员方法、this关键字及其在编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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 ...} 

NullPointerException 空指针异常

指针是null时会发生NPE

当指针是null时,不允许通过指针进行操作。

2.new关键字的作用 

1.用于在堆区造数组
new 数据类型[长度]
数组的构造器是系统默认就有的,任何一种数据类型都可以使用数组构造器构造数组
例如:new int[10]

2.用于在堆区造对象
new 构造方法()
对象的构造器是类里面提供的
例如:new Student();
这个new后面的Student()是一个方法,是编译器给你自动生成的,在字节码文件中可以看到对象的

在内存开辟堆区空间,并返回内存空间的内存地址

构造方法可以自定义
1.构造方法使用public修饰
2.构造方法没有返回值类型(void也没有)
3.构造方法名字必须与类名相同
4.构造方法的内部有一个特殊的this指针,指向当前对象
5.如果一个类没有手动指定构造方法,则编译器会提供一个默认的无参构造方法,如果手动指定了构造方法,则编译器将不再提供默认的无参构造方法。


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

带参构造方法存在的意义
在堆区里面构造一个对象

3.组和对象的区别

数组:

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

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

对象:

可以高度自定义的数据结构

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

基本数据类型         引用数据类型

byte                       Byte

short                      Short

int                          Integer

long                       Long

float                       Float

double                   Double

char                       Character

boolean                 Boolean      

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

输入"长度.for"可直接完成遍历

正序遍历数组函数部分

public static void iterator(){
        //正向便利,循环变量i当作数量的索引,都是从0开始(因为数组的索引都是从0开始)
        //到arr,length结束,length是数组的长度
        //循环变量i只能<length,不能<=length,或是i<=arr.length-1
        for (int i =0;i<arr.length;i++){
            System.out.print(arr[i]);
            System.out.print(",");
        }
    }

倒序遍历数组函数部分

    public static void reverse(){
            for (int i =arr.length-1;i>=0;i--){
                System.out.print(arr[i]);
                System.out.print(",");
        }
    }

输出

6.数组求和

    public static void sum(){
        //累加求和;遍历数组,累加所有元素
        int sum=0;
        for (int i = 0; i < arr.length; i++) {//遍历整个数组
            if(arr[i]==null)
                break;
            sum+=arr[i];
        }
        System.out.println("数组求和:"+sum);
    }

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

    public static void max(){
        //声明变量max存储最大数,并默认第一个数是max
        int max=arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==null)
                break;
            if(arr[i]>max){
                max=arr[i];
            }
        }
        System.out.println("arr中的最大数是:"+max);
    }
    public static void min(){
        int min=arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]==null)
                break;
            if(arr[i]<min){
                min=arr[i];
            }
        }
        System.out.println("arr中最小的数是:"+min);
    }

8.数组求平均数 

    public static void avg(){
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==null)
                break;
            sum+=arr[i];
        }
        System.out.println("arr数组的平均数是:"+sum/arr.length);
    }

9.数组扩容的策略

1.创建新数组

2.把原数组的元素转移到新数组中

3.把新数组的地址给原数组的指针

10.数组中插入元素

插入的策略是:

1.从插入的索引位置开始,后面的元素后移一位,空出指定的位置

2.再把元素存储在指定的位置

 

 

 将数据类型int变为对应的引用数据类型Integer

    public static void insert(int insert,int e){//记录需要插入的索引
        //在数组中的指定位置插入一个元素,并且不会对其他元素造成影响
        //例如:在arr[5]的位置插入33
        //arr[5]=33,不是插入而是修改
        //1.找到数组中第一个null的位置
        int empty=-1;//记录第一个不为空的索引
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==null){
                empty=i;
                break;
            }
        }
        //2.从第一个为空的位置开始后移
        for(int i=empty;i>4 ;i--){
            arr[i]=arr[i-1];
        }
        arr[insert]=e;
        System.out.print("插入的元素:");
        iterator();

    }

11.数组中删除元素

 public static void remove(int remove){
        // 参数remove是调用方指定的需要移除的索引
        for (int i = remove; i < arr.length; i++) {
            if(arr[i] == null){
                arr[i-1] = null; break;
            }
            arr[i] = arr[i+1]; }
        iterator();
    }

12.反转数组

 public static void trans(){
        for (int i = 0; i < arr.length/2; i++) {
            int emp = arr[i];
            arr[i]=arr[arr.length-1-i];
            arr[arr.length-1-i]=emp;
        }
    }
    public static void poo(){
        
    }

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

 public static void poo(){
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
                if(arr[j]<arr[j+1]){
                    int emp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=emp;
                }
            }
        }
    }

14.官方的Arrays工具类 

1.Arrays.toString(int [ ] arr); 将基本数据类型的数组转换成字符串。如byte [ ],boolean [ ]。

2.Arrays.sort(int  [ ] arr) 数组排序。排序后是修改了arr里的值,不返回参数。

3.Arrays.equals(int [ ]arr1, int [ ]arr2) 比较arr1和arr2数组,如果下标对应值都相等,则返回true,否则返回false。

 4.Arrays.binarySearch(int [ ] arr, key)  二分查找有序数组的key值,如果数组包含key,则返回该下标,如果没有找到返回一个负数。

5.void fill(type[] a, type val):该方法将会把a数组的所有元素都赋值为val。

6.void fill(type[] a, int fromIndex, int toIndex, type val):该方法与前一个方法的作用相同,区别只是该方法仅仅将a数组的fromIndex到 toIndex索引的数组元素赋值为val。

15.二维数组

定义:类型 数组名[行号][列号]

16.类和对象

对象 = 属性 + 方法
对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。

17.成员变量

成员变量分为两种:类的成员变量和对象的成员变量(又称为实例变量)

布尔型(boolean)变量默认值为false,

byte、short、int、long为0,

字符型为'\u0000'(空字符),浮点型(float double)为0.0,

引用类型(String)为null

18.构造方法

在创建对象的时候,对象成员可以由构造函数方法进行初始化

构造方法的方法名必须与类名一样

没有返回类型,也不能定义为void,在方法名前面不声明方法类型

不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域

不能由编程人员调用,而要系统调用

可以重载,以参数的个数,类型,或排序顺序区分

19.成员方法

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

20.this关键字

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

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

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

21.什么是零值 

数据类型的默认值

例如byte,short,int,long的为0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值