Connor学Java - Day03

2023-10-19 00:20
文章标签 java day03 connor

本文主要是介绍Connor学Java - Day03,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

Learn && Live

虚度年华浮萍于世,勤学善思至死不渝

前言

Hey,欢迎阅读Connor学Java系列,这个系列记录了我的Java基础知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/jDlMJ,话不多说我们马上开始!

1.抽象类和接口的区别?

总结成一句话就是,抽象类终究还是一个类,可以正常拥有类的成员、构造器、方法,还可以有抽象方法(注意是可以,也可以没有);而接口就不能看作一个类来对待,但应注意二者都不可实例化。

(1)抽象类中可以且必须定义构造函数,接口不能定义构造函数

(2)抽象类中可以有抽象方法和具体方法,而接口中只能有抽象方法

(3)抽象类中的成员权限可以是public、(default)、protected(private不可重写)

​ 接口成员变量默认public static final,方法默认public abstract

(3)抽象类中可以有静态方法,而接口中不可以有静态方法 ?

JDK8后的改变:

(1)接口中可以定义default修饰的默认方法,一种包含具体实现的方法,可由实现类的对象调用

(2)接口中可以定义静态方法,由接口名调用,但仍然不可以定义静态代码块

补充:

(1)abstract不可修饰属性、构造器

(2)abstract不可与static、private、final共存

(3)接口冲突:多个接口中定义了同名同参数的默认方法,且子类未重写该方法,编译报错

(4)类优先原则:一个类其父类和实现的接口中定义了同名同参数的方法,且子类未重写该方法,默认调用父类中的方法

2.变量

在这里插入图片描述

3.成员变量和局部变量的区别?

(1)声明位置不同。成员变量声明在类内,局部变量声明在方法内、方法形参、代码块内、构造器形参、构造器内

(2)权限修饰符。成员变量可指定四种权限修饰符,局部变量不可指定权限修饰符

(3)默认初始化值不同:成员变量由默认初始化值,局部变量没有默认初始化值,需要在声明时指定初始化值

(4)内存加载位置不同:成员变量中的实例变量加载到堆中,类变量加载到方法区的静态域中,局部变量存放在所在方法对应的栈帧中

4.实例变量和类变量的区别?

实例变量:存放在堆内,属于某一对象,需要先创建对象,然后通过对象才能访问

类变量:static变量。属于类,随着类的加载而加载,加载早于对象的创建;存放在方法区的静态域中,且只存放一份,可以实现让多个对象共享内存

5.数据类型、类型优先级、类型转换?

在这里插入图片描述

类型优先级

在这里插入图片描述

类型转换

(1)自动类型提升:优先级低的类型可自动转换为优先级高的类型。①小 + 大 → 大;②大 = 小

(2)强制类型转换:优先级高的类型需要强制转换为优先级低的类型

这里需要注意不同数据类型数值的差别,long l = 123(int → long)、float f = 12.3(double → float,需强制转换)

6.short s1 = 1;s1 = s1 + 1;有什么错?short s1 = 1;s1 += 1;有没有错误?

(1)short s1 = 1;s1 = s1 + 1;在s1 + 1运算时会自动提升类型为int,而将int型数据赋值给short型需要强制类型转换

(2)short s1 = 1;s1 += 1;针对+=及同类运算符,Java编译器会在需要时自动完成强制类型转换,s1 += 1实际上执行的是s1 = (short)(s1 + 1)

补充

如(1)情况的运算符:+、-、*、/、%

如(2)情况的运算符:+=、-=、*=、/=、%=、++、–

7.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

(1)JDK7之前,switch内可以是整数表达式或枚举常量,其中整数表达式最大可以是int及Integer(即byte、short、char、int及其对应的包装类),因此不能使用long和String

(2)JDK7之后,switch内除整数表达式和枚举常量,加上了String

8.基本数据类型与包装类?

(1)Byte、Short、Integer、Long、Float、Double、Boolean、Character,默认值为null,其中前六个的共同父类为Number

(2)自动装箱 / 自动拆箱:Java编译器在基本数据类型和对应的包装类之间做的一个转化

(3)基本数据类型、包装类、String之间的转换关系

在这里插入图片描述

9.Integer和int的区别?

(1)类型不同:int是Java的八种基本数据类型之一,而Integer是Java为int类型提供的封装类

(2)默认值不同:int型变量的默认值为0,Integer变量的默认值为null(Integer可用于判断未赋值还是值为0)

(3)Integer变量必须实例化后才可以使用,而int不需要

Integer与int的比较

(1)两个new生成的Integer变量:比较内存地址,不相等

(2)Integer变量和int变量:比较数值是否相等,Integer自动拆箱再进行比较,实际上就是两个int型变量在进行比较

(3)非new生成的Integer变量和new生成的Integer变量:比较内存地址,非new生成的Integer变量指向常量池中的对象,而new生成的Integer变量指向堆内存的对象,地址不同不相等

(4)两个非new生成的Integer变量:首先明确,Java在编译Integer i = 100时,会编译成Integer i = Integer.valueOf(100),看源码:

public static Integer valueOf(int var0) {return var0 >= -128 && var0 <= Integer.IntegerCache.high ? Integer.IntegerCache.cache[var0 + 128] : new Integer(var0);
} 

包装类的缓存机制:当通过自动装箱机制创建包装类对象时,首先会判断数值是否在区间[-128, 127]之间,若在则会从缓存(常量池中)中寻找这个值,若找到缓存,则直接指向该常量,否则,新建对象

因此,当变量的值在[-128, 127]之间是,比较的实际上是常量池对象的地址,其实也就是数值的内容是否相等;否则则会new生成Integer变量,此时比较地址,一定是不相等的

包装类的缓存

Boolean:全部缓存

Byte:全部缓存

Character:<= 127 缓存

Short:[-128, 127] 缓存

Long:[-128, 127] 缓存

Integer:[-128, 127] 缓存

Float:没有缓存

,一定是不相等的

包装类的缓存

Boolean:全部缓存

Byte:全部缓存

Character:<= 127 缓存

Short:[-128, 127] 缓存

Long:[-128, 127] 缓存

Integer:[-128, 127] 缓存

Float:没有缓存

Double:没有缓存

这篇关于Connor学Java - Day03的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236059

相关文章

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Spring Security6.3.x的使用指南与注意事项

《SpringSecurity6.3.x的使用指南与注意事项》SpringSecurity6.3.1基于现代化架构,提供简洁配置、增强默认安全性和OAuth2.1/OIDC支持,采用Lambda... 目录介绍基础配置 (Servlet 应用 - 使用 Lambda DSL)关键配置详解(Lambda DS

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL