2021-03-14

java考核题的错题积累

一.选择题

1.下列不可做为Java语言标识符的是:A,D,F,H
A. /aa B. $2 C. _2 D. 22 E.二二
F. Float G. a2 H. 2a

考点:
标识符的命名规则:
-合格的标识符只能由数字,字母,下划线,美元符组成
-不能由数字开头
-关键字不能做标识符
注意:所以汉字、日语、韩文都可做标识符

2.下列有关继承的叙述正确的是:B
A.在java中只允许单一继承(可以多层继承)
B.在java中一个类只能实现一个接口
C.在java中一个类不能同时实现一个类和实现一个接口(在java中一个类可以同时实现一个类和实现一个接口)
D.在java中接口只允许单一继承(可以多重继承)

二.判断题

1.一个java源文件中可以有多个类,但只能有一个类是public的(√)
原因:每个编译单元都有单一的公共接口,用public类来实现

2.有的类定义时可以不定义构造函数,所以构造函数不是必需的(×)
原因:不定义会使用默认的构造函数,并不代表不存在

三.程序判断题

1.下面代码的结果是什么?还是抛出异常?

public class Test2{
	public static void main(String[] args){
		int i1 = 10,i2 = 10;
		System.out.println("i1+ i2 = " + i1 + i2); 
		System.out.println("i1 - i2 = " + i1 - i2); 
		System.out.println("i1 * i2 =  " + i1* i2); 
		System.out.println("i1 / i2 = " + i1 / i2); 
	}
}

结果:
i1 + i2 = 10 + 10
抛出异常
i1 * i2 = 100
i1 / i2 = 1
注:-,+优先级相同,且-,+是自左向右结合,第二个输出字符串不能进行加减运算

2.以下代码的结果是什么?

class Base{
 }
 public class Test4{
        public static void main(String[] args){
             new Test4().method();
        }
        //注:getSuperclass()方法的作用是获取当前类继承的父类
        public void method(){
             System.out.println(this.getClass().getName());
             System.out.println(super.getClass().getName());
             System.out.println(this.getClass().getSuperclass().getName());
             System.out.println(super.getClass().getSuperclass().getName());
         } 
  }

结果:
Test4
Test4
Object
Object
注:所有类的根父类为java.lang.Object

3.输出什么?

public class Test5{
      public static void main(String[] args){
                String str1 = "666";
               System.out.println("str1=="666");
               System.out.println(12 - 11.9 == 0.1);
       }
}

结果:
true
false(第二个判断是从右向左开始,由于11.9!=0.1,所以为false)

4.请从下列的抽象类shape类扩展出一个名为Rectangle的类表示矩形,这个类包括:两个名为width和height的double型数据域作为私有成员,它们分别表示矩形的宽和高。width和height的默认值都为1,一个无参构造法,一个名为width和height指定值的矩形构造方法。一个名为getArea()的方法返回这个矩形的面积。一个名为getPerimeter()的方法返回这个矩形的周长。

public abstract class shape{//求抽象类
       public abstract double getArea();//求面积
       public abstract double getPrimeter();//求周长
}

结果:

class Rectangle extends shape{
    public Rectangle() {

    }
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    private double width;
    private double height;

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }
    
    public double getArea() {
        return width*height;
    }
    
    public double getPerimeter() {
        return 2*(width+height);
    }
}

四.算法题

1.删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。

示例1:
给定数组nums = [1,1,2],函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1,2。你不需要考虑数组中超出新长度后面的元素。

示例2:
给定nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度5,并且原数组nums的前五个元素被修改为0,1,2,3,4。你不需要考虑数组中超出新长度后面的元素。

说明:
为什么返回数值是整形,但输入的答案是数组呢?
请注意:输入数组是以[引用]方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
//nums是以”引用“方式传递的,也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);
//在函数里修改数组对于调用者是可见的。
//根据你的函数返回的长度,它会打印出数组中该长度范围内所有元素

forint i=0;i<len;i++){
	print(nums[i]);
}

模板:
class Solution{
	public int removeDuplicates(int[] nums){

	}
}

代码:

public int removeDuplicates(int[] nums) {
        /*首先应该判断是否为空数组*/
        if(nums == null||nums.length ==0){
            return 0;
        }
        int k=1;
        for(int i=1;i<nums.length;i++){
            if(nums[i]!=nums[i-1]){
               nums[k++]=nums[i];
            }
        }
        return k;
    }
五.加分题

1.String字符串类对象有哪两种创建方法,两者之间的区别是什么?
2.两个对象值相同(x.equals(y) ==== true,它们的hash code应当相同。
ture),但却可有不同的hash code,这句话对不对?
结果:
1.
①直接赋值
②通过String类型的构造方法创建对象
不同点:直接赋值方式创建对象是在方法区的常量池(方法区里存储着class文件的信息和动态常量池,class文件的信息包括类信息和静态常量池。可以将类的信息是对class文件内容的一个框架,里面具体的内容通过常量池来存储。),而构造方法的方式创建对象是在堆空间
2.
不对,如果两个对象 x 和 y 满足 x.equals(y) Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1)如果两个对象相同(equals 方法返回 true ),那么它们的 hashCode 值一定要相同;(2)如果两个对象的 hashCode 相同,它们并不一定相同。
补充:equals()方法没有重写的话,用于判断对象的内存储值是否用同一个地址;重写之后一般比较对象的内容是否相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值