目录
1. Java传入值和引用的区别(Java的参数传递机制)?
- 如果传递的参数是基本数据类型,那么传入的是这个参数的一个副本,这个副本保存的就是原变量的值,改变副本不影响原变量。
- 如果传递的参数是引用数据类型,那么传递的也是这个参数的一个副本,但是副本的值是一个对象的内存地址,如果对这个内存地址中的对象进行修改,就会影响原变量。如果改变了这个副本的值,也就是将副本的值修改为另一个对象的内存地址,这时不会影响原变量。
2. Java四种修饰符的访问权限
3. Java中的序列化和反序列化
- 序列化:把对象转换为可保存和传输的字节序列。
- 反序列化:把字节序列恢复为对象。
- 一个对象只有实现了 Serializable 序列化接口,它的对象才能被序列化。这个接口里其实什么内容都没有,它起的是一个标识作用,告知JVM可以对这个类做序列化操作。
- 我们可以对实现了序列化接口的类定义一个 serialVersionUID 变量,在序列化时,系统会将这个 UID 变量写到序列化的文件中,在进行反序列化时,系统会先检查文件中的 UID 是否跟当前文件的 UID 一致,如果一致就反序列化成功,否则就表示当前类发生了变化,那么反序列化时就会报错。
- 这个 UID 最好自己定义,因为系统默认生成的 UID 对类的信息比较敏感,不同的Java编译器来实现可能会出现差异,导致反序列化失败。
4. Comparable和Comparator的区别
- Comparable 接口是 java.lang 包下的,而 Comparator 接口是 java.util 包下的。
- 实现了 Comparable 接口的对象可以直接成为一个可比较的对象,需要重写 compareTo 方法来定义比较规则,跟类绑定,扩展性不好;Comparator 是一个外部比较器,它可以用来比较任意类型的对象,采用了策略模式,可以根据需求设计多个比较器。
- 策略模式:一个类的行为或算法可以在运行时更改。
- 优先队列 PriorityQueue 内部是基于 Comparator 实现的。
5. for 和 foreach 效率比较?
- ArrayList采用数组的形式保存对象,这种方式将对象放在连续的内存块中,所以插入和删除时比较麻烦,查询比较方便。
- LinkedList将对象放在独立的空间中,而且每个空间中还保存下一个空间的索引,也就是数据结构中的链表结构,插入和删除比较方便,但是查找很麻烦,要从第一个开始遍历。
- 循环数组结构的数据时,建议使用for循环,因为for循环采用下标访问,对数组结构的数据来说,采用下标访问效率更高。
- 循环链表结构的数据时,一定不要使用for循环,因为for循环要获取第i个元素必须从头开始遍历,而foreach是通过iterator实现的遍历,只需要遍历一次,所以效率比for循环的高。
6. Java中创建对象的方式
- clone:Java的所有类都默认继承java.lang.Object类,在java.lang.Object类中有一个方法clone(),调用这个方法后会返回一个新对象,而不是一个引用。
- new 出一个对象的方式来创建对象。
- 利用java.lang.Class类的newInstance方法来创建对象,它可以根据Class对象的实例,建立该Class所表示的类的对象实例,比如 a.getClass().newInstance()
- 序列化和反序列化:对对象进行序列化来保存对象的状态,比如可以用 fileOutputStream 来把数据写出到磁盘文件,要注意,要将某个类的对象进行序列化时,该类必须实现了 serializable 接口,该接口是一个标志,用来告诉jvm该类的对象可以被序列化。通过序列化保存好对象的状态后,就可以通过反序列化得到之前保存的对象了。
7. Java中,什么是构造方法?什么是构造方法重载?
- 构造方法是类的对象在创建的时候会调用的方法。如果程序员没有设置构造方法,系统也会为该对象提供一个默认的构造方法。构造方法的方法名和类名一致,没有返回值。
- 构造方法重载就是根据传入的参数不同设置多个构造方法,来供实例化时调用 。
8. 怎么一次break跳出多重循环
可以在循环体开头设置一个标签,后面紧跟一个冒号,然后使用带此标签的break语句跳出多重循环
9. system.out.println()打印的是什么
打印的是对象的toString()方法,Objectl默认的toString()方法输出的是类名+@+哈希值的16进制形式,我们可以自己根据需要重写toString()方法。
10. Java 中的 Math. round(-1. 5) 等于多少?
Math.round 表示四舍五入
-1.4 ——》-1
-1.5 ——》-1
-1.6 ——》-2
1.4 ——》1
1.5 ——》2
1.6 ——》2