2021年08月23日 java1
考点1:Java编程单元
Java中基本的编程单元为:
- A 类
- B 函数
- C 变量
- D 数据
解析
显示答案/隐藏答案
正确答案: Ajava的基本编程单元是类,基本存储单元是变量。
考点2:
下列说法正确的是
- A 在类方法中可用
this
来调用本类的类方法 - B 在类方法中调用本类的类方法可直接调用
- C 在类方法中只能调用本类的类方法
- D 在类方法中绝对不能调用实例方法
解析
显示答案/隐藏答案
正确答案: B考点3:
语句:char foo=’中’,是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译)
- A 正确
- B 错误
解析
显示答案/隐藏答案
正确答案: A考点5:
1 | //point X |
下面哪个选项放在poinx X这里可以正确执行?
- A
import java.io.PrintWriter;
- B
include java.io.PrintWriter;
- C
import java.io.OutputStreamWriter;
- D
include java.io.OutputStreamWriter;
- E
no statement is needed.
解析
显示答案/隐藏答案
正确答案: Ajava中没有include关键字,导包用import
由于代码中使用了printWriter 类,所以要导入此类Import java.io.PrintWriter;
考点6:
下列语句中,正确的是
- A
float x=0.0
- B
boolean b=3>5
- C
char c="A"
- D
double =3.14
解析
显示答案/隐藏答案
正确答案: BA小数默认double,float x=0.0f
C字符串不能赋值给字符
D没有变量名
考点7:
1.将下列(A、B、C、D)哪个代码替换下列程序中的【代码】不会导致编译错误?
1 | interface Com{ |
- A
public int f(){return 100+M;}
- B
int f(){return 100;}
- C
public double f(){return 2.6;}
- D
public abstract int f();
解析
显示答案/隐藏答案
正确答案: AC: The return type is incompatible with Com.f()
D:The abstract method f in type ImpCom can only be defined by an abstract class
必须实现接口的所有方法 方法原型要一致
1、必须实现接口中所有的方法。
在实现类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。
访问权限要更低
2、接口实现类相当于子类,子类的访问权限是不能比父类小的。
实现的接口方法都是public
接口中所有方法默认都是public,至于为什么要是public,原因在于如果不是public,那么只能在同个包下被实现,可访问权限就降低很多了,那么在实现类中,实现的类相当于子类,子类的访问权限是不能比父类小的,而在java中一个类如果没有权限的修饰符,默认是friendly(同一个包内的其它类才可访问),所以在接口的实现类重写的方法中一定要写public
两同两小一大
接口中的抽象方法默认的修饰符是public abstract,后重写,两同两小一大可知,前边修饰符应该是public
接口的成员特点是:
- 成员变量修饰符 默认 public static final
- 成员方法修饰符 默认 public abstract
考点8:
下面哪些接口直接继承自Collection接口()
- A
List
- B
Map
- C
Set
- D
Iterator
解析
显示答案/隐藏答案
正确答案: AC集合继承树
Iterator接口 不继承任何接口!
考点9:
抽象类和接口的区别,以下说法错误的是
- A 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
- B
abstract class
在Java
语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface
,实现多重继承。接口还有标识(里面没有任何方法,如Remote
接口)和数据共享(里面的变量全是常量)的作用。 - C 在
abstract class
中可以有自己的数据成员,也可以有非abstarct
的成员方法,而在interface
中,只能够有静态的不能被修改的数据成员(也就是必须是static final
的,不过在interface
中一般不定义数据成员),所有的成员方法默认都是public abstract
类型的。
-D abstract class
和interface
所反映出的设计理念不同。其实abstract class
表示的是has-a
关系,interface
表示的是is-a
关系。
解析
显示答案/隐藏答案
正确答案: ACD抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点: a、抽象类不能被实例化只能被继承; b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法; c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public; d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类; e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。 接口:Java中接口使用interface关键字修饰,特点为: a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public abstract(JDK1.8之前); b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题; c、一个类可以实现多个接口; d、JDK1.8中对接口增加了新的特性: (1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法; (2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。 注意:jdk1.9是允许接口中出现private修饰的默认方法和静态方法。
解析:
A:jdk1.9是允许接口中出现private修饰的默认方法和静态方法,A错误;
抽象类可以有私有的变量和方法。 B:正确
C:抽象类可以有抽象和非抽象的方法;jdk1.8接口中可以有默认方法和静态方法,C错误。
D:强调继承关系,is-a,如果A is-a B,那么B就是A的父类;
代表组合关系,like-a,接口,如果A like a B,那么B就是A的接口。 ;
强调从属关系,has-a,如果A has a B,那么B就是A的组成部分。
D项错误。
is a是继承(抽象类),has a是组合(接口)
在JDK9后,接口中可以有私有静态方法和私有普通方法
考点10:
下面的Java赋值语句哪些是有错误的 ()
- A int i =1000;
- B float f = 45.0;
- C char s = ‘\u0639’
- D Object o = ‘f’;
- E String s = “hello,world\0”;
- F Double d = 100;
解析
显示答案/隐藏答案
正确答案: BCF选项F是自动装箱, 装箱过程中调用的是Double类的valueOf(double d)方法, 而这里是100为int型, 所以编译会“cannot convert from int to Double”。
最后一个选项F项,很多人都没解释清楚。 首先,double d =100; 是不会错的,double是8个字节64位,int 是4个字节,32位。所以int转double,32位转64位,肯定是不会错的。
那F项错在哪里?仔细看是Double 不是double哦,所以这道题考的是java自动装箱,对于Integer和Double的自动装箱,只能装对应的数据类型,不对应就会报错。java中100默认是int型,而不是byte,short和long;100.0默认是double,而不是float。想了解int装箱,请大家仔细阅读这篇文章:关于int装箱更多问题。而装箱远比这个复杂,看下面。
Integer i=100;//没有问题 Integer i2=100.0;//报红杠,因为默认是double Integer i3=(byte)100;//报红杠 Short s = (byte) 100;//没有问题,是不是很神奇?说明上面的规律对Short不适用 Double d=100; //报红杠 Double d=100.0;//没有问题 Double d=100.0f;//报红杠 double d=100;//没有问题,100是int类型,自动转换为double. Double d=Double.valueOf("100"); //正确 Double d=Double.valueOf(100);//正确 Double d=new Double(100);//正确