2021年08月23日 java1

考点1:Java编程单元

Java中基本的编程单元为:

  • A 类
  • B 函数
  • C 变量
  • D 数据

解析

显示答案/隐藏答案正确答案: A

java的基本编程单元是类,基本存储单元是变量。

考点2:

下列说法正确的是

  • A 在类方法中可用this来调用本类的类方法
  • B 在类方法中调用本类的类方法可直接调用
  • C 在类方法中只能调用本类的类方法
  • D 在类方法中绝对不能调用实例方法

解析

显示答案/隐藏答案正确答案: B

考点3:

语句:char foo=’中’,是否正确?(假设源文件以GB2312编码存储,并且以javac – encoding GB2312命令编译)

  • A 正确
  • B 错误

解析

显示答案/隐藏答案正确答案: A

考点5:

1
2
3
4
5
6
7
8
9
//point X
public class Foo {
public static void main(String[] args) throws Exception {

PrintWriter out = new PrintWriter(
new java.io.OutputStreamWriter(System.out), true);
out.printIn("Hello");
}
}

下面哪个选项放在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.

解析

显示答案/隐藏答案正确答案: A

java中没有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

解析

显示答案/隐藏答案正确答案: B

A小数默认double,float x=0.0f
C字符串不能赋值给字符
D没有变量名

考点7:

1.将下列(A、B、C、D)哪个代码替换下列程序中的【代码】不会导致编译错误?

1
2
3
4
5
6
7
interface Com{
int M=200;
int f();
}
class ImpCom implements 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();

解析

显示答案/隐藏答案正确答案: A

C: 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

接口的成员特点是:

  1. 成员变量修饰符 默认 public static final
  2. 成员方法修饰符 默认 public abstract

考点8:

下面哪些接口直接继承自Collection接口()

  • A List
  • B Map
  • C Set
  • D Iterator

解析

显示答案/隐藏答案正确答案: AC

集合继承树

这里有一张图片

这里有一张图片

这里有一张图片

这里有一张图片

Iterator接口 不继承任何接口!

考点9:

抽象类和接口的区别,以下说法错误的是

  • A 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
  • B abstract classJava 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
  • C 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。

-D abstract classinterface所反映出的设计理念不同。其实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);//正确