Java的基础知识错题整理

本文介绍了Java编程中的标识符规则,包括合法字符、命名限制和示例。接着讲解了Java的继承特性,如单继承、子父类关系以及接口的定义和特点。此外,还通过例题分析了接口的使用和继承。最后,文章提供了几个编程题目,涉及Java数据类型、运算优先级、类与对象的关系以及抽象类和接口的应用。解答了如何在抽象类shape基础上扩展Rectangle类,并给出了删除排序数组重复项的算法题及解决方案。
摘要由CSDN通过智能技术生成

一、Java标识符:在Java源程序中凡是程序员有权利自己命名的单词
标识符的命名规则:
-合格的标识符只能由数字,字母,下划线美元符组成
-不能由数字开头
-关键字不能做标识符
注意:所以汉字、日语、韩文都可做标识符
例题:
下列不可做为Java语言标识符的是:A,D,F,H
A. /aa B. $2 C. _2 D. 22 E.二二
F. Float G. a2 H. 2a

二、Java关于继承性的规定
-一个类可以被多个子类继承
-Java类的单继承性:一个类只能一个父类
-子父类是相对概念
-子类直接继承的父类,称为:直接父类、间接继承的父类称为:间接父类
-子类继承父类以后,就获取直接以及所有间接父类的属性或方法
例题:Java中:C
A.一个子类可以有很多个父类,一个父类也可以有多个子类
B.一个子类可以有很多父类,但一个父类只可以有一个子类
C.一个子类可以有一个父类,但一个父类可以有多个父类
D.以上说法都不对

三、接口:是抽象方法和常量值的定义的集合
从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现
接口的特点:
-接口中所有的方法都默认是由public abstract修饰的
-接口没有构造方法
-实现接口的类中必须提供接口中所有方法的具体实现内容
-多个无关的类可以实现同一个接口
-一个类可以实现多个无关接口
-接口也可以继承另一个接口,使用extends
-与继承性类似,接口与实现类之间存在多态性
例题:以上继承性的述序正确的是:A
A.在Java中类只允许单一继承
B.在Java中一个类只能实现一个接口
C.在Java中一个类不能同时继承一个类分实现一个接口
D.在Java中接口只允许单一继承
例题:下列关于接口的叙述错误的是:B,E
A.接口中的方法默认是public abstract方法
B.接口中的方法默认都是静态的
C.接口中的属性,都是静态常量
D.类在实现接口的方法时,必须显示地使用public修饰符
E.抽象方法必须在抽象类中,所有抽象类中的方法都必须是抽象方法

四、
1.在一个编辑器中编写好的Java代码,是拓展名为jie.class的文件
2.字节码文件是与平台的二进制,执行时是由解释器解释成本地机器码
3.Java的各种数据类型占用固定长度,与平台软硬件环境无关(数据类型长度只与Java虚拟机)
4.在实例方法或构造器中,this用来引用当前对象,通过this可引用当前对象的任何成员

例题:下面代码的结果是什么?还是抛出异常?

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 = 1010
抛出异常
i1 * i2 = 100
i1 / i2 = 1

注意:-,+优先级相同,且-,+是自左向右结合,第二个输出字符串不能进行加减运算

例题:以下代码的结果是什么?

 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
java.lang.Object
java.lang.Object

注意:所有类的根父类是java.lang.Object

例题:输出什么?

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

注意:两个float的数进行加减乘除会存在一定的误差

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

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

```java
class Rectangle{
       private double width;//矩形宽
       private double height;//矩形高
       public Rectangle(){
             width = 1;
             height = 1;
       }
       public Rectangle(double width,double height){
             this.width = width;
             this.height = height;
       }
       public double getArea(){
             return width * height;
       }
       public double getPerimeter(){
             return (width + height)*2;
       }
       public void setWidth(double width){
             this.width = width;
       }
       public double getWidth(){
             return width;
       }
       public void setHeight(double height){
             this.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);

//在函数里修改输入数组对于调用者是可见的
//根据你的函数返回的长度,它会打印数组中该长度范围内的所有元素

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

模板:

class Solution{
     public int removeDuplicates(int[] nums){
          
     }
}

代码:

 public int solve(int[] nums, int num){
        int s1 = 0;
        int s2 = s1 + 1;
        while(s2 < num){
            if(nums[s1] == nums[s2]){
                s2++;
            }
            else{
                nums[s1++] = nums[s2];
                s2++;
            }
        }
        return s1 + 1;
    }

思路:需要两个参数指针s1,s2,将其中是s1赋值为0,s2赋值为1,然后s2遍历数组如果与s1数组元素不相等就将该元素赋给s1的下一个,然后接着遍历,直到数组遍历结束,然后返回s1最终的值加1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值