Java中的char注意事项:
char占2个字节,当java中采用GB2312或GBK编码方式时,一个中文占2个字节,因此char xxx='中'没有问题。
ArrayList扩容注意事项:
ArrayList默认数组大小是10,每次扩容大小是扩容前的1.5倍,如果初始化时指定数组的大小,就不会扩容。
例:ArrayList list = new ArrayList(20)扩容次数为0。
使用枚举Enum注意事项:
枚举类里面的成员变量就是该类的对象,调用方式就是类.对象(默认返回对象的字符串名),有几个实例,在第一次调用枚举类时就会调用几次构造方法。
字节流字符流注意事项:
以stream结尾的都是字节流,以reader和writer结尾的都是字符流,只进行读写,一般用字节流,需要对内容进行操作的使用字符流
==比较包装类的注意事项:
有一个值是基本类型则比较数值,都是包装类比较的是地址。Integer类型的参数,当数值在-128~127之间时,使用的是常量池,此时只要数值相等,==比较的结果为true(注意:new关键字一定会生成一个新的对象)
派生类初始化时注意事项:
初始化顺序:父类静态域=》子类静态域=》父类非静态域=》父类构造方法=》子类非静态域=》子类构造方法
其中:静态域(静态变量、静态代码块),非静态域(成员变量、构造块)不分先后,顺序执行
多线程中那些方法会释放/不释放锁资源:
sleep():当前线程进入睡眠,不释放锁。
yield():当前线程重新回到可执行状态,等待cpu调度,不释放锁。(有可能会立刻获得cpu调度)
wait():当前线程回到线程池等待,释放锁,当其他线程使用notify、notifyAll唤醒时进入可执行状态。
join():当前线程调用 某线程.join()时,当前线程进入等待某线程执行完毕再结束,底层调用wait,释放锁。
String类型的变量作为参数传入方法中被改变时:
因为String是final修饰的,是不可变的,因此,在方法中即使改变了String变量的值,实际是重新创建了一个String变量,原变量的值不变。
Java中值传递和引用传递的注意事项:
Java有两种传递方式,即值传递和引用传递。基本类型和String str = "xxx"这种方式创建的字符串都是值传递,对象,数组等都是引用传递。
序列化注意事项:
序列化能将数据长久的保存在磁盘中,类实现序列化需要实现Serializable接口,而类中如果有变量不想被序列化,则需要使用transient进行修饰。
关于>>和>>>运算符:
>>带符号位向右移动,正数左侧补0,负数左侧补1。>>>不带符号位向右移动,左侧全部补0。
顺带说一句:负数的二进制数等于正数的二进制数取反(反码)+1
Object类的注意事项:
Java中一切都是对象,Object是所有类的根类。
关于子类继承父类事项:
子类从其父类继承所有成员(字段、方法和嵌套类)。构造方法不是成员,所以不被子类继承,但是可以从子类调用父类的构造函数。
json转list极其简单的方法:
使用alibaba的fastjson:JsonArray.parseArray("要进行转换的json字符串","接收的实体类.class");
例:List<xxx> list = JsonArray.parseArray("jsonString",xxx.class)
需要引入包(maven):
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
EasyPoi使用
使用实体类或者Map接收excel中的内容,需要先对应表头再对应每一列的内容,可以自定义校验方法,校验方法会根据实体类或者Map接收到的数据进行逐条校验
静态变量
所有实例访问的都是同一个变量
PageHelp分页中使用Order By的问题
当sql语句过于复杂时,分页器解析sql时可能会出现解析失败的情况,具体表现形式就是直接将order by语句拼接在sql语句之后,然后在外层起别名,(起别名的操作是PageHelper自带的操作),此时就会造成在 “子查询中使用order by的错误”