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.mzph.cn/diannao/82933.shtml

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

相关文章

C# 方法(栈帧)

本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 栈帧 至此&#xff0c;我们已…

C# 使用 WinUI 3 项目模板创建桌面应用程序

文章目录 1. 概述2. 先决条件3. 创建项目步骤4. 项目结构简介5. 代码示例5.1. MainWindow.xaml (UI 定义)5.2. MainWindow.xaml.cs (逻辑代码) 6. 生成和运行应用程序7. 关键概念 1. 概述 本示例演示如何使用 Visual Studio 中的 “Blank App, Packaged (WinUI 3 in Desktop)”…

设计模式简述(十八)享元模式

享元模式 描述基本组件使用 描述 当内存中存在大量类似的对象时&#xff0c;可以考虑使用享元模式减少整体内存占用。 可以将相同的部分和不同的部分进行拆分&#xff0c;以达到多个对象共享相同部分内存的目的。 基本组件 通常享元对象通过共享的属性映射一个享元对象。 公…

大数据狙击金融欺诈——技术如何守护交易安全?

大数据狙击金融欺诈——技术如何守护交易安全? 金融领域一直是欺诈行为的“重灾区”,从传统的信用卡盗刷到精心策划的网络诈骗,攻击者不断进化手法,使得防御变得越来越复杂。然而,大数据技术的出现,让金融欺诈检测从被动防守转向主动狙击,通过深度学习、行为分析和实时…

如何通过DNS解析实现负载均衡?

在当今的互联网时代&#xff0c;随着网络应用的飞速发展&#xff0c;网站和各类在线服务面临着海量的用户请求。为了保障服务的高可用性和高性能&#xff0c;负载均衡技术应运而生。DNS&#xff08;域名系统&#xff09;负载均衡作为其中一种重要的实现方式&#xff0c;凭借其简…

MySQL解决主从复制的报错问题

MySQL 8.4 非 GTID 模式部分数据库主从复制指南 在进行MySQL 8.4非GTID模式下部分数据库主从复制时&#xff0c;以下是详细的操作步骤以及对应的执行位置说明&#xff0c;还有报错处理方法介绍&#xff1a; 操作步骤 1. 备份主库指定数据库&#xff08;db1、db2&#xff09;…

Linux的域名解析服务器

什么是DNS DNS&#xff08;Domain Name System&#xff09;是互联网上的一项服务&#xff0c;它作为将域名和IP地址相互映射的一个分 布式数据库&#xff0c;能够使人更方便的访问互联网 DNS使用的是53端口&#xff0c; 通常DNS是以UDP这个较快速的数据传输协议来查询的&…

vue 中绑定样式 【class样式绑定】

class 样式绑定 在 Vue 中&#xff0c;可以通过 :class&#xff08;或简写 v-bind:class&#xff09;实现类名&#xff08;class&#xff09;样式的绑定。Vue 提供了几种常用的绑定方式&#xff0c;分别支持字符串、对象和数组语法。 绑定字符串 <div :class"active…

Unity3D 序列化机制:引擎内的应用场景和基本原理

前言 Unity3D 的序列化机制是其核心功能之一&#xff0c;用于在编辑器和运行时之间持久化数据、管理场景状态、处理预制体&#xff08;Prefab&#xff09;以及实现跨平台兼容性。以下是其应用场景和基本原理的详细解析&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小…

Python 字典键 “三变一” 之谜

开头&#xff1a;读者的“玄学”字典谜题 上周&#xff0c;朋友发来了一段让他抓耳挠腮的代码&#xff1a; >>> {True: foo, 1: bar, 1.0: baz} {True: baz} “我明明定义了布尔True、整数1、浮点数1.0三个键&#xff0c;结果字典里只剩True一个键&#xff0c;值…

如何选择 RabbitMQ、Redis 队列等消息中间件?—— 深度解析与实战评估

如何选择 RabbitMQ、Redis 队列等消息中间件?—— 深度解析与实战评估 1. 引言 在现代分布式系统架构中,消息队列(Message Queue,MQ) 作为解耦服务、异步处理和高效通信的关键组件,被广泛应用于高并发、微服务和数据流处理场景。选择合适的消息中间件不仅能提高系统的稳…

特征工程四:数据特征提取TfidfVectorizer的使用

TfidfVectorizer 深度解析 TfidfVectorizer 是 scikit-learn 中用于文本特征提取的核心工具&#xff0c;它将原始文本转换为 TF-IDF 特征矩阵&#xff0c;是自然语言处理(NLP)和文本挖掘的基础组件。 一、核心原理 1. TF-IDF 计算 TF (Term Frequency)&#xff1a;词频&…

c/c++爬虫总结

GitHub 开源 C/C 网页爬虫探究&#xff1a;协议、实现与测试 网页爬虫&#xff0c;作为一种自动化获取网络信息的强大工具&#xff0c;在搜索引擎、数据挖掘、市场分析等领域扮演着至关重要的角色。对于希望深入理解网络工作原理和数据提取技术的 C/C 开发者&#xff0c;尤其是…

PostgreSQL 的表连接方法

PostgreSQL 的表连接方法 PostgreSQL 提供了多种高效的连接算法&#xff0c;每种方法适用于不同的查询场景。以下是 PostgreSQL 支持的四种主要表连接方法及其特点&#xff1a; 1 Nested Loop Join&#xff08;嵌套循环连接&#xff09; 工作原理 对外表的每一行&#xff0…

【Qt】qss语法详解

QSS (Qt Style Sheets) 语法格式详解 QSS 是 Qt 的样式表语言&#xff0c;类似于 CSS&#xff0c;用于自定义 Qt 应用程序的外观。以下是 QSS 的完整语法格式说明&#xff1a; 基本语法结构 selector {property: value;property: value;... }1. 选择器 (Selectors) 基本选择…

Azure资源创建与部署指南

本文将指导您如何在Azure平台上创建和配置必要的资源,以部署基于OpenAI的应用程序。 资源组创建 资源组是管理和组织Azure资源的逻辑容器。 在Azure门户顶端的查询框中输入"Resource groups"(英文环境)或"资源组"(中文环境)在搜索结果中点击"资…

Java后端快速生成验证码

Hutool是一个小而全的Java工具类库&#xff0c;它提供了很多实用的工具类&#xff0c;包括但不限于日期处理、加密解密、文件操作、反射操作、HTTP客户端等。 核心工具类&#xff1a;CaptchaUtil&#xff0c;CaptchaUtil 是 Hutool 提供的一个工具类&#xff0c;用于创建各种类…

sql 备份表a数据到表b

备份表a数据到表b mysql CREATE TABLE sys_dict_240702 LIKE sys_dict;INSERT INTO sys_dict_240702 SELECT * FROM sys_dict;mssql select * into t_Dict_240702 from t_Dict

2.4GHz无线通信芯片选型指南:集成SOC与低功耗方案解析

今天给大家分享几款2.4GHz无线通信芯片方案&#xff1a; 一、集成SOC芯片方案 XL2407P&#xff08;芯岭技术&#xff09; 集成射频收发机和微控制器&#xff08;如九齐NY8A054E&#xff09; 支持一对多组网和自动重传 发射功率8dBm&#xff0c;接收灵敏度-96.5dBm&#xff08…

Tomcat与纯 Java Socket 实现远程通信的区别

Servlet 容器​​&#xff08;如 Tomcat&#xff09; 是一个管理 Servlet 生命周期的运行环境&#xff0c;主要功能包括&#xff1a; ​​协议解析​​&#xff1a;自动处理 HTTP 请求/响应的底层协议&#xff08;如报文头解析、状态码生成&#xff09;&#xff1b; ​​线程…