面试总结-Java基础

基础

1 switch支持的类型:byte, short, int, char, enum,

注意:不支持long,double,JDK7之后,开始支持String。

//简单示例
  public class MyDemo {      
        public static void main(String... args) {          Demo demo = Demo.A;          
           switch (demo) {              
                      case A:                  
                   break;              
                      case B:                  
                   break;          }      }      
         enum Demo {          A,          B,          C      }  }

2 if和switch的区别:

if :1.对具体的值进行判断  2.对区间判断  3.对运算结果是boolean类型的表达式进行判断

switch :1.对具体的值进行判断;2.值的个数通常是固定的。

对于几个固定值的判断,建议使用switch语句,因为switch语句会将具体的答案加载进内存,相对高效一点。

重载和重写的区别

  • 重载:允许存在一个以上的同名函数,只要它们的参数类型不同即可。

  • 重写:当子类继承父类,沿袭了父类的功能到子类中,子类虽具备该功能,但功能内容不一致,这是使用覆盖特性,保留父类的功能定义,并重写功能内容。

  • 单例模式

    饿汉式

    private static Single s = new Single ( ) ;          
           private Single ( ) { }            public static Single getInstance ()          {          
              return s ;          }

          懒汉式


    class Single {      
      public static Single getInstance (){          
           if ( s== null ){              
              synchronized (Single.class){//锁不读可以提高效率              if ( s== null ){                  s = new Single () ;               }           }          
              return s ;      }  }

    特殊关键字:final


    1. 可以修饰类、函数、变量;  
    2. 被final修饰的类不可以被继承。为了避免被继承,被子类复写。final class Demo { }  
    3. 被final修饰的方法不可以被复写。final void show () { }  
    4. 被final 修饰的变量是一个常量,只能赋值一次。  
    5. 内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。

          异常:(关于问题1,谢谢ylt提醒)


     try{}catch(){}finally{}  
    1.在catch中return(),finally{}会不会执行?  答:会,会在return之后执行。  
    2.finally()在什么情况下不会执行  答:只有一种情况不会执行,当执行到System.exit(0)时,finally不会执行。

    public class Test {  public static void main(String[] args) {
          System.out.println("haha:" + haha(true));
      }  
    private static boolean haha(boolean isTrue) {      
       try {          
            int i = 1 / 0;          
            return  isTrue ? System.out.printf("return try !null ", "test") != null : System.out.printf("return try null ", "test") == null;      } catch (Exception e) {          System.out.println("catch");          
             return  isTrue ? System.out.printf("return catch !null ", "test") != null : System.out.printf("return catch null ", "test") == null;      } finally {                      System.out.println("");          System.out.println("finally");      }          } }
    //打印结果:
    catch
    return catch !null
    finally
    haha:true

    Java静态代码块、构造函数、构造代码块

    先看下面一段代码,运行Test,会打印什么?

    package test;  
    public class Test {      
      public static void main(String... args) {          TestA a;          a = new TestA();          a = new TestA();          TestA aa = new TestA();      }  }  
     class TestA {      {          System.out.println("TestA code create");      }      
             private TestB b = new TestB();      
             private static TestC c = new TestC();      
             
             public TestA() {              System.out.println("TestA create");      }      
             
             static {             System.out.println("TestA static create");      }  }  
     class TestB {      
        public TestB() {          System.out.println("TestB create");      }  }  
     class TestC {      
        public TestC() {          System.out.println("TestC create");      }  }

    打印结果:

    TestC create
    TestA static create
    TestA code create
    TestB create
    TestA create
    TestA code create
    TestB create
    TestA create
    TestA code create
    TestB create
    TestA create

    static特点:

      1.    随着类的加载而加载(随着类的消失而消失,生命周期最长)  
     2.    优先于对象存在  
     3.    被所有对象所共享  
     4.    可以直接被类所调用  
     5.    static是一个修饰符,用于修饰成员

    构造代码块

    作用:给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。
    
      和构造函数的区别:
      构造代码块是给所有对象进行统一初始化;而构造函数是给对应的对象初始化
      构造代码块中定义的是不同对象共性的初始化内容

    静态代码块

     static
      {
          静态代码块中的执行语句;
      }
      特点:随着类的加载而执行,只执行一次(再new一个对象也不会执行,类只加载一次),
      如果定义在有主函数的类中,则优先于主函数执行。用于给类进行初始化。
      有些类不用创建对象,无法用构造函数初始化,就通过静态代码块初始化。
    
      执行顺序:静态代码块先执行,如果有对象,构造代码块先执行,然后是构造函数。
      如果没有对象,则构造代码块和构造函数都不会执行。

    Java-封装、继承、多态

    抽象类的特点:

     1.    抽象方法一定在抽象类中。  
    2.    抽象方法和抽象类都必须被abstract关键字修饰。  
    3.    抽象类不可以用new创建对象,因为调用抽象方法没有意义。  
    4.    抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。强迫子类复写,强迫子类做一些事。  
    5.    抽象类中可以不定义抽象方法,如果不定义抽象方法,那么抽象类的功能就是为了不让该类建立对象。

    抽象关键字不可以和哪些关键字共存?

     答(1)private不能:抽象方法就是给子类覆盖的,私有了就不能覆盖了。
       (2)static不能:static可以直接用类名调用,而调用抽象方法没有意义。
       (3)final 不能:final修饰的方法不可以被复写,修饰的类不可以被继承。与abstract冲突。

    接口的特点

           接口是对外暴露的规则。
      ●    接口是程序的功能扩展。
      ●    接口可以多实现。
      ●    类与接口直接是实现关系,而且类可以继承一个类的同时实现多个接口。
      ●    接口与接口之间可以有继承关系,可以多继承。
           因为接口没有方法体,不会存在两个父类出现同一个方法但是方法体不同的情况,
           不会引起冲突,如下:  
         
     public class Test implements d{    
         public static void main(String... args) {      }      
         
         @Override      public void as() {      }  }  
         
         interface d extends e,f {  }  
         interface f{      
         void as();  }  
         interface e{      
         void as();  }

    接口和抽象类的异同点:

     相同点:都是不断向上抽取而来的。不可以被实例化
    
     不同点:1.    抽象类需要被继承,而且只能单继承;接口需要被实现,而且可以多实现  
           2.    抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法;        接口只能定义抽象方法,必须有子类实现。  
           3.    抽象类的继承,是is a关系,在定义该体系的基本共性内容;              接口的实现是like a 关系,在定义体系额外功能。

    继承

      子类的实例化过程:
      结论:子类的所有的构造函数,默认都会访问父类中空参数构造函数,因为子类中每一个构造函数内的第一行都有一句隐式的super() ;
      当父类中没有空参数的构造函数时,子类必须手动通过super或者this语句形式来指定要访问的构造函数。
      当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数,
      子类中至少会有一个构造函数会访问到父类中的构造函数。

    对象的初始化过程,见下图:

    打印结果

    原文链接:http://www.jianshu.com/p/f3fdbcaf7e83

    最后编辑于
    ©著作权归作者所有,转载或内容合作请联系作者
    • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
      沈念sama阅读 203,937评论 6 478
    • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
      沈念sama阅读 85,503评论 2 381
    • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
      开封第一讲书人阅读 150,712评论 0 337
    • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
      开封第一讲书人阅读 54,668评论 1 276
    • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
      茶点故事阅读 63,677评论 5 366
    • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
      开封第一讲书人阅读 48,601评论 1 281
    • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
      沈念sama阅读 37,975评论 3 396
    • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
      开封第一讲书人阅读 36,637评论 0 258
    • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
      沈念sama阅读 40,881评论 1 298
    • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
      茶点故事阅读 35,621评论 2 321
    • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
      茶点故事阅读 37,710评论 1 329
    • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
      沈念sama阅读 33,387评论 4 319
    • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
      茶点故事阅读 38,971评论 3 307
    • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
      开封第一讲书人阅读 29,947评论 0 19
    • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
      开封第一讲书人阅读 31,189评论 1 260
    • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
      沈念sama阅读 44,805评论 2 349
    • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
      茶点故事阅读 42,449评论 2 342

    推荐阅读更多精彩内容