面向对象
1、java面向对象编程三大特性:封装、继承、多态
多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
2、类和对象的区别
1、类是对某一类事物的描述,是抽象的;而对象是一个实实在在的个体,是类的一个实例。
比如:“人”是一个类,而“教师”则是“人”的一个实例。
2.对象是函数、变量的集合体;而类是一组函数和变量的集合体,即类是一组具有相同属性的对象集合体。
3、重载和重写的区别?相同参数不同返回值能重载吗
重载(Overloading):发生在同一个类中,方法名必须相同、参数类型不同、个数不同、顺序不同、方法返回值和访问修饰符可以不同
重写(Overriding):重写是子类对父类的允许访问的方法的实现过程进行重新编写,发生在子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。
即方法提供的行为改变,而方法的外貌并没有概念
4、”static”关键字是什么意思?Java 中是否可以覆盖(override)一个static 的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java 中static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static 方法是编
译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。
5、静态变量存在什么位置?
方法区
6、什么是泛型?
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
public class GenericTest { public static void main(String[] args) { /* List list = new ArrayList(); list.add("qqyumidi"); list.add("corn"); list.add(100); */ List<String> list = new ArrayList<String>(); list.add("qqyumidi"); list.add("corn"); //list.add(100); // 1 提示编译错误 for (int i = 0; i < list.size(); i++) { String name = list.get(i); // 2 System.out.println("name:" + name); } } }
采用泛型写法后,在//1 处想加入一个Integer 类型的对象时会出现编译错误,通过List<string>,直接限定了list 集合中只能含有String 类型的元素,从而在//2 处无须进行强制类型转换,因为此时,集合能够记住元素的类型信息,编译器已经能够确认它是String 类型了。</string>
7、什么是反射机制?
Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种 动态的获取信息 以及 动态调用对象的方法 的功能称为 java 的反射机制。
- 简单来说反射就是解剖一个类,然后获取这个类中的属性和方法,前提是要获取这个类的Class对象
8、Java 支持多继承么?
Java 中类不支持多继承,只支持单继承(即一个类只有一个父类)。但是java 中的接口支持多继承,,即一个子接口可以有多个父接口。(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)。
9、接口和抽象类的区别是什么?
1、接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
2、类可以实现很多个接口,但是只能继承一个抽象类;类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
3、抽象类可以在不提供接口方法实现的情况下实现接口。
4、Java 接口中声明的变量默认都是final 的。抽象类可以包含非final 的变量。
5、Java 接口中的成员函数默认是public 的。抽象类的成员函数可以是private,protected 或者是public。
6、接口是绝对抽象的,不可以被实例化*。抽象类也不可以被实例化,但是,如果它包含main 方法的话是可以被调用的。
10、Comparable 和Comparator 接口是干什么的?列出它们的区别。
Java 提供了只包含一个compareTo()方法的Comparable 接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。
Java 提供了包含compare()和equals()两个方法的Comparator 接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator 相等。只有当输入参数也是一个comparator 并且输入参数和当前comparator 的排序结果是相同的时候,这个方法才返回true。
11、final, finally, finalize 的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
12、java异常处理
java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并且提供良好的接口。
在java中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。
Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是java异常处理的重要子类,各自都包含大量子类。
Java 的异常处理是通过5 个关键词来实现的:try、catch、throw、throws和finally。
用try 来指定一块预防所有”异常”的程序。紧跟在try 程序后面,应包含一个catch 子句来指定你想要捕捉的”异常”的类型。throw 语句用来明确地抛出一个”异常”。throws 用来标明一个成员函数可能抛出的各种”异常”。Finally 为确保一段代码不管发生什么”异常”都被执行一段代码。
public static int f(int value) { try { return value * value; } finally { if (value == 2) { return 0; } } }