Java基础周测-01(2)

二、多选题

1、给出下面的代码段:

复制代码
public class Base{
  int w, x, y ,z;   public Base(int a,int b){     x=a;

    y=b;
  }   
public Base(int a, int b, int c, int d){  // assignment x=a, y=b     w=d;     z=c;   } }
复制代码

在代码说明// assignment x=a, y=b处写入如下哪几个代码是错误的?( )

  A.Base(a,b);  B.x=a, y=b;  C.x=a; y=b;  D.this(a,b);

  A:new Base(a,b),不会编译错误,但创建了一个新的对象,不会对本对象成员赋值。

  D:构造函数之间的调用不可用直接调用,需要this代替请注意, this()应该是构造函数中的第一条语句。

 

2、下列说法错误的是?( 单选 )

A.尽管现行的Java语言版本不允许类的多继承,但是我们仍然可以在extends关键字后面放置一个列表
B.在实现多态后,利用父类引用(声明时类型)调用父类子类均声明了的变量和方法,均调用在子类中声明的版本
C.Java中代码重用中的has a关系通过定义类属性方式实现,is a通过类继承来实现
D.this关键字代表当前对象,即this引用的是当前创建的类实例对象的句柄

利用声明时类型调用父类和子类同时声明的属性时,调用方法是子类(运行时类型)声明的,而变量则是调用父类(声明时类型)声明的

 

3、以下关于方法覆盖描述错误的是?(  )

A.覆盖的方法和被覆盖的方法必须具有完全相同的方法名、参数列表和返回类型,访问范围没有限制
B.覆盖的方法的访问范围不能比被覆盖的方法访问范围小
C.覆盖的方法和被覆盖的方法参数列表要不同
D.覆盖的方法和被覆盖的方法参数列表要相同

 

4、下面有关for循环的描述错误的是( )

A.for循环体语句中,可以包含多条语句,但要用大括号括起来
B.for循环只能用于循环次数已经确定的情况
C.在for循环中,不能使用break语句跳出循环
D.for循环是先执行循环体语句,后进行条件判断

 

5、while 循环和 do..while 循环的区别不是(  )

A.没有区别,这两个结构任何情况下效果一样
B.while 循环比 do..while 循环执行效率高
C.while 循环是先判断后循环,所以循环体可能一次也不执行
D.do..while 循环是先循环后判断,所以循环体至少被执行一次

 

三、判断题

1、数组有一个方法length,用于获取数组长度。  ✘  方法是length(),length是属性
2、不能继承String类。  ✔
3、被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象。  ✔
4、与普通方法一样,构造方法也可以重载。  ✔
5、switch_语句中可以没有default子句。  ✔

 

四、编程题

 

1、下面程序的运行结果是什么?

复制代码
class HelloA {
  public HelloA() {
    System.out.println("HelloA");
  }
  {
    System.out.println("I'm A class");
  }
  static {
    System.out.println("static A");
  }
}

public class HelloB extends HelloA {
  public HelloB() {
    System.out.println("HelloB");
  }
  {
    System.out.println("I'm B class");
  }
  static {
    System.out.println("static B");
  }

  public static void main(String[] args) {
     new HelloB();
  }
}
复制代码
父类→子类
静态代码块→构造代码块→构造方法→非静态代码块
jvm加载类字节码(装载、连接、初始化)→构造方法给对象初始化→执行动态代码块

2、自定义一个英雄类(Hero),要求:

英雄的级别最低为0,最高为30级,经验值最低为0,最高为30级时的经验值
英雄的级别计算公式如下:
Level 表示当前级别,EXP(经验值)=30*(level * level * level +5* level)-80
定义属性:等级(level)类型为int,经验值(exp) 类型为int
定义方法:获取最大级别方法(int getMaxLevel())、根据级别获取经验值(int getExp(int level))、获取最大经验值(int getMaxExp())
该类中要求有一个含有参数的构造函数,参数为英雄的经验值,初始化时要保证经验值在要求范围之内,通过经验值计算英雄的级别,
构建一个无参的构造方法,将经验值设置为0
利用英雄类无参和带有参数的构造函数分别构建英雄对象,并输出英雄的等级和经验值。

复制代码
public class Hero {

    int level;
    int exp;

    Hero(int exp) {
        if (exp < 0) {
            this.exp = 0;
            level = 0;
        } else if (exp > getMaxExp()) {
            this.exp = getMaxExp();
            level = getMaxLevel();
        } else {
            this.exp = exp;
            int level = 0;
            while ((exp = exp - getExp(level + 1)) >= 0){
                level++;
            }
            this.level = level;
        }
    }

    Hero() {
        this(0);
    }

    int getMaxLevel() {
        return 30;
    }

    int getMaxExp() {
        return getExp(getMaxLevel());
    }

    int getExp(int level) {
        return 30 * (level * level * level + 5 * level) - 80;
    }

    public static void main(String[] args) {
        Hero hero = new Hero();
        System.out.println(hero.exp);
        System.out.println(hero.level);
        System.out.println("----------------------");
        Hero hero1 = new Hero(1000000);
        System.out.println(hero1.exp);
        System.out.println(hero1.level);
    }

}
复制代码

 

posted @   carat9588  阅读(197)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示