面试题汇编,Java基本语法

2020-03-05 01:15 来源:未知

简书 賈小強转发请申明原创下处,多谢!

标签:Java面试,  面向对象,线程、2017/05/09 09:23

”static”关键字是何等意思?Java中是否足以覆盖(override卡塔尔(قطر‎二个private恐怕是static的章程?

1 什么是 Java 设想机?为啥 Java 被称作是 “ 平台非亲非故的编制程序语言 ” ?

Java 虚构机是叁个足以施行 Java 字节码的伪造机进度 。Java 源文件被编写翻译成能被 Java 设想机推行的字节码文件 。

Java 被设计成允许应用程序能够运转在恣心纵欲的阳台,而没有必要技术员为每四个平台单独重写恐怕是双重编译。Java 设想机让这么些变为可能,因为它知道底层硬件平台的下令长度和其余特色 。

在Java语言中,我们都精晓,有三种创立线程的格局,一中是选拔Runnable接口,另一种是利用Thread类。

一.面向目的编制程序

“static”关键字标美素佳儿(Friso卡塔尔(قطر‎个分子变量恐怕是成员方法能够在尚未所属的类的实例变量的情事下被访问。
Java中static方法不可能被掩没,因为方法覆盖是遵照运维时动态绑定的,而static方法是编写翻译时静态绑定的。static方法跟类的其他实例都不相干,所以概念上不适用。

2 JDK 和 JRE 的界别是何许?

Java 运行时景况 (JRE卡塔尔(قطر‎ 是就要实施 Java 程序的 Java 虚构机 。Java 开垦工具包 (JDK卡塔尔 是完整的 Java 软件开辟包,包涵了 JRE ,编写翻译器和其他的工具 ( 例如: JavaDoc , Java 调节和测量检验器 卡塔尔(قطر‎,能够让开拓者开荒 、 编写翻译 、 实践 Java 应用程序 。

public class DemoRunnable implements Runnable { public void run() { //Code }}//with a "new Thread(demoRunnable).start()" callpublic class DemoThread extends Thread { public DemoThread() { super("DemoThread"); } public void run() { //Code }}//with a "demoThread.start()" call

1.JRE、JDK的区别

5.Java协助的数据类型有何样?什么是机动拆卸与拼装箱?

3 Java扶植的数据类型有何?什么是半自动拆卸与拼装箱?

Java语言支持的第88中学基本数据类型是:

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char

自动装箱是 Java 编写翻译器在着力数据类型和相应的靶子包装档期的顺序之间做的三个转会 。 举个例子:把 int 转产生 Integer , double 转产生 Double ,等等 。 反之正是自行拆箱 。

早本来就有雅量的争辨,哪三个更加好。嗯,小编也试着找寻答案,上面是自身的钻研:

JRE(Java Run environment):Java运营境况正是jvm 浏览器等局部插件。JDK是Java开采软件包,包括了JRE、编写翻译器、别的工具(JavaDoc、Java调节和测量试验器);

Java语言帮衬的第88中学基本数据类型是:

4 接口和抽象类的分别是怎么着?

  • 接口中有着的章程满含的都以抽象的 。 而抽象类则能够同不常间包含抽象和非抽象的艺术 。
  • 类能够兑现无数个接口,不过只可以三番两次一个抽象类
  • 类假设要兑现五个接口,它必定要兑现接口证明的有着办法 。 可是,类能够不兑现抽象类证明的兼具办法,当然,在这种状态下,类也必需得注脚成是空泛的 。
  • 抽象类可以在不提供接口方法实现的情况下促成接口 。
  • Java 接口中扬言的变量暗许都以 final 的 。 抽象类能够包涵非 final 的变量 。
  • Java 接口中的成员函数私下认可是 public 的 。 抽象类的分子函数能够是 private , protected 可能是 public。
  • 接口是相对抽象的,不能被实例化 。 抽象类也不得以被实例化,不过,借使它富含 main 方法的话是能够被调用的 。
  1. 实现Runnable接口是首推办法。在这里处,您并无需改良Thread类的表现。你只是给线程一些事物运维。这代表组合是最棒的章程。
  2. Java只援助单一继承,所以你不能不一连三个类。
  3. 用接口的办法将你的代码和线程达成抽离,尤其清楚。
  4. 实现Runnable令你的类越来越灵活。即便您持续Thread类,那么您所做的操作总是处于三个线程中。然则一旦您使用完成Runnable接口,您能够在二个线程中运作它,只怕将它传递给某种施行器,或许只是将它看成多个单线程应用程序中的任务传递给它。
  5. 透过三回九转Thread类,每一种线程都有一个相关联的并世无两指标,而落到实处Runnable接口,多线程能够分享同一个Runnable实例。
  6. 若果您办事在JDK 4或更低,那么有八个bug它在Java 1.5中被修复,但Sun集团不筹算修复1.4中的bug。

2.Java中是还是不是足以覆盖一个static只怕private的点子?

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char

5 什么是值传递和援用传递?

目的被值传递,意味着传递了对象的三个别本。因此,就算是改换了指标别本,也不会影响源对象的值。

对象被援引传递,意味着传递的并不是事实上的靶子,而是对象的援用。因而,外界对援用对象所做的改换会反映到全数的目的上。

Happy Learning !!

“static”关键字说美赞臣(Meadjohnson卡塔尔个成员变量只怕成员方法,能够在未曾所属类的实例变量意况下被访谈。

自动装箱是Java编写翻译器在主导数据类型和相应的指标包装档期的顺序之间做的一个转账。例如:把int转化成Integer,double转产生double,等等。反之正是全自动拆箱。

6 ”static” 关键字是怎么样意思? Java 中是或不是足以覆盖 (override卡塔尔 多个 private 也许是 static 的章程?假如回答不能够,请问怎么不能?

“static” 关键字标美赞臣(MeadjohnsonState of Qatar个分子变量也许是成员方法能够在一贯不所属的类的实例变量的景观下被访谈。static 还足以用来修饰内部类(静态内部类),还能用在 import 中,能够平素运用某些类的静态属性而无需类名 。
Java 中 static 方法不可能被隐蔽,因为方法覆盖是依靠运转时动态绑定的,而 static 方法是编译时静态绑定的 。static 方法跟类的其余实例都不相干,所以概念上不适用 。

static方法无法被掩瞒,因为方法覆盖是针对性动态运维时来讲的,而static是编写翻译时静态绑定的,static方法与其余实例都不相干。

Java中的方法重载发生在同几个类里面多少个也许是五个主意的不二秘籍名相像只是参数分化的图景。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必需有一致的法子名,参数列表和重临类型。覆盖者也许不会节制它所覆盖的点子的拜望。

7 是或不是可以在 static 遭遇中访谈非 static 变量?

static 变量在 Java 中是属于类的,它在具备的实例中的值是同样的 。 当类被 Java 设想机载入时,会对 static 变量实行初阶化 。 要是您的代码尝试不用实例来访问非 static 的变量,编写翻译器会报错,因为那一个变量还尚无被创立出来,还平素不跟其余实例关联上 。

同理,static情形下是不得以访谈非static变量,因为static归于类的,它在装有的实例中的值都是一律的,当类被Java设想机载入的时候,会对static变量实行伊始化,如若你品尝不用实例去拜会非static变量,那么编写翻译器会报错,因为那么些变量未有被创建出来,还还没与实例关联上。

7.Java中,什么是结构函数?什么是构造函数重载?什么是复制结构函数?

8 将构造函数声明为私有会有何意义?

将结构函数证明为私有 (private卡塔尔,可以保障类以外的地点都不能够一贯实例化那几个类 。 在这里种状态下,要开创这些类的实例,独一的法门是提供二个国有静态方法,就疑似工厂方法格局那样 。
其余,由于结构函数是私家的,由此那几个类也无法被世襲 。

3.Java中方法重载与措施覆盖的界别?

当新指标被成立的时候,构造函数会被调用。每叁个类都有布局函数。在技士没有给类提供布局函数之处下,Java编写翻译器会为那些类创造二个私下认可的构造函数。

9 在 Java 中,若在 try-catch-finally 的 try 语句块中插入 return 语句, finally 语句块是或不是会进行?

诚如情状下会实施 。 当退出 try 语句块时, finally 语句块将实行 。 即便大家总计从 try 语句块里跳出(通过 return 语句 、continue 语句 、break 语句或随便格外语句), finally 语句块仍将得以实施 。

只顾:有些情状下 finally 语句块将不会进行,比方:

  • 一经虚构机在 try/catch 语句块实施时期退出;
  • 假设进行 try/catch 语句块的线程被杀死终止了 。

方式重载正是在相通类中的不一致参数的艺术,而艺术覆盖正是子类重写父类的不二诀要:必得参数一致,再次来到值一致的格局。

Java中结构函数重载和办法重载很经常。可感觉四个类创立七个布局函数。每一种构造函数必得有它本人独一的参数列表。

10 请问什么是 Java 的靶子反射?它有啥样效劳?

指标反射是 Java 的一项特征,提供了获取 Java 类和目的的反光音讯的秘诀,能够实行以下方法:

  • 运作时收获类的不二诀要和字段的连锁新闻 。
  • 创办有些类的新实例 。
  • 经过获取字段援引直接取得和安装对象字段,不管访问修饰为什么 。

反射的意义:

  • 拉动侦查和操纵应用程序的周转时行为 。
  • 有援救调度或测验程序,因为大家得以一贯访谈方法 、 结构函数和成员字段 。
  • 就是事情发生以前不胜不清楚某些方法,我们也足以通过名字调用该方法 。

举个列子就是:二个家家里的你和你表弟就是对阿爸的重载(因为您和兄弟确实不是一律人(参数),然而又都以对爹爹的一而再下来的);而重写就也就是青出于蓝。

Java不援救像C 中那么的复制构造函数,这么些不一致点是因为假如你不和煦写布局函数的情形下,Java不会创立默许的复制布局函数。

11 为啥内部类调用的外界变量必得是 final 修饰的?

因为生命周期的因由 。 方法中的局地变量,方法停止后这么些变量将在释放掉, final 有限支持那一个变量始终本着一个对象 。 首先,内部类和表面类其实是高居同叁个品级,内部类不会因为定义在点子中就会随着方法的奉行完结而支持者被销毁 。 难题就来了,假若外界类的点子中的变量不定义 final ,那么当外部类措施施行完结时,那个部分变量肯定也就被 GC 了,然则此中类的有些方法还不曾实施完,这时他所引述的表面变量已经找不到了 。 假如定义为 final , java 会将以此变量复制一份作为成员变量内放置内部类中,那样的话,由于 final 所修饰的值始终不可能改善,所以那几个变量所针对的内部存储器区域就不会变 。
为精通决:局地变量的生命周期与一些内部类的靶子的生命周期的差别性难题。

4.构造函数是?怎么重载布局函数?

9.接口和抽象类的界别是如何?

12 请说一说 Java 中的方法覆盖 (Overriding卡塔尔国 和措施重载 (OverloadingState of Qatar 的界别 ?

Java 中的方法重载发生在同多个类里面七个恐怕是多少个办法的点子名相同只是参数差异的情事 。

与此相对,方法覆盖是说子类重新定义了父类的不二等秘书籍 。 方法覆盖必需有平等的方式名,参数列表和再次来到类型 。 覆盖者恐怕不会约束它所覆盖的法子的访谈 。

构造函数是各类类都含有的函数,哪怕没有明了写出,也会暗中认可提供的,他是给目的创设时初步化用的,函数重载与艺术重载相似,只不过参数不相仿而已。

Java提供和协助成立抽象类和接口。它们的落到实处有同盟点,分化点在于:

13 Java 帮衬多世袭么?

Java 中类不辅助多一连,只辅助单世袭(即三个类唯有二个父类) 。 不过 java 中的接口帮忙多三翻五次,,即一个子接口能够有多少个父接口 。 (接口的功用是用来扩大对象的效用,一个子接口继承多个父接口,表明子接口扩大了多个功能,当类完毕接口时,类就增添了对应的效率) 。

5.接口与抽象类的分别

  • 接口中负有的诀窍满含的都以抽象的。而抽象类则足以同有时候蕴含抽象和非抽象的章程。
  • 类能够兑现无数个接口,不过只可以接二连三多少个抽象类
  • 类假若要贯彻一个接口,它应当要落实接口评释的富有办法。不过,类能够不达成抽象类申明的拥有办法,当然,在这里种状态下,类也必需得注脚成是空泛的。
  • 抽象类能够在不提供接口方法完结的动静下完毕接口。
  • Java接口中扬言的变量默许都以final的。抽象类能够分包非final的变量。
  • Java接口中的成员函数暗许是public的。抽象类的积极分子函数能够是private,protected或然是public。
  • 接口是纯属抽象的,不得以被实例化。抽象类也无法被实例化,但是,假设它包括main方法的话是足以被调用的。
  • 10.怎么着是值传递和援用传递?

    指标被值传递,意味着传递了对象的叁个别本。由此,固然是改换了指标别本,也不会影响源对象的值。

    指标被引用传递,意味着传递的并非实际的靶子,而是对象的援引。因而,外界对引用对象所做的改观会反映到全体的目的上。

  • Java线程

    11.经过和线程的分别是怎么?

    进度是奉行着的应用程序,而线程是进度之中的一个推行连串。叁个历程能够有八个线程。线程又叫做轻量级进度。

  • 12.创设线程有三种不相同的法子?你中意哪一类?为啥?

    有两种形式得以用来创制线程:

    • 继承Thread类
    • 实现Runnable接口
    • 应用程序能够使用Executor框架来成立线程池

    福寿康宁Runnable接口这种方法更受迎接,因为那无需后续Thread类。在使用设计中曾经一连了别的对象的气象下,那亟需多三回九转(而Java不帮助多一而再),只好兑现接口。同一时间,线程池也是可怜火速的,超级轻松完成和平运动用。

  • public class Test { ``public static void main(String[] args)  {

    ``System.out.println(``"主线程ID:"`` Thread.currentThread().getId());

    ``MyRunnable runnable = ``new MyRunnable();

    ``Thread thread = ``new Thread(runnable);

    ``thread.start();

    ``}

    }

     

     

    class MyRunnable ``implements Runnable{

     

    ``public MyRunnable() {

     

    ``}

     

    ``@Override

    ``public void run() {

    ``System.out.println(``"子线程ID:"`` Thread.currentThread().getId());

    ``}

    }

14 请问,创设线程有两种分化的法子?你欣赏哪种?为啥?

有二种方式得以用来创建线程:

  • 继承 Thread 类
  • 实现 Runnable 接口
    应用程序能够应用 Executor 框架来创立线程池

贯彻 Runnable 接口这种格局更受招待,因为那无需后续 Thread 类 。 在使用设计中已经三回九转了别的对象的情形下,那亟需多一而再(而 Java 不帮衬多三番陆次),只可以促成接口 。 同期,线程池也是拾贰分赶快的,相当轻便落成和行使 。

接口中的全部办法包涵都是抽象类的,而抽象类可以包蕴抽象方法与非抽象的主意。

15 请说一说,线程的生命周期?有哪三种窒碍意况?香消玉殒的线程能够复生吗?

  • 新建 (new卡塔尔国 :新创建了三个线程对象 。
  • 可运维 (runnableState of Qatar :线程对象创制后,别的线程 ( 举个例子 main 线程)调用了该目的的 start(卡塔尔(قطر‎ 方法 。 该地方包车型大巴线程坐落于可运营线程池中,等待被线程调解选中,获取 cpu 的使用权 。
    运维 (running卡塔尔(قطر‎ :可运维意况 (runnable卡塔尔 的线程得到了 cpu 时间片( timeslice ),施行顺序代码 。
  • 梗塞 (block卡塔尔(قطر‎ :梗塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu timeslice ,权且结束运行 。 直到线程步向可运营 (runnableState of Qatar 状态,才有 时机再度赢得 cpu timeslice 转到运维 (running卡塔尔(قطر‎ 状态 。 拥塞的事态分二种:
    ( 一 卡塔尔(قطر‎. 等待绿灯:运维 (running卡塔尔 的线程实践 o.wait(卡塔尔(قطر‎ 方法, JVM 会把该线程放入等待队列 (waitting queue卡塔尔(قطر‎ 中 。
    ( 二 卡塔尔. 同步窒碍:运营 (running)的线程在收获对象的协作锁时,若该联合锁被其他线程占用,则 JVM 会把该线程归入锁池 (lock pool卡塔尔国 中 。
    ( 三 卡塔尔国. 别的堵塞 : 运营 (running卡塔尔 的线程实践 Thread.sleep (long ms卡塔尔或 t.join(卡塔尔 方法,大概发生了 I/O 须求时, JVM 会把该线程置为梗塞状态 。 当 sleep(State of Qatar 状态超时 、join(State of Qatar 等待线程终止恐怕超时 、 可能 I/O 管理达成时,线程重新转入可运维 (runnableState of Qatar 状态 。
  • 一了百了 (dead卡塔尔 :线程 run(State of Qatar、 main(卡塔尔(قطر‎ 方法执行达成,大概因不胜退出了 run(State of Qatar 方法,则该线程结束生命周期 。 去世的线程不可再次复生 。

类能够完毕多少个接口,可是只好接二连三八个抽象类;

16 线程同步方法和一块代码块的界别是怎么样?

手拉手方法暗中认可用this只怕当前类class对象作为锁;
协同代码块能够接收以什么来加锁,比同步方法要越来越细颗粒度,大家得以选拔只同步会发生一齐难题的部分代码并不是任何艺术;

类如若要落实二个接口,就一定要实现其兼具办法,类能够不兑现抽的持有抽象方法,当然,这种意况下,该类必需注解成抽象类。

17 什么是死锁?

五个线程或八个以上线程都在伺机对方奉行实现技巧持续往下施行的时候就时有产生了死锁。结果正是那么些线程都深陷了有加无己的等候中。

抽象类能够在不提供接口方法达成的情事下降成接口;

18 怎样保险 N 个线程可以访谈 N 个资源同期又不变成死锁?

动用三十二线程的时候,一种非常简单的制止死锁的办法就是:钦命获取锁的依次,并强迫线程依据钦定的次第获取锁。因而,借使全部的线程都以以同一的顺序加锁和释放锁,就不会并发死锁了。

Java接口中宣示的变量暗中认可都是final的,抽象类可以分包非final的变量 ;

19 Java 群集框架的底工接口有怎样?

  • Collection 为集聚层级的根接口 。 二个集聚代表一组对象,那一个指标即为它的成分 。Java 平台不提供那么些接口任何直接的兑现 。
  • Set 是一个无法蕴含重复成分的集结 。 那些接口对数学集结抽象实行建立模型,被用来代表集中,宛如一副牌 。
  • List 是八个不改变聚焦,可以富含重复成分 。 你能够经过它的索引来访谈任何成分 。List 更像长度动态变换的数组 。
  • Map 是贰个将 key 映射到 value 的指标 . 一个 Map 无法包罗重复的 key :各个 key 最两只可以照射七个 value。
    一部分其余的接口有 Queue、Dequeue、SortedSet、SortedMap 和 ListIterator。

接口中的成员函数默许是public,可是抽象能够是public、private、protect的

20 说说 Java 的 HashMap 的做事规律?

HashMap 是一个指向性数据构造的键值,各种键都会有对应的值,关键是识别那样的值 。

HashMap 基于 hashing 原理,大家因此 put (State of Qatar 和 get (卡塔尔国 方法囤积和得到对象 。 当大家将键值对传递给 put (State of Qatar 方法时,它调用键对象的 hashCode (卡塔尔国方法来计量 hashcode ,然后找到 bucket 位置来积攒值对象 。 当获取对象时,通过键对象的 equals (卡塔尔国方法找到科学的键值对,然后重返值对象 。HashMap 使用 LinkedList 来减轻碰撞难点,当产生相撞了,对象将会累积在 LinkedList 的下三个节点中 。 HashMap 在种种 LinkedList 节点中积存键值对目的 。

接口是纯属抽象的,不能被实例化,抽象类也不可能被实例化,不过可通过父类的援引指向子类的实例的点子直接的贯彻父类的实例化(因为子类的实例化在此之前,必得先实例它的父类(抽象类能够包罗布局函数))。

21 Java 集结中有哪些已兑现的 List ,它们有啥区别?

LinkedList 和 ArrayList。ArrayList 的优势在于动态的增加数组,极其切合早先时总参谋长度未知的意况下利用 。LinkedList 的优势在于在中间地点插入和删除操作,速度是最快的 。

LinkedList 实现了 List 接口,允许 null 成分 。 其他 LinkedList 提供额外的 get , remove , insert 方法在 LinkedList 的首部或尾巴部分 。 那么些操作使 LinkedList 可被作为酒店( stack ),队列( queue )或双向队列( deque ) 。

ArrayList 完成了可变大小的数组 。 它同意具有因素,包涵 null。 每个ArrayList 实例都有一个体积( Capacity ),即用于存款和储蓄成分的数组的大小 。 这一个体积可趁着不断增多新因素而机关扩充,不过增进算法并从未定义 。 当要求插入多量因素时,在插入前能够调用 ensureCapacity 方法来充实 ArrayList 的容积以增长插入成效 。

6.值传递与引用传递

22 在遍历一个集合的时候,怎样制止现身改良十一分(ConcurrentModificationException)?

在遍历多个集聚的时候,大家得以行使并发集结类来防止ConcurrentModificationException,譬如动用CopyOnWriteArrayList,却非ArrayList。

也足以应用迭代器来迭代群集。

值传递就是传递了目的的叁个别本,就算改造了对象别本,也不会影响源对象的值(形参为主干数据类型);

23 哪些集结类提供对成分的妄动访谈?

ArrayList、HashMap、TreeMap和HashTable类提供对成分的率性访谈。

援用传递正是传递了目的的援引,外界对引用对象的更改交易会示到独具的靶子身上(行为为援用类型 )。

24 什么是迭代器(IteratorState of Qatar?

Iterator 接口提供了众多对集结元素进行迭代的主意 。 每贰个会集类都含有了能够再次来到迭代器实例的迭代方法 。 迭代器能够在迭代的经过中除去底层集结的成分 , 但是无法一贯调用集结的 remove(Object Obj卡塔尔国 删除,能够通过迭代器的 remove(卡塔尔(قطر‎ 方法删除 。

二:Java线程

25 Iterator 和 ListIterator 的区分是哪些?

  • Iterator 可用来遍历 Set 和 List 集合,不过 ListIterator 只好用来遍历 List。
  • Iterator 对聚焦只可以是前向遍历, ListIterator 既可以前向也足现在向 。
  • ListIterator 落成了 Iterator 接口,并饱含其余的功效,例如:增港成分,替换到分,获取前多少个和后八个成分的目录,等等 。

7.成立线程的两种格局?

26 迭代器中的快速战败 (fail-fastState of Qatar 和石嘴山失利 (fail-safe卡塔尔 的界别是何等?

答: Iterator 的广安失利是基于对底层集结做拷贝,因而,它不受源集结上改变的熏陶 。java.util 包上面包车型客车装有的群集类都以全速战败的,而 java.util.concurrent 包下边包车型客车具备的类都以安全战败的 。 快速失败的迭代器会抛出 ConcurrentModificationException 十分,而平安退步的迭代器永久不会抛出那样的特别 。

继承Thread类;

实现 Runnable接口;

能够利用 Executor 框架来创建线程池能够接收 Executor 框架来创立线程池;

得以完成runnable接口这种措施更受迎接,因为这里无需继续Thread类,在其实在那之中你曾经三翻五次其他类,而Java不容多数接二连三,所以不能不使用完毕runnable接口的秘技。

8.席卷的讲授下线程的几种可用状态

妥当(Runnable卡塔尔(قطر‎:线程酌量运维,不必然就能够立时实行;

运维中:进程正在施行线程的代码;

等待中:线程处于堵塞的情形,等待外界的管理结果

睡觉中:线程被挟持睡眠

I/O拥塞:等待IO操作实现

手拉手阻塞:等待获取锁?

故世:线程落成了执行

9.手拉手代码块与二头方法的差异,锁,死锁

    种种对象都可以有一把锁(synchronized),本质都以相似的,只是颗粒度不平等而已。监视器和锁在Java中是一块使用的 ,确认保障一遍唯有叁个线程推行一齐代码块,每二个监视器和二个目的援用相关联,线程在收获锁此前不许实行一同代码块。死锁正是五个线程等待对方实施达成之后,才具一而再一而再往下实行的时候就发出死锁。陷入了有线Infiniti等待的死循环。防止死循环正是获取锁的各类,并且压迫线程依据钦赐的逐个获取锁,假如依据顺序加载锁和释放锁,就不会产出死锁。

请尊敬原创,转发请联系,前走动上的您并不孤独,小蚁君每一日都会陪着你......

TAG标签:
版权声明:本文由美高梅网投平台发布于美高梅网投网址,转载请注明出处:面试题汇编,Java基本语法