banner
Onei

Onei

github
nintendo switch
discord server
steam
pixiv
bento
follow

☕ Java 入门

🏗️ Java 技术栈#

  • 程序基础
  • 面向对象
  • 数组
  • 异常机制
  • 常用 API
  • 集合 + Map
  • IO 流
  • 多线程
  • 网络编程
  • 正则表达式
  • lambda 表达式 + 函数式接口
  • 反射机制
  • GUI

📌 Java 方向#

  • JavaSE
  • JavaME
  • JavaWEB
  • JavaEE

🔰 Java 特性#

  • 多线程
  • 跨平台
  • 面向对象
  • 自动垃圾回收

Java 属于静态强类型解释性语言
静态类型 创建变量时指定数据类型
动态类型 创建变量时无需指定数据类型 运行后赋值时确定数据类型
强类型 需通过强制转换类型 转换类型
弱类型 根据程序上下文环境自动修改数据类型
编译型 使用编译器来编译执行的编程语言
解释型 使用解释器来解释执行的编程语言

javacjava

xxx.java ----->xxx.class ----->Hello World

Windows/Linux/MacOS

  • 运行:运行时 JVM 开机,将所运行的类载入内存空间中的静态区
    • 加载完成后,JVM 会自动调用该类的 main 方法 (只要是方法调用,就会在栈内存中开辟栈帧并压栈)
    • 如果 main 方法中,有别的方法调用
      • 如果调用的是其他类中的方法,则先把对应类加载到静态区,然后再栈内存中开辟栈帧
      • 如果调用的是当前类中的方法,则直接在栈内存开辟栈帧
    • 如果被调用的方法中,还有其他方法调用,则继续开辟栈压栈,一直到栈顶元素,执行完成弹栈 返回上一个栈继续执行
    • 直到main 栈帧弹栈,则整个程序生命周期终止

💾 结构#

内存存储#

电子位 bit 八位 一字节

最高位为符号位

内存划分#

静态区 / 方法区#

保存静态资源文件 例如静态变量 方法 运行时的 class 文件等

VM 栈#

以栈数据结构为模型创建的一块空间
主要用于执行方法
结构特征 先进后出

  • 栈顶元素 最后放进去的元素
  • 栈底元素 第一个放进去的元素
  • 栈帧 栈数据结构中的元素

压栈 把栈帧放到栈空间的过程
弹栈 把栈帧在栈空间弹出去的过程
每当调用一个方法的时候,该方法就会在栈内存中开辟一个栈,并压栈到栈空间。开始执行,方法执行完后 弹栈 栈销毁

堆内存#

保存类对象和成员变量及成员方法

🧾 数据类型#

基本数据类型#

  • 数值型
    • 整数型
      • byte 8bit
      • short 16bit
      • int 32bit
      • long 64bit
    • 浮点型
      • float 32bit
      • double 64bit
  • 布尔型 boolean
  • 字符型 char

注意 ⚠️

  • byte
    取值 127~-128
  • short
    取值 32767~-32768
  • int
    取值 2147483647~-2147483648
  • long
    需要以Ll结尾
  • float
    需要以Ff结尾
    由于 float 采用科学计数法进行存储 float 的 32 位存储量远大于long 的 64 位
  • double
    需要以Dd结尾 或不写
  • boolean
    只有 truefalse
  • char
    使用单引号表示 并且有且只有一个字符
    char 范围 0~65535 不需要负数
    支持 Unicode 编码 4bit 十六进制整型值 0~f \u0000 ~ \uffff

引用数据类型#

  • 数组
  • 接口

字符串#

\ 转义符
+ 字符串拼接符

💱 类型转换#

布尔型 不能参与转换

  • 低精度到高精度 可以自动类型转换
  • 高精度 到低精度 需要强制类型转换

自动类型转换#

byte --> short --> int --> long --> float --> double

char --> int --> long --> float --> double

强制类型转换#

多出的高位部分被截断 有可能损失精度
整数转换为 char 时 当不考虑符号位时 对应的是 65271
整数转换为 char 时 忽略负数 将响应负数的二进制转换为对应的正数 然后再进行 ASCII 码对照

多类型混合运算#

当进行多类型混合运算时 结果为参与运算的最大类型
当混合运算类型只出现了 byte short int char 四种类型时
任意一种或多种进行运算,结果一定是 int 类型 (可以理解为混合运算的结果为参与运算的最大类型,但最低也是 int 类型)

💬 注释#

单行注释

// XXX

多行注释

/*
 * XXX
 * YYY
 */
/**
 * XXX
 * YYY
 */

可生成 Javadoc 文档

📛 命名#

强制规则 只允许使用大小写字母、$_ 、数字(数字不能开头)不能使用关键字和保留字
非强制规则 驼峰命名 见名之意

💩 变量#

全局变量#

全局变量一般是指可以直接调用,不需要二次引用的变量
Java 中不存在全局变量

变量声明#

使用数据类型划分内存空间 给空间取名,并赋值

变量分类#

分为四类

  • 局部变量 在方法中写的变量
    无初始值 需初始化
  • 静态变量 在类体中 被 static 修饰的变量
  • 成员变量 在类体中 没有被 static 修饰的变量 存放在堆内存中
  • 常量
    同时被 staticfinal 修饰的变量

默认值#

  • 整数 0
  • 小数 0.0
  • 字符 \u0000
  • 布尔 false
  • 引用 null

作用域#

静态变量调用 使用类名。静态变量名 需要考虑权限修饰符

区分#

使用类名区分同名的局部变量和静态变量
使用 this 区分同名的局部变量和成员变量

优先级#

局部变量可以和静态变量 / 成员变量可同名
静态变量和成员变量 不可同名

📐 运算符#

算术运算符#

关系运算符#

> >= < <= == != 结果是布尔型
== 基本类型比较数值 引用类型比较内存地址

逻辑运算符#

  • & &&
    支持与运算 两边是数字 即可进行与运算
    两个数转换为二进制进行每位比较 同 1 取 1 反之取 0 结果不大于两个数中的最小数
  • | ||
  • !
  • ^ 异或 两边不一致为真
    两边是数字进行异或运算 每二进制位进行比较 不同取 1 相同取 0
  • >> 右移运算
    右移一次 就相当于该数除 2 (符号位不变)
  • >>>
    不考虑符号位 并且不考虑正负数 只在最左边补0 负数有可能变正数
  • << 左移运算
    向左移动一位 删除左边 (非符号位) 右边补0 相当于该数乘 2

赋值运算符#

+= -= *= /= %=

计算过程中自动进行强制类型转换

赋值运算属于右结合,同优先级从右到左计算

int result = x = y = z = 10; 

由于=的右结合性,先执行 z = 10; 再执行 y = z 再执行 x = y 运算

三目运算符#

xxx?yyy:zzz

  • xxx 需要判断的语句 布尔型
  • yyy 判断为真时执行的语句
  • zzz 判断为假时执行的语句
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。