总结Java的一些隐蔽的知识点(不断更新)

19 篇文章 0 订阅

开篇:学Java两年多了,知识长进了很多,最近忙着找工作,把基础又重新看了一下,发现了很多自己觉得比较隐蔽的知识点,有的是曾经看过但没记住的,有些是从来都不知道的,索性写一篇这样的博客备忘吧。

  1. 变量名:在Java中,变量名以下划线、字母、$符号开头,并且后跟下划线、字母、$符号以及数字。总之,Java中的变量名不能以数字开头,不能使关键字。
  2. Java原生数据类型在32位机中所占内存大小:byte字节、boolean(1个字节)、char(2个字节)、short(2个字节)、int(4个字节)、float(4个字节)、long(8个字节)、double(8个字节)
  3. Java中的所有浮点类型默认情况下都是double。不能将double类型的值赋给float类型的变量,即便该double类型的值处于float类型的范围内也是不可以的。比如有如下表达式:float i = 1.2;由于1.2默认在Java中是double类型所以如此赋值相当于向下转值,JVM会认为有精度损失。所以需要这么声明:float i = 1.2f;
  4. 这是一道面试题:Java中switch语句的default是不是必须的,答案:不是必须的。不写不会有语法错误,相当于if。。。else中的else
  5. 构造方法重载时:有参的构造方法可以通过this()调用无参的构造方法,但是this()必须是此构造方法的第一跳语句 “Constructor call must be the first statement in a constructor”
  6. 在继承关系中:要想生成子类的对象,首先要生成父类的对象,这是因为在子类的构造方法中隐式的调用了super()方法,也就是父类的构造方法。与this一样,super也必须要作为构造方法的第一条执行语句,前面不能有其他可执行语句。
  7. 在子类对父类的方法重写时:可以通过super.XX()的方式来调用父类的方法。同时并不必须是第一条语句。
  8. 在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类
  9. 在声明接口的时候abstract关键字可加可不加,因为接口interface本身是抽象的。
  10. 接口中可以有成员变量,但接口中的属性会被默认的声明为public static final类型的。
  11. Java中可以同时实现多个接口,但如果在被实现的多个接口中有相同变量名的变量的话,则会在编译是出错,因为这相当于在同一个类中声明了两个同名的变量。
  12. 当父类中某一变量为静态时,其所有子类中的该属性都指向同一位置,当一个子类修改这个属性的时候,其他子类看到的置也会改变;但如果这个父类的变量不是静态的那么,他们会享有各自的空间,相互没有影响。
  13. static方法和final方法只能继承,不能重写(Override)
  14. final类型的成员变量可在构造方法中为其赋初始值,前提是该变量没有没赋值过。
  15. 如果某个类中有静态代码块,那么当该类被实例化时,先执行该静态代码块,再执行构造方法。如果在继承关系中出现静态代码块,那么先执行顶层的静态代码块,再依次执行底层的静态代码块,再执行顶层的构造方法,再依次执行底层的构造方法。
  16. protected 所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。除接口以外的默认的(不加任何访问修饰符)的属性和方法可以在类内部以及相同包下面的所使用。接口的属性和方法默认是public的。所以如果不加修饰符那么其限定会比protected修饰更严格。
  17. java.lang包在使用的时候无需显式导入,编译由器自动帮我们导入。
  18. 字符串缓冲池的问题:这是一个经典面试题,这里只说一个结论 String a = "aaa",String b="aaa",String c = new String("aaa"),Stirng d = new String("aaa"); a==b(true) 、a.equals(b)(true)、c==d(false)、c.equals(d) true
  19. 已知I为接口 (interface I),有如下声明 I[] i = new I[10],这样是可通过编译的,以为建立的数组是一个由类似于指向I类型的指针组成的集合,并没有实例化I
  20. 每个枚举的成员其实就是您定义的枚举类型的一個实例
  21. Java中的每个对象都有一个锁(lock)或者叫做监视器(monitor),当访问某个对象的synchronized方法时,表示将该对象上锁,此时其他任何线程都无法再去访问该synchronized方法了,直到之前的那个线程执行方法完毕后(或者是抛出了异常),那么将该对象的锁释放掉,其他线程才有可能再去访问该synchronized方法。
    如果一个对象有多个synchronized方法,某一时刻某个线程已经进入到了某个synchronized方法,那么在该方法没有执行完毕前,其他线程是无法访问该对象的任何synchronized方法的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值