java中多态是指什么

多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。简单来说,多态就是使用父类类型的变量应用子类对象,根据被引用子类对象的特性,程序得到不同的运行效果。

Anonymous Inner Class ( 匿名内部类 ) 是否可以 extends( 继承)其它类,是否可以 implements( 实现 )interface( 接口)

答:匿名的内部类是没有名字的内部类。不能 extends( 继承 ) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现

静态嵌套类(Static Nested Class)和内部类(InnerClass)的不同?

内部类是类中类(内部类不为同一包的其他类可见,具有很好的封装性),分为静态内部类,成员内部类,局部内部类以及匿名内部类;局部内部类写在方法里面;用到最多的就是匿名内部类。

  1. 静态的内部类称为嵌套类,嵌套类不能直接引用外部类的non-static属性和方法,创建嵌套类对象时不依赖外部类对象;
  2. 静态内部类没有了指向外部的引用,和C++的嵌套类很相像了,Java内部类和C++嵌套类最大的不同在于是否具有指向外部引用这点;
  3. 在任何非静态内部类中,都不能有静态数据、静态方法或者又一个静态内部类(也就是不止一层),然后静态内部类可以拥有这一切。

short s1 = 1; s1 = s1 + 1; 有什么错 ? short s1 = 1; s1 += 1; 有什么错

答: short s1 = 1; s1 = s1 + 1;s1+1 运算结果是 int型,需要强制转换类型)short s1= 1; s1 += 1; (可以正确编译)

常见的runtime exception (运行时异常)

  1. java.lang.NullPointerException
  2. java.lang.ClassNotFoundException
  3. java.lang.ArrayIndexOutOfBoundsException
  4. java.lang.NoSuchMethodError
  5. java.lang.IndexOutOfBoundsException
  6. java.lang.NumberFormatException
  7. java.sql.SQLException
  8. java.io.IOException
  9. java.lang.IllegalArgumentException
  10. java.lang.IllegalAccessException

error 和 exception 有什么区别

  1. **error** 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况
  2. **exception** 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况

abstract 的 method 是否可同时是 static, 是否可同时是 native ,是否可同时是 synchronized

都不能

接口是否可继承接口?抽象类是否可实现 (implements) 接口?抽象类是否可继承实体类 (concrete class)?

接口可以继承接口。抽象类可以实现 (implements) 接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数

是否可以继承 String 类

String 类是 final 类故不可以继承

try {} 里有一个 return 语句, 那么紧跟在这个 try 后的 finally {} 里的 code会不会被执行,什么时候被执行,在 return 前还是后?

会执行,在 return 前执行

GC 是什么 ? 为什么要有 GC

GC 是垃圾收集的意思( Gabage Collection ) ,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃, Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的, Java 语言没有提供释放已分配内存的显式操作方法。

运行时异常与一般异常有何异同

异常表示程序运行过程中可能出现的非正常状态, 运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。 java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

面向对象的特征有哪些方面

答:主要有以下四方面:

  • 1.抽象:
  • 抽象就是忽略一个主题中与当前目标无关的那些方面, 以便更充分地注意与当前目标有关的方面。 抽象并不打算了解全部问题, 而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
  • 2.继承:
  • 继承是一种联结类的层次模型, 并且允许和鼓励类的重用, 它提供了一种明确表述共性的方法。 对象的一个新类可以从现有的类中派生, 这个过程称为类继承。 新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
  • 3.封装:
  • 封装是把过程和数据包围起来, 对数据的访问只能通过已定义的界面。 面向对象计算始于这个基本概念, 即现实世界可以被描绘成一系列完全自治、 封装的对象, 这些对象通过一个受保护的接口访问其他对象。
  • 4.多态性:
  • 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

描述一下 JVM 加载 class 文件的原理机制 ?

答: JVM 中类的装载是由 ClassLoader 和它的子类来实现的 ,Java ClassLoader 是一个重要的 Java 运行时系统组件。它负责在运行时查找和装入类文件的类。

JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally分别代表什么意义?在 try 块中可以抛出异常吗?

Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。

在 Java 中,每个异常都是一个对象, 它是 Throwable 类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象, 该对象中包含有异常信息, 调用这个对象的方法可以捕获到这个异常并进行处理。

Java 的异常处理是通过 5 个关键词来实现的: try 、 catch 、throw 、 throws 和 finally 。

一般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出( throws ) 一个异常, 这时候你可以通过它的类型来捕捉 ( catch ) 它, 或最后 ( finally )由缺省处理器来处理。

  1. 用 try 来指定一块预防所有 "异常 "的程序。紧跟在 try 程序后面,应包含一个 catch 子句来指定你想要捕捉的 "异常 " 的类型。
  2. throw 语句用来明确地抛出一个 "异常 " 。
  3. throws 用来标明一个成员函数可能抛出的各种 "异常 "。
  4. Finally 为确保一段代码不管发生什么 "异常 "都被执行一段代码。

可以在一个成员函数调用的外面写一个 try 语句,在这个成员函数内部写另一个 try 语句保护其他代码。每当遇到一个 try 语句, "异常 " 的框架就放到堆栈上面,直到所有的 try 语句都完成。如果下一级的 try 语句没有对某种 "异常 "进行处理,堆栈就会展开,直到遇到有处理这种 "异常 "的 try 语句。

一个 “.java” 源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以。必须只有一个类名与文件名相同。

JRE和JDK的区别

  • JRE:相当于操作系统部分,提供了Java程序运行时所需要的基础条件和许多Java基础类
  • JDK:它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的,JDK包含JRE

简述Java的运行机制

Java程序运行时,必须经过编译和运行两个步骤。

  1. 首先将后缀名为.java的源文件进行编译,生成后缀名为.class的字节码文件
  2. 然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来

注意javac.exe是Java编译器,java.exe是java解释器

简述Java的特点

  1. 面向对象
  2. 跨平台性
  3. 健壮性
  4. 安全性
  5. 可移植性
  6. 多线程性
  7. 动态性等

转义符常见字符

  1. \r:回车符
  2. \n:表示换行符
  3. \t:表示制表符
  4. \b:表示退格符号

简述什么是集合并列举集合中常用的类和接口

为了使程序能方便的存储和操作数目不固定的一组数据,JDK提供了一套类库,这些类都位于java.util包中,统称为集合。集合框架中常用的接口和类有List、Set、ArrayList、HashSet、Map、HashMap、TreeMap

  1. List:元素有序,可重复
  2. Set:元素无序,不可重复
  3. Map:key-value结构

简述&和&&的区别

  • 如果使用&在表达式之间进行连接,那么无论任何情况下,&两边的表达式都会参与计算
  • 如果使用&&在表达式之间进行连接,当&&左边的表达式为false,这不会执行右边的表达式

简述跳转语句breake和continue的作用和区别

  1. break:调出当前正在循环的循环体
  2. continue:用于结束循环体中其后语句的执行,并跳回循环程序块的开头执行下一循环

自动装箱和自动拆箱

自动拆箱是指将其基本数据类型的变量赋给对应的包装类变量,反之,拆箱是指将包装类对象类型直接赋给一个对应的基本数据类型变量

简述字节流和字符流的区别

字节流的两个基类是InputStreamOutputStream,字符流的两个基类是ReaderWriter,他们都是object的字节子类,字节流是处理以8字节为单位的字节流类,字符流是处理16位字节的字符流类

一些简单的概念

函数式接口:在Java中指有且只有一个抽象方法的接口

super关键字和this关键字不能同时存在于同一个构造方法中

随机数公式:[n-m] (n,m均为整数,n<m)之间的随机数公式为:n+(new Random()).nextInt(m-n+1)