默认构造方法的特点是 C 。 A、 无参数有操作 B、 有参数无操作 C、 即无参数也无任何操作 D、 有参数有操作 3、 有一个类Demo,对与其构造方法的正确声明是 B 。 A、 void Demo(int x){…} B、 Demo(int x){…} C、 Demo Demo(int x){…} D、 int Demo(){} 4、 以下关于面向对象概念的描述中,不正确的一项是 C 。 A、 在现实生活中,对象是指客观世界的实体 B、 程序中的对象就是现实生活中的对象 C、 在程序中,对象是通过一种抽象的数据类型来描述的,这种抽象数据类型称为类(class) D、 在程序中,对象是一组变量和相关方法的集合 5、 下列那一项不属于面向对象程序设计的基本要素? D A、 类 B、 对象 C、 方法 D、 安全 6、下列程序的执行结果是 A 第(7)页 共(39)页 public class TestDemo { public void fun() { static int i = 0; i++; System.out.println(i); } public static void main(String args[]) { Demo d = new Demo(); d.fun(); } } A、 编译错误 B、 0 C、 1 D、 运行成功,但不输出 7、 顺序执行下列程序语句后,则b的值是 C 。 String str = "Hello" ; String b = str.substring(0,2) ; A、 Hello B、 hello C、 He D、 null 8、 不能直接使用new创建对象的类是 B 。 A、 静态类 B、 抽象类 C、 最终类 D、 公有类 9、 为类定义多个名称相同、但参数的类型或个数不同的方法的做法称为 B 。 A、 方法重载 B、 方法覆写 C、 方法继承 D、 方法重用 10、 定义接口的关键字是 C 。 A、 extends B、 class C、 interface D、 public 11、 现在有两个类A、B,以下描述中表示B继承自A的是 D 。 A、 class A extends B B、 class B implements A C、 class A implements D、 class B extends A 12、 下面关于子类调用父类构造方法的描述正确的是 C 。 A、 子类定义了自己的构造方法,就不会调用父类的构造方法。 B、 子类必须通过 super 关键字调用父类有参的构造方法。 C、 如果子类的构造方法没有通过 super 调用父类的构造方法,那么子类会先调用父类中无参构造方法,之后再调 用子类自己的构造方法。 D、 创建子类对象时,先调用子类自己的构造方法,让后再调用父类的构造方法。 13、 假设类X是类Y的父类,下列声明对象x的语句中不正确的是 D 。 A、 X x = new X() ; B、 X x = new Y() ; C、 Y x = new Y() ; D、 Y x = new X() ; 14、 编译并运行下面的程序,结果 B 。 public class A { public static void main(String args[]) { B b = new B(); b.test(); } void test() { System.out.print("A"); } } class B extends A { 第(8)页 共(39)页 void test() { super.test(); System.out.println("B"); } } A、 产生编译错误 B、 代码可以编译运行,并输出结果:AB C、 代码可以编译运行,但没有输出 D、 编译没有错误,但会运行时会产生异常 15、 编译运行下面的程序,结果是 A 。 public class A { public static void main(String args[]) { B b = new B(); b.test(); } public void test() { System.out.print("A"); } } class B extends A { void test() { super.test(); System.out.println("B"); } } A、 产生编译错误,因为类 B 覆盖类 A 的方法 test()时,降低了其访问控制的级别。 B、 代码可以编译运行,并输出结果:AB C、 代码可以编译运行,但没有输出 D、 代码可以编译运行,并输出结果:A 16、 下面 B 修饰符所定义的方法必须被子类所覆写。 A、 final B、 abstract C、 static D、 interface 17、 下面 A 修饰符所定义的方法不能被子类所覆写。 A、 final B、 abstract D、 static D、 interface 18、下面的程序编译运行的结果是 A public class A implements B { public static void main(String args[]) { int m, n; A a = new A(); m = a.K; n = B.K; System.out.println(m + "," + n); } } interface B { int K = 5; } A、 5,5 B、 0,5 C、 0,0 D、 编译程序产生编译结果 第(9)页 共(39)页 19、 下面关于接口的说法中不正确的是 C 。 A、 接口所有的方法都是抽象的 B、 接口所有的方法一定都是 public 类型 C、 用于定义接口的关键字是 implements D、 接口是 Java 中的特殊类,包含全局常量和抽象方法 20、 下面关于Java的说法不正确的是 A A、 abstract 和 final 能同时修饰一个类 B、 抽象类不光可以做父类,也可以做子类 C、 抽象方法不一定声明在抽象类中,也可以在接口中 D、 声明为 final 的方法不能在子类中覆写 3、判断题 1、 没有实例化的对象不能使用。 2、 不可以为类定义多个构造方法。 3、 使用 static 声明的方法可以调用非 static 声明的方法。 4、 非 static 声明的方法可以调用 static 声明的属性或方法。 5、 String 对象可以使用==进行内容的比较。 6、 垃圾是指无用的内存空间,会被垃圾收集机制回收。 7、 构造方法可以有返回值类型的声明。 8、 匿名对象是指使用一次的对象,使用之后将等待被垃圾回收。 9、 使用 static 定义的内部类就成为外部类。 10、 多个实例化对象之间不会互相影响,因为保存在不同的内存区域之中。 11、 final 声明的类可以有子类。 12、 一个类继承了抽象类,则抽象类中的抽象方法需要在其子类中覆写。 13、 final 类型的变量是常量,其内容不可改变。 14、 一个类不能即是子类又是父类。 15、 子类只能继承父类的成员,但不能修改父类成员。 16、 Java 语言只支持单继承,不支持多继承。 17、 子类可以继承父类的所有成员。 18、 一个接口可以继承一个抽象类。 19、 一个接口可以同时继承多个接口。 20、在程序中 this 和 super 调用构造方法时可以同时出现。 (√) (×) (×) (√) (×) (√) (×) (√) (√) (√) (×) (√) (√) (√) (×) (√) (√) (×) (√) (×) 4、简答题 1、 String 类的操作特点。 答: String 类的对象有两种实例化方式: |- 方式一:直接赋值,只开辟一块堆内存空间,并且对象可以入池; |- 方式二:构造方法,开辟两块堆内存空间,有一块将称为垃圾,不会自动入池,使用 intern()方法手工入池; String 对象的比较方法: |- ==:比较的是两个字符串对象的内存地址数值; |- equals():字符串内容比较; 字符串对象一旦声明,则内容不可改变,改变的只能是字符串对象的地址指向。 第(10)页 共(39)页 2、 简述垃圾对象的产生。 答: 垃圾指的是一块无用的引用内存,当将变量设置为 null 或者长时间不使用时,就将成为垃圾。 3、 static 方法如何调用?非 static 方法如何调用? 答: static 方法可以使用类名称或实例化对象调用,而非 static 方法只能依靠实例化对象才可以调用。 4、 类与对象的关系是什么?如何创建及使用对象? 答: 类规定了对象所具有的属性及行为(方法),类只有通过产生对象才可以分配属性或者是调用方法,对象的创建依靠 关键字 new 创建。 5、 举例说明子类对象的实例化过程。 答: 当通过关键字 new 实例化子类对象时,会默认调用父类的无参构造方法,为父类对象实例化,而后才会调用子类的 构造方法,为子类对象实例化。 7、 简述 this 与 super 关键字的区别。 答: this 和 super 都可以调用类中的属性、方法、构造方法,但是 this 调用的是本类操作,而 super 是由子类调用父类操作。 8、 简述方法的重载与覆写的区别。 答: 方法重载是发生在一个类之中,方法名称相同、参数的类型及个数不同,不受权限的限制。而覆写是发生在继承关 系之中,子类定义了和父类定义了方法名称相同、参数类型及个数、返回值类型完全相同的方法时所发生的操作,在子类 覆写父类方法时,被覆写的方法不能拥有比父类更严格的访问权限。 9、 在已有类的基础上派生新的类有什么好处? 答: 扩充已有类的功能,并且利用方法的覆写扩充已有方法的功能。 10、 如何区分子类和父类?子类可以继承父类的那些内容? 答: 子类使用 extends 继承父类或使用 implements 实现多个接口,子类可以继承父类中的全部内容,但是对于私有操作属 于隐式继承,而非私有操作属于显式继承。 11、 什么是多态?实现都态的方法有那些? 答: 多态是面向对象的最后一个主要特征,它本身主要分为两个方面: · 方法的多态性:重载与覆写 |- 重载:同一个方法名称,根据不同的参数类型及个数可以完成不同的功能; |- 覆写:同一个方法,根据操作的子类不同,所完成的功能也不同。 · 对象的多态性:父子类对象的转换。 |- 向上转型:子类对象变为父类对象,格式:父类 父类对象 = 子类实例,自动; |- 向下转型:父类对象变为子类对象,格式:子类 子类对象 = (子类) 父类实例,强制; 12、 接口有那些特征?如何定义和实现接口。 答: 接口之中全部由全局常量及抽象方法所组成,一个类可以同时实现多个接口,在 Java 中使用 interface 定义接口,子 类使用 implements 实现接口。 13、 接口和抽象类有那些区别? 答: 抽象类及接口区别如下。 No. 区别 抽象类 接口 1 定义关键字 abstract class interface 2 组成 常量、变量、抽象方法、普通方法、构造方法 全局常量、抽象方法 3 权限 可以使用各种权限 只能是 public 4 关系 一个抽象类可以实现多个接口 接口不能够继承抽象类,却可以继承多接口 5 使用 子类使用 extends 继承抽象类 子类使用 implements 实现接口 抽象类和接口的对象都是利用对象多态性的向上转型,进行接口或抽象类的实例化操作 6 设计模式 模板设计模式 工厂设计模式、代理设计模式 7 局限 一个子类只能够继承一个抽象类 一个子类可以实现多个接口 14、 简述基本数据类型的自动装箱及自动拆箱操作。 答: 在 JDK 1.5 之后,基本数据类型可以采用直接赋值的方式为包装类进行对象的实例化操作,而包装类的对象也可以通 第(11)页 共(39)页 过直接赋值的方式变回基本数据类型。 5、编程题 1、 编写并测试一个代表地址的 Address 类,地址信息由:国家,省份,城市,街道,邮编组成,并可以返回完整的地址 信息。 class Address { private String national; private String provincial; private String city; private String street; private String zipcode; public Address() { } public Address(String national, String provincial, String city, String street, String zipcode) { super(); this.national = national; this.provincial = provincial; this.city = city; this.street = street; this.zipcode = zipcode; } public String toString() { return "国家:" + this.national + ",省份:" + this.provincial + ",城市:" + this.city + ",街道:" + this.street + ",邮政编码:" + this.zipcode; } // setter、getter略 } public class TestDemo { public static void main(String args[]) { Address ad = new Address("中国", "北京", "北京市", "MLDN", "100088"); System.out.println(ad); } } 程序运行结果: 国家:中国,省份:北京,城市:北京市,街道:MLDN,邮政编码:100088 2、 定义并测试一个代表员工的 Employee 类。员工属性包括“编号”、“姓名”、“基本薪水”、“薪水增长额”;还包括 “计 算增长后的工资总额”。的操作方法。 class Employee { private int empno ; // 雇员编号 private String ename ; // 雇员姓名 private double sal ; // 基本工资 private double rate ; // 工资增长额 public Employee() { 第(12)页 共(39)页 } public Employee(int empno, String ename, double sal, double rate) { super(); this.empno = empno; this.ename = ename; this.sal = sal; this.rate = rate; } public String toString() { return "雇员编号:" + this.empno + ",雇员姓名:" + this.ename + ",基本工资:" + this.sal ; } public void growthin() { // 增长薪水 this.sal = this.sal * this.rate ; } // setter、getter略 } public class TestDemo { public static void main(String args[]) { Employee emp = new Employee(7369, "SMITH", 1000, 1.5); emp.growthin() ; // 工资增长 System.out.println(emp); } } 程序运行结果: 雇员编号:7369,雇员姓名:SMITH,基本工资:1500.0 3、 编写程序在将字符串“want you to know one thing”,统计出字母“n”和字母“o”的出现次数。 public class TestDemo { public static void main(String args[]) { String str = "want you to know one thing" ; // 定义字符串 int sum = 0 ; while (str.indexOf("n") != -1) { // 是否还有字母n sum ++ ; // 数据统计量增加 str = str.substring(str.indexOf("n") + 1); // 改变字符串内容 } System.out.println("字母n的出现次数:" + sum); } } 程序运行结果: 字母n的出现次数:4 4 设计一个 Dog 类,有名字、颜色、年龄等属性,定义构造方法来初始化类的这些属性,定义方法输出 Dog 信息。编 写应用程序使用 Dog 类。 class Dog { private String name ; private String color ; private int age ; public Dog() { } 第(13)页 共(39)页 public Dog(String name, String color, int age) { super(); this.name = name; this.color = color; this.age = age; } public String toString() { return "狗的名字:" + this.name + ",狗的颜色:" + this.color + ",狗的年龄:" + this.age ; } // setter、getter略 } public class TestDemo { public static void main(String args[]) { Dog dog = new Dog("金毛", "金黄色", 3); System.out.println(dog); } } 程序运行结果: 狗的名字:金毛,狗的颜色:金黄色,狗的年龄:3 5、 字符串操作: · 从字符串“MLDN 中心 Java 技术学习班 20130214”中提取开班日期。 public class TestDemo { public static void main(String args[]) { String str = "MLDN中心Java技术学习班20130214" ; System.out.println(str.substring(str.indexOf("20130214"))); } } 程序运行结果: 20130214 · 将“MLDN JAVA 高端技术培训”字符串中的“Java”替换为“JAVA EE”。 public class TestDemo { public static void main(String args[]) { String str = "MLDN JAVA高端技术培训" ; System.out.println(str.replaceAll("Java".toUpperCase(), "JAVA EE")); } } 程序运行结果: MLDN JAVA EE高端技术培训 · 取出“Java 技术学习班 20130214”中的第八个字符。 public class TestDemo { public static void main(String args[]) { String str = "Java技术学习班20130214" ; System.out.println(str.charAt(8)); } } 程序运行结果: 班 · 清除“Java 技术学习班 20130214”中的所有‘0’。 public class TestDemo { 第(14)页 共(39)页 public static void main(String args[]) { String str = "Java技术学习班20130214" ; System.out.println(str.replaceAll("0", "")); } } 程序运行结果: Java技术学习班213214 · 从任意给定的身份证号码中提取此人的出生日期。 public class TestDemo { public static void main(String args[]) { String str = "1101051976091900520" ; System.out.println(str.substring(6,14)); } } 程序运行结果: 19760919 6、 编写一个银行帐户类,类的构成包括: · 数据成员: |- 用户的帐户名称、用户的帐户余额; · 方法包括: |- 开户(设置帐户名称,及余额),利用构造方法完成 · 查询余额 class Account { private String name ; private double balance ; public Account() { } public Account(String name, double balance) { super(); this.name = name; this.balance = balance; } public String toString() { return "账户名称:" + this.name + ",余额:" + this.balance; } public double getBalance() { return balance; } // setter、getter略 } public class TestDemo { public static void main(String args[]) { Account acc = new Account("张三", 5000.0); System.out.println(acc); System.out.println("账户余额:" + acc.getBalance()); } } 第(15)页 共(39)页 程序运行结果: 账户名称:张三,余额:5000.0 账户余额:5000.0 7、 定义一个 ClassName 接口,接口中只有一个抽象方法 getClassName()。