我是靠谱客的博主 寒冷花瓣,这篇文章主要介绍数组1234数组数组的定义 数组的初始化 1.什么是NPE,什么情况下会发生NPE2.new关键字的作用构造方法new 关键字3.数组和对象的区别 4.基本数据类型对应的引用数据类型 5.正序遍历数组​5.倒序遍历数组6.数组求和​7.数组求最大值和最小值8.数组求平均数 9.数组扩容的策略10.数组中插入元素​ 11.数组中删除元素​12.反向输出数组元素14.官方的Arrays工具类15.二维数组16.类和对象17.成员变量18.构造方法20.this关键字,现在分享给大家,希望可以做个参考。

目录

数组

数组的定义

数组的初始化

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

2.new关键字的作用

构造方法

存储一个学生信息

数据表存储在磁盘文件中

new 关键字

无参构造方法存在的意义

带参构造方法存在的意义

3.数组和对象的区别 

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

5.正序遍历数组

​编辑​

5.倒序遍历数组

6.数组求和

​编辑​

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

数组求最大值

​编辑​

数组求最小值

8.数组求平均数

 9.数组扩容的策略

10.数组中插入元素

​编辑​

 11.数组中删除元素

​编辑​

14.官方的Arrays工具类

15.二维数组

16.类和对象

17.成员变量

18.构造方法

20.this关键字

this


数组

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

存储在一个连续的内存块中的相同数据类型(引用数据类型)的元素集合。

数组中的每一个数据称之为数组元素,数组中的元素以索引来表示其存放的位置,索引(下标)从0开始。

数组的定义

第一种方式:类型[] 数组名; 如 int[] nums; 

第二种方式:类型数组名[]; 如 int nums[];

大多数Java程序员喜欢使用第一种风格,因为它把数据类型int[],和变量名num分开了


数组的初始化


Java中数组必先初始化后才能使用.

初始化就是给数组元素分配内存,并为每个元素赋初始值。

初始化数组的两种方式:

- 静态初始化:
语法格式:类型[] 数组名 = new 数组类型[]{元素1,元素2,元素3,...元素n};
简化语法:类型[] 数组名 = {元素1,元素2,元素3...元素n};

- 动态初始化:
如果我们事先不知道数组里存储哪些数据,只知道需要存储数据的个数,此时可以使用动态初始化方式。

动态初始化:初始化时由我们指定数组的长度,系统自动为数组元素分配初始值。
格式:类型[] 数组名 = new 数组类型[数组长度];

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

int [ ] arr = new int [10];

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

需要一种数据类型可以高度自定义的数据结构

 

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

“NPE是NullPointerException的缩写,是JAVA里臭名昭著的空指针,一般指对一个空对象(null)进行了操作而出现的问题。”


当一个变量的值为 null 时,在 Java 里面表示一个不存在的空对象,没有实际内容,没有给它分配内存,null 也是对象成员变量的默认值。

1) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。

       反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
2) 数据库的查询结果可能为 null。

3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。

4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。

5) 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。

6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。

       正例:使用 JDK8 的 Optional 类来防止 NPE 问题。

 

2.new关键字的作用

         Student s=new Student();  的作用就是

             1.加载Student.class文件进内存。

             2.在栈内存为s开辟空间

             3.在堆内存为 学生 对象开辟空间

、​

            4.对 学生对象的成员变量 进行默认初始化

             5.对 学生对象的成员变量 进行显示初始化

             6.通过 构造方法对学生对象 进行成员变量赋值

             7.学生对象初始化完毕,把对象变量赋值给s变量

说这么多,总结下来就是:

              1.Java关键字new是一个运算符。与+、-、*、/等运算符具有相同或类似的优先级。

              2.创建一个Java对象需要三部:声明引用变量、实例化、初始化对象实例。

              3.实例化:就是“创建一个Java对象”-----分配内存并返回指向该内存的引用。

              4.初始化:就是调用构造方法,对类的实例数据赋初值。

构造方法

存储一个学生信息

学号 int 

姓名 String

年龄 byte

性别 char

​

字节码文件就是类

类是对象的模板

对象是运行时产生的

数据表存储在磁盘文件中

这是一张二维表

由行和列组成

行和列有单元格组成

int

varchar

String

intchar
nonameagesex
1张飞20男
2赵云21男
3马超22男
4关羽23男
5黄忠24男

new 关键字

1.用于在堆区造数组

new 数据类型 [ 长度 ]

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

例如:new int [ 10 ]

2.用于在堆区造对象

new 构造方法()

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

​

例如:new Student();

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

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

1.构造方法使用public修饰

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

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

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

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

​

无参构造方法存在的意义

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

​

带参构造方法存在的意义

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

​

3.数组和对象的区别 

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

                                   数组的数据没有”名称”(name),对象的数据有”名称”(name)。

数组

 

(2)调用方法不同

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

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

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

​

基本类型与对应的引⽤类型对应关系)
                            1> byte       ------    Byte
                            2> short      ------   Short
                            3> int          ------    Integer
                            4> long        ------    Long
                            5> char       ------    Character
                            6> float       ------    Float
                            7> double   ------    Double
                            8> boolean ------    Boolean

左边和右边的区别是什么

int a 没有null值(没有空值)

integer a = null (有空值)


5.正序遍历数组

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]);//println 是换行 ,print是不换行
System.out.print(',');
//System.out.println(arr[i]);
}
}

​

5.倒序遍历数组

public static void reverse() {
for (int i = arr.length - 1; i >= 0; i--) {
System.out.print(arr[i]);//println 是换行 ,print是不换行
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("n数组的和" + sum);
//100.fori 是正序循环
//arr.length.fori
//100.forr 是逆序循环
//arr.length.forr
}

​

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(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];
}
}

​

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("n数组中的平均值:" + sum/ arr.length);
}

 ​

 9.数组扩容的策略

public static void dilatation() {
//数组是一种定长的数据结构
//数组扩容的策略: 1. 创建新数组 2. 把原数组的元素转移到新数组中 3. 把新数组的地址赋给原数组的指针
Integer[] newArr = new Integer[arr.length + arr.length / 2];
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
}
arr = newArr;
}

​

10.数组中插入元素

public static void insert(int insert,int e) {
int empty = -1;//用于交换式的中间变量
//在数组中的指定位置插入一个元素,并不会对其他元素造成影响
//例如:在arr[5]的位置插入33
//arr[5]=33 这样写不是插入 是修改
//1.找到数组中第一个null的位置
for (int i = 0;i<arr.length ; i++) {
if (arr[i] == null){
empty = i;
break;}
}//2. 从第一个为空的位置开始后移
for (int i = empty; i>5;i--){
arr[i] = arr[i-1];
}
arr[insert] = e;
iterator();
}
//插入的策略是
//1.从插入的索引位置开始,后面的元素后移一位,空出指定的位置
//2.再把元素存储的指定位置
}

​

 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 fanzhuan(int fanzhuan){
for (int i = 0; i < arr.length/2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
iterator();

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

 比较相邻的元素,如果第一个比第二个大,就交换他们两个

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 temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}

14.官方的Arrays工具类

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

成员方法,先构造对象(new 对象),然后通过指针去调用,成员方法有this 去操作

15.二维数组

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

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

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

16.类和对象

类的特点

类是对象的数据类型。

类是具有相同属性和行为的一组对象的集合

类是Java程序的基本组成单位

17.成员变量

public class
ClassName{
成员变量
public void printNumber(){
// 其他代码
}
}

18.构造方法

 第一:修饰符列表目前统一写:public。千万不要写public static。

 第二:构造方法名和类名必须一致。

 第三:构造方法不需要指定返回值类型,也不能写void,写上void表示普通方法,就不是构造方法了。

  

19.成员方法

​

20.this关键字

this

this修饰的变量用于指代成员变量

(方法的形参与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量)

用于解决局部变量隐藏成员变量。

运用this来区别

​

最后

以上就是寒冷花瓣最近收集整理的关于数组1234数组数组的定义 数组的初始化 1.什么是NPE,什么情况下会发生NPE2.new关键字的作用构造方法new 关键字3.数组和对象的区别 4.基本数据类型对应的引用数据类型 5.正序遍历数组​5.倒序遍历数组6.数组求和​7.数组求最大值和最小值8.数组求平均数 9.数组扩容的策略10.数组中插入元素​ 11.数组中删除元素​12.反向输出数组元素14.官方的Arrays工具类15.二维数组16.类和对象17.成员变量18.构造方法20.this关键字的全部内容,更多相关数组1234数组数组的定义内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(335)

评论列表共有 0 条评论

立即
投稿
返回
顶部