学习Java04

1.什么是NPE,什么情况下会发生NPE

NPE 空指针异常(nullpointenrException)

Java 语言严格规定当指针是null的时候,不允许通过指针操作
当你使用指针进行操作的时候,如果不确定指针是否为null应该对指针做非空判断,判断指针为null时,使用new关键字开辟内存空间if(指针== null) {指针= new ...}

2.new关键字的作用

New关键字的作用是在堆区开辟内存空间,并且返回该内存空间的内存地址

可操作的索引永远是

3.数组和对象的区别

(1)用于在堆区造数组

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

例如 new int[]

(2)用于在堆区造对象

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

例如 new student()

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

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

- 数据类型图:


                                         ┏数值型━┳━整数型:byte short int long

              ┏基本数据类型━━┫             ┗━浮点型:float double

              ┃                         ┣字符型:char

数据类型╋                         ┗布尔型:boolean

              ┃                        ┏类(class)

              ┗引用数据类型━━╋接口(interface)

                                        ┗数组(array
 

- 基本数据类型

注意:

1、在基本数据类型中,除了boolean类型所占长度与平台有关外,其他数据类型长度都是与平台无关的。比如,int永远占4个字节(1 Byte = 8 bit)。

2、void不是基本数据类型

- 引用数据类型


引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。

在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。

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

正向遍历都是从0开始(因为数组的索引是从0开始的)

到arr。length 结束,length是数组的长度

循环变量i只能<length,不能<=length,或者是i <=arr

6.数组求和

累加求和,遍历数组,累加所有元素

 

 

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

声明变量max存储最大数,并默认第一个元素是max

 8.数组求平均数

9.数组扩容的策略

数组是一种定长的数据结构
数组扩容的策略:1 创建新数组2.把原数组的元素转移到新的数组在 3.把新数组的地址赋给原数组的指针

10.数组中插入元素 

找到数组中一个null的位置插入一个元素,并且不会对其他元素有影响

11.数组中删除元素 

12.反转数组

方法一:使用循环,交换数组中元素的位置

使用循环,在原数组中交换元素的位置:第一个元素与最后一个元素交换,第二个元素与最后一个元素交换,依此类推,直到结束。

例如,在数组[1,2,3,...,n-2,n-1,n]中,我们可以将1和n进行交换,2和n-1进行交换,3和n-2进行交换。

实现代码public class arrayReverse {

/*数组中元素位置进行交换*/

static void reverse(int a[], int n)

{

int i, k, t;

for (i = 0; i < n / 2; i++) {

t = a[i];

a[i] = a[n - i - 1];

a[n - i - 1] = t;

}

/*printing the reversed array*/

System.out.println("\n反转数组是:");

for (k = 0; k < n; k++) {

System.out.println(a[k]);

}

}

public static void main(String[] args)

{

int [] arr = {5, 6, 7, 8, 9};

System.out.println("原数组是: ");

for (int k = 0; k < arr.length; k++) {

System.out.println(arr[k]);

}

reverse(arr, arr.length);

}

}

输出:原数组是:

5

6

7

8

9

反转数组是:

9

8

7

6

5
 

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

第一步,从第一个元素开始,将相邻的两个元素进行比较,直到最后两个元素完成比较。如果前面的元素比后面的元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一趟的比较。

第二步,除了最后一个元素,将剩余的元素按照第一步的方法进行两两比较,这样就可以将数组中第二大的元素放到倒数第二个位置上。

第三步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。

总体而言,在冒泡排序中,程序的时间复杂度和空间复杂度随着程序的执行,均呈现递减趋势。
 

public class Example32{
    public static void main(String[] args){
        int[] arr={9, 8, 3, 5, 2};
        System.out.print("冒泡排序前:");
        printArray(arr);                                // 打印排序前的数组元素
        bubbleSort(arr);                                // 调用排序方法
        System.out.print("冒泡排序后:");
        printArray(arr);                                // 打印排序后的数组元素
    }
 
    // 定义打印数组方法
    public static void printArray(int[] arr){
        for(int i=0; i<arr.length; i++){                // 从第一个数组元素开始遍历数组元素
            System.out.print(arr[i]+" ");                // 输出数组元素,并加空格以控制格式
        }
        System.out.print("\n");                            // 完成一次调用后换行
    }
 
    // 定义冒泡排序方法
    public static void bubbleSort(int[] arr){
        for(int i=0; i<arr.length -1; i++){                // 外层循环,控制总共需要比较的趟数
            for(int j=0; j<arr.length -i -1; j++){        // 内层循环,控制每趟需要比较的次数
                if(arr[j] > arr[j+1]){                    // 比较相邻元素
                    // 以下三行代码用于交换两个元素
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
            System.out.print("第"+(i+1)+"轮排序后:");    // 每趟执行完后,输出提示信息
            printArray(arr);                            // 输出本趟执行后的结果
        }
    }
}

14.官方的Arrays工具类

Arrays 是JDK提供的操作数组的工具类,array类提供了动态创建和访问 Java 数组的方法。
arrays此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。主要有一下几种用法。
首先声明几个数组:

                int a[]={20,3,32,1,72,26,35};
                int b[]={3,5,7,8,54,23,9};
                int c[]={3,5,7,8,54,23,9};
 

                System.out.println("转换前:"+a);
                //数组转换字符串
                String str=Arrays.toString(a);       
                System.out.println("转换为字符串:"+str);

15.二维数组

两种初始化形式

    格式1: 动态初始化
数据类型 数组名 [ ][ ] = new 数据类型[m][n]
数据类型 [ ][ ]  数组名 = new 数据类型[m][n]
数据类型 [ ]   数组名 [ ] = new 数据类型[m][n]

举例:int [ ][ ]  arr=new  int [5][3];  也可以理解为“5行3例”

格式2: 静态初始化
数据类型 [ ][ ]   数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};

举例:int [ ][ ]  arr={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66},};

静态初始化可用于不规则二维数组的初始化


public static void main(String[]args){
        int [][] arr=new int[][]{{4,5,6,8},{2,3},{1,6,9}};
 
        System.out.println(arr.length);//输出行数
        System.out.println(arr[0].length);//输出列数
        
    }

 16.类和对象

类与对象时整个面向对象中最基础的组成单元。

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

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

17.成员变量

在 Java 中对象的属性也称为成员变量。为了了解成员变量,首先定义一个图书类,成员变量对应于类对象的属性,在 Book 类中设置 3 个成员变量,分别为 id、name 和 category,分别对应于图书编号、图书名称和图书类别 3 个图书属性。

18.构造方法 

在 Java 语言中使用成员方法对应于类对象的行为。以 Book 类为例,它包含了 getName() 和 setName() 两个方法,这两个成员方法分别为获取图书名称和设置图书名称的方法。

一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不返回值的选择,如果方法需要返回值,可以在方法体中使用 return 关键字,使用这个关键字后,方法的执行将被终止。

20. this关键字

1、this是一个关键字,翻译为:这个。
2、this是一个引用,this变量中保存了内存地址指向自身,this存储在JVM内存java对象内部。
3、创建1001个java对象,每一个对象都有this,也就说有100个不同的this
4、this可以实现出现在“实例方法中”当中,this指向当前正在执行这个动作的对象
 

21.什么是零值

零值是指当你声明变量(分配内存)并未显式初始化时,始终为你的变量自动设置一个默认初始值的策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值