type
status
date
slug
summary
tags
category
icon
password
😀
这才5月份,不少公司已经开始秋招了。我寻思着,这不应该是夏招吗。

📝 Java基础

 

Java起源

Java programming language具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的"形式和感觉",但它要比C++语言更易于使用,而且在编程时彻底采用了一种"以对象为导向"的方式。使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。
另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作,但 Applet 很早之前就被无情地拍死在了沙滩上。(已被弃用)
Java是Sun公司在1995年推出的,推出之后马上给互联网的交互式应用带来了新面貌。最常用的两种互联网浏览器软件中都包括一个Java虚拟机。几乎所有的操作系统中都增添了Java编译程序。后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。
 
Java分为三个体系:
  • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
  • JavaEE (J2EE) (Java 2 Platform,Enterprise Edition,java平台企业版)
  • JavaME (J2ME) (Java 2 Platform Micro Edition,java平台微型版)
 
Java的一些相关术语:
  • JDK(Java Development Kit)是用于开发 Java 应用程序的软件环境。里面包含运行时环境(JRE)和其他 Java 开发所需的工具,比如说解释器(java)、编译器(javac)、文档生成器(javadoc)等等。
  • JRE(Java Runtime Environment)是用于运行 Java 应用程序的软件环境。也就是说,如果只想运行 Java 程序而不需要开发 Java 程序的话,只需要安装 JRE 就可以了。
  • JVM (Java Virtual Machine) ,也就是 Java 虚拟机,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成,屏蔽了不同操作系统(macOS、Windows、Linux)的差异性,使得 Java 能够“一次编译,到处运行”。
 
notion image

第一个Java程序

 
java程序的执行基础命令的解析。 依次执行以下命令
😀
javac 后面跟着的是java文件的文件名,例如 HelloWorld.java
该命令用于将java源文件编译为class字节码文件,如:javac HelloWorld.java
运行javac命令后,如果成功编译没有错误的话,会出现一个 HelloWorld.class 的文件。
notion image
java 后面跟着的是java文件中的类名,例如 HelloWorld 就是类名,如: java HelloWorld
notion image
注意:java命令后面不要加.class
 
通过 java 命令运行字节码(比如说 java HelloWorld),2种不同的处理方式
①、逐条解释执行:
逐条解释执行是 Java 虚拟机的基本执行模式。在这种模式下,Java 虚拟机会逐条读取字节码文件中的指令,并将其解释为对应的底层操作。
逐条解释执行的特点:
  • 实现简单
  • 启动速度较快
  • 执行效率较低
②、JIT 即时编译:
为了提高 Java 程序的执行效率,Java 虚拟机引入了即时编译技术。在 JIT 模式下,Java 虚拟机会在运行时将频繁执行的字节码编译为本地机器码,这样就可以直接在硬件上运行,而不需要再次解释。
JIT 即时编译的特点:
  • 提高执行效率
  • 编译热点代码
  • 动态优化
 
实际上,现代 Java 虚拟机(如 HotSpot)通常会结合这两种执行方式,即解释执行和 JIT 即时编译。在程序运行初期,Java 虚拟机会采用解释执行,以减少启动时间。随着程序的运行,Java 虚拟机会识别出热点代码并使用 JIT 编译器将其编译为本地机器码,从而提高程序的执行效率。这种结合策略称为混合模式。
在这里提一下,参数args的作用:
参数args是Java编译器要求必须做的,用来存储命令行参数的。
notion image
 
注意点
  1. Java对大小写特别敏感。A和a不相同。
  1. 类名,类名首字母大写,若是由若干单词组成,每个单词的首字母大写。HelloWord
  1. 方法名,所有方法名以小写字母开头,如果方法名含有若干单词,则后面的每个单词首字母大写。myAction
  1. 源文件名,源文件名必须与类名相同,文件名必须与public的类名相同。
所有的Java程序都由 public static void main(String[] args)方法开始执行。

基础语法

Java标识符

简单来记,自己起了名字的都可以称为标识符,如类名,方法名,变量名。
命名规范(驼峰命名法)
  • 项目的命名:项目的命名全部小写
  • 包的命名:package 的名字由全部小写的字母组成,例如:com.test
  • 类名和接口名:每个单词首字母大写,其余小写,例如:public class MyClass{}
  • 方法名:方法的名字用一个小写字母开头,后面的单词用大写字母开头,例如:run(),getBalance()。
  • 变量名:变量的名字用一个小写字母开头,后面的单词用大写字母开头,例如:index,currentImage。
  • 常量名:基本数据类型的常量名使用全部大写,单词之间使用下划线分割。例如:public static final String GAME_COLOR="RED";
 
注意点:
  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
  • 关键字不能用作标识符
  • 标识符是大小写敏感的
  • 合法标识符举例:age、$salary、_value、__1_value
  • 非法标识符举例:123abc、-salary
  • "$"尽量不要在代码中出现。(是由于在后面内部类中,编译后会出现$符号)
命名时,尽量不要使用中文及拼音命名。😆😆😆
 
这里列举一些常见的Java关键字。
类别
关键字
说明
访问控制
private
私有的,表示方法或变量只对当前类可见。
protected
受保护的,表示方法或变量对同一包内的类和所有子类可见。
public
除了可以声明方法和变量(所有类可见),还可以声明类。main() 方法必须声明为 public。
default
默认
类、方法和变量修饰符
abstract
声明抽象类,抽象方法
class
enum
定义一组固定的常量(枚举)
extends
一个类是从另一个类或接口继承的。
final
最终值、不可改变的. final 变量:表示一个常量,一旦被赋值,其值就不能再被修改。 final 方法表示一个不能被子类重写的方法。 final 类表示一个不能被继承的类。这在设计类时,确保其不会被其他类继承时非常有用。 String类就是final的。
implements
实现(接口)
interface
用于声明接口。会定义一组方法的签名(即方法名、参数列表和返回值类型),但没有方法体。其他类可以实现接口,并提供方法的具体实现。
native
本地、原生方法(非 Java 实现),本地方法是指在 Java 代码中声明但在本地代码(通常是 C 或 C++ 代码)中实现的方法,它通常用于与操作系统或其他本地库进行交互。 public native void Method();
new
创建一个新的对象。
static
静态,表示该变量或方法是是静态方法或静态变量
strictfp
严格浮点、精准浮点,通常用于修饰一个方法,用于限制浮点数计算的精度和舍入行为。
synchronized
线程、同步,用于指定多线程代码中的同步方法。变量或代码块。
transient
修饰的字段不会被序列化。
volatile
保证不同线程对它修饰的变量进行操作时的可见性,即一个线程修改了某个变量的值,新值对其他线程来说是立即可见的。
程序控制语句
break
跳出循环,程序将立即跳出当前循环或 switch 语句,继续执行紧跟在循环或 switch 语句后面的代码。
case
定义一个值以供 switch 选择
continue
继续,用于继续下一个循环,可以在指定条件下跳过其余代码。
do
运行,通常和 while 关键字配合使用,do 后紧跟循环体。不同之处在于 do-while 循环会先执行循环体中的代码,然后再检查循环条件。因此,do-while 循环至少会执行一次循环体中的代码
else
否则
for
循环
if
如果,如果条件为真,则执行对应代码。
instanceof
实例,用于判断对象是否属于某个类型或者子类的实例。
return
返回,从方法中返回一个值或终止方法的执行 return 语句可以将方法的计算结果返回给调用者,或者在方法执行到某个特定条件时提前结束方法。
switch
根据值选择执行,switch 语句通常与 case 和 default 一起使用。每个 case 子句表示一个可能的值和对应的代码块,而 default 子句用于处理不在 case 子句中的值。
while
循环
错误处理
assert
断言表达式是否为真
catch
捕捉异常,在 try 块中可能会抛出异常,而在 catch 块中可以捕获这些异常并进行处理。catch 块可以有多个,每个 catch 块可以捕获特定类型的异常。
finally
和 try-catch 配合使用,表示无论是否处理异常,总是执行 finally 块中的代码。
throw
抛出一个异常对象,主动抛出。
throws
声明一个异常可能被抛出
try
捕获异常
包相关
import
引入,用于导入对应的类或者接口。
package
基本类型
boolean
布尔型,即真或假
byte
字节型,用于表示一个 8 位(1 字节)有符号整数。它的值范围是 -128(-2^7)到 127(2^7 - 1)。
char
char 类型的变量可以存储任意的 Unicode 字符,可以使用单引号将字符括起来来表示。char c = 'A';
double
双精度浮点。 在 Java 中,浮点数默认是 double 类型,如果要使用 float 类型的数据,需要在数字后面加上一个 f 或者 F,表示这是一个 float 类型的字面量。另外,也可以使用科学计数法表示浮点数,例如 1.23e-4 表示 0.000123。
float
单精度浮点
int
整型
long
长整型
short
短整型,占用 2 个字节(16 位)的内存空间。
变量引用
super
父类、超类,调用父类的方法或者字段。
this
本类,用于在方法中引用当前对象。
void
无返回值
保留关键字
goto
是关键字,但不能使用
const
是关键字,但不能使用,在 Java 中可以使用 public static final 三个关键字的组合来达到常量的效果。
Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。
 
 
 

Java变量

变量就是指代在内存中开辟的存储空间,用于存放运算过程中需要用到的数据。
声明变量
变量必须先声明后使用,相同的变量只能声明一次。
未经声明的变量不能使用,直接使用会有编译错误。
notion image
同时声明变量后,该变量只能存储制定好的数据类型的的数据,否则会产生编译错误。
notion image
变量的命名
命名规则:
  1. 满足标识符的命名规则;
  1. 符合驼峰法命名规范;
  1. 尽量简单,做到见名知意;
 
变量的类型
成员变量
  • 成员变量定义在类中,在整个类中都可以被访问。
  • 成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
  • 成员变量有默认初始化值。
局部变量
  • 局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
  • 局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
  • 局部变量没有默认初始化值
静态变量
  • 静态变量随着类的加载而存在,随着类的消失而消失。
  • 静态变量可以被对象调用,还可以被类名调用。
  • 静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
在使用变量时需要遵循的原则为:就近原则. 首先在局部范围找,有就使用;接着在成员位置找。
成员变量
局部变量
静态变量
定义位置
在类中,方法外
方法中,或者方法的形式参数
在类中,方法外
初始化值
有默认初始化值
无,先定义,赋值后才能使用
有默认初始化值
调用方式
对象调用
---
对象调用,类名调用
存储位置
堆中
栈中
方法区
生命周期
与对象共存亡
与方法共存亡
与类共存亡
别名
实例变量
---
类变量
初始化值如下图:
数据类型
默认值
大小
boolean
false
1 比特
char
'\u0000'
2 字节
byte
0
1 字节
short
0
2 字节
int
0
4 字节
long
0L
8 字节
float
0.0f
4 字节
double
0.0
8 字节
 
 

Java注释

 
notion image
 
单行注释
单行注释通常用于解释方法内某单行代码的作用。
 
多行注释
多行注释通常用于解释一段代码的作用,以 /* 开始,以 */ 结束。(一般用的很少,都用这了,不如选择用文档注释哈哈。)
 
文档注释
文档注释可用在三个地方,类、字段和方法,也是解释一段代码的作用。
创建文档注释
1.在终端找到对应文件的路径。
2.执行javadoc命令,
notion image
3.生成了许多的代码文件,通过浏览器打开看文档注释。
notion image
 
notion image
 
 
 
文档注释注意点:
  • javadoc 命令只能为 public 和 protected 修饰的字段、方法和类生成文档。default 和 private 修饰的字段和方法的注释将会被忽略掉。
  • 文档注释中可以插入一些 @ 注解,比如说 @see 引用其他类,@version 版本号,@param 参数标识符,@author 作者标识符,@deprecated 已废弃标识符等等。
 
 
注释规约
  1. 类、字段、方法必须使用文档注释,不能使用单行注释和多行注释。因为注释文档在 IDE 编辑窗口中可以悬浮提示,提高编码效率。
  1. 所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、 异常说明外,还必须指出该方法做什么事情,实现什么功能。
  1. 所有的类都必须添加创建者和创建日期。
  1. 所有的枚举类型字段必须要有注释,说明每个数据项的用途。
  1. 代码修改的同时,注释也要进行相应的修改。
 

Java数据类型

 
notion image
 
😀
比特和字节
  • bit(比特)
    • 比特是信息技术最基本存储单位。
      二进制的一位就是1 bit,bit要么为1要么为0.
  • Byte(字节)
    • notion image
      目前说动字节,计算机同学是不是第一时间想到的是这个。 😂
      通常来说,一个英文字符是一个字节,一个中文字符是两个字节。
      1 byte(字节) = 8 bit(比特)
       
      notion image
       
 
基本数据类型
  1. 布尔型
    1. 布尔(boolean)仅用于存储两个值:true 和 false,也就是真和假,通常用于条件的判断。
  1. char
    1. char 用于表示 Unicode 字符,占 16 位(2 字节)的存储空间,取值范围为 0 到 65,535。
      notion image
  1. byte
    1. 一个字节可以表示 2^8 = 256 个不同的值。由于 byte 是有符号的,它的值可以是负数或正数。(一般在网络传输过程中,采用字节来作为数据的传输方式。)
  1. short
    1. short也是有符号的,可以表示负数或正数,其取值范围在 -32,768 和 32,767 之间。
  1. int
    1. 最为常用的整型类型,int 的取值范围在 -2,147,483,648(-2 ^ 31)和 2,147,483,647(2 ^ 31 -1)(含)之间。
       
      为什么 32 位的有符号整数的取值范围是从 -2^31 到 2^31 - 1 呢?
      这是因为其中一位用于表示符号(正或负),剩下的 31 位用于表示数值,这意味着其范围是 -2,147,483,648(即 -2^31)到 2,147,483,647(即 2^31 - 1)。
      在二进制系统中,每个位(bit)可以表示两个状态,通常是 0 和 1。对于 32 位得正二进制数,除去符号位,从右到左的每一位分别代表 2^0, 2^1, 2^2, ..., 2^30,这个二进制数转换为十进制就是 2^0 + 2^1 + 2^2 + ... + 2^30,也就是 2,147,483,647.
       
  1. long
    1. long 型变量在声明的时候,末尾要带上大写的“L”,以便于和int 区分。
      long取值范围为 -9,223,372,036,854,775,808(-2^63) 和 9,223,372,036,854,775,807(2^63 -1)(含)之间。
       
      notion image
  1. float
    1. float 是单精度的浮点数(单精度浮点数的有效数字大约为 6 到 7 位),32 位(4 字节).
      float型变量在声明的时候,末尾要带上小写的“f”。
  1. double
    1. double 是双精度浮点数(双精度浮点数的有效数字大约为 15 到 17 位),占 64 位(8 字节).
      notion image
       
      double float 都不适合用于精确的数值,例如金额,交易这种。 一般采用 BigDecimal类来避免浮点数舍入误差。BigDecimal 可以表示一个任意大小且精度完全准确的浮点数。 如果是精确到小数点两位这种(0.01),可以乘以100,转换成整型处理。
       
基本数据类型转换
 
Java 提供了以下包装器类型,与基本数据类型一一对应:
  • Byte(对应 byte)
  • Short(对应 short)
  • Integer(对应 int)
  • Long(对应 long)
  • Float(对应 float)
  • Double(对应 double)
  • Character(对应 char)
  • Boolean(对应 boolean)
 
1.int类型和char类型转换
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🤗 总结归纳

总结文章的内容

📎 参考文章

  • 一些引用
  • 引用文章
 
💡
欢迎您在底部评论区留言,一起交流~
 
策略模式生成器模式
  • Twikoo
  • Giscus
  • Cusdis
Nolan
Nolan
靠天吃饭自由人🍚
公告
🎉欢迎来到阿豪的小站🎉
😊大家好,我是阿豪
🌱热爱看书、冥想、听播客、徒步
👯喜欢交朋友,很高兴能认识你!
免责声明
⚠️本站所有内容仅代表作者个人观点。内容仅供学习和交流使用,可以转载,但请注明出处。
⚠️用户使用信息时请自行核实,本站不对信息的准确性、完整性或使用后果承担责任。遵守相关法律法规,不得用于非法目的。
 
2023-2024 Nolan.

NotionNext BLOG | 靠天吃饭自由人🍚

Powered by Nolan.