当前位置: 首页 > news >正文

Java 语法基础(笔记)

java 的数据类型

基本类型

Java 有八种基本类型:

  • byte:1 字节,-128~127
  • short:2 字节,-32768~32767
  • int:4 字节,-2147483648~2147483647
  • long:8 字节,-9223372036854775808~9223372036854775807
  • float:4 字节,小数点后 32 位
  • double:8 字节,小数点后 64 位
  • char:2 字节,表示单个字符
  • boolean:1 字节,true 或 false

引用类型

类似于 C 语言的指针,引用类型是指向对象在内存中的地址。引用类型可以用来访问对象的属性和方法。

Java 有两种引用类型:

  • 类:用来描述对象的类型,包括自定义的类、系统提供的类
  • 接口:用来描述一组方法的集合,包括自定义的接口、系统提供的接口

字面量

字面量是指直接写在代码中的值,包括整数(十进制、八进制、十六进制)、浮点数、字符、字符串、布尔值等。

数据类型具体介绍

数字

  • 从 java7 开始,支持下划线分隔符,增强可读性。
int num1 = 123_456; // 123456
int num2 = 0b1010_1010; // 170
int num3 = 0x1234_5678; // 305419896// 不能在浮点数小数点前后使用下划线分隔符
// 不能在数字的开头和末尾使用下划线分隔符
// 不能在X、B、D等特殊字母前后使用下划线分隔符

字符

  • 转义字符
char c1 = '\n'; // 换行符
char c2 = '\t'; // 制表符
char c3 = '\b'; // 退格符
char c4 = '\r'; // 回车符
char c5 = '\f'; // 换页符
char c6 = '\''; // 单引号
char c7 = '\"'; // 双引号
char c8 = '\\'; // 反斜杠

字符串

  • 字符串是引用数据类型,用来存储一系列字符。
  • 字符串是不可变的,一旦创建就不能修改。
String str2 = "";   // 空字符串
String str3 = null; // 空引用, 相当于C语言的空指针
  • 字符串拼接: 使用 + 运算符进行字符串拼接
String str1 = "Hello";
String str2 = "World";
String str3 = str1 + " " + str2; // "Hello World"

变量

  • 任何变量在使用前必须初始化(可以声明后赋值), 局部变量程序员手动初始化,非局局变量编译器自动初始化。
byte    -----       0
short   -----       0
int     -----       0
long    -----       0L
float   -----       0.0f
double  -----       0.0d
char    -----      '\u0000'
boolean -----       false
对象    -----       null

运算符

在这里插入图片描述

  • >> 与 >>> 运算符的区别:
  1. 右移运算符(>>) :有符号右移,将二进制数字右移一位, 最左边用符号位补齐。
  2. 无符号右移运算符(>>>) :无符号右移,将二进制数字右移一位, 最左边用 0 补齐。
  • 可以对布尔类型进行位运算, 与普通的逻辑运算符类似, 但少了短路(逻辑中断)的特性。

  • java 的类型检查很严格, 如在 if 语句中, 括号内的表达式必须是布尔类型。

类型转换

拓宽基本类型转换

数据范围小的转为数据范围大的(共 19 种, 可越级转换), 可以自动转换:

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

窄化基本类型转换

数据范围大的转为数据范围小的(共 22 种), 需要强制类型转换:

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

int i = 10;
byte b = (byte) i; // 窄化转换
double d = 10.5;
int j = (int) d; // 窄化转换, 截断小数部分

一元数字提升

将 byte、short、char 类型的数字进行(部分)一元运算时自动提升为 int 类型。

  1. 数组的索引, 创建数组时的数组长度
  2. 一元运算符 +、-、~
  3. 位移 <<、>>、>>>

二元数字提升

数据范围大的与数据范围小的运算时转为数据范围大的, 最低限度为 int 类型(两个 byte 类型相加, 结果为 int 类型)。

int -> long -> float -> double

  1. 算术运算符: +、-、*、/、%
  2. 关系运算符: <、>、<=、>=、==、!=
  3. 位运算: |、&、^
  4. 三目运算符: 条件运算符? :

注: 符合运算符在相同类型运算时并不会做变量的提升

java 的关键字

abstract、assert、boolean、break、byte、case、catch、char、class、const、continue、default、do、double、else、enum、extends、final、finally、float、for、goto、if、implements、import、instanceof、int、interface、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while

true、false、null 是字面量, 不是关键字。

java 数组


// 空引用和空数组
int[] arr1;
int[] arr2 = {};
int arr3[] = {};// 声明时指定数组元素
int[] arr4 = new int[] {1, 2, 3};   //new 表示分配堆空间
int[] arr5 = {1, 2, 3};// 定义时指定数组长度和访问数组元素
int[] arr6 = new int[5];    // 自动初始化为0
arr6[0] = 1;
arr6[1] = 2;
arr6[2] = 3;// 多维数组
int[][] arr7 = new int[2][3];

在这里插入图片描述

方法(函数)

可变参数

可变参数是指方法参数的数量不固定,可以传入任意数量的参数。可变参数在方法内部被视为一个数组。

可变参数必须是方法的最后一个参数

public static void print(int... args) { // 可变参数, 数组类型, 若不传参数, 则 args 为 {}, 不为 nullfor (int i : args) {System.out.print(i + " ");}System.out.println();
}

参数传递

基本数据类型的参数传递为值传递,引用数据类型的参数传递为引用传递(地址)。

方法签名

由 2 部分组成: 方法名 + 参数类型


public static double sum(int i, long l, double d){return i + l + d;
}// 方法签名: sum(int,long,double)

方法重载

即: 方法名相同, 方法签名不同(参数类型不同)

栈帧

栈帧随着方法的调用而创建, 随着方法结束而销毁, 存储了方法的局部变量信息

http://www.xdnf.cn/news/409267.html

相关文章:

  • 如何查看项目是否支持最新 Android 16K Page Size 一文汇总
  • React中的useSyncExternalStore使用
  • 面向对象的js
  • 短视频兴趣算法的实现原理与技术架构
  • Linux512 ssh免密登录 ssh配置回顾
  • 写项目遇到的通用问题
  • Windows 安装 Milvus
  • 论坛项目测试
  • Matlab 模糊pid控制的永磁同步电机PMSM
  • 前端面经 计网 http和https区别
  • ​Spring Boot 配置文件敏感信息加密:Jasypt 实战
  • 国产密码新时代!华测国密 SSL 证书解锁安全新高度
  • 开疆智能canopen转Profinet网关连接AGV磁钉读头配置案例
  • HTTP2
  • Java中实现定时器的常见方式
  • C 语 言 - - - 简 易 通 讯 录
  • 网页Web端无人机直播RTSP视频流,无需服务器转码,延迟300毫秒
  • 致远OA人事标准模块功能简介【附应用包百度网盘下载地址,官方售价4W】
  • OpenCV直方图与直方图均衡化
  • Unity动画系统使用整理 --- Playable
  • python标准库--collections - 高性能数据结构在算法比赛的应用
  • LVGL(线条控件lv_line)
  • CentOS 和 RHEL
  • FPGA----基于ZYNQ 7020实现定制化的EPICS程序开发
  • AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent
  • 智能外呼系统的实用性
  • LGDRL:基于大型语言模型的深度强化学习在自动驾驶决策中的应用
  • bea算法,大模型
  • Linux文件系统
  • C++11新特性(1)