.1.面向对象的软件开发有哪些优点?1)把软件系统看成是各种对象的集合,这更接近人的思维。2)软件需求的变动往往是功能的变动,而功能的执行者--对象一般不会有太大的变化。这使得按照对象设计出来的系统结构比较稳定。3)对象包括属性和方法,对象把属性和方法的具体实现方式一起封装起来,这使得方法与之相关的属性不再分离,提高每个子系统的相对独立性,从而提高了软件的可维护性。4)支持封装、继承、多态和抽象,提高了软件的可重用性、可维护性和可扩展性。1.把一个类放在包里有什么作用?(包的作用)1)能够区分名字相同的类。2)有助于实施访问权限控制。3)有助于划分和组织java应用中的各个类。2.说出一些常用的类,包,接口,请各举出5个。Runable,ActionListener,Conllection,Map,Set,List接口1)java.lang包----包括线程类(Thread)、异常类(Exception)、系统类(System)、整数类(Integer)和字符串类(String)等,这些类是java程序中经常用到的。2)java.awt包----抽象窗口工具箱包,awt是(AbstractWindowToolkit)的缩写。这个包中包含了用于构建GUI界面的类及绘图类。3)java.io包----输入/输出包,包含各种输入流类和输出流类,如文件输入流类(FileInputStream类)及文件输出流类(FileOutputStream)等。4)java.util包----提供一些实用类,如日期类(Data)和集合类(Collection)等。5)java.net包----支持TCP/IP网络协议,包括Socket类及和URL相关的类,这些类都用于网络编程。除了上面提到的基本包,JDK中还有很多其他包,比如用于数据库编程的java.sql包,用于编写网络程序的java.rmi包(rmi是“RemoteMethodInvocation”的缩写)。另外,javax.*包是对基本包的扩展,包括用于编写GUI的javax.Swing包,以及用于编写声音程序的javax.sound包等。4.描述一下你最常用的编程风格。1)注意编码规则,符合编码要求。2)变量,类等起名要有意义。3)经常格式化代码,注意格式。4)代码中加入测试方法或测试类,尽量提早发现错误。5)代码中要加入注释,为别人和自己将来理解代码带来方便。5.说一说标识符的命名规则,以及java的编程规范。Java标识符的命名规则:1)标识符由字母、数字、下划线“_”、美元符号“$”或者人民币符号“¥”组成,并且首字母不能是数字。2)不能把关键字和保留字作为标识符。3)标识符没有长度限制。4)标识符对大小写敏感。Java编程规范:1)类名和接口名:首字母大写,其余字母小写。如SamDoc2)方法名和变量名:首字母小写,其余的字母大写。如bothEyesOfDoll。3)包名:字母全部小写。如,com.abc.dollapp。4)常量名:采用大写形式,单词之间以下划线“_”隔开。如DEFAULT_COLOR_DOL6.用new关键字的作用是什么?1)为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值。2)如果实例变量在声明时被显示初始化,那就把初始化值赋给实例变量。3)调用构造方法。4)返回对象的引用。7.简述变量的作用域。1)成员变量:在类中声明,它的作用域是整个类。2)局部变量:在一个方法的内部或方法的一个代码块的内部声明。如果在方法的内部声明,它的作用域是整个方法;如果在一个方法的某个代码块的内部声明,它的作用域是这个代码块。3)方法参数:方法或者构造方法的参数,它的作用域是整个方法或者构造方法。4)异常处理的参数:它的作用域是紧跟着catch(Exceptione)后的代码块。8.静态变量和实例变量有什么区别?1)类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名被访问。静态变量的生命周期取决于类的生命周期,当加载类的时候静态变量被创建并分配内存,当卸载类的时候,静态变量被销毁并撤销所在内存。2)类的每个实例都有相应的实例变量。每创建一个类的实例,java虚拟机就为实例变量分配一次内存,实例变量位于堆中。实例变量的生命周期取决于实例的生命周期,当创建实例的时候,实例变量被创建并分配内存,当销毁实例的时候,实例变量被销毁并撤销所在内存。9.使用switch语句的时候需要注意什么事项?1)在switch(exp)语句中,exp表达式的类型必须是与int类型兼容的基本类型,即能自动转换为int的类型。包括byte、short、char和int类型。其他类型不能作为exp表达式的类型。2)在casevalue字句中,value表达式必须满足以下条件:1.value类型必须是与int类型兼容的基本类型,包括byte、short、char和int类型。2.value必须是常量。3.每个case子句的value表达式的值必须不同。3)在switch语句中最多只能有一个default子句。default子句是可选的,并且可以位于switch语句中的任何位置。4)如果switch表达式与某个case表达式匹配,或者与default情况匹配,就从case子句或default子句开始执行。假如遇到了break语句,就退出整个switch语句,否则依次执行switch语句中后续的case子句,不再检查case表达式的值。10.方法重载和覆盖的区别。重载方法必须满足以下条件:1)方法名相同。2)方法的参数类型、个数、顺序至少有一项不同。3)方法的返回类型可以不相同。4)方法的修饰符可以不相同。覆盖方法必须满足以下条件:1)子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致。2)子类方法不能缩小父类方法的访问权限。3)子类方法不能抛出比父类方法更多的异常。4)方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被覆盖。5)父类的静态方法不能被子类覆盖为非静态的方法。6)子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。7)父类的非静态方法不能被子类覆盖为静态方法。8)父类的私有方法不能被子类覆盖。9)父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法。10)父类的非抽象方法可以被覆盖为抽象方法。方法重载和方法覆盖具有以下相同点:1)都要求方法名相同。2)都可以用于抽象方法和非抽象方法之间。方法重载和方法覆盖具有以下不同点:1)方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致。2)方法覆盖要求返回类型必须一致,而方法重载对此不做限制。3)方法覆盖只能用于子类覆盖父类的方法,而方法重载用于同一类的所有方法4)方法的覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。5)父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次。11.多态有什么样的特征?多态的特征如下:1)对于一个引用类型的变量,编译器按照它声明的类型处理。2)对于一个引用类型的变量,运行时java虚拟机按照它实际引用的对象处理。3)在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,java虚拟机采用以下的绑定规则。1实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时由java虚拟机动态决定的。2静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经做了绑定。3成员变量(包括静态变量和实例变量)与引用类型所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经做了绑定。12.什么是多态?面向对象程序设计为什么要引入多态的特殊性?使用多态有什么优点?多态性是对象根据实际情况自动调用不同类层上适当的同名方法的一种现象。无论什么时候,创建有层次关系的一些类时,如果这些类有可能共享一个方法声明,就应当考虑分别在每个类中实现不同的方法。在超类中使用抽象(或普通)的方法,然后在子类中实现(或覆盖)该方法,这样就能产生多态性。多态性能使我们很容易在从超类继承来的新类上添加新的功能。13.继承的使用原则。1)继承树的层次不可太多,应该尽量保持在两到三层。如果继承树的层次过多会导致以下弊端:1.对象模型的结构太复杂,难以理解,增加了设计和开发的难度。2.影响了系统的可扩展性。2)继承层的上层为抽象层,继承树上层的类具有以下的作用:1.定义了下层子类都拥有的相同属性和方法,并且尽可能地为多数方法提供默认的实现,从而提高代码的可重用性。2.代表系统的接口,描述系统所能提供的服务。3)继承关系最大的弱点是打破了封装,对于专门用于被继承的类必须精心设计,应该遵循以下原则:1.对这些类必须提供良好的文档说明,使得创建该类的子类的开发人员知道如何安全的扩展它。2.尽可能的封装父类的实现细节,也就是把代表实现细节的属性和方法定义为private类型。3.把不允许被子类覆盖的方法定义为final类型。4.父类的构造方法不允许调用可被子类覆盖的方法。5.如果某些类不是专门为了继承而设计,那么随意继承它是不安全的,因此可以采用以下两种措施来禁止继承:1把类声明为final类型。2把这个类的所有构造方法声明为private类型,然后通过一些静态方法来负责构造自身的实例。14.Abstract修饰符的用法。1)用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化,即不允许创建抽象类本身的实例。2)用abstract修饰的方法表示抽象方法,抽象方法没有方法体,不提供具体的实现。3)抽象类可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。4)如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类,否则编译出错。5)没有抽象构造方法,也没有抽象静态方法。6)抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。7)抽象类及抽象方法不能被final修饰符修饰。15.Final修饰符的用法。1)用final修饰的类不能被继承,没有子类。2)用final修饰的方法不能被子类的方法覆盖。3)用final修饰的变量表示常量。4)final不能用来修饰构造方法。5)用final修饰的变量表示常量,只能被赋一次值。16.Static修饰符的用法。1)静态变量在内存中只有一个拷贝,在类的所有实例中共享。2)在静态方法中不能直接访问实例方法和实例变量。3)在静态方法中不能使用this和super关键字。4)静态方法不能被abstract修饰。5)静态方法和静态变量都可以通过类名直接被访问。6)在类被加载时,静态代码块只被执行一次。类中不同的静态代码块按它们在类中出现的顺序被依次执行。17.接口的特征。1)接口中的成员变量默认都是public、static、final类型的,必须被显示初始化。2)接口中的方法默认都是public、abstract类型的。3)接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。4)接口没有构造方法,不能被实例化。5)一个接口不能实现另一个接口,但它可以继承多个其他接口。6)接口必须通过类来实现它的抽象方法。7)与子类继承抽象父类相似,当类实现某个接口时,它必须实现接口中的所有抽象方法,否则这个类必须被定义为抽象类。8)不能创建接口的实例,但允许定义接口类型的引用变量,该变量引用实现了这个接口的类的实例。9)一个类只能继承一个直接的父类,但能实现多个接口。18.比较抽象类与接口。抽象类与接口都位于继承树的上层,它们具有以下的相同点:1)代表系统的抽象层。2)都不能被实例化。3)都能包含抽象方法。这些抽象方法用于描述系统能提供那些服务,