程序员面试干货来啦,今天小编就先为大家整理出2道大厂面试时常见关于Java 的面试题。看看你能答对 几道题呢!多多掌握此类面试题,就会增加面试通过的机率哦,后续还有其他类的面试题,请持续关注哟!
1. 答:⽅法的重载,即使返回值类型不同,也不能改变实现功能相同或类似这⼀既定事实;同时⽅法的重载只是要求两同三不同,即在同⼀个类中,相同的⽅法名 称,参数列表当中的参数类型、个数、顺序不同;跟权限修饰符和返回值类⽆关 2. (Static Nested Class) Inner Class 答:内部类就是在⼀个类的内部定义的类,内部类中不能定义静态成员(静态成员不是对象的特性,只是为了找⼀个容身之处,所以需要放到⼀个类中⽽已,这 么⼀点⼩事,你还要把它放到类内部的⼀个类中,过分了啊!提供内部类,不是为让你⼲这种事情,⽆聊,不让你⼲。我想可能是既然静态成员类似 c 语⾔的全局变量,⽽内部类通常是⽤于创建内部对象⽤的,所以,把 “ 全局变量 ” 放在内部类中就是毫⽆意义的事情,既然是毫⽆意义的事情,就应该被禁⽌),内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的⽅法外⾯,也可以定义在外部类的⽅法体中,如下所示: public class Outer { int 0 public void method ) { Inner1 inner1 = new public class Inner2 //在⽅法体内部定义的内部类 { public method ) { out_x = 3 } } Inner2 inner2 = new } public class Inner1 //在⽅法体外⾯定义的内部类 { } } 在⽅法体外⾯定义的内部类的访问类型可以是 public,protecte, 默认的, private 等 4 种类型,这就好像类中定义的成员变量有 4 种访问类型⼀样,它们决定这个 内部类的定义对其他类是否可⻅;对于这种情况,我们也可以在外⾯创建内部类的实例对象,创建内部类的实例对象时,⼀定要先创建外部类的实例对象,然后⽤这个外部类的实例对象去创建内部类的实例对象,代码如下: Outer outer = new Outer(); Outer.Inner1 inner1 = outer.new Innner1(); 在⽅法内部定义的内部类前⾯不能有访问类型修饰符,就好像⽅法中定义的局部变量⼀样,但这种内部类的前⾯可以使⽤ final abstract 其他类是不可⻅的其他类⽆法引⽤这种内部类,但是这种内部类创建的实例对象可以传递给其他类访问。这种内部类必须是先定义,后使⽤,即内部类的定义代码必须出现在使⽤该类之前,这与⽅法中的局部变量必须先定义后使⽤的道理也是⼀样的。这种内部类可以访问⽅法体中的局部变量,但是,该局部变量前必须加 final 修饰符。对于这些细节,只要在 eclipse 写代码试试,根据开发⼯具提示的各类错误信息就可以⻢上了解到。在⽅法体内部还可以采⽤如下语法来创建⼀种匿名内部类,即定义某⼀接⼝或类的⼦类的同时,还创建了该⼦类的实例对象,⽆需为该⼦类定义名称: public class Outer { public void start ) { new new public void run ) } ).start(); } } 最后,在⽅法外部定义的内部类前⾯可以加上 static Static Nested Class 类。 Static Nested Class 与普通类在运⾏时的⾏为和功能上没有什么区别,只是在编程引⽤时的语法上有⼀些差别,它可以定义成 public 、 protected 、默认的、 private 等多种类型,⽽普通类只能定义成 public 和默认的这两种类型。在外⾯引⽤ Static Nested Class 类的名称为 “ 外部类名 . 内部类名 ” 。在外⾯不需要创建外部类的实例对象,就可以直接创建 Static Nested Class ,例如,假设 Inner 是定义在 Outer 类中的 Static Nested Class ,那么可以使⽤如下语句创建 Inner 类: Outer.Inner inner = newOuter.Inner(); 由于 static Nested Class 不依赖于外部类的实例对象,所以, static Nested Class 能访问外部类的⾮ static 成员变量 ( 不能直接访问,需要创建外部类实例才能访问⾮静态变量 ) 。当在外部类中访问 Static Nested Class 时,可以直接使⽤ Static Nested Class 的名字,⽽不需要加上外部类的名字了,在 StaticNested Class 中也可以直接引⽤外部类的 static 的成员变量,不需要加上外部类的名字。在静态⽅法中定义的内部类也是 Static Nested Class ,这时候不能在类前⾯加 static 关键字,静态⽅法中的 Static Nested Class 与普通⽅法中的内部类的应⽤⽅式很相似,它除了可以直接访问外部类中的 static 的成员变量,还可以访问静态⽅法中的局部变量,但是,该局部变量前必须加 final 修饰符。 备注:⾸先根据你的印象说出你对内部类的总体⽅⾯的特点:例如,在两个地⽅可以定义,可以访问外部类的成员变量,不能定义静态成员,这是⼤的特点。然后再说⼀些细节⽅⾯的知识,例如,⼏种定义⽅式的语法区别,静态内部类,以及匿名内部类。 Static Nested Class static 法看起来挺诡异的,如下所示。 package com.codingfuture; /** * 扑克类(⼀副扑克) * @author sxt * */ public class Poker private static "⿊桃" "红桃" "草花" "⽅块" private static int 1 2 3 4 5 6 7 8 9 10 11 12 13 private /** * 构造器 */ public Poker ) cards = new 52 for int 0 for int 0 cards[i * 13 new } } } /** * 洗牌 (随机乱序) */ public void shuffle ) for int 0 int int Card temp = cards[index]; cards[index] = cards[i]; cards[i] = temp; } } /** * 发牌 * @param index 发牌的位置 */ public deal int ) return } /** * 卡⽚类(⼀张扑克) * [内部类] * @author sxt */ public class Card private // 花⾊ private int // 点数 public Card String suite, int ) this this } @ Override public toString ) String faceStr = "" switch case 1 "A" break case 11 "J" break case 12 "Q" break case 13 "K" break default } return } } } 测试类: package com.codingfuture; class PokerTest public static void main String[] args { Poker poker = new poker.shuffle(); // 洗牌 Poker.Card c1 = poker.deal( 0 // 发第⼀张牌 // 对于⾮静态内部类Card // 只有通过其外部类Poker对象才能创建Card对象 Poker.Card c2 = poker.new Card( "红⼼" 1 // ⾃⼰创建⼀张牌 System. out // 洗牌后的第⼀张 System. out // 打印: 红⼼A } } 希望这些面试题对你有所帮助!下一期我们会有关于其他大厂面试题。别忘了关注我们的公众号哦,预防走丢! 最后愿你前程似锦,在冬深 在初春 在夏至在秋末 在码上未来! 码上未来,成就你更好的未来!