第一次测试
一,选择和填空(共14题,每题2分,共28分)
1,下列代码 (D)
class A{
class AInner{}
}
class B{
static class BInner{}
}
public class C{
private class CInner{}
}
编译后生成几个.class文件?
A、3个
B、4个
C、5个
D、6个
2,下列代码C.java
public classHello{
/**
* 只是一个测试类
* /**
* 您好,java
* **/
**/
static public void main(String[] arg){
System.out.println('您好,java');
}
}
有几个错误的地方?(B)
A、1个
B、2个
C、3个
D、4个
3,下列哪些是java的关键字(多选)(ACE)
A、default
B、loop
C、do
D、Class
E、null
F、java
4,下列哪些代码符合java规范:(A)
A、public static void main(){}
B、public method(){
private Integer num;
}
C、public method(){
int num;
System.out.println(num);
}
D、private $5person=5;
5,下列哪些变量的声明是正确的?(多选)(BCDEF)
A、byte i=128;
B、int i =0220;
C、boolean flag= Boolean.TRUE;
D、int number ='A';
E、float y =0x123;
F、long a =0x123l;
6,下列代码运行结果是:(A)
main(){
boolean flag=false;
int i=0;
if(flag||i>100){
System.out.println("step1");
}else if(!!flag & i/0>8){
System.out.println("step2");
}else{
System.out.println("step3");
}
}
A、运行时报错
B、打印step1
C、打印step2
D、打印step3
7,下面代码的运行结果是:(C)
public staticvoid main(String[] args){
int i=1;
int j=++i;
if(j++>3){
++j;
}else{
i++;
}
int k=++j>4?j++:i++;
System.out.println(i);
}
A、2
B、3
C、4
D、运行时报错
8、下面的程序执行结果是:(B)
public static void main(String[] args) {
int i = 0;
for (i++; i++ < 10;i++);
System.out.println(++i);
}
A、输出0
B、输出13
C、输出1
D、输出12
9,下面的程序输出
public staticvoid main(String[] args){
for(int i=0;i<3;i++){
switch(i){
case 1:
System.out.println("a");
break;
case 0:
System.out.println("b");
break;
default:
System.out.println("c");
case 2:
System.out.println("d");
}
}
}
请写出执行的结果BAD
10,下面哪些方法是void show(int a,charb,boolean c){}方法的重载?(多选)(ABCE)
A、voidshow(char b, int a, boolean c){}
B、intshow(boolean a,char c ,int b){}
C、voidshow(int a,char b,double c){}
D、voidshow(int x,char y,boolean z){}
E、int show(intx,double y){}
F、int show(intx, char y,boolean z){}
11,下面哪个声明数组的方式是正确的?(多选)(ACDEFG)
A、inti[]=null;
B、int[] j=newInteger[]();
C、int[] k=newint[]{1,2,3};
D、int[]l={1,2,3};
E、int[] m={};
F、String[]s=new String[]{"1",'2',"3"};
G、String[]s=new String[3];
H、class A{}
public class B{
private A[] ={new A(),new A(),new A()};
}
I、class A{}
public class B{
private A[] =new A[]{new A(),new A(),new A()};
}
12,下面哪一项说法是正确的?(无)
A.在一个子类中一个方法不是public的就不能被重载
B.覆盖一个方法只需要满足相同的方法名和参数类型就可以了
C.覆盖一个方法必须需要相同的方法名参数和返回类型
D.一个覆盖的方法必须有相同的方法名、参数名和参数类型
13,下面代码的输出结果是多少?[Trend公司面试题] ABA
class A {
public static void prt() {
System.out.println("1");
}
public A() {
System.out.println("A");
}
}
public class B extends A {
public static void prt() {
System.out.println("2");
}
public B() {
System.out.println("B");
}
public static void main(String[] args) {
A a = new B();
a = new A();
}
}
14,下面代码的输出结果是多少?[Trend公司面试题] 123
class Parent {
protected String value = "123";
public String getValue() {
return value;
}
}
public class Child extends Parent {
protected String value = "456";
public static void main(String[] args){
Child c=new Child();
System.out.println(c.getValue());
}
}
二,主观题(共5题,每题5分,共25分)
1, 请简要写出搭建java开发环境的步骤
安装jdk,设置环境变量,path=jdk根目录\bin
测试环境,测试命令:javac
2, 为什么java能跨平台
java的编译器编译java源文件后能产生和平台无关的class文件,class文件是跨平台的
3, int和Integer都可以代表一个整数,这两者在使用上有什么区别吗?为什么JDK中要设计两个数据类型来表示同一种数据?
Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。
int的默认值为0,而Integer的默认值为null,
即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,
Integer类型的值会在堆空间开辟存储区域,
int 类型的值会存放于栈空间,存储和读取速度快于Integer值;
但是Integer类提供了多个和整数操作相关的方法,
如进制转换,大小比较,类型转换等,这是int 无法比拟的;
4, 请简述面向对象的三个特征
封装、继承、多态
5,什么叫多态?你是如何理解多态的?请设计一个简单的示例,展示多态的用法。
多态:指同一个实体同时具有多种形态:
产生前提:继承关系;
产生机制:编译类型和运行类型不一致(父类变量指向子类对象)
分类:编译多态(方法重载)和运行多态(方法覆写)
三,编程题
1,打印下面图形(8分)
* * * * *
* * * *
* * *
* *
*
package demo1; public class demo1 { public static void main(String[] args) { int i, j; for (i = 5; i > 0; i--) { for (j = i; j > 0; j--) { System.out.print("*"); } System.out.println(); } } }
2,编写一个方法求s=a+aa+aaa+a...a,其中a是一个数,比如a=2;那么求s=2+22+222+2222...的值。该方法需要两个参数,第一个参数控制a,第二个参数控制有多少个数。(5分)
package demo2; public class demo2 { public static String show(Integer num, Integer count) { //加数 String ele = ""; //表达式 String exp = ""; long sum = 0; for(int i = 1; i <= count; i++) { ele += num; System.out.println("加数 = " + ele); sum += new Integer(ele); exp += ele; if(i != count){ exp += "+"; }else{ exp += "="; } } return exp + sum; } public static void main(String[] args) { String ret = show(2, 4); System.out.println(ret); } }
3,给出一组学生的成绩int[]score={80,45,60,100,89,92,93,...}请求出这组成绩中,100分,90-99,80-89的学生人数。(5分)
package demo3; public class demo3 { public static void main(String[] args) { int[] score = {80,45,60,100,89,92,93}; int countA = 0; int countB = 0; int countC = 0; for(int i: score) { if(i == 100) { countA++; }else if(i >= 90 && i < 100){ countB++; }else if(i >= 80 && i < 90){ countC++; } } System.out.println(countA); System.out.println(countB); System.out.println(countC); } }
4,String类中有一个方法叫toCharArray();该方法在string对象上面调用,用于将一个字符串变成char的数组,方法签名为:char[] toCharArray();请编写一个方法int lastIndexOf(Strings,char c),计算出一个字符在string中第一次出现的位置(倒着数),如果在string中没有这个字符,则返回-1;(5分)
package demo4; public class demo4 { public static void main(String[] args) { String str = "1234abcdeabcdabcaba"; int index = lastIndexOf(str, '3'); System.out.println(index); } public static int lastIndexOf(String s, char c) { char[] cArray = s.toCharArray(); int len = cArray.length; for(int i = len - 1; i >= 0; i--) { if(c == cArray[i]) { return i; } } return -1; } }
5,在System类中有静态方法public static void arraycopy(
Object src,
int srcPos,
Object dest,
int destPos,
int length):
可以用于数组src从第srcPos项元素开始的length个元素拷贝到目标数组dest从destPos开始的length个元素。请自己实现这个方法。(5分)
package demo5; import java.util.Arrays; public class demo5 { public static void main(String[] args) { int[] src = {1,2,3,4,5,6,7}; int[] dest = new int[5]; System.out.println(Arrays.toString(dest)); arraycopy(src, 2, dest, 0, 3); System.out.println(Arrays.toString(dest)); } public static void arraycopy(int[] src, int srcPos, int[] dest, int destPos, int length) { if(src == null || dest == null ) { System.out.println("数组不能为空"); return; } if(srcPos < 0 || destPos < 0 || length < 0) { System.out.println("角标越界,不能小于0"); return; } if(src.length < srcPos + length || dest.length < destPos + length) { System.out.println("角标越界,太大了"); return; } for(int i = srcPos,j = destPos; i < srcPos + length; i++) { dest[j++] = src[i]; } } }
6,各种类型的几何图形都有自己的面积计算公式,但在一个CAD(计算机辅助设计)软件中,图形的种类非常多,如果程序需要计算出任何一种图形的面积,最简单 的想法是使用条件判断语句根据图形类型来选择相应的计算公式。然而,这种方法不太好,可能会导致嵌套层次很深的条件判断语句。另外,如果软件要扩充功能以支持新的图形种类,则又不得不修改调用不同公式计算图形面积的代码。在学习了面向对象技术之后,你能对上述问题给出一个较好解决方案来吗?请以计算圆形、矩形和三角形三种几何图形的面积为例,列出关键代码。(7分)
package demo6; import org.omg.CORBA.PRIVATE_MEMBER; interface Tuxing{ double getArea(); } class Circle implements Tuxing{ private double r; public Circle(double r) { super(); this.r = r; } public double getArea() { return Math.PI*r*r; } } class Rectangle implements Tuxing{ private double w; private double h; public Rectangle(double w, double h) { super(); this.w = w; this.h = h; } public double getArea() { return w*h; } } class Triangle implements Tuxing{ private double a; private double b; private double c; public Triangle(double a, double b, double c) { super(); this.a = a; this.b = b; this.c = c; } public double getArea() { double p = (a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c)); } } public class demo6 { public static void main(String[] args) { Tuxing tu = new Triangle(3, 4, 5); System.out.println(tu.getArea()); } }