【牛客刷题】笔试选择题整理(day1-day2)

每天都在进步呀

文章目录

  • [1. 小数求模运算](#1. 小数求模运算)
  • [2. 进程的分区,这里说的不是JVM的分区。进程中,方法存放在方法区。](#2. 进程的分区,这里说的不是JVM的分区。进程中,方法存放在方法区。)
  • [3. 访问权限控制](#3. 访问权限控制)
  • [4. 继承与多态](#4. 继承与多态)
  • [5.== 与equals()](#5.== 与equals())
  • [6. 类加载顺序](#6. 类加载顺序)
  • [7. super()与this()](#7. super()与this())
    • [7.1 super](#7.1 super)
      • [7.1.1 super调用父类构造方法](#7.1.1 super调用父类构造方法)
      • [7.1.2 super调用父类属性和方法](#7.1.2 super调用父类属性和方法)
  • [7.2 this](#7.2 this)
  • [8. 抽象类](#8. 抽象类)
  • [9. 接口](#9. 接口)

1. 小数求模运算

public class Test{
	public static void main(String args[]){
		System.out.println(100%3);
		System.out.println(100%3.0);
	}
}

2. 进程的分区,这里说的不是JVM的分区。进程中,方法存放在方法区。

3. 访问权限控制

public权限,是同类内,同包内,包外子类,包外非子类都能访问。

protected,同类内,同包内,包外子类。

default,是同类内,同包内可以。

private,只能是同类内。

4. 继承与多态

Java中允许的继承方式有,单继承A--->B,多层继承A->B->C,不同的类继承一个类A->B,C->B,但是不允许多继承,也就是A->B,A->C.

多态的实现条件

a. 必须在继承体系下

b. 子类重写父类方法

c. 通过父类的引用调用重写的方法。

如下图,通过父类father的引用,调用两个子类重写的方法,会有不同的状态。

	public static void main(String[] args) {
        father f = new day2_1_1(2003, 8, 28);
        father f1 = new sun2(2001, 8, 28);
        f.speak();
        f1.speak();
    }

5.== 与equals()

"==",如果是两个基本数据类型,比较的是值是否相等。如果是引用类型,比较的是两个对象的地址是否相等。

userId.toLowCase()会重新new一个String对象,在堆上开辟一块空间,和常量池中的"admin"地址是不同的。

如果要比较两个字符串的值是否相等,要用 userId.toLowerCase() .equals("admin");

6. 类加载顺序

由于hello()是静态方法,在实例化对象之前就已经被加载,属于类对象。只要是使用到了Test类,都会加载静态hello方法,所以test数据中包含Test类的静态初始化数据。但test无法调用类的非静态方法,会有空指针异常。

我们来猜一下,下面代码的执行结果吧

public class Day2_1_3 {
    public static void say(){
        System.out.println("hello");
    }
    static{
        System.out.println("我是静态代码块");
    }
    {
        System.out.println("我是实例代码块");
    }
    public void sayYes(){
        System.out.println("yes");
    }
    public static void main(String[] args) {
        Day2_1_3 d = null;
        System.out.println("我是第几条呢");
        Day2_1_3 d1 = new Day2_1_3();
        d.say();
        d.sayYes();
    }
}

静态代码块要先执行,实例代码块会在实例化对象的时候执行。

7. super()与this()

以下为super()和this()的主要用法

7.1 super

7.1.1 super调用父类构造方法

调用父类构造方法,有super(),及super(参数列表)两种写法,如下几种情况

  1. 父类未定义任何构造方法,则编译器默认为父类定义一个无参构造方法,子类构造方法中可通过不写super()语句,或在构造方法第一行写super()语句,都能在调用子类构造方法之前,调用父类构造方法。
  2. 父类定义了一个有参构造方法,和一个无参构造方法,子类可在构造函数第一行,用super(),或super(参数)两种语句,调用父类的构造方法,都是不会出错的
  3. 父类只定义了有参构造方法,未定义无参构造方法,这时,子类必须在构造方法第一行用super(参数列表)得方式,调用父类构造方法,使用super()的方式会报错

7.1.2 super调用父类属性和方法

  1. super.父类属性,调用父类非私有属性,可调用父类重名的,被隐藏的属性
  2. super.父类方法,可调用父类重名方法。

7.2 this

this主要用于在一个构造方法中调用另一个构造方法,如下图,在无参构造函数中,调用有参构造函数,可在构造函数开始之间,为对象设置默认值。

注意,super与this不能在同一个构造方法中使用。

class Person {
    private String name;
    private int age;

    // 构造函数1:无参构造函数
    public Person() {
        this("Unknown", 0); // 调用构造函数2
    }

    // 构造函数2:有参构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

8. 抽象类

抽象类中至少要有一个抽象方法,可以包含普通类能定义的所有类型。如成员属性,构造方法,静态成员变量,普通方法,抽象方法。以下为抽象方法的注意事项。

  1. 抽象类的抽象方法不能使用 private 修饰符,因为这会使得子类无法实现该方法。而对于其他修饰符,其作用和普通类的一样。
  2. 抽象类中的普通方法可以有实现体,子类可以继承这些方法。
  3. 抽象类中可以定义静态成员变量和方法。
  4. 抽象方法不能构造其实例。
  5. 子类必须重写抽象类中的全部抽象方法,否则,这个子类也是抽象类,需要用abstract修饰。

9. 接口

接口中的访问权限修饰符可以有public和默认两种,默认是可以被包内的其他类或接口访问。

  1. 接口中可以包含抽象方法,接口中的抽象方法与上述抽象类中的使用方法一样。

  2. 在Java 8及其后续版本中,接口中可以定义静态方法。定义一个静态方法需要使用关键字static来修饰,并且必须提供一个方法体。静态方法只能访问接口中的静态变量和其他静态方法。

  3. 在接口中,可以定义常量,这些常量用static final修饰,但从Java 8开始,接口中的常量可以省略public static final这些关键字,直接声明常量即可。Java中,接口中定义的常量默认都是被公开和静态的。这意味着无论哪个类、方法或者代码块都可以直接通过"接口名.常量名"的方式来访问接口中的常量。并且常量值无法被修改,可以在多线程环境下安全地共享。

  4. 从Java 8开始,接口可以包含默认方法,也称为扩展方法,方法用default修饰,这是一种有默认实现的接口方法。实现该接口的类可以选择重写默认方法,否则就会使用默认实现。

    default sayYeah(){
    System.out.println("yeah");
    }

  5. 接口中可以有内部类,注解和枚举类型。

哒哒


相关推荐
小李不想输啦19 分钟前
什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么
java·spring boot·微服务·eureka·架构
张铁铁是个小胖子19 分钟前
微服务学习
java·学习·微服务
ggs_and_ddu20 分钟前
Android--java实现手机亮度控制
android·java·智能手机
敲代码娶不了六花2 小时前
jsp | servlet | spring forEach读取不了对象List
java·spring·servlet·tomcat·list·jsp
Yhame.2 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
是小崔啊3 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel
mazo_command4 小时前
【MATLAB课设五子棋教程】(附源码)
开发语言·matlab
myNameGL4 小时前
linux安装idea
java·ide·intellij-idea
IT猿手4 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大4 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse