Java基础简单整理

文章目录

    • Java语言具有以下特点:
    • Java SE vs Java EE
    • JVM vs JDK vs JRE
    • 为什么说 Java 语言编译与解释并存?
    • Java 和 C++ 的区别?
    • Java注释用法:
    • Java标识符
    • Java基本数据类型链接
    • Java字符串类型链接
    • 基本类型和包装类型的区别?
    • 静态方法为什么不能调用非静态成员?
    • 区分java中的重写,覆盖,重载,以及他们与继承多态之间的关系
    • Java面向对象的三大特性链接
    • 接口和抽象类有什么共同点和区别?[(链接)](https://blog.csdn.net/weixin_51407397/article/details/127168386)
    • 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
    • java中String、StringBuffer和StringBuilder的区别
    • [Java基础 ==和equals的区别](https://blog.csdn.net/you297043284/article/details/104832360)
    • 字符串常量池
    • 异常相关
    • IO流视频链接
    • IO流文章链接

Java语言具有以下特点:

  1. 简单易学:Java语法相对简洁,采用了C/C++的语法风格,学习起来相对容易。

  2. 面向对象:Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的特性。

  3. 平台无关性:Java程序可以在不同的操作系统上运行,只需要在目标系统上安装对应的Java虚拟机(JVM)即可。

  4. 垃圾回收:Java具有自动垃圾回收机制,开发人员不需要手动管理内存,减轻了编程负担。

  5. 强类型检查:Java是一种强类型语言,对变量的类型进行严格的检查,减少了类型转换错误的可能性。

  6. 高性能:Java通过JIT(Just-In-Time)编译器将字节码转换为机器码,可以获得较高的运行性能。

  7. 大量的类库:Java拥有丰富的类库,提供了各种功能的API,如图形界面、网络编程、数据库访问等。

  8. 安全性:Java对程序运行的安全性有着严格的控制,提供了安全管理机制,可以防止恶意代码的执行。

  9. 多线程支持:Java内置了多线程的支持,使得并发编程变得简单,并能充分利用多核处理器的优势。

总的来说,Java是一种功能强大、易学易用、安全可靠的编程语言,广泛应用于各个领域,特别适用于开发大型、复杂的软件系统。

Java SE vs Java EE

  • Java SE适用于开发常规的独立应用程序,而Java EE适用于开发大型、复杂的企业级应用程序。
  • Java SE提供了基本的功能和API,而Java EE提供了更多的企业级开发和部署相关的技术规范和组件。

JVM vs JDK vs JRE

  • JVM (Java Virtual Machine)
    是Java平台上的虚拟机,它是Java程序运行的环境。JVM负责将Java字节码翻译成机器码,并在运行时管理内存和执行程序。通过JVM,Java程序可以在不同的操作系统上运行,只需要安装对应平台的JVM即可。

  • JRE (Java Runtime Environment)
    是Java运行时环境,包含了JVM和Java类库。JRE用于在计算机上运行已经编译好的Java程序,不包含开发工具。如果只需要运行Java程序而不需要开发,可以安装JRE。

  • JDK (Java Development Kit)
    是Java开发工具包,包含了开发Java应用程序所需的工具和库。JDK包括了JRE、编译器、调试器、开发工具等,可以用于开发和编译Java程序。
    在这里插入图片描述

简而言之,JVM是Java程序运行的环境,JDK是用于开发Java程序的工具包,而JRE是用于运行已编译好的Java程序的环境。

为什么说 Java 语言编译与解释并存?

在这里插入图片描述

这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

Java 和 C++ 的区别?

  1. 语法:Java是一种面向对象的编程语言,它的语法相对简单,代码结构清晰。C++则是一种多范式的编程语言,既支持面向对象编程,也支持过程式编程和泛型编程,语法相对复杂一些。

  2. 内存管理:Java使用垃圾回收机制来管理内存,开发人员不需要手动分配和释放内存,这样可以减少内存泄漏等问题。而C++需要手动管理内存,开发人员需要显式地分配和释放内存,这在一定程度上增加了编程的复杂性。

  3. 平台依赖性:Java是一种平台无关的编程语言,它的代码可以在不同的操作系统上运行。而C++是一种编译型语言,它的代码需要根据不同的操作系统进行编译,生成特定平台的可执行文件。

  4. 异常处理:Java有自己的异常处理机制,开发人员可以捕获和处理异常,确保程序的稳定性。而C++也有异常处理机制,但在实践中,C++更倾向于使用返回值来处理错误。

  5. 应用领域:Java通常用于开发跨平台的桌面应用程序、Web应用程序、移动应用程序和嵌入式系统等。而C++则更适合用于系统级编程、游戏开发、嵌入式系统和性能要求较高的应用。

Java注释用法:

  1. 单行注释:
int x = 10; // 定义一个整数变量x并赋值为10
  1. 多行注释:
/*
这是一个示例的多行注释
用于解释下面代码块的作用
*/
int y = 20; // 定义一个整数变量y并赋值为20
int z = x + y; // 计算x和y的和并赋值给变量z
  1. 文档注释:
/*** 这是一个示例的方法* 用于计算两个整数的和并返回结果* @param a 第一个整数* @param b 第二个整数* @return 两个整数的和*/
public int add(int a, int b) {return a + b;
}

Java标识符

  • 用来标识变量、方法、类和其他实体的名称。

以下是Java标识符的规则:

  1. 标识符可以由字母(A-Z或a-z)、数字(0-9)、下划线(_)和美元符号($)组成。
  2. 标识符必须以字母、下划线或美元符号开头,不能以数字开头。
  3. 标识符的长度没有限制,但是要注意保持命名的合理长度以增加代码的可读性。
  4. Java是大小写敏感的,所以标识符中的大小写字母是有区别的。
  5. 不能使用Java的关键字(如if、for、while等)作为标识符。
  6. 标识符不能包含空格或特殊字符(如@、#、%等)。

Java基本数据类型链接

Java字符串类型链接

  • 在Java中,String类型是一种引用类型,而不是基本数据类型。当我们声明一个String类型的变量时,如果没有明确为其赋初值,它的默认值会是null。

例如:

String name;
System.out.println(name);  // 输出null
  • 需要注意的是,null表示引用类型变量没有引用任何对象,它并不是一个空字符串。
  • 如果我们尝试对一个null引用进行操作,例如调用其方法或访问其属性,会导致NullPointerException异常。

如果我们希望将String类型的变量初始化为空字符串,可以使用空字符串字面值""来进行赋值操作。

例如:

String name = "";
System.out.println(name);  // 输出空字符串

通过将String类型变量初始化为空字符串,我们可以确保在后续操作中不会出现NullPointerException异常。

基本类型和包装类型的区别?

  • 用途:除了定义一些常量和局部变量之外,我们在其他地方比如方法参数、对象属性中很少会使用基本类型来定义变量。并且,包装类型可用于泛型,而基本类型不可以。
  • 存储方式:基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。
  • 占用空间:相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小。
  • 默认值:成员变量包装类型不赋值就是 null ,而基本类型有默认值且不是 null。
  • 比较方式:对于基本数据类型来说,== 比较的是值。对于包装数据类型来说,==比较的是对象的内存地址。所有整型包装类对象之间值的比较,全部使用 equals() 方法。

静态方法为什么不能调用非静态成员?

  • 静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。
  • 非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的实例对象去访问。
  • 如果在静态方法中需要访问非静态成员,可以通过创建对象实例来访问,或者将非静态成员设置为静态,使其与类相关联。
  • 另外,静态方法只能访问静态成员,这是因为静态成员在类加载时就已经存在了,而非静态成员需要通过对象实例才能访问。

区分java中的重写,覆盖,重载,以及他们与继承多态之间的关系

  • 重写(Override):指子类重新定义了从父类继承而来的方法,具有相同的方法名、参数列表和返回类型。重写的目的是为了改变方法的实现方式,使其适应子类的特定需求。在运行时,当调用该方法时,会根据实际对象的类型来确定调用的方法。重写是实现多态的一种方式。

  • 覆盖(Overwrite):与重写概念相似,指子类重新定义了从父类继承而来的方法。覆盖是重写的一种特殊情况,当子类方法与父类方法具有相同的方法名、参数列表和返回类型,并且使用@Override注解来标注时,可以确保在编译时检查是否正确覆盖了父类方法。覆盖也是实现多态的一种方式。

  • 重载(Overload):指在一个类中定义多个方法,它们具有相同的方法名但参数列表不同(参数个数、参数类型或参数顺序)。重载的目的是为了提供更多的方法选择,以适应不同的参数情况。在编译时根据传入的参数类型和数量来决定调用哪个方法。重载与重写和覆盖无直接关系,它是在同一个类中定义多个方法的特性。

  • 继承允许子类继承父类的属性和方法,通过重写和覆盖可以修改继承的方法的实现,实现多态。

  • 多态是指同一类型的对象在不同的情况下会表现出不同的行为。

  • 重载用于在同一个类中根据不同的参数选择不同的方法,提供更多的方法选择。

Java面向对象的三大特性链接

接口和抽象类有什么共同点和区别?(链接)

共同点:

  • 都不能被实例化。
  • 都可以包含抽象方法。
  • 都可以有默认实现的方法(Java 8 可以用 default 关键字在接口中定义默认方法)。

区别:

  • 接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。
  • 抽象类主要用于代码复用,强调的是所属关系。
  • 一个类只能继承一个类,但是可以实现多个接口。
  • 接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象类的成员变量默认default,可在子类中被重新定义,也可被重新赋值。

深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

java中String、StringBuffer和StringBuilder的区别

Java基础 ==和equals的区别

字符串常量池

  • 在Java中,字符串常量池是一个特殊的内存区域,用于存储字符串对象。
  • 当创建一个字符串对象时,Java会首先检查字符串常量池中是否已经存在相同内容的字符串对象。
  • 如果存在相同内容的字符串对象,Java会直接返回已存在对象的引用。这个引用是存储在栈内存中的,以便在方法调用或表达式中使用。
  • 如果不存在相同内容的字符串对象,Java会在字符串常量池中创建一个新的字符串对象,并将其引用返回。这个引用也是存储在栈内存中的。
  • 需要注意的是,字符串常量池是一个特殊的内存区域,它是位于堆内存中的。
  • 在Java中,字符串常量池的位置和存储方式是由Java虚拟机(JVM)实现决定的,并且可能因不同的JVM实现而有所不同。
  • 因此,具体的实现细节可能会有所差异。但是,无论如何,返回的引用都是存储在栈内存中的,以便在程序中使用。

异常相关

IO流视频链接

IO流文章链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可以动态改变刻度背景色的车速仪表盘

最近做的项目的主页面需要用到一个仪表盘来动态显示车速,同时改变对应的背景色 仪表盘 开始是想着使用echarts,修修改改拿来用,但是人家客户有规定,必须搞个差不多的,那没办法,自 己动手搞个吧 截图如下&am…

SDI-12协议与STM32 进行uart通信

场景是用stm32与一款温湿度传感器通信,不过是基于SDI-12协议,SDI-12时序和UART类似,故采用UART传输,原理图如下 其中DIR_OUT_SDI是一个IO引脚,控制UART_TX_SDI是否使能,U10是三态门IC,即拉低DIR…

AI文章,AI文章生成工具

在互联网时代,随着信息爆炸式增长,文章的需求愈发旺盛。从博客、新闻、社交媒体到企业宣传,文字作为传达信息、吸引受众的工具变得愈发重要。但问题是,对于很多人来说,创作一篇高质量的文章并不容易。时间、创意、写作…

【c语言的函数指针介绍】

C语言中的函数指针是一种特殊的指针,它指向函数而不是数据。函数指针允许你在运行时动态地选择要调用的函数,这使得你可以根据需要在不同的函数之间切换,或者将函数作为参数传递给其他函数。函数指针的声明和使用如下: 声明函数指…

Tomcat多实例、负载均衡、动静分离

Tomcat多实例部署 安装jdk [rootlocalhost ~]#systemctl stop firewalld.service [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /opt [rootlocalhost opt]#ls apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh [rootlocalhost opt]#tar xf jdk-8u91-linu…

荣耀时刻!2023抖音电商作者峰会为优质直播间和卓越生态伙伴颁奖

9月27日,抖音电商在上海举行了以“向新成长”为主题的2023抖音电商作者峰会,并现场颁发了荣誉奖项。抖音电商优质直播间以及践行抖音电商作者精神四个维度的年度荣誉一一揭晓。 过去一年,数百万作者与众多品牌商家、MCN机构和精选联盟服务商…

打造卓越摄影作品,尽享专业级编辑体验——DxO PhotoLab 7 for Mac

DxO PhotoLab 7 for Mac 是一款功能强大的专业照片编辑软件,为摄影爱好者和专业摄影师提供了优秀的工具和功能,让您能够轻松打造卓越的摄影作品并实现专业级的编辑效果。 DxO PhotoLab 7 提供了一套先进的图像处理算法,能够准确地还原照片的…

ORACLE 在内存管理机制上的演变和进化

截止目前,计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中,已成为当前各种软件和应用程序提高数据访问性能,减少访问延迟的最为有效的途径。 然而,内存作为关键的计算资源&am…

K8S-存储卷,pv,pvc

pv,pvc 一、emptyDir存储卷1.概述2.示例 二、hostPath存储卷1.概述 三、nfs共享存储卷1.在stor01节点上安装nfs,并配置nfs服务2.master节点操作3.在nfs服务器上创建index.html4.master节点操作 四、PVC 和 PV1.概述2.PV和PVC之间的相互作用遵循的生命周期…

基于Java的传统文化宣传平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

python接口自动化(一)--什么是接口、接口优势、类型(详解)

简介 经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚。接下来先看一…

Ci2451-2.4g无线MCU收发芯片

Ci2451 是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分缩短2.4GHz无线产品设计周期并优化产品成本。 添加图片注释,不超过 140 字(可选&#xff…

005:根据股票代码和起始日期获取K线数据

我们改进《001》中的部分,因为他他没法在可视化界面输入信息,这样太麻烦。我们设法在可视化界面输入股票代码和起始日期,这样可以灵活得多。这部分,我们仍旧只获取日K线的数据。 import tkinter as tk from tkinter import messa…

Spring Cloud Gateway实战WebFlux解析请求体及抛出指定错误代码和信息

概述 基于Spring Cloud开发微服务时,使用Spring Cloud原生自带的Gateway作为网关,所有请求都需要经过网关服务转发。 为了防止恶意请求刷取数据,对于业务请求需要进行拦截,故而可在网关服务增加拦截过滤器。基于此,有…

【C语言】快速排序

文章目录 一、hoare版本二、挖坑法三、前后指针法四、非递归快排五、快速排序优化1、三数取中选key值2、小区间优化 六、代码测试 一、hoare版本 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素…

蓝桥杯每日一题2023.9.27

4408. 李白打酒加强版 - AcWing题库 题目描述 题目分析 对于这题我们发现有三个变量,店,花,酒的数量,对于这种范围我们使用DP来进行分析。 dp[i][j][k]我们表示有i个店,j朵花,k单位酒的集合&#xff0c…

Databend 源码阅读:配置管理

作者:尚卓燃(PsiACE)澳门科技大学在读硕士,Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer https://github.com/PsiACE 对于 Databend 这样复杂的数据库服务端程序,往往需要支持大量的可配置选项&am…

PTA程序辅助实验平台——2023年软件设计综合实践_3(分支与循环)

第一题:7-1 印第安男孩 - C/C 分支与循环 朵拉编程的时候也想顺便练习英语。她编程从键盘读入一个整数n,如果n值为0或者1,向屏幕输出“0 indian boy.”或“1 indian boy.”;如果n大于1,比如9,则输出“9 in…

查看Linux系统信息的常用命令

文章目录 1. 机器配置查看2. 常用分析工具3. 常用指令解读3.1 lscpu 4. 定位僵尸进程5. 参考 1. 机器配置查看 # 总核数物理CPU个数x每颗物理CPU的核数 # 总逻辑CPU数物理CPU个数x每颗物理CPU的核数x超线程数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| w…

GaussDB数据库SQL系列-游标管理

目录 一、前言 二、概述(GaussDB) 1、游标概述 2、游标的使用分类 三、GaussDB中的显式游标(示例) 1、显式游标的使用与操作步骤 2、显式游标示例 四、GaussDB中的隐式游标(示例) 1、隐式游标简介…