Java面试题总结二

Java语言在当前开发语言排行中,仍旧占有很大比重。对于是不是选择学习Java,还没有上车的小伙伴们,赶快上车吧。以下是参考设计模式的书,总结的Java中常见的一些面试题,作为一些小的技术点,如下:

1.一个应用程序中是否可包含多个具有main方法的类?

  可以包含多个main方法的类。在启动应用程序时,我们需要指定运行类的名称,JVM只会在指定名称的类中寻找main方法,因此存在多个mian方法之间并没有冲突。


2.是否可以在同一个类中定义多个main方法?

  程序编译会报错,编译过后会提示main方法已经在类中定义过了。


3.我们什么时候需要导入java.lang 包?为什么?

  不需要导入,jvm会在内部默认加载。


4.是否可以两次导入一个包或者一个类?jvm是否会在运行时对包加载两次?

  可以多次导入相同的包或者是类,无论是编译器还是jvm都不会提示错误,无论是对同一个类导入多次,jvm中将只会对包和类加载一次。


5.在导入一个子包的时候会把其子包页导入么?如果在导入com.MyTest.* 的时候会把com.MyTest.UtilTest.*导入吗?

  不会,你需要一个一个的导入子包。导入com.MyTest.*只会导入MyTest之下的类,并不会导入其子类包中的任何类。


6声明一个变量和定义一个变量 有什么区别?

 在声明一个变量的时候只需要说明变量的类型和名称,我们不需要对其进行初始化。但是定义一个变量就是意味着声明+初始化。例如 String s;就是一个声明,String 是= new String("hello world");就是定义一个变量。


7.一个对象引用实例变量的缺省值是什么?

  null,除非我们明确定义它。


8.顶级的类可以是private 或者是 protected 吗?

  不能,顶级类不能是private 或者是 protected。它只可能是public或者没有修饰符,如果他没有任何的修饰符,就意味着有一个默认的访问权限。如果一个顶级的类被声明为private,编译器就会报错:此处不允许使用private修饰符。对于protected修饰符也是一样。


9.Java中支持什么类型的参数传递?

  在Java语言中 参数的传递都是按值传递。


10,对象是通过值传递还是通过引用传递?

  Java只支持值传递,对于对象来说,对象的引用本身也是通过值传递的,因此,无论是原值引用还是参数副本引用都是对相同对象的引用。


11.序列化是指的什么?

  序列化是一种机制,你可以通过将对象转换成字节流的形式来保存对象的状态。


12.如何将对象序列化成一个文件?

  实例被序列化的类必须实现序列化接口,然后将实例传递给一个连接到fileOutPutStream的ObjectOutPutStream,这会把对象保存到一个文件中。


13.Serializable接口需要实现哪些方法?

  Serializable接口是一个空接口,所以不需要实现任何的方法。


14.我们如何自定义序列化过程,即如何能有一个受控制的序列化过程?

  序列化过程是可控制的,该类需要实现Externalizable接口,该接口包含两个方法readExternal 和 writeExternal,你应该实现这两个方法,并为自定义序列化过程编写相关逻辑。


15.当你序列化一个对象时,该对象的对象引用会发什么?

  序列化机制会生成一个对象的序列化图,也就是他会确定能够在序列化中是否包含对象引用,这是一个递归过程。因此 当一个对象被序列化时,所有包含的对象也会随着原始对象序列化。


16.在实现序列化对象时,应该注意什么?

  首先应该确保对象内部的所有对象都是能够被序列化的,如果某个内部对象不能够被序列化,就会抛出NotSeriliaszableException的异常。


17.在序列化过程中 类的静态字段会发生什么?

   序列化会忽略静态字段,因为它不属于任何特定状态的一部分。(存在三种特殊情况,第一是序列化会忽略静态字段,第二是如果基类本身是可序列化,那么基类字段会被序列化,第三,瞬态(Trabsient)字段)


18.Java 中是否存在方法来获取对象的大小?

   没有,没有类似sizeOf这样的运算符来获取对象的大小。


19.能否给出一个简单的方案来分析一个方法执行的时间?

  在方法执行之初和方法执行最末尾获取时间。,然后计算得到两者之间的差值,就是这个方法执行的时间差。代码如下

        long start = System.currentTimeMillis();
        method();//
        long stop = System.currentTimeMillis();
        System.out.println("method take time is:" + (stop - start));
这个方案只是初略记录方法执行耗费时间,大多数情况下 得到的都是0.所以需要有一个足够复杂的方法。


20.为什么说Java不是一个纯粹的面相对象的语言?

   Java时一种面相对象的语言,但是不是一种纯粹的面相对象语言。许多语言都是面相对象的,但是成为一种面相对象语言需要满足下边的条件;

  封装/数据隐藏

  继承

  多态

 抽象

 java支持上边的所有属性,但是其任然不是一种纯粹的面相对象语言。因为它支持原生数据int ,byte,long等,这些数据本身就不是对象。举一个纯粹的面相对象的语言,smalltalk,在该语言中,boolean ,int 和方法都是对象。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值