倚楼听风雨
淡看江湖路

零碎的Java由浅入深的知识点整理版随手笔记第二期 持续更新

系列文章列表:

每50条Java知识点就会重新发布一篇新的Java零碎知识点集合,希望能对您有所帮助,无论是笔面试也好,平时零碎时间学习也罢,都希望我们都能每天进步一点点。喜欢的同仁请多多点赞、转发,也可以将指点批评评论出来,大家一起交流,Debug Yourself~

1.由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器。

2.finally 语句先于 return 和 throw 语句执行。

3.true、false、null 都不是Java中的关键字,goto、const是Java中保留的关键字。

常见的Java关键字列表如下:

4.继承具有传递性,子类可以无条件向上转型!一切对象皆可Object不是嘛?

5.static变量也称作静态变量,静态变量和非静态变量的区别:

  • 静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
  • 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

6.Thread中的join()方法是指把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。主线程必须等待子线程执行完毕才结束。

7.关于Java中的static关键字,说一条相对深入一点的知识点:static 方法不能被子类重写,在子类中定义了和父类完全相同的static方法,则父类的static方法被隐藏,Son.staticMethod() 或 new Son().staticMethod() 都是调用的子类的 static 方法,如果是Father.staticMethod() 或者 Father f = new Son(); f.staticMethod() 调用的都是父类的 static 方法。

8.Java多线程的各个状态间的关系流程手绘版本,包含简版与详细版。

Java多线程的各个状态间的关系流程手绘版本

Java多线程的各个状态间的关系流程示意图-高老四博客

9.Java1.8开始,只允许使用 public,abstract,default,static 和 strictfp 这几个关键字,其中 strictfp 这个关键字你可能没见过,strictfp 关键字全称 strict float point(精确浮点)。strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守 FP-strict 的限制,符合 IEEE-754 规范。关于 FP-strict 限制和 IEEE-754 规范您可以参考如下两个链接:

当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE-754 算法对操作数预期的结果,以单精度和双精度格式表示。如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp。

FP-strict规范是什么

10.数组初始化默认初始化,基本类型是0,布尔类型是 false,引用类型为 null。

11.类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错。Boolean类型默认值是false。

12.有时为了避免某些未识别的异常抛给更高的上层应用,在某些接口实现中我们通常需要捕获编译运行期所有的异常,即 Exception。

Java异常类继承关系示意图

再来说说两种异常的分类:

  • checked exception:指的是编译时异常,该类异常需要本函数必须处理的,用 try 和 catch 处理,或者用throws 抛出异常,然后交给调用者去处理异常。
  • runtime exception:指的是运行时异常,该类异常不必须本函数必须处理,当然你也可以在函数中自行处理。

Thread.sleep() 和 Object.wait(),都可以抛出 InterruptedException。这个异常作为一个检查异常(checked exception)是不能忽略的,必须处理。

13.JVM的一些工具使用用途复习:

  • java.exe 是 java 虚拟机,执行「.java」文件
  • javac.exe 是编译「.java」文件
  • javadoc.exe 用来制作 java 文档
  • jdb.exe 是 java 的调试器,全称「Java Debugger」
  • javaprof.exe 是剖析工具

14.JAVA的赋值运算是有返回值的,赋了什么值,就返回什么值。例如下面的代码是正确的:

15.再来简单的总结一下Java中的类加载器,更多详细信息可以参考老四的《Java十一道由浅入深的笔面试题第二期 详细解析》这篇文章。

JDK中提供了三个ClassLoader,根据层级从高到低为:

  • Bootstrap ClassLoader -- 主要加载JVM自身工作需要的类
  • Extension ClassLoader -- 主要加载%JAVA_HOME%\lib\ext目录下的库类
  • Application ClassLoader -- 主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。

JVM 加载类的实现方式,我们称之为「双亲委托模型」:如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的 Bootstrap ClassLoader 中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。
双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。假设有一个开发者自己编写了一个名为 Java.lang.Object 的类,想借此欺骗 JVM。现在他要使用自定义 ClassLoader 来加载自己编写的 java.lang.Object 类。然而幸运的是,双亲委托模型不会让他成功。因为 JVM 会优先在 Bootstrap ClassLoader 的路径下找到 java.lang.Object 类,并载入它。

16.javac的参数一览

javac执行程序命令参数以及作用一览

17.在来一张Java中的集合关系表供参考:

Java中集合接口以及相关类之间的关系一览

18.Java中存根类是一个类,它实现了一个接口,它的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法。但是一个类从业务来说,可能只需要其中一两个方法。如果直接去实现这个接口,除了实现所需的方法,还要实现其他所有的无关方法。而如果通过继承存根类就实现接口,就免去了这种麻烦

RMI(Java Remote Method Invocation,中译为Java远程方法调用)采用 stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。每个远程对象都包含一个代理对象 stub,当运行在本地Java虚拟机上的程序调用运行在远程Java虚拟机上的对象方法时,它首先在本地创建该对象的代理对象 stub, 然后调用代理对象上匹配的方法。每一个远程对象同时也包含一个 skeleton 对象,skeleton 运行在远程对象所在的虚拟机上,接受来自 stub 对象的调用。这种方式符合等到程序要运行时将目标文件动态进行链接的思想。

19.synchronized 关键字 : 用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。

20.ServletContext对象:servle t容器在启动时会加载 web 应用,并为每个 web 应用创建唯一的 servlet context 对象,可以把 ServletContext 看成是一个 Web 应用的服务器端组件的共享内存,在 ServletContext 中可以存放共享数据。ServletContext 对象是真正的一个全局对象,凡是web容器中的Servlet都可以访问。整个 web 应用只有唯一的一个ServletContext 对象。
ServletConfig对象:用于封装servlet的配置信息。从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对servlet自身有效,一个servlet的ServletConfig对象不能被另一个servlet访问。

21.Super 代表父类对应的对象,所以用 super 访问在子类中无法直接使用的父类成员和方法。子类不可以继承父类的构造方法,只可以调用父类的构造方法。

22.多种混合计算时,自动将所有数据类型转换为容量最大的一种数据类型。

23.一个类可以不定义构造方法,在这种情况下,类中隐含定义一个方法体为空的无参构造方法。这个构造方法称为默认构造方法,当且仅当类中没有明确定义任何构造方法时才会自动提供它。这里说明构造方法可以默认提供而不显式定义。
而类必须有构造方法来初始化用;可见性修饰符方面,使用private也是可以的,能有一些特殊的作用比如在单例模式下。关于单例模式的介绍可以参考一下老四写的《浅析设计模式第二十一章之单例模式 值得收藏》这篇文章。

24.局部内部类是放在代码块或方法中的,不能有访问控制修饰符,且不能用static修饰。

25.待续。

更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可扫描小站放的支付宝领红包二维码,线下支付享受优惠的同时老四也可以获得对应赏金,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。

赞(22) 给你买杜蕾斯
本站原创文章受自媒体平台原创保护,未经允许不得转载高老四博客 » 零碎的Java由浅入深的知识点整理版随手笔记第二期
分享到: 更多 (0)

开始你的表演 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下老四,鼓励我更好的创作

支付宝扫一扫打赏

微信扫一扫打赏