JAVA基础15个冷知识,你知道几个?

在公众号回复课程,免费获取JAVA全栈课程java


做者 | 颜 群程序员

公众号 | 大数据和人工智能技术web


1.面试

对于JVM而言,普通方法是在JVM【运行期】【静态】绑定的,而属性是在【编译期】【动态】绑定的,所以才会有 方法重写 和 属性覆盖 两者逻辑不一致的状况,这应该是根本缘由。具体区别以下:编程


(1)当子类重写了父类的方法时,父类的引用会调用【子类】的重名方法; 数组

(2)当子类和父类的属性重名时,父类的引用会调用【父类】的重名属性。安全

简言之:方法会被重写,但属性不会被覆盖。微信


2.网络

JVM在首次加载类时,会对静态属性、静态块进行一次初始化,注意此时尚未产生对象。多线程

以后,当类加载完毕后,才能实例化出对象,并在对象产生的同时对实例成员进行初始化。


3.

(1)当继承和接口同时存在时,须要先继承,后实现

(2)Java中,类只能单继承,但接口能够多继承


例如,假设C是抽象类,I1和I2是接口。

正确写法:public class A  extends implements I1,I2{}

错误写法:public class A  implements I1,I2 extends C {}


4.

在JDK8.0之前,局部内部类在访问包含他的方法中的变量时,必须给这个变量加final修饰;但自JDK8.0之后,JDK会自动添加final,所以能够省略final,如图。



5.

建立二维数组的时候,能够同时设置第一维长度和第二维长度,也能够只设置第一维长度,但不能够只设置第二维长度


以下都是正确的:

int[][] arr = new int[10][10;

int[][] arr = new int[10][];


以下是错误的:

int[][] arr = new int[][10]; 


6.

Java程序的第一行 能够写什么?

空行、注释或者package语句


7.

java程序在使用相对路径,加载静态资源时:

(1)普通Java工程加载的是源文件src目录中的静态资源;

(2)Maven工程加载的是字节码目录target/classes中的静态资源;

(3)在编写源码时,程序中相对路径基于的“当前路径”是在源文件src目录下 ,不是在classes目录下。(也就是当前路径是基于A.java,而不是基于A.class)。

以上三条中,“(1)”和“(3)”是一致的,因此普通Java工程方式加载静态资源,没有什么,直接写相对路径就行;但“(2)”和“(3)”在读取路径时是矛盾的,所以Maven工程在加载静态资源时,就不能使用相对路径,只能使用绝对路径。能够点击超连接,看看这篇 -> Java程序使用Maven后没法运行?


8.

对字符串的修改不频繁:用String。

对字符串的修改频繁,且字符串是全局变量或者须要多线程支持:用StringBuffer(线程安全)。

对字符串的修改频繁,且字符串是局部变量或者是单线程:用StringBuilder (非线程安全)。


9.

在Java中只有值传递,并不存在“引用传递”

所谓的“引用传递”,实际传递的是 引用地址的值。


10.

初学者使用数组时,常犯的错:

int[] nums ;

nums = {3,1,2} ;         ×


此种赋值方式,必须合并在一行:

int[] nums = {3,1,2};   


11.

Java中,3*0.3f的运算结果是:0.90000004

由于float是32位的,最多可以容纳下  2的32次方 个数字。

但float的小数,包含着无穷无尽个数字, 所以 2的32次方个位置 没法容纳所有小数,只能近似。既然是近似,就可能出现一些运算偏差。


12.

a = a + 2 和 a += 2 等价吗?不!


举个反例:

byte b,b1 = ... ;


b = b +b1 ;   ×(编译时报错)

b += b1        √


13.

用Java编写单例模式,一行代码就够了

public enum Singleton{ INSTANCE; }

这也是众多大神推荐的写法


14.

若是使用“记事本”编写java代码。而且在.java文件中有汉字,而后在Javac编译时出现了 错误提示“ 错误: 编码GBK的不可映射字符”

解决:将文件的编码改成ANSI码、或UTF-8后再试,如图。

提示:java采用的默认 字符编码集是unicode

 

15.

不论你怎么学,编码都是很难完全学懂的。然而从实际状况来看,学懂50%或者学懂80%,实际差异并不大。真正决定一个程序员可以走多远的,是他的思惟能力。能够点击超连接,看看这篇 ->  编程初级和高手的区别,究竟在哪?



- 完 -

推荐阅读

编程初级和高手的区别,究竟在哪?

答疑 | 高并发都要学哪些技术?

答疑 | 我是JAVA初级,有必要学架构设计吗?

Java小白到大神的心路历程(Java SE)

答疑 | 面试全对,却没offer?

答疑 | 背下这300字,面试就能加薪!


扫描上方二维码回复 课程
便可得到JAVA全栈教程合集 
30+课程掌握 95% 的开发技能

在“大数据和人工智能技术”聊天对话框回复如下关键词,可得到相关信息哟

回复【资料】获取JAVA全栈视频的配套资料

回复【最新课程】获取一门还没有公开的高级课程(不按期更换)

回复【提问】获取免费答疑方式

回复【课程】获取JAVA全栈视频教程 + 配套资料

回复【软件】获取经常使用的开发软件(逐步完善)

回复【亿级源码】获取本号做者出版的《亿级流量Java高并发与网络编程实战》一书配套源码

回复【javase获取JAVA基础视频教程

更多课程,逐步开放...


 以为有用,请点在看  ↓ 

本文分享自微信公众号 - 大数据和人工智能技术(Big_Data-AI)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索