Java 相关问题

127 阅读2分钟

基础知识

char

char可使用unicode编码表示。

数值运算

浮点优先,自动上转,int打底。

基本数据类型包装器

类内部存储数据的属性为final,只能赋值一次,可自动装箱、拆箱,每次装箱都相当于新建一个对象。

数组

与其说是数组,不如说是引用集。
数组和类一样可以上下转。

泛型

ArrayList<sub> 和 ArrayList<sup> 没有继承关系,  
要判断是否有继承关系,用<? extends class><? super class>.

<T>就只是一个类型检查,内部都是Object。

日期类

日期字母大小写

一般24小时制应使用yyyy-MM-dd HH-mm-ss
关于日期格式你必须知道的坑( yyyy-MM-dd HH:mm:ss SSS) image.png

Calendar类时间

月份从0起算,获取的月份比实际月份少一

以周日为一周开始,获取的 某天是周中第几天 比实际多一

设置月份同时要设置日期为1,否则在某月的31日或二月会出现月份加一的情况
JAVA Calendar设置时间,月份总是加1_空白-键的博客

// 设置月份
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, 1); //!!!

t.csdn.cn/ZR63r

不能像类和方法一样在两个相同的块中声明相同的变量。

final

不是说指向的对象的域不可变,是只能赋一次值(为null时为未赋值),即只能指向一个引用,只要引用不变就行。

static

所用这个类的实例都有同一个引用,这个引用指向一个存在的域。

静态方法不能被重写

super

与this不同,super不是一个对象的引用,它只是一个指示编译器调用超类方法的特殊关键字。

构造器的坑

每个类都默认有一个没有参数和方法体的构造器,如果声明了一个构造器,将不再提供默认构造器。
每次调用构造器(新建对象)都要调用父类构造器,如果没有显示调用父类构造器,将调用默认(没有参数的)构造器,如果没有显示构造器,且没有 没有参数的构造器 ,会出现错误。

参数数量可变方法

public void method(Object... args){
     Object[] objects= Arrays.stream(args).toArray();
}

接口

默认方法作用域应该和public相同,不同包中的实例可调用默认方法。

方法冲突

1. 超类优先

如果一个类继承一个类,实现了n个接口,超类中的方法和某几个接口中的默认方法 方法名、参数类型相同,则默认继承超类方法,忽略接口中方法。

2.接口冲突

如果有两个接口中都有一个方法名、参数类型相同的方法,这两个方法中至少有一个方法是默认方法,则必须覆盖这个方法来解决冲突。