Java小题狂作第一弹

想要取得好成绩,我最后还是向题海战术低头了,这个栏目以后一周大概三四更,给大家分享好题和易错题,大家多多支持哦~
有相关争议也希望大佬们在评论区轰炸


1.接口的定义

image.png
接口方法默认是public abstract的,且实现该接口的类中对应的方法的可见性不能小于接口方法的可见性,因此也只能是public的

2.多态

以下代码输出结果为

class Animal{
    
    
    public void move(){
    
    
        System.out.println("动物可以移动");
    }
}
class Dog extends Animal{
    
    
    public void move(){
    
    
        System.out.println("狗可以跑和走");
    }
    public void bark(){
    
    
        System.out.println("狗可以吠叫");
    }
}
public class TestDog{
    
    
    public static void main(String args[]){
    
    
        Animal a = new Animal();
        Animal b = new Dog(); 
        a.move();
        b.move();
        b.bark();
    }
}

编译看左边,运行看右边。也就是是编译的时候会把它当成左边的类型,运行的时候看右边类型的方法体。这个题动物类没有另一个方法,而b调用了,所以编译器会认为b是一个动物类,所以报错
对于多态中的非静态属性或非静态方法,编译看左,运行看右。也就是在编译期间看左边的类中有无该方法/属性,而实际在运行时执行的是右边类的方法/属性。
如果想要编译正确,b应该进行强制转换

public class TestDog{
    
    
    public static void main(String args[]){
    
    
        Animal a = new Animal();
        Animal b = new Dog();
        a.move();
        b.move();
        if (b instanceof Dog){
    
    
            ((Dog) b).bark();
        }

    }
}

3.栈和队列

Stack通常是指“先进先出”的容器。( )
答案:错误
栈 吃了吐, 队列 吃了拉

4.流的比较

image.png
首先B和D排除,题目是要求输入。
A和C之间,inputStream是字节流输入流; InputStreamReader是将字节转成字符,inputStreamReader将字符流处理成字节流,题目要求是用于处理字符输入,所以选C。

5.接口的属性

下列程序输出结果为

public class A implements B{
    
    
    public static void main(String args[]){
    
    
        int i;
        A a1=new  A();
        i =a1.k;
        System.out.println("i="+i);
    }
}
interface B{
    
    
    int k=10}

image.png
在接口里面的变量默认都是public static final 的,它们是公共的,静态的,最终的常量.相当于全局常量,可以直接省略修饰符。
实现类可以直接访问接口中的变量

6.类和接口的继承实现和扩展

image.png
1.类与类之间的关系为继承,只能单继承,但可以多层继承。 2.类与接口之间的关系为实现,既可以单实现,也可以多实现。 3.接口与接口之间的关系为继承,既可以单继承,也可以多继承。 故为A

7.父类子类的相互调用

image.png
A:类的实例方法是可以直接调用父类的非private实例方法的。从概念意义上说,每一个子类创建时都会隐式创建一个父类对象与之对应。super关键字就是在子类对象中关于父类对象的引用。子类无法调用父类 private 方法
B错误,当父类的类方法定义为private时,对子类是不可见的,所以子类无法调用
C错误,子类具体的实例方法对父类是不可见的,所以无法直接调用, 只能通过创建子类的一个实例对象,再进行调用
D正确,实例方法可以调用自己类中的实例方法

8.静态代码块

 class StaticStuff{
    
    
     static int x = 10;

     static {
    
     x += 5; }

 public static void main(String args[])
 {
    
    
     System.out.println(“x =+ StaticStuff .x);
 }
    static
     {
    
    x /= 3; }
}

image.png
执行顺序为:

  • 父类静态代码块、静态变量 ps:按声明顺序执行
  • 子类静态代码块、静态变量 ps:按声明顺序执行
  • 父类局部代码块、成员变量 ps:按声明顺序执行
  • 父类构造函数
  • 子类局部代码块、成员变量 ps:按声明顺序执行
  • 子类构造函数

9.线程销毁

image.png

所以start方法只是让线程进入就绪状态而不是销毁

10.类的访问

image.png
default和protected的区别是:
前者只要是外部包,就不允许访问。
后者只要是子类就允许访问,即使子类位于外部包。

总结:default拒绝一切包外访问;protected接受包外的子类访问

11String中的toString和valueOf

public class CharToString {
    
    
 public static void main(String[] args)
 {
    
    
  char myChar = 'g';
  String myStr = Character.toString(myChar);
  System.out.println("String is: "+myStr);
  myStr = String.valueOf(myChar);
  System.out.println("String is: "+myStr);
 }
}
此代码片段输出正确的值是()
正确答案: A   你的答案: A (正确)
A
String is: g
String is: g

B
String is: 103
String is: g

C
String is: g
String is: 103
    
D    
String is: 103
String is: 103

image.png
返回的都是字符串,只有char变成 int 的时候才会变为对应的assic码

12.二维数组的使用

image.png
C语言中的二维数组,第二个控制列,必须要有值,行可以不要!别记混了
Java中二维数组定义,一维的长度前面那个框值必须给

这些小知识点你掌握了吗

猜你喜欢

转载自blog.csdn.net/qq_63511424/article/details/124315767