2021-07-21笔记

本文详细介绍了Java编程中的核心概念,包括数组操作、异常处理、内存管理、对象引用、成员变量、局部变量、静态关键字、this关键字的使用以及构造方法的作用和规则。通过对这些概念的深入理解,有助于提升Java编程能力。
摘要由CSDN通过智能技术生成

1.有一个数组int[] arr={1,2,3,4,5};

//通过arr[5]=4; 会出现什么结果

答:报异常:数组下标越界异常

改:

arr=null;

arr[5]=4;

结果:null1是空的意思。

当通过arr找不到保存的数组地址时,会爆出空指针异常。

异常是错误,程序一旦发生异常,会立刻终止

所以这里只会爆出空指针异常。

2.有一个数组 short[] s=new short[9]

假设数组的地址是1234,问最后一个元素的地址是:1244

(因为数据类型是short,一次两个字节)

3.只能用对象干活吗?对

Dog.play();-- 这里是在使用类名直接调用方法,实际是在用字节码文件对象掉用方法。

Person p=new Person();

p.eat();

3.可变参数

可以接收多个类型相同的实参,个数不限,使用方式与数组相同。

在调用方法的时候, 实参的数量可以写任意多个。

作用:简化代码,简化操作等。

注意点:

1.给可变参数传值的实参可以直接写,个数不限制,内部会自动的将他们放入可变数组中.

2.当包括可变参数在内有多个参数时,可变参数必须放在最后面,并且一个方法中最多只能有一个可变参数

3.当可变参数的方法与固定参数的方法是重载关系时,调用的顺序,固定参数的优先于可变参数的.

4.如果同时出现两个重载方法,一个参数是可变参数,一个是第一个是固定参数, 后面是可变参数.

我们就不能使用下面的方法调用.两个方法都不能使用。

4.匿名对象

  • 定义

匿名对象就是没有名字的对象 因为没有名字,所以当我们想使用匿名对象实现功能时,只能在创建对象的这个时刻使用一次.一 旦使用完毕,这个对象我们就再也无法调用,变成了垃圾.系统会通过垃圾回收机制在某个时刻进 行内存回收---(垃圾回收机制在JVM处会讲).

  • 作用

内存很宝贵,使用匿名对象可以更好的使用内存(随用随建,用完更快回收内存),节省内存

5.多引用指向一个对象

原理说明

对象和数组都是引用数据类型,都是通过栈区中的引用(变量)保存堆区中的对象地址,所以当我们让多个引用同时保存一个对象的地址,通过任何一个变量都可以访问这个对象(这就是前面讲 过的址传递的原理)

6.成员变量

变量分类

  • 使用关键字static修饰的属性、方法,被称为静态属性、静态方法。

  • 没有使用关键字static修饰的属性、方法, 被称为非静态属性、非静态方法, 又被称为实例属性、实例方法。

空间分配

  • 静态的成员是属于类的,在类第一次被加载到内存中的时候,就已经分配空间了。

  • 非静态的成员是属于对象的,在实例化对象的时候分配空间。

访问

  • 静态成员需要使用类访问,非静态成员需要使用对象访问。

  • 静态方法中可以直接访问本类中的静态成员,不能直接访问本类中的非静态成员。

  • 非静态方法中可以直接访问本类中的静态成员,也可以直接访问本类中的非静态成员。

成员变量的特点:(这里特指非静态成员)(面试题)

1.在创建对象的时候会赋默认值

2.可以在类中定义变量的时候,直接赋值

3.非静态的成员变量可以在除了static修饰的方法外任何地方使用.

成员变量和局部变量的区别:(面试题)

1.作用域:成员变量是整个对象.局部变量是从定义开始到所在的函数/if/for结束

2.默认值:成员变量会有默认值,局部变量没有默认值,要想使用必须先赋值

3.释放机制:成员变量跟对象保持一致,通过垃圾回收机制回收,局部变量使用完立即释放

4.存放的位置:成员变量放在堆区中的对象中,局部变量放在栈区中的方法中.

7.static关键字

static定义

是一个关键字,被static修饰的成员就变成了静态的.具有保值功能

温馨提醒

如果某些属性是属于不同的对象, 每一个对象的值都不同, 可以设计为非静态。 例如人的名字。

如果某些属性是可以被所有的对象共享的, 每一个对象看到的值都是相同的, 可以设计为静 态。例如对象的数量。

class Student{
int age;//非静态成员变量
static int height;//静态成员变量
//静态方法
public static void jump(){
System.out.println("jump");
}
}
public class Demo2 {
public static void main(String[] args) {
Student s = new Student();
s.age = 10;//引用调用非静态的成员变量
//s.height = 23;//引用调用静态的成员变量
//Student.age = 20;//类名不能调用非静态成员
Student.height = 20;//类名只能直接调用静态成员
Student.jump();//类名调用静态方法
}
}
​

8.this关键字

概念

是一种引用数据类型,本身是一个关键字,用在类的实例方法或者构造方法中,代表的是当前的对 象,保存的是当前对象的地址 。

场景:当我们想在当前类的内部拿到当前对象的引用时,可以使用this 。

this的功能总结: 1.用来区分成员变量和局部变量 2.可以在构造方法内部调用其他重载的构造方法,提高代码的复用性,简化代码(具体实现见 构造方法小节)。

区分成员变量和局部变量

在类中, 使用方法时,为了更好的表示参数代表的成员变量意思,我们会将参数的名字和对应成 员变量的名字一致。 此时, 如果在方法内部直接使用名字来访问, 根据就近原则(在内存中 离方法的远近判断)优先访问的是局部变量(参数)。 因此, 需要使用this关键字表示对当前对 象的引用,访问成员变量,因为使用this访问的一定成员变量。

this关键字的省略

当需要访问的属性与局部变量没有重名的时候, this关键字可以写, 也可以不写。 当需要访问的属性与局部变量重名的时候, this关键字必须写, 不可以省略。

9.构造方法

概念

构造方法, 其实也是一个方法。 用于实例化对象, 在实例化对象的时候调用

和普通的方法的区别

  • 构造方法的名字,必须和类名一致。

  • 构造方法没有返回值,返回值类型部分不用写。

构造方法的意义

一般情况下,使用构造方法,是为了在实例化对象的同时,给一些属性进行初始化赋值。

构造方法的注意事项

  • 如果一个类中没有写构造方法, 系统会自动提供一个public权限的无参构造方法, 以便 实例化对象。

  • 如果一个类中写构造方法了, 此时系统将不再提供任何的默认的构造方法。

  • 多个构造方法之间是重载的关系

this在构造方法中的使用

注意点总结:

  • 1.不能自己调用自己---死循环

  • 2.不能相互调用----死循环

  • 3.this充当构造方法时,必须放在第一行

  • 4.this在作为方法的时候,只能充当构造方法,不能作为其他方法

  • 5.this的使用范围就是当前类的内部

  • 6.只有在非静态方法中,才可以使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值