面试题
1.i++和++i有什么区别哪一个效率高。
- 区别:
i++ 是先赋值,后加减;
++ 是先加减,后赋值。- 效率:
++i的效率高些,++i在 运算过程中不产生临时对象,返回的就是i,是个左值,类似++i=1这 样的表达式是合法的,而 i++在运算的过 程中会产生临时对象,返回的是零时对象的值,是个右值,像i++=1这 样的表达式是非法的
对于内置类型,单独的i++和++i语 句,现在的编译器基本上都会优化成++i,所 以就没什么区别了xxxxxxxxxx java 中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能 发生内存泄露,尽管短生命周期对象已经 不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收, 这就是java中 内存泄露的发生场景Java中 有垃圾 回收机制,它可以保证一对象不再被引用的时候,对象将自动被垃圾回收器从内存中清除掉
2. final关键字用法。
修饰的类无法被继承
修饰的方法不能被重写
修饰变量是常量
但是final关 键字不能用来修饰构造方法:
// 原因:final修 饰普通方法,将导致子类无法重写该方法,而构造方法本身就不能够被子类重写,故如果用final 修 饰,如同多此一举
3.类和对象的关系。
1、类是对象的模版,对象是类的实例;
2、一个类可以创建 N个对象,每个对象都是独一无二的。
4.什么是面向对象的编程思想?实际开发中是如何应用的
从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
打个比方, 你要开车去新疆。 用面向过程来说, 你首先要 打开车门 发动汽车 经过哪哪哪 路途中停了几次等等等最后到了新疆, 这是就是面向过程。 面向对象 你只需要对车说,GO 我们去新疆, 车是怎么到的,那是车的事、 我们不用去管。 总之最后他到新疆了。 这就是面向对象
5.静态嵌套类(StaticNestedClass)和内部类(InnerClass)的不同?
Static Nested Class是 被声明为静态(static) 的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需 要在外部类实例化后才能实例化
6.内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
完全可以。如果不是静态内部类,那没有什么限制!
如果你把静态嵌套类当作内部类的一种特例,那在这种情况 下不可以访问外部类的普通成员变量,而只能访问外部类中 的静态成员
7.什么是内省
1).内省(Introspector)是Java 语言对Bean类 属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可 以通过 getName ,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规 则。
Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要了解这个规 则(但你最好还是要搞清楚),这些 API 存放于包 java.beans 中。
2).直 接通过属性的描述器java.beans .PropertyDescriptor 类,来访问属性的getter/setter 方法;
8.String s="Hello";s=s+"world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有。因为String是 不可变类(immutable class) ,不可变类
9.Java中会存在内存泄漏吗,请简单描述。
java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象 已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收
10.序列化的用途及好处
序列化可以实现数据的持久化,也就是说可以将数据永久的保存在磁盘上。
序列化可以实现远程通讯,即在网络 上以二进制字节序列的格式传送对象。
序列化可以将对象状态保存,方便下次取出利用。
有了序列化,两个进程就 可以在网络上任性的交互数据了。
流程图
![](https://img.haomeiwen.com/i15007157/b264cd36aeed1e3d.png)
网友评论