java易错知识点

  1. 继承下来的方法可能被覆盖,但实例变量不会被覆盖
  2. 继承不能滥用,多用组合,少用继承
  3. 类只能修饰为public和没有修饰符(表示包访问权限),不能用private
  4. 继承时不能降低访问方法的访问权限,比如父类方法A为public,子类不能将A改为private
  5. 所有的类其实都隐式的继承于Object类
  6. 实例变量(类中方法外的变量)会有默认值,例如0、null、0.0等,局部变量(类中方法内的变量)没有默认值。
  7. 一个类只能intend一个父类,却可以implement多个接口。
  8. 所有的对象都保存在堆上(又称为可垃圾回收的堆),方法调用和局部变量保存在栈上,实例变量在对象中,所以实例变量也在堆上。这个C++不一样。
  9. java中的变量只有两种,1.primitive变量。2.对象引用变量(注意不是对象,其实有点像C++中的指针,但绝不是指针)。
  10. 在一个对象中创建一个新的对象时,不会在这个对象中为这个新的对象预留分配空间,因为新的对象是在堆上重新分配空间,然后赋值给的是一个对象引用变量。至于这个引用变量占用多大空间因编译器而定了。这个和C++不同,C++取决于是否用new
  11. 一般在构造函数中,要创建一个不需要参数的构造函数,因为使用默认值时不需要指定大小
  12. 如果自己没有写构造函数,编译器会自动构造一个无参的构造函数,但是只要自己构造了一个带参的构造函数,编译器就不会再做这样的事了,需要自己构造一个无参的构造函数。
  13. supper()用来引用父类的构造函数,每个构造函数可以选择调用supper()或者this(),但不能同时用,需要放在构造函数中的第一行,this是在某个构造函数中调用同一个类中的另外一个构造函数。
  14. 静态的方法不能调用非静态的变量和方案。因为静态的方法不属于任何一个对象,而非静态的方案是属于对象,所以静态的方案是找不到非静态的方法的。
  15. 被final修饰的东西表示不能改变。静态的final变量表示常量。类被修饰表示不能被继承,方法被修饰表示不能被重载
  16. 在java 5.0后,每一个primitive主数据类型都有一个包装用的类。类名称都是按主数据名称而定,讲第一个字母大写而已,但Character,Integer除外,写的是全称。
  17. finally是一定要被执行的,即使在try或者catch中有return语句,先将finally执行完的才会返回return。
  18. 当对象被序列化时,被该对象引用的实例变量也被序列化,且所有被引用的对象(必须实现序列化,否则会编译错误)也会被序列化,这都是自动化的。
  19. 如果要让类能够被序列化,就必须implement serializable。其实没有方法需要实现,这个只是用来告诉java虚拟机它可以被序列化。
  20. hashcode的默认行为是对在heap上的对象产生独特的值,equals()的默认行为是执行==的比较,也就是说会去测两个引用是否对上heap上同一个对象。如果这两个函数没有被覆盖过,则两个对象永远不会被认为是相同的。
  21. hashcode的方法较快,在对hashset对象进行比较时,同样的hashcode可能对应多个对象对象,然后再使用equals()来判断是否有完全的符合,即:hashcode是用来缩小寻找成本,但最后还是要使用equals才能认定是否真的相同。

------------《head first Java》读后感
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值