11构造方法重载
JAVA笔试题--基础很全有答案

第一组1.下列不可作为java语言修饰符的是(D)A) a1 B) $1 C) _1 D) 112.有一段java 应用程序,它的主类名是a1,那么保存它的源文件名可以是(A)A) a1.java B) a1.class C) a1 D) 都对3.整型数据类型中,需要内存空间最少的是(D)A) short B) long C) int D) byte4. Java 类可以作为(C)A) 类型定义机制B) 数据封装机制C) 类型定义机制和数据封装机制D) 上述都不对5.在创建对象时必须(C)A) 先声明对象,然后才能使用对象B) 先声明对象,为对象分配内存空间,然后才能使用对象C) 先声明对象,为对象分配内存空间,对对象初始化,然后才能使用对象D) 上述说法都对6.在调用方法时,若要使方法改变实参的值,可以(B)A) 用基本数据类型作为参数B) 用对象作为参数C) A和B都对D) A和B都不对7. Java中(C)A) 一个子类可以有多个父类,一个父类也可以有多个子类B) 一个子类可以有多个父类,但一个父类只可以有一个子类C) 一个子类可以有一个父类,但一个父类可以有多个子类D) 上述说法都不对8.Java语言具有许多优点和特点,哪个反映了Java程序并行机制的特点?(B)A) 安全性B) 多线性C) 跨平台D) 可移植9. Character流与Byte流的区别是(C)A) 每次读入的字节数不同B) 前者带有缓冲,后者没有C) 前者是字符读写,后者是字节读写D) 二者没有区别,可以互换使用10.以下声明合法的是( D )A、default String s;B、public final static native int w( )C、abstract double d;D、abstract final double hyperbolicCosine( )11.关于以下application的说明,正确的是( C )1.class StaticStuff2.{3.static int x=10;4.static { x+=5;}5.public static void main(String args[ ])6.{7.System.out.println(“x=”+ x);8.}9.static { x/=3;}10. }A、4行与9行不能通过编译,因为缺少方法名和返回类型B、9行不能通过编译,因为只能有一个静态初始化器C、编译通过,执行结果为:x=5D、编译通过,执行结果为:x=312.关于以下程序代码的说明正确的是( D )1.class HasStatic{2.private static int x=100;3.public static void main(String args[ ]){4.HasStatic hs1=new HasStatic( );5.hs1.x++;6.HasStatic hs2=new HasStatic( );7.hs2.x++;8.hs1=new HasStatic( );9.hs1.x++;10.HasStatic.x- -;11.System.out.println(“x=”+x);12.}13.}A、5行不能通过编译,因为引用了私有静态变量B、10行不能通过编译,因为x是私有静态变量C、程序通过编译,输出结果为:x=103D、程序通过编译,输出结果为:x=10213.以下选项中循环结构合法的是( C )A、while (int i<7){ i++;System.out.println(“i is “+i);}B、int j=3;while(j){System.out.println(“ j is “+j);}C、int j=0;for(int k=0; j + k !=10; j++,k++){System.out.println(“ j is “+ j + “k is”+ k);}D、int j=0;do{System.out.println( “j is “+j++);if (j = = 3) {continue loop;}}while (j<10);14.类Test1定义如下:1.public class Test1{2.public float aMethod(float a,float b){ } 3.4.}将以下哪种方法插入行3是不合法的。
第7章 Java语言类的特性(第4版)

7.4 静态成员
7.4.4 静态初始化器 ♥ 静态初始化器与构造方法区别:(续) • 用new创建多少个新对象,构造方法就调用多 少次,但静态初始化器则在类被加载入内存 时只执行一次。 • 静态初始化器不是方法,它没有方法名、返 回值和参数。 ♥ 如果有多个静态初始化器,则它们在类的初始 化时会依次执行。
4
7.1 类的私有成员与公共成员
7.1.3 缺省访问控制符 ♥ 若在类成员的前面不加任何访问控制符,则 该成员具有缺省的访问控制特性。 ♥ 缺省访问控制权,表示这个成员只能被同一 个包(类库)中的类所访问和调用,如果一 个子类与父类位于不同的包中,子类也不能 访问父类中的缺省访问控制成员,也就是说 其他包中的任何类都不能访问缺省访问控制 成员。 ♥ 同理,对于类来说,如果一个类没有访问控 制符,说明它具有缺省访问控制特性
5
7.2 方法的重载
方法的重载是实现“多态”的方法之一。 方法的重载是指方法带有不同的参数,但使用 相同的名字。int add(int x, int y); int add(int x, int y, int z); 方法的参数不同则表示实现不同的功能,但功 float add(float f1, float f2); 能相似。 float add(float f1, int y); 所谓参数不同是指:参数个数不同、参数类型 float add(int y, float f1); float add(int x, int y); 不同、参数的顺序不同。参数的名字不同不能 int add(int u, int v); 说明是方法的重载。 Java中不允许参数个数或参数类型完全相同, 而只有返回值类型不同的重载。 见教材例7.3
L/O/G/O
C++_构造函数与析构函数

C++_构造函数与析构函数构造函数与析构函数1 构造函数1.1 构造函数具有⼀些特殊的性质1.2 定义构造函数的⼀般形式1.3 利⽤构造函数创建对象2 成员初始化表3 缺省参数的构造函数4 重载构造函数5 拷贝构造函数5.1 ⾃定义拷贝构造函数5.2 缺省的拷贝构造函数5.3 调⽤拷贝构造函数的三种情况5.4 浅拷贝和深拷贝6 析构函数7 调⽤构造函数和析构函数的顺序8 对象的⽣存期构造函数和析构函数都是类的成员函数,但它们都是特殊的成员函数,执⾏特殊的功能,不⽤调⽤便⾃动执⾏,⽽且这些函数的名字与类的名字有关。
C++语⾔中有⼀些成员函数性质是特殊的,这些成员函数负责对象的建⽴、删除。
这些函数的特殊性在于可以由编译器⾃动地隐含调⽤,其中⼀些函数调⽤格式采⽤运算符函数重载的语法。
C++引进⼀个⾃动完成对象初始化过程的机制,这就是类的构造函数。
对象的初始化1. 数据成员是不能在声明类时初始化2. 类型对象的初始化⽅法:1. 调⽤对外接⼝(public成员函数)实现:声明类→定义对象→调⽤接⼝给成员赋值2. 应⽤构造函数(constructor)实现:声明类→定义对象→同时给成员赋值1. 构造函数构造函数是⼀种特殊的成员函数,它主要⽤于为对象分配空间,进⾏初始化。
1.1 构造函数具有⼀些特殊的性质:(1) 构造函数的名字必须与类名相同。
(2) 构造函数可以有任意类型的参数,但不能指定返回类型。
它有隐含的返回值,该值由系统内部使⽤。
(3) 构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。
(4) 构造函数可以重载,即⼀个类中可以定义多个参数个数或参数类型不同的构造函数。
构造函数是不能继承(5) 构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调⽤,它是在定义对象的同时被调⽤的。
(6) 在声明类时如果没有定义类的构造函数,编译系统就会在编译时⾃动⽣成⼀个默认形式的构造函数,(7) 默认构造函数是构造对象时不提供参数的构造函数。
浅谈Java中单例设计模式之构造方法私有化

接使用 , 控制这些数据的访问 。对类成员访问的限制是面向对象 需要 程序设计 的一个基础 , 有利于 防止对象的误用。只允许通过一系列定 在 J a 限访问控制符及构造方法等 的讲授过程 中 .涉及到类 a 权 v 义完善的方法来访 问私有数据 , 就可 以( 通过执行范围检查 ) 防止数据 内部成员及方法的私有权限使 用 . 对象 的构造 方法是否可 以进行封 被赋予不正 当的值 。同时 , 对 通过控制访问权限可以精确地控制如何以 装 , 装后如何 实现对 象的实例化 , 封 封装构造方 法又有着什么意义 , 对 及何 时使用对象 中的数据 。 因此 . 当正确实现对类成员 的控制后 , 就可 于这些疑问 , 本文给予 简短 的剖析 。 以保证其 内部动作不会被任意篡改。 访问控制修饰符是限定一个名字的可访问性 . 这里的名字可 以是 1 构 造 方 法 类 、 员属性 和成员方法 。也就是说 , 成 它是限定类 、 属性或方法是否可 每当 由类构造对象 时都要 调用该类的构造方 法 . J a . 在 a 中 每个 以被 程序里 的其他部分访 问和调用 v 可访问性是 一种在编译时确定的 类 至少有 一个构造方法。构造 方法可 以确保用 户正确地构造对象 , 对 静态 特性 . 在编译时就确定了一个名字在什么范围内可以被访问 , 从 对象 做初 始化工作 。构造 方法形式如下 : 而限制一个名字 的访 问权限 。 『 构造方法修饰符] 方法名( f 形式参数列表] tr s 常列表 1方 )h0 异 [ w { 私有类 型修饰符 p vt ra 。使用 pvt i e ra i e修饰 的类成员 。 只能被该类 法 体1 自身的方法访 问和修改 , 而不能被任何其 他类( 包括该类的子类) 访问 构造 方法是 Jv 的一个特殊的方法 。定 义类时通 常要 定义一个 和引用 。 aa 因此 ,r a 修饰符具有最高的保护级别 。 p vt i e 可以用如下例子说 构造 方法以辅助创建类 的实例 具体地说 . 构造方 法常用于初始化与 明。 每个 对象有关 的变量 在 Jv 中构造方法是 与类名称相 同的公开 的 aa 例 如下面的例子在 Pi t 类中使用 pvt 定义 了一个 私有变 ra A ve ra i e 方法 成员。 编写类 时 , 一定 每个类都要定义构造方法 , 在 不 在不需要 明 量 和一个私有方法 。在 Piae 中访问 P vtA中的变量和方法 时 , r t v B i r ae 显 给实例变量赋值初始 化时 . 以不显式 的编 写构造方法 , 可 因为每个 编译器 出错 . 具体代码如下 : 类. 编译 系统都已经给出了一 个不带参数且 没有语 句内容的默认构造 c s Piae l s r tA{ a v 方法. 如果用户没有 显式定义构造 方法 . 则使 用系统给 的默认 构造方 p vt n i r a ei ti= 1 0; 法 。系统 默认 的构造方 法除了创建一个空对象外不会 完成任何操作 。 p vt t n eh dSr gS i r aeSr gm to (tn ) i i 因此 . 如果需要进行 一些预置 的初 始化工作 时 . 就需要为一个 类编写 f = He o + rtm ; ” l , s; u s } s l" e } 个或重 载多个构造方法 如果用户 编写 了一个构造方法或者重载 了 p bi ls r a B u l casPi t { c ve 多个构造方法 ( 这是构造方法 的多态 )则系统给 的默认 构造方法就无 , p bi t i vi i(tn [ag) u l s t o ma Sr g rs c ac d n i 】 { 效。 P vt =nw P vtA ; i A r ae a e r ae O i 11 构造 方法 的主要 特点 . ai . : 1构造 方法 的方法 名与类名相 同。 ) ame o ( r a ”;】 . t d”i t ) } h pve 2 构 造方法没有返 回值 ( ) 注意 : 没有返 回值 和返 回值 为 vi 是不 o d 如果要访 问和修改 这些私有的变量和方法 . 可以在 Pi t r a A类中 ve 样 的) 。 加入公有 (ul ) pb c方法 , i 由其调用 自身私有方 法实现外界请 求 , 修改代 3 构造方法通 常被声名为公有 的( 问权 限是 :u l ) ) 访 p bi 。 c 码如下 : 4 构造方法可 以带有参数 ) c s r ae l s i tA{ a Pv 5 )构造方 法的主要工作是完成对象 的部分 或全部成员变量 的初 口iaeit =1 ; 义一个 私有变量 r t 0腚 v ni
Java复习题

Java复习题一、判断题1.Java程序里,创建新的类对象用关键字naw。
2.有的类定义时可以不定义构造函数,所以构造函数不是必需的。
3.类及其属性、方法可以同时有一个以上的修饰符来修饰。
4.抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法。
5.Final类中的属性和方法都必须被final修饰符修饰。
6.最终类不能派生子类,最终方法不能被覆盖。
7.子类要调用父类的方法,必须使用super关键字。
8.一个Java类可以有多个父类。
9.如果p是父类Parent的对象,而c是子类Child的对象,则语句c = p是正确的。
10.一个类如果实现了某个接口,那么它必须重写该接口中的所有方法。
11.接口是特殊的类,所以接口也可以继承,子接口将继承父接口的所有常量和抽象方法。
12.Java源程序是由类定义组成的,每个程序可以定义若干个类,但只有一个类是主类。
13.子类的方法的数目一定大于等于父类的方法的数目。
14.类在实现接口的方法时,必须显示地使用public修饰符。
15.一个类只能有一个父类,但一个接口可以有一个以上的父接口。
16.java异常处理中可以使用多个catch子句,此时应将高级别异常类的catch子句放在前面。
17.即使一个类中未显式定义构造函数,也会有一个缺省的构造函数,缺省的构造函数是无参的,函数体为空。
18.在Java的方法中定义一个常量要用const关键字。
19.Java的类不允许多重继承,但接口支持多重继承。
20.在异常处理中总是将可能产生异常的语句放在try块中,用catch子句去处理异常,而且一个try块之后只能对应一个catch语句。
21.构造函数用于创建类的实例对象,构造函数名应与类名相同,在类中必须定义构造函数,且只能定义一个构造函数。
22.构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void。
23.可以用new来创建一个类的实例,即"对象"。
C++11:右值引用,转移语义与完美转发

C++11:右值引⽤,转移语义与完美转发1. 左值与右值:C++对于左值和右值没有标准定义,但是有⼀个被⼴泛认同的说法:可以取地址的,有名字的,⾮临时的就是左值;不能取地址的,没有名字的,临时的就是右值.可见⽴即数,函数返回的值等都是右值;⽽⾮匿名对象(包括变量),函数返回的引⽤,const对象等都是左值.从本质上理解,创建和销毁由编译器幕后控制的,程序员只能确保在本⾏代码有效的,就是右值(包括⽴即数);⽽⽤户创建的,通过作⽤域规则可知其⽣存期的,就是左值(包括函数返回的局部变量的引⽤以及const对象),例如:int& foo(){int tmp; return tmp;}int fooo(){int tmp; return tmp;}int a=10;const int b;int& temp=foo();//虽然合法,但temp引⽤了⼀个已经不存在的对象int tempp=fooo();View Code以上代码中,a,temp和foo()都是⾮常量左值,b是常量左值,fooo()是⾮常量右值,10是常量右值,有⼀点要特别注意:返回的引⽤是左值(可以取地址)!⼀般来说,编译器是不允许对右值进⾏更改的(因为右值的⽣存期不由程序员掌握,即使更改了右值也未必可以⽤),对于内置类型对象尤其如此,但C++允许使⽤右值对象调⽤成员函数,虽然允许这样做,但出于同样原因,最好不要这么做.对于左值和右值的深⼊解释,详见2. 右值引⽤:右值引⽤的表⽰⽅法为Datatype&& variable右值引⽤是C++ 11新增的特性,所以C++ 98的引⽤为左值引⽤.右值引⽤⽤来绑定到右值,绑定到右值以后本来会被销毁的右值的⽣存期会延长⾄与绑定到它的右值引⽤的⽣存期,右值引⽤的存在并不是为了取代左值引⽤,⽽是充分利⽤右值(特别是临时对象)的建构来减少对象建构和析构操作以达到提⾼效率的⽬的,例如对于以下函数:(Demo是⼀个类)Demo foo(){Demo tmp;return tmp;}View Code在编译器不进⾏RVO(return value optimization)优化的前提下以下操作:Demo x=foo();将会调⽤三次构造函数(tmp的,x的,临时对象的),相应的在对象被销毁时也会调⽤三次析构函数,⽽如果采⽤右值引⽤的⽅式:Demo&& x=foo();那么就不需要进⾏x的建构,本来本来要被销毁的临时对象也会由于x的绑定⽽将⽣存期延长⾄和x⼀样(可以理解为x赋予了那个临时对象⼀个合法地位:⼀个名字),就需要提⾼了效率(代价就是tmp需要占据4字节空间,但这是微不⾜道的).右值引⽤与左值引⽤绑定规则:常量左值引⽤可以绑定到常量和⾮常量左值,常量和⾮常量右值;⾮常量左值引⽤只能绑定到⾮常量左值;⾮常量右值引⽤只能绑定到⾮常量右值(vs2013也可以绑定到常量右值);常量右值引⽤只能绑定到常量和⾮常量右值(⾮常量右值引⽤只是为了语义的完整⽽存在,常量左值引⽤就可以实现它的作⽤).虽然从绑定规则中可以看出常量左值引⽤也可以绑定到右值,但显然不可以改变右值的值,右值引⽤就可以,从⽽实现转移语义,因为右值引⽤通常要改变所绑定的右值,所以被绑定的右值不能为const.注意:右值引⽤是左值!3. 转移语义(move semantics):右值引⽤被引⼊的⽬的之⼀就是实现转移语义,转移语义可以将资源 ( 堆,系统对象等 ) 的所有权从⼀个对象(通常是匿名的临时对象)转移到另⼀个对象,从⽽减少对象构建及销毁操作,提⾼程序效率(这在2的例⼦中已经作了解释).转移语义与拷贝语义是相对的.从转移语义可以看出,实际上,转移语义并不是新的概念,它实际上已经在C++98/03的语⾔和库中被使⽤了,⽐如在某些情况下拷贝构造函数的省略(copy constructor elision in some contexts),智能指针的拷贝(auto_ptr “copy”),链表拼接(list::splice)和容器内的置换(swap on containers)等,只是还没有统⼀的语法和语义⽀持(参考⾃)虽然普通的函数和操作符也可以利⽤右值引⽤实现转移语义(如2中的例⼦),但转移语义通常是通过转移构造函数和转移赋值操作符实现的.转移构造函数的原型为Classname(Typename&&),⽽拷贝构造函数的原型为Classname(const Typename&),转移构造函数不会被编译器⾃动⽣成,需要⾃⼰定义,只定义转移构造函数也不影响编译器⽣成拷贝构造函数,如果传递的参数是左值,就调⽤拷贝构造函数,反之,就调⽤转移构造函数.例如:class Demo{public:Demo():p(new int[10000]{};Demo(Demo&& lre):arr(lre.arr),size(lra.size){lre.arr=NULL;}//转移构造函数Demo(const Demo& lre):arr(new int[10000]),size(arr.size){for(int cou=0;cou<10000;++cou)arr[cou]=lew.arr[cou];}private:int size;int* arr;}View Code从以上代码可以看出,拷贝构造函数在堆中重新开辟了⼀个⼤⼩为10000的int型数组,然后每个元素分别拷贝,⽽转移构造函数则是直接接管参数的指针所指向的资源,效率搞下⽴判!需要注意的是转移构造函数实参必须是右值,⼀般是临时对象,如函数的返回值等,对于此类临时对象⼀般在当⾏代码之后就被销毁,⽽采⽤转移构造函数可以延长其⽣命期,可谓是物尽其⽤,同时有避免了重新开辟数组.对于上述代码中的转移构造函数,有必要详细分析⼀下:Demo(Demo&& lre):arr(lre.arr),size(lre.size)({lre.arr=NULL;}lre是⼀个右值引⽤,通过它间接访问实参(临时对象)的资源来完成资源转移,lre绑定的对象(必须)是右值,但lre本⾝是左值;因为lre是函数的局部对象,”lre.arr=NULL"必不可少,否则函数结尾调⽤析构函数销毁lre时仍然会将资源释放,转移的资源还是被系统收回.4. move()函数3中的例⼦并⾮万能,Demo(Demo&& lre)的实参必须是右值,有时候⼀个左值即将到达⽣存期,但是仍然想要使⽤转移语义接管它的资源,这时就需要move函数.std::move函数定义在标准库<utility>中,它的作⽤是将左值强⾏转化为右值使⽤,从实现上讲,std:move等同于static_cast<T&&>(lvalue),由此看出,被转化的左值本⾝的⽣存期和左值属性并没有被改变,这类似于const_cast函数.因此被move的实参应该是即将到达⽣存期的左值,否则的话可能起到反⾯效果.5. 完美转发(perfect forwarding)(参考⾃)完美转发指的是将⼀组实参"完美"地传递给形参,完美指的是参数的const属性与左右值属性不变,例如在进⾏函数包装的时候,func函数存在下列重载:void func(const int);void func(int);void func(int&&);View Code如果要将它们包装到⼀个函数cover内,以实现:void cover(typename para){func(para);}View Code使得针对不同实参能在cover内调⽤相应类型的函数,似乎只能通过对cover进⾏函数重载,这使代码变得冗繁,另⼀种⽅法就是使⽤函数模板,但在C++ 11之前,实现该功能的函数模板只能采⽤值传递,如下:template<typename T>void cover(T para){...func(para);...}View Code但如果传递的是⼀个相当⼤的对象,⼜会造成效率问题,要通过引⽤传递实现形参与实参的完美匹配(包裹const属性与左右值属性的完美匹配),就要使⽤C++ 11 新引⼊的引⽤折叠规则:函数形参 T的类型推导后的函数形参T& A& A&T& A&& A&T&& A& A&T&& A&& A&&因此,对于前例的函数包装要求,采⽤以下模板就可以解决:template<typename T>void cover(T&& para){...func(static_cast<T &&>(para));...}View Code如果传⼊的是左值引⽤,转发函数将被实例化为:void func(T& && para){func(static_cast<T& &&>(para));}View Code应⽤引⽤折叠,就为:void func(T& para){func(static_cast<T&>(para));}View Code如果传⼊的是右值引⽤,转发函数将被实例化为:void func(T&& &¶){func(static_cast<T&& &&>(para));}View Code应⽤引⽤折叠,就是:void func(T&& para){func(static_cast<T&&>(para));}View Code对于以上的static_cast<T&&>,实际上只在para被推导为右值引⽤的时候才发挥作⽤,由于para是左值(右值引⽤是左值),因此需要将它转为右值后再传⼊func内,C++ 11在<untility>定义了⼀个std::forward<T>函数来实现以上⾏为,所以最终版本为template<typename T>void cover(T&& para){func(forward(forward<T>(para)));}View Codestd::forward的实现与static_cast<T&&>(para)稍有不同,具体可见std::forward函数的⽤法为forward<T>(para),若T为左值引⽤,para将被转换为T类型的左值,否则para将被转换为T类型右值。
Ja实用教程第版习题解答
习题解答习题1(第1章)一、问答题1.Java语言的主要贡献者是谁?2.开发Java应用程序需要经过哪些主要步骤?3.Java源文件是由什么组成的?一个源文件中必须要有public类吗?4.如果JDK的安装目录为D:\jdk,应当怎样设置path和classpath的值?5.Java源文件的扩展名是什么?Java字节码的扩展名是什么?6.如果Java应用程序主类的名字是Bird,编译之后,应当怎样运行该程序?7.有哪两种编程风格,在格式上各有怎样的特点?1.James Gosling2.需3个步骤:1)用文本编辑器编写源文件。
2)使用javac编译源文件,得到字节码文件。
3)使用解释器运行程序。
3.源文件由若干个类所构成。
对于应用程序,必须有一个类含有public static void main(String args[])的方法,含有该方法的类称为应用程序的主类。
不一定,但至多有一个public类。
4.set classpath=D:\jdk\jre\lib\rt.jar;.;5.java和class6. java Bird7.独行风格(大括号独占行)和行尾风格(左大扩号在上一行行尾,右大括号独占行)二、选择题1.B。
2.D。
1.下列哪个是JDK提供的编译器?A) java.exeB) javac.exeC) javap.exeD) javaw.exe2.下列哪个是Java应用程序主类中正确的main方法?A) public void main (String args[ ])B) static void main (String args[ ])C) public static void Main (String args[])D) public static void main (String args[ ])三、阅读程序阅读下列Java源文件,并回答问题。
public class Person {void speakHello() {}}class Xiti {public static void main(String args[]) {Person zhang = new Person();zhang.speakHello();}}(a)上述源文件的名字是什么?(b)编译上述源文件将生成几个字节码文件?这些字节码文件的名字都是什么?(c)在命令行执行java Person得到怎样的错误提示?执行java xiti得到怎样的错误提示?执行java Xiti.class得到怎样的错误提示?执行java Xiti得到怎样的输出结果?1.(a)Person.java。
下面关于变量及其作用范围的陈述哪个是不对的
一、选择题1、下面关于变量及其作用范围的陈述哪个是不对的?()A.实例变量是类的成员变量。
B.实例变量用关键字static声明。
C.在方法中定义的局部变量在该方法被执行时创建。
D.局部变量在使用前必须被初始化。
2、下面哪条语句把方法声明为抽象的公共方法?()A.public abstract method();B.public abstract void method();C.public abstract void method(){}D.public void method() extends abstract;3、哪个是将一个十六进制值赋值给一个long型变量?()A.long number = 345L;B.long number = 0345;C.long number = 0345L;D.long number = 0x345L;4、下面的哪个赋值语句是不对的?()A.float f = 11.1;B.double d = 5.3E12;C.double d = 3.14159;D.double d = 3.14D;5、下面哪个是不合法的标识符?()A.$persons;B.TwoUsers;C.*point;D._endline;6、若在某一个类定义中定义有如下的方法:final void aFinalFunction( );则该方法属于()。
A、本地方法B、静态方法C、最终方法D、抽象方法7、main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的()。
A、public static void main()B、public static void main(String[ ] args)C、public static int main(String[ ] args)D、public void main(String arg[ ])8、在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。
笔试题及答案(二)
一.选择题(共50题,每题2分,共100分。
多选题选不全或选错都不得分。
)1.以下属于面向对象的特征的是(C,D)。
(两项)A) 重载B) 重写C) 封装D) 继承2.以下代码运行输出是(C)public class Person{private String name=”Person”;int age=0;}public class Child extends Person{public String grade;public static void main(String[] args){Person p = new Child();System.out.println();}}A) 输出:PersonB) 没有输出C) 编译出错D) 运行出错3.在使用super 和this关键字时,以下描述正确的是(A)A) 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过B) super()和this()不一定要放在构造方法内第一行C) this()和super()可以同时出现在一个构造函数中D) this()和super()可以在static环境中使用,包括static方法和static语句块4.以下对封装的描述正确的是(D)A) 只能对一个类中的方法进行封装,不能对属性进行封装B) 如果子类继承了父类,对于父类中进行封装的方法,子类仍然可以直接调用C) 封装的意义不大,因此在编码时尽量不要使用D) 封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性5.以下对继承的描述错误的是(A)A) Java中的继承允许一个子类继承多个父类B) 父类更具有通用性,子类更具体C) Java中的继承存在着传递性D) 当实例化子类时会递归调用父类中的构造方法6.以下程序的运行结果是(D)public Person(){System.out.println(“this is a Person”);}}public class Teacher extends Person{private String name=”tom”;public Teacher(){System.out.println(“this is a teacher”);super();}public static void main(String[] args){Teacher teacher = new Teacher();System.out.println();}}A) this is a Personthis is a teachertomB) this is a teacherthis is a PersontomC) 运行出错D) 编译有两处错误7.以下说法错误的是()A) super.方法()可以调用父类的所有非私有方法B) super()可以调用父类的所有非私有构造函数C) super.属性可以调用父类的所有非私有属性D) this和super关键字可以出现在同一个构造函数中8.以下关于final关键字说法错误的是(A,C)(两项)A) final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性B) final修饰的类肯定不能被继承C) final修饰的方法不能被重载D) final修饰的变量不允许被再次赋值9.访问修饰符作用范围由大到小是(D)A) private-default-protected-publicB) public-default-protected-privateC) private-protected-default-publicD) public-protected-default-private10.以下(D)不是Object类的方法B) finalize()C) toString()D) hasNext()11.多态的表现形式有(A)A) 重写B) 抽象C) 继承D) 封装12.以下对重载描述错误的是(B)A) 方法重载只能发生在一个类的内部B) 构造方法不能重载C) 重载要求方法名相同,参数列表不同D) 方法的返回值类型不是区分方法重载的条件13.以下(D)添加到ComputerBook中不会出错class Book{protected int getPrice(){return 30;}}public class ComputerBook extends Book{}A) protected float getPrice(){}B) protected int getPrice(int page){}C) int getPrice(){}D) public int getPrice(){return 10;}14.以下对抽象类的描述正确的是(C)A) 抽象类没有构造方法B) 抽象类必须提供抽象方法C) 有抽象方法的类一定是抽象类D) 抽象类可以通过new关键字直接实例化15.以下对接口描述错误的有(D)A) 接口没有提供构造方法B) 接口中的方法默认使用public、abstract修饰C) 接口中的属性默认使用public、static、final修饰D) 接口不允许多继承16.以下代码,描述正确的有(A)interface IDemo{public static final String name;1void print();2public void getInfo();3}abstract class Person implements IDemo{4public void print(){}}A) 第1行错误,没有给变量赋值B) 第2行错误,方法没有修饰符C) 第4行错误,没有实现接口的全部方法D) 第3行错误,没有方法的实现17.接口和抽象类描述正确的有(B,C)(两项)A) 抽象类没有构造函数B) 接口没有构造函数C) 抽象类不允许多继承D) 接口中的方法可以有方法体18.以下描述错误的有(C)A) abstract 可以修饰类、接口、方法B) abstract修饰的类主要用于被继承C) abstract 可以修饰变量D) abstract修饰的类,其子类也可以是abstract修饰的19.以下描述正确的有(B)A) 方法的重写应用在一个类的内部B) 方法的重载与返回值类型无关C) 构造方法不能重载D) 构造方法可以重写20.以下程序运行结果是(A)public class Test extends Father{private String name=”test”;public static void main(String[] args){Test test = new Test();System.out.println(test.getName());}}class Father{priva te String name=”father”;public String getName() {return name;}}A) fatherB) testC) 编译出错D) 运行出错,无输出21.以下对异常的描述不正确的有(C)A) 异常分为Error和ExceptionB) Throwable是所有异常类的父类C) Exception是所有异常类父类D) Exception包括RuntimeException和RuntimeException之外的异常22.在try-catch-finally语句块中,以下可以单独与finally一起使用的是(B)A) catchB) tryC) throwsD) throw23.下面代码运行结果是(B)public class Demo{public int add(int a,int b){try{return a+b;}catch(Exception e){System.out.println(“catch 语句块”);}finally{System.out.println(“finally 语句块”);}return 0;}public static void main(String[] args){Demo demo = new Demo();System.out.println(“和是:”+demo.add(9,34));}}A) 编译异常B) finally语句块和是:43C) 和是:43 finally语句块D) catch语句块和是:4324.以下描述不正确的有(D)A) try块不可以省略B) 可以使用多重catch块C) finally块可以省略D) catch块和finally块可以同时省略25.以下对自定义异常描述正确的是(C)A) 自定义异常必须继承ExceptionB) 自定义异常可以继承自ErrorC) 自定义异常可以更加明确定位异常出错的位置和给出详细出错信息D) 程序中已经提供了丰富的异常类,使用自定义异常没有意义26.以下程序运行结果是(D)public class Test {public int div(int a, int b) {try {return a / b;}catch(Exception e){System.out.println(“Exception”);}catch(NullPointerException e){System.out.println(“ArithmeticException”);}catch (ArithmeticException e) {System.out.println(“ArithmeticException”);} finally {System.out.println(“finally”);}return 0;}public static void main(String[] args) {Test demo = new Test();System.out.println(“商是:” + demo.div(9, 0));}}A) Exception finally 商是:0B) ArithmeticException finally 商是:0C) finally商是:0D) 编译报错27. 以下对TCP和UDP描述正确的是(D)A) TCP不能提供数据的可靠性B) UDP能够保证数据库的可靠性C) TCP数据传输效率高于UDPD) UDP数据传输效率高于TCP28. 在Java中,下面对于构造函数的描述正确的是(D)。
java语言程序设计第2次形考-浙江电大辅导资料
参考答案:C
C、父类的功能无法满足子类的需求时
D、父类方法中的返回值类型不适合子类使用
参考答案:C
50.(2分)
下列关于protected的说法中,正确的是( )。
A、protected修饰的方法,只能给子类使用
B、protected修饰的类,类中的所有方法只能给子类使用
C、如果一个类的成员被protected修饰,那么这个成员既能被同一包下的其它类访问,也能被不同包下该类的子类访问
下列选项中,关于接口的定义正确的是( )。
A、abstract class Demo1{ abstract void speak(); abstract void eat(); }
B、interface Demo2{ void speak(); void eat(); }
C、interface Demo3{ void speak(); void eat(){}; }
B、一个接口只能继承一个接口
C、一个接口可以继承多个接口
D、接口不能被继承
参考答案:C
37.(2分)
float类型成员变量的默认初始化值是( )。
A、0
B、false
C、null
D、0.0F
参考答案:D
38.(2分)
被声明为private、protected 及public 的类成员,在类的外部则( )。
A、protected
B、static
C、private
D、final
参考答案:B
34.(2分)
对于使用多态的应用程序,某个对象的确切类型何时能知道?( )
A、执行时才可以知道
B、应用程序编译时能够判断
C、程序员编写程序时就已知道