首页 > 试题广场 >

下面叙述那些是正确的

[单选题]
下面叙述那个是正确的?()
  • java中的集合类(如Vector)可以用来存储任何类型的对象,且大小可以自动调整。但需要事先知道所存储对象的类型,才能正常使用。
  • 在java中,我们可以用违例(Exception)来抛出一些并非错误的消息,但这样比直接从函数返回一个结果要更大的系统开销。
  • java接口包含函数声明和变量声明。
  • java中,子类不可以访问父类的私有成员和受保护的成员。

我就说下B选项C选项
B选项说的情况就是我们自定义异常的情况,请仔细读:我们可以用违例(Exception)来抛出一些并非错误的消息,可以,并非错误的消息。比如我自定义一个异常,若一个变量大于10就抛出一个异常,这样就对应了B选项说的情况,我用抛出异常说明这个变量大于10,而不是用一个函数体(函数体内判断是否大于10,然后返回true或false)判断,因为函数调用是入栈出栈,栈是在寄存器之下的速度最快,且占的空间少,而自定义异常是存在堆中,肯定异常的内存开销大!所以B对。
C选项说的是接口包含方法声明和变量声明。因为接口中方法默认是 abstract public,所以在接口只写函数声明是符合语法规则。但是变量默认是用public final static 修饰的,意思它是静态常量,常量不管在接口中还是类中必须在声明时初始化!所以C的后半句是错的,必须在声明时并给出初始化!

编辑于 2017-07-15 20:27:54 回复(18)
exception不是异常吗,怎么成违例了,就是因为着没选😂😂😂😂🤣🤣🤣
发表于 2021-08-06 16:26:55 回复(0)
不懂,求解析
发表于 2017-02-28 12:14:39 回复(0)

B

A.vector是线程安全的ArrayList,在内存中占用连续的空间。初始时有一个初始大小,当数据条数大于这个初始大小后会重写分配一个更大的连续空间。如果Vector定义为保存Object则可以存放任意类型。

B.try{}catch{}会增加额外的开销

C.接口中声明的'变量'必须为public final static,所以为常量

D.子类可以访问父类受保护的成员

发表于 2017-04-03 14:34:23 回复(19)
接口中只有常量定义,没有变量声明。
编辑于 2017-08-17 17:55:44 回复(4)
选B
A.可以不必事先知道对象类型,默认就Object类型
B.错误可以捕获异常也可以手动抛出
C.接口有函数声明和变量声明。函数没有函数体,变量是final类型。
D.子类可以访问父类protected类型成员,不可以访问private类型的成员。
编辑于 2017-03-23 19:01:33 回复(5)

说一下D
访问修饰符 访问范围 继承性
private 本类内部 不可继承 私有的
(default) 本类+同包 同包子类可以继承 默认的
protected 本类+同包+子类 可以继承 受保护的
public 公开 可以继承 公开的

发表于 2018-10-31 15:08:17 回复(0)
Vector是Collection集合下的实现类,实现至List接口,是线程安全的,其底层和ArrayList同为数组,可实现自动扩容,但是ArrayList是非线程安全的。A问题的错误是要正常使用必须制定类型,其实他是一个泛型接口,定义Object类型或者默认不指定,即可存放任意类型,但这和正常使用自动扩容功能无关。
调用throw时(语法:throw new Exception();)是向上抛出一个错误实例,这比直接函数return一个对象或者基本类型返回值,要消耗的多,尤其是在try...catch...捕获处理异常时
接口只能声明方法和常量类型,方法可以是public abstract的,可以是default的,可以是静态方法
子类可以访问父类非private成员
编辑于 2018-08-14 11:06:26 回复(1)
A选项不需要知道对象的存储类型,都是以Object存储。
发表于 2017-04-03 13:06:58 回复(0)
C哪里错了。。
发表于 2017-03-08 16:25:48 回复(2)
A选项,当使用泛型<Object>后,即可存储任何类型的对象,不需要事先知道存储对象的类型。
B选项, 从方法头直接抛出异常开销会小于另外再写一个try-catch语句块。
C选项,个人觉得接口中那个不是声明变量,而是定义常量。
D选项,子类可以访问父类中protected修饰的成员。
发表于 2018-07-23 19:54:52 回复(0)
C选项
接口不能单单声明一个变量而已,必须进行初始化
发表于 2020-04-23 22:37:49 回复(0)

接口中只能定义常量,即使你的代码是这样写的:public int a =0;,底层语言也会默认加上public static final int a = 0;转为常量,那么这是为什么呢?

我们都知道,接口中不能定义方法的实现,但是抽象类中是可以定义变量、常量以及方法的实现的,所以我们可以将接口看为比抽象类更高层次的抽象,是特殊的抽象类。加入接口可以定义变量,因为接口中的方法都是抽象的,我们无法通过行为,例如set()方法来修改这一属性值。

或许有些人会说我们可以让实现接口的类的对象去修改接口的属性值,如果真的这样的话,比如接口中我定义了变量a,而且我们通过实现本接口的类B的对象改变了a的值,那么其他实现本接口的类B、类C中的变量a得知都要随着改变(因为它们实现的都是一个接口,处理的也是同一个变量,而变量的处理方式为传址),那么就会造成想要实现本接口的类却不知道接口里现在变量a到底是什么值,就会造成混乱。

而且,抽象的概念是将不可变的东西提取出来封装到一起,将可变的东西放到实现中去,接口的设计理念既然是高层的抽象,那么就应该定义为不可变的东西,如果接口中定义了变量,就说明带了可变的成分,就不是高层抽象了。

编辑于 2018-03-06 21:22:13 回复(0)

接口种只能声明常量,且默认是static final进行修饰,在声明之后必须进行初始化,不支持普通的变量声明。

发表于 2022-05-28 10:39:05 回复(1)
子类不可以访问父类的私有成员,但是可以访问父类的受保护的成员
发表于 2021-07-18 19:20:55 回复(0)
b是对的,我们可以在需要抛出错误的地方throws new runtimeexception()
发表于 2017-02-10 09:54:28 回复(0)
用户throw可以自己抛异常,不一定是错误信息,接口的包含方法和常亮,public static   final 
发表于 2022-05-31 16:14:56 回复(0)
接口中必须是被final修饰的常量
发表于 2022-05-17 23:56:35 回复(0)
C选项我说一下,接口中定义的变量,默认是public static final 修饰,其实就是相当于常量了,常量在声明时是需要初始化的,不管是在类中,还是接口中,一定要记得声明时初始化
发表于 2022-03-12 14:08:38 回复(0)
接口中只有常量定义,没有变量声明
发表于 2021-06-13 10:00:20 回复(0)