数组
1.什么是NPE,什么情况下会出现NPE,如何防止NPE
NPE是指编程语言中的空指针异常,NullPointerException
当程序运行中,试图在需要对象的地方使用某一个对象时,发现对象为 null ,此时抛出该异常
当进行指针操作时,如果不确定指针是否为null,应该对指针做非空判断,判断指针为null时,使用new关键字开辟内存空间
写法:if(指针 == null) {指针 = new ...}
2.new关键字的作用
(1)在堆栈区制造数据 new 数据类型(长度)
(2)在堆栈区制造对象 new 构造方法()
3.数组和对象的区别
(1)调用方法不同
(2)对象没有长度
(3)对象值唯一,数组可以重复
4.基本数据类型对应的引用数据类型

数组默认类型

8种常用的数据类型分别是byte、short、int、long、char、boolean、float、double
引用数据的类型分3种:类、接口、数组;其中数组所使用的数据类型和引用的数据类型需要保持一致
5.数组的几种常用方式
(1)正序遍历

(2)倒序遍历

(3)数组求和

(4)求数组最大值和最小值
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int max = 0;
int min = 0;
max = arr[0];
for (int i = 0; i < arr.length; i++) {
if(arr[i]>max){
max = arr[i];
}
}
System.out.println("arr数组中最大的数是:"+max);
min = arr[0];
for (int i = 0; i < arr.length; i++) {
if(min>arr[i]){
min = arr[i];
}
}
System.out.println("arr数组中最小的数是:"+min);
}
(5)求数组平均数

(6)插入移除元素
public class demo{
static Integer[] arr = {10,48,67,36,54,23,47,9};
public static void main(String[] args){
System.out.println("\n测试插入元素");
insert(5,33);
System.out.println("\n测试移除元素:");
remove(3);
}
//在数组的指定位置插入一个元素,并且不会对其他元素造成影响
//例如:在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> insert; i--){
arr[i] = arr[i-1];
}
arr[insert] = e;
iterator();
}
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();
}
}
6.数组扩容的策略
(1)创建新数组
(2)把原数组的元素移动新数组汇总
(3)把新数组的地址赋给原数组的指针

7.反转数组
数组的反转:数组中的元素颠倒顺序 eg: 123456 反转后 654321
思路:本质就是交换两个变量的值
实现反转:就是把长度最远端的和最近端的俩值交换位置
定义两个变量保存最大值和最小值的索引
定义第三者变量使其最大值和最小值交换位置
最小值++、最大值–,再次交换位置
最小值索引大于最大值索引反转结束
准备一个需要反转的数组 int[] arr = {1,2,3,4,5,6}
定义两个索引变量,一个索引变量指向最小索引,一个索引变量指向最大索引
int min = 0;
int max = arr.length-1;
遍历数组,让两个索引变量产生变化
min++;
max--;
条件 min < max
交换最小索引元素和最大索引元素;需要定义第三方变量
int temp = 0;
temp = arr[min];// 把最小的索引元素赋值给第三方变量temp
arr[min] = arr[max];// 把最大的索引元素赋值给最小的索引元素
arr[max] = temp;// 把第三方变量的值赋值给最大索引的元素
————————————————
原文链接:https://blog.csdn.net/weixin_48722971/article/details/109731663
8数组实现冒泡排序
package chapter2;
public class demo4 {
public static void main(String args[]) {
int[] arr= {9,8,3,5,2};
System.out.print("原数组为:");
//冒泡排序前先循环打印原数组元素
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
//进行冒泡排序
//外层循环定义需要比较的轮数(两数比较,需要比较n-1轮)
for(int i=1;i<arr.length;i++) {
System.out.print("第"+i+"轮:");
//内层循环定义第i轮需要比较的两元素
for(int j=0;j<arr.length-1;j++) {
//如果前一个元素大于后一个元素则进行交换
if(arr[j]>arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
for(int k=0;k<arr.length;k++) {
System.out.print(arr[k]+" ");;
}
System.out.println();
}
//完成冒泡排序后循环打印数组元素
System.out.print("冒泡排序后数组为:");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
}
9Arrays工具类
package com;
import java.util.Arrays;
java.util.Arrays
/*
类包含一些实用的方法用于常见的数组操作,比如排序和查找
一可以使用sort或者parallelsort方法对整个数组或部分数组进行排序
一可以采用二分查找法(binarySearch方法)在有序数组中查找关键字
-可以采用equals 方法检测两个数组是否相等
-可以使用fill 方法填充整个数组或部分数组
一可以使用tostring方法来返回一个字符串
*/
public class Arrays工具类 {
public static void main(String[] args) {
int[] arr={8989,78,65,15,35,8,1,56,99,99,100};
//对数组进行排序
Arrays.sort(arr);
//查找一个数值 返回下标
int index= Arrays.binarySearch(arr,100);
System.out.println(index);
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+" ");
}
System.out.println('\n');
String st=arr.toString();
System.out.println(st);
}
}
10.二维数组
二维数组,本质上是以数组作为数组元素,即“数组的数组”
int a[3][3]={{1,2,3},{1,1,1}};
int b[3][3]{1,2,3,1,1,1};
11.类和对象
类是一种用户自定义的数据类型
包含
一、属性:数据
二、行为:函数
总的来说类里面有数据和函数
二、对象是什么:
使用类类型定义的变
三、类和对象的关系
类是对象的抽象(归纳总结)
对象是类的具体(实例)
类是具有相同属性和行为的对象的集合
对象是有具体数据值的类
12.成员变量
成员变量也称属性,是事物静态特征的抽象。成员变量分为两种:类的成员变量和对象的成员变量(又称为实例变量)
成员变量的定义
声明成员变量语法如下:
[public|protected|private] [static] <type> <variable_name>
各参数的含义如下:
public、protected、private:用于表示成员变量的访问权限。
static:表示该成员变量为类变量,也称为静态变量。
final:表示将该成员变量声明为常量,其值无法更改。
type:表示变量的类型。
variable_name:表示变量名称。
初始化的默认值如下:
整数型(byte、short、int 和 long)的基本类型变量的默认值为 0。
单精度浮点型(float)的基本类型变量的默认值为 0.0f。
双精度浮点型(double)的基本类型变量的默认值为 0.0d。
字符型(char)的基本类型变量的默认值为 “\u0000”。
布尔型的基本类型变量的默认值为 false。
数组引用类型的变量的默认值为 null。如果创建了数组变量的实例,但没有显式地为每个元素赋值,则数组中的元素初 始化值采用数组数据类型对应的默认值。
————————————————
原文链接:https://blog.csdn.net/weixin_61607257/article/details/121698659
18.构造方法
构造方法,是一种特殊的成员方法,它是一个与类同名的方法。
对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。
当类实例化一个对象时会自动调用构造方法。
构造方法和其他方法一样也可以重载。
总而言之,构造方法就是类构造对象时调用的方法,主要用来实例化对象。
二. 创建对象
类名 对象名 = new 类名();
例如: Student student1=new Student();
、
19.this关键字
关于Java语言中的this关键字:
1、this是一个关键字,翻译为:这个。
2、this是一个引用,this变量中保存了内存地址指向自身,this存储在JVM内存java对象内部。
3、创建1001个java对象,每一个对象都有this,也就说有100个不同的this
4、this可以实现出现在“实例方法中”当中,this指向当前正在执行这个动作的对象
1、this可以使用在实例方法中,不能使用在静态方法中。
2、this关键字大部分情况下可以省略,什么时候不能省略呢?
在实例方法中,或者构造方法中,为了区分局部变量和实例变量,
1、this除了可以使用在实例方法中,还可以用在构造方法中。
2、新语法:通过当前的构造方法去调用另一个本类的构造方法,可以使用以下语法格式:
this(实际参数列表);
通过一个构造方法1去调用构造方法2,可以做到代码复用。
但需要注意的是:“构造方法1”和“构造方法2” 都是在同一个类当中。
3、this() 这个语法作用是什么?
代码复用。
4、死记硬背:
对于this()的调用只能出现在构造方法的第一行。
————————————————
原文链接:https://blog.csdn.net/comper1/article/details/117161091
new关键字申请内存空间,并且擦除的一干二净-->用0覆盖
对应每一个数据类型的"零"值
基本数据类型
byte short int 0
long 0L
float 0.0F
double 0.0
char '\uuuu0' ==> nul
boolean false
引用数据类型
全部为null
Person person null
String str null
int[] arr null
null
是内存地址中非常特殊的东西!!!