我是靠谱客的博主 寒冷花瓣,最近开发中收集的这篇文章主要介绍数组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数组数组的定义 数组的初始化 1.什么是NPE,什么情况下会发生NPE2.new关键字的作用构造方法new 关键字3.数组和对象的区别 4.基本数据类型对应的引用数据类型 5.正序遍历数组​5.倒序遍历数组6.数组求和​7.数组求最大值和最小值8.数组求平均数 9.数组扩容的策略10.数组中插入元素​ 11.数组中删除元素​12.反向输出数组元素14.官方的Arrays工具类15.二维数组16.类和对象17.成员变量18.构造方法20.this关键字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部