JAVA小知识汇总(2)

1 怎么打印数组内容?

从JDK1.5开始,可以使用 Arrays.toString(arr) 或者 Arrays.deepToString(arr),输出的内容会调用数组元素的toString()方法。

2 为什么在java中要使用setter和getter?

  • 当你意识到在做get和set之前或之后,还有一些其它的事情要做的时候,尤其是代码中有300个地方使用了这个属性的时候,就知道get和set的好处了。
  • 可以做数据合法性校验。
  • 可以修改被set的值。
  • 可以隐藏内部的实现,可以修改内容实现的方式。
  • You’ve insulated your public interface from changes under the sheets.
  • 有一些库必须要有,例如反射、序列化或者Mock对象等。
  • 继承父类,可以重写方法的默认实现。
  • 可以设置不同的访问权限,例如get可以是public,但是set可以是private或者protected。
  • 延迟加载。
  • 人们会很乐意告诉你不要使用python。

3 比较2个枚举类,使用==还是equals()方法?

都可以,如果你看看枚举类的源码,会推荐你使用==。

4 java bean到底是啥东西?和普通类有区别吗?

没区别,仅仅是一个声明的标准,只要遵循以下的标准,就可以认为是一个java bean。

  • 所有的属性都是private,使用set和get来设置和获取属性的值。
  • 只有一个无参构造器。
  • 实现了Serializable接口。

为什么呢?标准就是用来做序列化和反序列化。

5 怎么快速判断一个数字开平方之后是一个整数?

这个问题看起来很简单,实际很复杂,涉及了很多程序设计中的技巧。这个问题的乐趣不在于怎么去解决这个算法,而是在解决这个算法的过程中,使用的一些假设,推理,合理的优化等方案,阅读原文吧。

6 怎么把一个文件里的内容读到一个字符串中?

1、apache commons 的IOUtils。
2、

1
2
3
4
5
6
static String readFile(String path, Charset encoding)
throws IOException
{
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}

要考虑下文件的大小,否则有可能会报内存溢出的异常。

7 怎么在java中把2个数组合并为1个数组呢?

1:
`String[] both = (String[])ArrayUtils.addAll(first, second);`

2:

1
2
3
4
5
public static <T> T[] concat(T[] first, T[] second) {
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}

8 什么时候使用ThreadLocal?

有一个对象不是线程安全的(比方说SimpleDateFormat),为了避免加锁而把这个对象设置为线程私有的,每一个线程持有单独的一个引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Foo
{
// SimpleDateFormat is not thread-safe, so give one to each thread
private static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>(){
@Override
protected SimpleDateFormat initialValue()
{
return new SimpleDateFormat("yyyyMMdd HHmm");
}
};
public String formatIt(Date date)
{
return formatter.get().format(date);
}
}

完。

转载请标示: http://hushengdong.com/2016/12/23/JAVA小知识汇总-2/