java第四课

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

NPE全称叫:NullPointerException,中文意思是:空指针异常。

数组:数组是一连串的内存空间, 拥有多个相同数据类型的内存地址,数组本身也是一种数据类型。

数组由下标/索引(index)和元素(element)组成;数组的作用是利用指针指向在堆区中相对应的地址元素,当指针是null的时候,查询不到开辟的内存空间,因此不允许指针进行操作,系统会出现NPE

例如:定义一个普通类型的数组

 

定义一个对象数组:

 

 集合元素为null

 

包装类为null,拆箱报错 

 对象级联调用

 

 

 

 

        如何防止NPE?

因为NPE出现的关键是指针为null,所以当我们使用指针进行操作的时候,如果不确定指针是否为null,应该对指针做非空判断,判断指针为null时,使用new关键字开辟内存空间,来防止NPE出现

if(指针== null) {指针= new ...}

 

2.new关键字的作用

简单地说new的作用是在堆区开辟内存空间,并返回该内存空间的内存地址

具体来说:

1. 与栈区分配一个存储空间保存引用(固定的指针)。

2. 与堆区分配一片内存空间保存相应类的对象(引用数据类型的对象,如:数组、对象等)。

可用于在堆区构造数组和对象:构造数组------new 数据类型[长度]

                                                  构造对象-------new 构造方法()


3. 将堆区对象的首地址赋予栈区引用。

注意:使用 new 关键字时会调用类中的构造方法,对于有父类的类会首先调用其父类的构造方法。

构造数组的结构示意图:

 构造对象的例子:

Student stu;
stu = new Student();

在java中变量保存在栈内存中,对象保存在堆内存中。

在上面的例子,执行语句Student stu;
表示声明一个指向Student类对象的引用stu,这个引用stu保存在栈内存中。

执行语句:
stu = new Student();

1)new Student()表示创建一个Student类的对象,并在堆内存中分配空间;
2)stu = new Student();表示让stu这个引用变量指向这个Student类对象。

3.数组和对象的区别

数组和对象都是可以表示成数据的集合;

1)数组表示有序数据的集合,而对象表示无序数据的集合。
2)数组的数据没有”名称”,但是有对应的索引,比如arr[3];对象的数据有”名称”(属性名),而对象因为是无序数据的集合,所以不存在索引,用类名.属性名来表示。

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

.基本类型的访问是按值访问的,就是说你可以操作保存在变量中的实际的值。有如下特点:
1)基本数据类型的值是不可变的(我们不能给基本数据类型添加属性和方法);
2)基本数据类型的比较是值的比较(只有他们的值相等的时候才是相等的);
3)基本数据类型的变量是存放在栈里面的 

引用数据类型有三大类:

引用数据类型可以拥有属性和方法,属性又可以包括基本数据类型和引用数据类型。有如下特点:
1)引用数据类型可以拥有属性和方法,且值是可变的;
2)引用数据类型的值是同时保存在栈内存和堆内存的对象

数组中元素的默认值

byte

0

short

0

int

0

long

0

float

0.0

double

0.0

boolean

false

char

\u0000

引用类型1.数组2.类

null

引用类型有String、Integer等等……

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

6.数组求和

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

8.数组求平均数

9.数组扩容的策略

10.数组中插入元素

11.数组中删除元素

12.反转数组

反转可以说是倒序遍历:

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

14.官方的Arrays工具类

使用Arrays工具类,要先导入包即:import.java.util.Arrays

以下是实现六种功能的方法:

1、比较两个数组值是否相等: 结果为true、false.(布尔型不能比较)

   int []a={10,20,30};

   int []b={10,20,30};

   int []c={1,2,3};

boolean isEqual=Arrays.equals(a,b);

   System.out.println(isEqual);

   System.out.println(Arrays.equals(a,c));

//如果是字符串:

String[]s1={“ab”,”c”,”d”,”e”};

Arrays.sort(s1);

For(String s:s1){

     System.out.println(s);

}

2、fill方法:把整个数组里的每一个元素的值进行替换为val。(void fill(Arrays,val))

3、BinarySearch:找到元素在数组当中的下标。

String[]s3={“a”,”b”,”c”,”d”,”e”,”w”};

Int index=Arrays.binarySearch(s3,”g”);

     System.out.println(“该元素的下标是:”+index);

4、toString方法是把数组转换成字符串进行输出。(参数是数组,返回的是字符串)

int[] a1={1,2,3,4};

   System.out.println(Arrays.toString(a1));

即:【 String s1=Arrays.toString(a1);

   System.out.println(s1);】

5、copyof把一个数组复制出一个新数组(新数组的长度为length)

int[]ints1={11,22,33,44};

int[]ints2=Arrays.coypOf(ints1,2);

System.out.println(Arrays.toString(ints2));

6、sort方法,把数组中的元素按升序排序。【参数:除了布尔型都可以,类也可以】

例,输入六个数字,实现正序排列和倒序排列,并求其数字和

     Scanner input = new Scanner(System.in);

int[] score=new int[6];

int sum=0;

//让用户输入6个数字

for(int i=0;i<score.length;i++){

System.out.println("请输入第"+(i+1)+"个数字");

score[i]=input.nextInt();

sum+=score[i];

}

//sort:从小到大排序

Arrays.sort(score);

for(int i:score){

System.out.println(i);

}  

//sort:从大到小排序

Arrays.sort(score);

for(int i=score.length-1;i>=0;i--){

System.out.println(score[i]);

}System.out.println(sum);

15.二维数组

数据类型[][] 变量名=new数据类型[长度][长度];

16.类和对象

类的概念:
类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。

对象的概念:
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角 度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。

类与对象的关系:
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性(属性)和相同行为(方法)的对象。

类与对象的区别:
1,类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。

2,对象是类的一个具体。它是一个实实在在存在的东西。

3,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。

4,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
 

17.成员变量

变量在类的里面,函数的外面;没有用static修饰,可以称为成员变量

18.构造方法

  1:构造方法作用概述

  给对象的数据进行初始化

  2:构造方法格式

  方法名与类名相同

  没有返回值类型,连void都没有

  没有具体的返回值

  3:构造方法注意事项

  如果你不提供构造方法,系统会给出默认构造方法

  如果你提供了构造方法,系统将不再提供  构造方法也是可以重载的
 
 

19.成员方法

1:概述

  1:类包括成员变量和方法两部分。成员变量表示类的属性,一数据域的形式表达,方法是数据的操作的定义。

  2:在JAVA中,方法只能作为类的成员,也称为成员方法。方法操作类所定义的数据,以及提供对数据的访问的代码。大多数情况下,程序的其他部分都是通过类的方法和其他类的实例进行交互的。

  3:在类中,除了变量外的都是成员方法。

  4:方法中有一种是对成员变量进行初始化的,称为构造方法。构造方法之外的就是一般的方法了吧。

  5:所以说成员方法分为构造方法和一般的方法。
 
 2:成员方法的具体划分

  1:根据返回值

  有明确返回值方法

  返回void类型的方法

  2:根据形式参数

  无参方法

  带参方法

20. this关键字

首先,this关键字指向的是当前对象的引用

作用:

             this.属性名称                

                   指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)

21.什么是零值

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值