JAVA面试笔试之-java基础

1.面向对象的特征:继承、封装和多态
     实现多态的三种方式:1.接口实现,2.继承父类重写方法, 3. 同一类中方法进行重载
     
 2.重载和重写的区别
        子类方法覆盖父类方法是重写(方法名,参数,返回值都相同); 重载是同名不同参数的方法;

3.final, finally, finalize 的区别
      final 是关键字用来修饰类,方法和变量, final 修饰的类不能被继承,方法不能重写, 变量不能重新复制;
      finally 是异常处理模型的补充, finally结构使代码总会执行,不管有无异常发生;使用finally 可以维护对象的内部状态,清理非内存资源
      finalize 是java.lang.object 定义的方法,每个对象都有这个方法,gc启动 该对象被回收时调用,一个对象的finalize() 只会被调用一次

4.Exception、Error、运行时异常与一般异常有何异同

5.请写出5种常见到的runtime exception
    nullponintException(空指针异常)
    indexOutofBoundException(数据越界)
    ClassCastException(类转换异常)
    classnotfoundException(找不到指定的类)
    NumberFormatException(数字格式异常)
    SqlExcpetion(sql语句执行异常)

6.int 和 Integer 有什么区别,Integer的值缓存范围
    int 是一个基本类型,存储数值; 而Integer 是int 的封装类, 它提供处理数据的方法。 调用MIN_VALUE、MAX_VALUE 可以知道范围 -2^31 -2^31-1;

7.包装类,装箱和拆箱
     

8.String、StringBuilder、StringBuffer
    String 是final类型,每次声明都是不可变的对象,每次操作都会产生新的String 对象,
    String a = 'java' 这种方式,jvm 会将其分配到常量池中;
    String a = new String('java') jvm 会将其分配到堆内存;
    StringBuilder、StringBuffer 都是在原有对象上进行操作,StringBuffer 是线程安全的,StringBuffer是非线程安全,效率上更高
    效率比较: StringBuilder > StringBuilder > String.

9 抽象类去接口有什么区别
      抽象类:子类用extends关键字继承,如果子类不是抽象类,子类需要提供抽象类中所声明方法的实现;
                      抽象类中可以有构造器;不能被实例化;一个子类只存在一个父类;
      接口:子类用implements实现接口,需要提供接口中所有声明的实现;                 
      接口不能有构造器;不能实例化;一个子类可以存在多个接口;

  
10.说说反射的用途及实现
       反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。
      一、Java反射框架主要提供以下功能:
        1.在运行时判断任意一个对象所属的类;
        2.在运行时构造任意一个类的对象;        
        3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);        
        4.在运行时调用任意一个对象的方法
        
      二、主要用途 :        
        1、反射最重要的用途就是开发各种通用框架。    
            
     三、基本反射功能的实现(反射相关的类一般都在java.lang.relfect包里):        
        1、获得Class对象        
        使用Class类的forName静态方法        
        直接获取某一个对象的class        
        调用某个对象的getClass()方法
                
        2、判断是否为某个类的实例        
        用instanceof关键字来判断是否为某个类的实例    
            
        3、创建实例        
        使用Class对象的newInstance()方法来创建Class对象对应类的实例。        
        先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例。
        
        4、获取方法        
        getDeclaredMethods()
        
        5、获取构造器信息        
        getDeclaredMethods()        
        getMethods()        
        getMethod()
        
        6、获取类的成员变量(字段)信息        
        getFiled: 访问公有的成员变量        
        getDeclaredField:所有已声明的成员变量。但不能得到其父类的成员变量        
        getFileds和getDeclaredFields用法
        
        7、调用方法        
        invoke()
        
        8、利用反射创建数组        
        Array.newInstance()
        
        四、注意:        
        由于反射会额外消耗一定的系统资源,因此如果不需要动态地创建一个对象,那么就不需要用反射。        
        另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。

11.说说自定义注解的场景及实现
     
14.列出自己常用的JDK包
     java.lang:几桶基础类,String,Math,Integer,system,和thread 提供常用功能
     java.io:输入输出有关的类,比如文件操作等
     java.net: 网络有关的类,比如URL,URLConnection
     java.util:系统辅助类,特别是集合类Connection,list,Map 等
     java.sql :数据库操作类,Connection,Sratement,ReaultSet    
 

16.equals与==的区别
    String a = "java"; //jvm 方法区
    String b = new String("java"); //堆内存
    String c = new String("java"); //堆内存
    a ==b false; a.equals(b) true; b==c false; b.equals(c) true;
    等于比较的是内存地址 ,equals 比较的是内容

17.hashCode和equals方法的区别与联系
     如果两个对象根据equals()方法比较相等,那么调用hashcode()方法必须产生相同的哈希值
     如果equals()方法比较不相等,哈希值不一定相等(哈希碰撞还是会相等)

18.什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用

19.Object类中常见的方法,为什么wait  notify会放在Object里边?

21.JDK和JRE的区别
    Jdk是编译时环境 .java 文件  编译成.class 文件需要的 ,jre 是jvm 运行.class 文件的环境,是运行时环境

22.Java 8有哪些新特性
    一是 Date/Time api  以前calendar 不太好解一些时间转换的问题,8增加了 localdate、localtime;
    二是对Base64编码的支持已经被加入到Java 8官方库中,这样不需要使用第三方库就可以进行Base64编码 

    
23. 静态变量和实例变量的区别
        静态变量存储在方法区中,属于类所有;
        实例变量存放在堆内存当中,其引用地址存放在当前线程栈。

  
 24.java 创建对象的几种方式
       1.采用new() 耦合度最高
       2.通过反射
       3.采用clone
       4.通过序列化机制

      
  25.switch 能否使用String
        jdk1.7 只支持byte ,short,char,int 或者其对应的封装类以及枚举类,1.7 后开始支持String
        
  26.object 中有哪些公共方法
       equals() ,clone(),getClass(), toSting(), notify(),notifyAll(), wait()
       
  27.a= a+b 与 a +=b 有区别吗?
             相同数据类型运行结果没有区别, a+=b 会进行类型的自动转换, 而 a= a+b 需要强制转换。 不转换,会编译出错 
             
  28.String str = 我喜欢看<肖申克的救赎> ; 把<> 中的字提取出来  
          1.str.substring(str.indexOf('<')+1, str.indexOf('>'))   
          
  29. int a = 5; int b =6 在不定义第三个变量的情况下交换数值
        b= a+(a=b)*0   
  
  30.float f =3.5 是否正确?
           不正确,double 类型;float 定义方式:float f =3.5f; 
  
  31.transient 变量有什么特点 ?
      transient 关键字 可用于控制序列化,因为它指定了可从序列化中排除的对象属性;
      标记为transient 的对象特性或属性将不会被保存到磁盘中。

      
  32. 断言的用途
       用于程序测试期间做单元测试
  
  33.Math.round(-1.5) 结果;
          -1 ;
  
  34.java 异常体系与使用异常时应该注意的原则?
  
  35.volatile VS synchronized
      volatile 使用场景 :在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。 
      volatile 能保证对象的可见性,即在工作内存的内容更新能立即在主内存中可见  ,volatile关键字从语义上解决多线程乱序问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值