前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >被忽视的Java基础

被忽视的Java基础

作者头像
玖柒的小窝
修改2021-12-24 11:37:23
2760
修改2021-12-24 11:37:23
举报
文章被收录于专栏:各类技术文章~各类技术文章~

想想今年阅读的 Java 书籍,也就那本《 Java 核心技术卷》,很多人说《卷 Ⅰ 》的内容太过基础,没有什么营养可言,但在真正阅读后才发现,这本基础的工具书仍能替自己扫盲。

在平时的阅读中,一旦有眼前一亮的感觉,我总会把书中的内容打磨一番,发一发沸点,想想 2021年 也临近年底了,今天就来做个总结。

  1. 方法签名的组成部分有且仅有方法名参数列表

因此构成方法重载的条件是方法名相同,参数列表不同,与返回值、抛出的异常类型无关。

2. 方法的显示参数(又称实参)传递的是副本

如果传递的是基本数据类型,则副本的数值变化不会影响到原数据; 如果传递的是引用数据类型,副本和原数据共享引用地址,被引用的对象属性的变化会同步给副本和原数据。

3. 数组(Array)与数组列表(ArrayList)的区别。

new E[100]会创建一个有 100 个元素 E 对应初始值的数组,初始值如 null、0、false; new ArrayList<E>(100)只是表示可能将会保存 100 个元素 E ,在前 100 次使用add(E e)添加元素时不需要扩容,创建时并不会赋值任何初始值。

  1. 枚举类中的所有枚举项即是这个枚举类的实例

同一种枚举项即使创建多个对象,这些对象的引用地址也相同,即引用自同一个实例。

2. 基本数据类型不属于对象,也不算做泛型,但基本数据类型的数组是一种特殊的对象或泛型,派生于 Object。

例如int[] a = {1, 2, 3};,可以将 a 赋值给 Object,但不可将 a 赋值给 Object[] 。

3. Arrays 的copyOf(T[] original, int newLength)方法和集合中toArray()方法都是基于反射包下 Array 类的newInstance(Class<?> componentType, int length)方法实现,而newInstance()方法需要的 componentType 参数则通过 java.lang 包下 Class 类的getComponentType()方法获取的,此方法仅仅为获取数组元素的泛型而存在,其实这个方法更适合放在 Array 类中。

  1. 一个类要想实现克隆操作,必须满足两个条件:①. 实现 Cloneable 接口,将其标记为克隆合法的类 ②. 重写 Object 类中的clone()方法,使用super.clone()调用原生的克隆方法,并将其修饰符改为 public ,否则重写的clone()方法只能在类本身和其子类中调用。
  2. 生成日志和调试消息时,通常要通过getClass()方法来获取当前的类信息,但因为此方法前隐藏了一个 this 关键字,所以在静态方法中无法使用。此时可以利用以下表达式获取当前类信息:
代码语言:javascript
复制
    new Object() {}.getClass().getEnclosingClass();
复制代码

这里的new Object() {}会建立 Object 的匿名子类的一个匿名对象,getEnclosingClass()则能得到其外围类,即包含这个静态方法的类。

  1. 在使用 finally 子句时不要写上如 return、thow、break、continue 这种能改变控制流程的语句

例如 finally 子句中的 return 语句会覆盖掉 try 子句中的 return 语句,甚至不在 catch 捕获范围中的异常也会被吞,不会正常向上抛出。 如果 finally 子句用作资源释放,且资源直接或间接实现了 AutoCloseable 接口,则建议使用 try-with-resources 语句替换 finally 去释放资源。

以上就是我在阅读时觉得自己忽视的几条 Java 基础,如果对您也有帮助,麻烦留下个暖心的赞?。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档