Marvel-Site Marvel-Site
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

Marvel

吾必当乘此羽葆盖车
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • Java

    • Java基础

      • Java基本概念与常识
      • Java基本语法
      • Java基本数据类型
      • Java包装类
      • Java基本概念对比辨析
        • 重载与重写的区别
        • Java的访问修饰符
        • 成员变量与局部变量的区别
        • 静态方法和实例方法的区别
        • ==和equals的区别
        • wait()和sleep()的区别
        • run()和start()的区别
        • 获取键盘输入的常用方法
        • foreach与for效率对比
        • 对象的相等与引用相等的区别
        • static可以修饰哪些内容
        • continue、break、return的区别
      • Java面向对象基础
      • Java异常处理
      • Java注解
      • Java泛型
      • Java反射
      • Java函数式编程
    • Java进阶

    • Java容器

    • Java并发编程

    • Java虚拟机

    • 常见面试题

  • 计算机基础

  • 框架|中间件

  • 架构

  • 后端
  • Java
  • Java基础
Marvel
2022-07-13
目录

Java基本概念对比辨析

# Java基本概念对比

# 重载与重写的区别

重载发生在同一个类中,具有相同的方法名,但是有不同的参数个数、参数位置。比如构造方法重载。

重写就是当子类继承父类的相同的方法,做出有别于父类的响应。

区别点 重载 重写
发生范围 同一个类中 子类中
参数列表 必须修改 不能修改
返回类型 可修改 不可修改
异常 可修改 可以减少或删除,不能抛出新的或更广的异常
访问修饰符 可修改 不能做更严格的限制
发生阶段 编译期 运行期

# Java的访问修饰符

访问修饰符 当前类 同一包内 子类(同一包) 子类(不同包) 其他包
public √ √ √ √ √
protected √ √ √ √
default √ √ √
private √

# 成员变量与局部变量的区别

  • 语法形式:成员变量属于类的,局部变量是在方法中定义的变量或是方法的参数;成员变量可被访问修饰符、static等修饰,而局部变量不能;成员变量和局部变量都能被final所修饰。
  • 变量在内存中的存储方式:static修饰的成员变量,这个变量是属于类的(称类变量);没有被static修饰的成员变量属于实例的(称实例变量)。而类变量存储在方法区中,对象及实例变量存在于堆中,局部变量存在栈中。
  • 变量在内存中的生存时间:成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而创建和消失。
  • 成员变量如果没有赋值,则会自动以类型的默认值(例外:被final修饰的成员变量必须显式的赋值),而局部变量则不会自动赋值。

# 静态方法和实例方法的区别

  • 外部调用静态方法时:可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而实例只能用“对象名.方法名”的方式,调用静态方法无需创建对象。
  • 静态方法在访问本类的成员时,只允许访问静态成员,而不可以访问非静态的变量和方法;实例方法则无此限制。

# ==和equals的区别

⭐ ==

基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址。

因为 Java 只有值传递,所以对于 == 来说,基本数据类还是引用数据类型,本质都是比较值,只是引用类型变量存的是对象的地址。

⭐ equals()

判断两个对象是否相等,不能用于比较基本数据类型,equals是存在于Object类中的方法。

public boolean equals(Object obj) {
	return (this == obj);
}
1
2
3

equals() 方法存在两种使用情况:

  • 类没有覆盖equals()方法,通过equals()比较两个对象时等价于 == 比较两个对象的地址

  • 类覆盖equals()方法,一般覆盖equals()方法比较两个对象的内容相等,相等返回true

# wait()和sleep()的区别

  1. sleep()属于Thread类,wait()方法属于Object类。
  2. 两者都可以暂停线程的执行。
  3. 最主要区别:sleep没有释放锁,wait释放锁。
  4. wait通常被用于线程间交互,sleep通常被用于暂停执行。
  5. 使用wait、notify、notifyAll只能在同步方法或同步代码块中使用。
  6. wait被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notfiy和notifyAll方法,或者使用wait(long timeout)超时后线程会自动苏醒。sleep方法执行后,线程会自动继续运行。

# run()和start()的区别

系统调用 start 方法来启动一个线程,该线程进入就绪状态。当 CPU 为该线程分配时间片时,就可以运行其中的 run 方法。

直接运行 run 方法,就会当初一个普通函数来使用,而不是线程执行体。

# 获取键盘输入的常用方法

  • 通过scanner

    Scanner input = new Scanner(System.in);
    String s = input.nextLine();
    input.close();
    
    1
    2
    3
  • 通过BufferedReader

    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    String s = input.readLine();
    
    1
    2

# foreach与for效率对比

对于for循环,是调用get(i)获取元素;对于foreach,是通过iterator实现的遍历,效率不同的原因主要是数据结构不同造成的。

对于ArrayList来说,它通过数组实现,可以随机存取,for和foreach循环效率差不多;

但是LinkedList是通过链表实现,for循环获取第i个元素必须从头开始遍历,而iterator遍历就是从头开始遍历,遍历完只需要一次,所以for循环需要的时间远远超过foreach。

# 对象的相等与引用相等的区别

  • 对象相等:内存中存放的内容是否相等

  • 引用相等:比较他们指向的内存地址是否相等。

# static可以修饰哪些内容

  • 类变量:被 static 修饰的成员变量叫类变量(静态变量),类变量属于类,它随类存储在方法区,并不随对象存储在堆中,类变量可以通过类名和对象名来访问。
  • 类方法:被 static 修饰的成员方法叫类方法(静态方法)。
  • 静态块:被 static 修饰的初始化块叫静态初始化块。属于类,它在类加载的时候被隐式调用一次,之后不再被调用。
  • 静态内部类:被 static 修饰的内部类叫静态内部类。可以包含静态成员,也可以包含非静态成员,静态内部类不能访问外部类的实例成员,只能访问外部类的静态成员。外部类的所有方法、初始化块都能访问其内部定义的静态内部类。

# continue、break、return的区别

  • continue:跳出当前循环,继续下一次循环。
  • break:跳出整个循环,执行循环下面的代码。
  • return:跳出所在方法,结束该方法的运行。
    • return;:结束该方法,无返回值
    • return value:有返回值的函数方法
编辑 (opens new window)
#Java
上次更新: 2023/08/20, 21:21:52
Java包装类
Java面向对象基础

← Java包装类 Java面向对象基础→

最近更新
01
位运算
05-21
02
二叉树
05-12
03
Spring三级缓存解决循环依赖
03-25
更多文章>
Theme by Vdoing | Copyright © 2022-2024 Marvel
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式