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

Wesley13
• 阅读 760

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

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

作者 | 颜 群

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

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

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

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

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

JVM在首次加载类时,会对静态属性、静态块进行一次初始化,注意此时还没有产生对象。

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

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

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

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

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

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

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

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

创建二维数组的时候,可以同时设置第一维长度和第二维长度,也可以只设置第一维长度,但不可以只设置第二维长度

如下都是正确的:

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

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

如下是错误的:

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

Java程序的第一行 可以写什么?

空行、注释或者package语句

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

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

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

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

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

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

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

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

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

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

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

int[] nums ;

nums = {3,1,2} ;         ×

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

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

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

因为float是32位的,最多能够容纳下  2的32次方 个数字。

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

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

举个反例:

byte b,b1 = ... ;

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

b += b1        √

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

public enum Singleton{ INSTANCE; }

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

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

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

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

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

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

- 完 -

推荐阅读

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

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

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

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

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

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

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

扫描上方二维码回复 课程

即可获得JAVA全栈教程合集

30+课程掌握 95% 的开发技能

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

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

回复【最新课程】获取一门尚未公开的高级课程(不定期更换)

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

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

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

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

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

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

觉得有用,请点****在看

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java基础知识随身记
2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
!(https://oscimg.oschina.net/oscnet/3e08a942dd884e9ab82b63a1f3c4aada.jpg"未命名文件.jpg")Java技术栈不可错过的Java 技术公众号!(https://oscimg.oschina.net/oscnet/00fcff52518e
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Stella981 Stella981
3年前
Spring Boot 2.1.6 发布了!
!(https://oscimg.oschina.net/oscnet/e5aaab7a5b9f4aa7a944b00aff253ed2.jpg)Java技术栈www.javastack.cn优秀的Java技术公众号(https://www.oschina.net/action/GoToLink?urlhttps%3
Easter79 Easter79
3年前
Spring核心干货1
点击上方蓝色字↑↑↑,关注公众号在公众号回复课程,获取JAVA全栈课程1.Spring历史Spring是于2003年兴起的一个轻量级的Java开源框架,由RodJohnson在其2002年的著作《ExpertOneOnOneJ2EEDevelopmentandDesign》中
Stella981 Stella981
3年前
2020年6月Java面试实录
在公众号回复课程,免费获取JAVA全栈课程!(https://oscimg.oschina.net/oscnet/013da7604bcf30c9fadb57d09fe1875f9cd.jpg)作者 | 颜群公众号 | 大数据和人工智能技术    受疫情影响,很多IT公司降薪、裁员,招聘的压力也随之加大
可莉 可莉
3年前
2020年6月Java面试实录
在公众号回复课程,免费获取JAVA全栈课程!(https://oscimg.oschina.net/oscnet/013da7604bcf30c9fadb57d09fe1875f9cd.jpg)作者 | 颜群公众号 | 大数据和人工智能技术    受疫情影响,很多IT公司降薪、裁员,招聘的压力也随之加大