Java知识点整理 1 — 基础与集合

一.Java基础

1. Java与C++的区别:

  • Java与C++都是面向对象的语言,都支持封装、继承和多态。
  • Java不提供指针访问内存,确保了程序内存安全。
  • Java有自动内存管理垃圾回收机制(GC),无需程序员手动释放无用内存。
  • Java的类是单继承,C++支持多重继承,虽然Java的类不能多继承,但接口可以。
  • C++支持方法重载和操作符重载,Java只支持方法重载(操作符重载会增加复杂性,这与Java最初的设计思想不符)

2. 标识符与关键字:

标识符就是一个名字,关键字是Java中具有特殊含义的标识符。

Java中的关键字:

  • 访问控制:private、protected、public
  • 类、方法和变量修饰符:class、abstract、static、final、interface、extends、implements...
  • 程序控制:for、while、if、break、continue、return...
  • 8种基本类型:boolean、byte、long、int、short、char、double、float
  • 变量引用:super、this、void
  • 错误处理:try、catch、finally、throw、throws

3. 自增自减运算符:

  • ++/--:符号在前就先加/减(++a),符号在后就后加/减(a--)

4. 移位运算符:

  • << 左移,>>带符号右移,>>>无符号右移

5. continue、break、return的区别:

  • continue:跳出当前这次循环,继续执行下一次循环。
  • break:跳出整个循环体,执行循环下面的代码。
  • return:直接使用 return 结束方法执行,用于没有返回值函数的方法。
  • return value:return 一个特定值,用于有返回值函数的方法。

6. 包装类是在基本类型的基础上,继承了Object类,并提供了一些额外的功能:Byte、Short、Integer、Long、Double、Float、Boolean、Character。

7. 包装类与基本类型的区别:

  • 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被static修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,几乎所有对象实例都存在于堆中。
  • 成员变量包装类型不赋值就是null,而基本类型有默认值且不是null。
  • 包装类型可用于泛型,基本类型不可以。
  • 相比于包装类型,基本数据类型占用的空间非常小。

8. 成员变量与局部变量的区别:

  • 成员变量属于类,局部变量是在某个代码块或方法中定义的变量或者参数;成员变量可以被public、static、private等修饰符修饰,局部变量不能被访问控制修饰符和static修饰,但它们都能被final修饰。
  • 成员变量被static修饰,则属于类,没有使用static修饰,则属于对象。对象存在于堆内存中,局部变量存在于栈内存。
  • 局部对象会随着方法的调用而产生,调用结束而消失。成员变量随着对象的创建而存在。

9. 静态变量的作用:

静态变量也就是被static关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。

10. 静态方法与实例方法的区别:

  • 调用方式:调用静态方法无需创建对象。可以使用类名.方法名/对象.方法名的方式,实例对象只能通过对象.方法名的方式调用。
  • 访问类成员是否存在限制:静态方法只能访问静态成员,不允许访问实例成员,而实例方法则没有这种限制。

11. 重载与重写的区别:

  • 重载是指同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。【编译阶段】
  • 重写是指子类对父类允许访问的方法的实现过程进行重新编写。【运行阶段】
  • 重写中的“两同两小一大”原则:方法名和参数列表必须相同;子类方法返回值类型比父类更小或者相等,抛出的异常范围比父类更小或者相等;访问修饰符范围大于或等于父类。
  • 构造方法无法被重写。

12. 抽象类和接口的共同点和区别:

共同点:

  • 都不能被实例化
  • 都可以包含抽象方法
  • 都可以有默认方法的实现(Java 8可以使用default关键字在接口中定义默认方法)

区别:

  • 接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系。
  • 一个类只能继承一个抽象类,但是可以实现多个接口。
  • 接口中的成员变量只能是public、static、final类型的,不能被修改且必须有初始值,而抽象类的成员变量默认default,可在子类中被重新定义,也可被重新赋值。

13. 深拷贝、浅拷贝以及引用拷贝:

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
  • 深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
  • 引用拷贝:两个不同的引用指向同一个对象。

14. Object类的常见方法:

getClass、hashCode、equals、clone、toString、notify、notifyAll、wait、wait(timeout)、wait(timeout, nanos)、finalize

15. == 和 equals()的区别:

==

  • 对于基本数据类型来说,== 比较的是值。
  • 对于引用数据类型来说,== 比较的是对象的内存地址。

因为 Java 只有值传递,所以对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。

equals() 不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,因此所有的类都有equals()方法。

equals() 方法存在两种使用情况:

  • 类没有重写 equals()方法:通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的是Object类的equals()方法。
  • 类重写了 equals()方法:一般都重写 equals()方法来比较两个对象中的属
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Phoenixxxxxxxxxxxxx

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值