Java由基础到高级面试题经典问答



//20、String 和StringBuffer的区别
String:
   (1)String 类代表字符串。 Java 程序中的所有字符串字面值都作为此类的实例实现。              
    (2)String的长度是不可变的
StringBuffer:
    (1)线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。
    (2)StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
19、启动一个线程是用run()还是start()? .
   
    start():
     线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。     
    run():
      线程获得CPU资源正在执行任务,此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。

18、final, finally的区别。
   final:       
   (1)final关键字可用于修饰类、变量和方法,用于表示它所修饰的类、变量和方法不可改变。
          变量: final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例变量),也可以修饰局部变量、形参。
          
          方法:final修饰的方法不可被重写,如果出于某些原因,不希望子类重写父类的某个方法,则可以使用final修饰该方法。
           
          类:final修饰的类不可有子类。

   finally:
        (1)finally关键字用于异常处理机制中往往跟在try-catch语句块之后,finally语句所包含的代码在任何情况下都会被执行 会被执行,且在try-catch语句块中只能有一个finally语句块。

   
17、List 和 Map 区别?
       列表(List):
          (1)List列表区分元素的顺序,即List列表能够精确的控制每个元素插入的位置,用户能够使用索引来访问List中的元素。
          (2)List允许包含重复元素。
       映射(Map):
         (1)保存的是“键-值”对信息,即Map中存储的每个元素都包括起标识作用的“键”和该元素的“值”两部分,查找数据时需要提供相应的“键”,才能查找到该“键”所映射的“值”。
          (2)Map集合中不能包含重复的“键”,并且每个“键”最多只能映射一个值。

16、JDBC中的PreparedStatement相比Statement的好处
         
  PreperedStatement是Statement的子类,相对于Statement对象而言:
         (1) PreperedStatement可以避免SQL注入的问题。
         (2)Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。    
         (3)PreparedStatement 可对SQL进行预编译,对相同的插入操作可进行批量添加从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
          

//15、你所知道的集合类都有哪些?主要方法?
         线性表型的集合:List——ArrayList、LinkedList、Vector、Stack
          不允许有重复元素的Set集合:Set——HashSet
          “键-值”对型的集合:Map——HashMap、HashTable
       
          主要方法:
               ArrayList:
                     add(int index, E element)、add(E e)、remove(int index)
                  remove(Object o)、get(int index)、size()、indexOf(Object obj)
                 subList(int fromIndex, int toIndex)、clear()

               LinkedList:
                      push(E e)、pop()、pollLast()、pollFirst()、peek()、
                    get(int index)、getFirst()、getLast()、addFirst(E e)
                   addLast(E e)、add(E e)、remove()、remove(int index)
                    remove(Object o)
 
               Vector:
                  firstElement()、elements()、contains(Object o)、
            add(int index, E element) 、clear()

 
                Stack:
                 构造方法:
                      Stack st=new Stack(); Stack <String> st = new Stack();
               其他方法:
                    peek() 、pop() 、push(E item) 、empty()、search(Object o)

            
             HashSet:
                 构造方法
                      HashSet()
                         HashSet(<E> c)
                  其他方法
                       contains(Object o) 、isEmpty()、iterator()、remove(Object o)
                          size()
 

            HashMap:
                 entrySet() 、get(Object key)、isEmpty()、keySet()、
             put(K key, V value)
 
 

 
14、abstract class和interface有什么区别?
   
设计目的不同:
     
        接口体现的是一种规范,类似于整个系统的“总纲”,它制定了系统各模块应该遵循的标准 。
        抽象类作为多个子类的共同父类,体现的是模板式设计。抽象类可以被当成系统实现过程中的中间产品,这个中间产品已经实现了部分功能,但这个产品还不能当成最终产品,必须交由其子类作更进一步的完善,这种完善可能有几种不同方式。

用法不同:

   在接口里:
(1)接口里只能包含不带方法体的非静态的抽象方法。
(2)接口里只能定义静态常量属性
(3)接口里不能包含初始化块和构造方法
(4)一个类可以实现多个接口,并且必须实现接口中所有的抽象方法。

   在抽象类里:
    (1)抽象类中既可以包含普通方法也可以定义静态方法 。
    (2)抽象类既可以包含普通属性,也可以包含静态常量属性
    (3)抽象类中以包含初始化块并且也可以有构造方法,但是不用于创建对象,而是让子类调用
    (4)一个只能继承一个父类当一个抽象类被子类继承时子类要么重写父类的抽象方法要么将子类定义为抽象类。


//13、作用域public,private,protected,以及不写时的区别?
     作用关系如下:


如果不使用任何访问控制符修饰的类只能被本类和同一个包中的所有类访问。

    
12、== 与 equals  的区别

        "==":是关系运算符,在数值运算方面可用来比较数值是否相等;在比较对象时则表示所比较对象是否是同一个对象。
       "equals":是对象用于比较的一种方法,在Object对象中用来表示两个对象是否相等,但是该方法大多被其他类的对象所重写用来表示对象中的内容是否相等。

11、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?
 
        Java中有两种实现方法,分别是继承Thread类与实现Runnable接口;synchronized

10、面向对象的特征有哪些方面
          
        封装,继承,多态三方面。                                  

//9、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
         可以。

          /*不可以,当某个对象用synchronized修饰时,表明该对象已启动“互斥锁”机制,在任一时刻只能由一个线程访问,即使该线程出现堵塞,该对象的被锁定状态也不会解除,其他线程任不能访问该对象。*/

         
8、事务的特性有哪些?
     
     事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
   
7、得到Class的三个方法是什么?
     (1)类对象.getClass()
       (2)类名.class
        (3)Class.forName(“类名”);
         
6、数组有没有length()这个方法? String有没有length()这个方法
     数组没有length()这个方法,只有length的属性。String有有length()这个方法。

//5、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

   字节流,字符流。
       
         字节流——InputStream 或 OutputStream
         字符流——Reader或Writer

4、字节流与字符流的区别
   (1)按传输数据的“颗粒大小”:
                ——字节流:   
                    字节流以字节为单位进行数据传输,每次传送一个或多个字节;
                  ——字符流:  
                  字符流以字符为单位进行数据传输,每次传送一个或多个字符;
    (2)按照处理数据类型:
               ——字节流:
                   字节流可以处理所有类型的数据,如图片、mp3、avi
                ——字符流:   
                   字符流只能处理字符数据。
              结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流

3、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
 
  Override:
      (1)作用范围:重写Override是父类与子类之间多态性的一种表现。
      (2)如果在子类中定义的某些方法与其父类有相同的名称、参数列表、返回值类型并且子类的修饰限定符必须大于或者等于父类的修饰限定符才可以重写。
      (3)子类的对象使用重写方法时,将遵循“编译看左边,运行看右边”的原则。即:在编译时,看引用类型的类是否有此方法;在运行时,看对象所在的类是否有调用的方法。

  Overload:
      (1) 重载Overload是同一个类中多态性的一种表现。
       (2)只要在一个类中具有相同方法名的方法的参数列表在顺序、个数、类型上存在不同即可发生重载,与方法的返回值类型无关。
        (3)如果在一个类中定义了多个重载的方法,只需根据所传参数列表的不同来调用不同的重载方法。

可以。
2、Integer与int的区别
     int:
    (1)int是基本数据类型;
    (2)使用时无需使用new创建对象,也不需要额外的引用空间保存辅助信息,因此运行开销较小并且迎合了人们早已根深蒂固的行为习惯 。
    (3)但是由于不是对象,没有相应的方法等在有些场合其使用是受到限制的 。
     Integer;
        (1)Integer是一种封装类它用final关键字修饰,不能被继承
        (2)Integer弥补了基本数据类型在面向对象方面的欠缺,它可以实例化对象且该类中还提供了多个用于处理int型数据的功能方法。        
        (3)Integer可以通过自动的拆箱和封箱在int和Integer类型之间自动转换。

             

1.JAVA的基本数据类型有哪些 ?String 是不是基本数据类型?

数值型:
     ——整型:byte(字节型)、short(短整型)、int(整型)、long(长整型)
     ——浮点型:float(单精度浮点数)、double(双精度浮点数)
字符型:char
布尔类型:boolean

String不是基本数据类型,它属于引用数据类型当中的class类型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值