【java 基础一】 纯语法基础记录

news2024/11/6 7:13:37

一、基础

1.1 变量

Java 变量是程序中存储数据的容器。
在 Java 中,变量需要先声明再使用,并且必须先声明再赋值。

  1. 声明变量:声明变量时需要指定变量的类型、名称和初始值。例如,声明一个整型变量可以如下所示:
int num = 0;
  1. 变量类型:Java 中的变量类型可以分为基本数据类型和引用数据类型。
    基本数据类型包括:byte、short、int、long、float、double、char 和 boolean。
    引用数据类型包括:类、接口、数组等。

  2. 变量作用域:Java 中的变量作用域可以分为局部作用域、成员作用域和静态成员作用域。
    局部作用域指的是在方法或代码块中声明的变量,
    成员作用域指的是在类中声明的变量,
    静态成员作用域指的是在类中声明为 static 的变量。

  3. 变量赋值:在 Java 中,变量赋值使用等号(=)操作符。例如,将整型变量 num 赋值为 1 可以如下所示:

num = 1;
  1. 变量运算:Java 中的变量可以进行算术运算、比较运算和逻辑运算等操作。例如,将两个整型变量相加可以如下所示:
int a = 1;  
int b = 2;  
int c = a + b;
  1. 字符串变量:Java 中字符串变量使用 String 类型表示。例如,声明一个字符串变量可以如下所示:
String name = "Tom";
  1. 数组变量:Java 中数组变量使用数组类型表示。例如,声明一个整型数组可以如下所示:
int[] nums = new int[10];

在 Java 中,变量是程序中必不可少的元素,它为程序提供了存储数据的能力。
通过声明变量、给变量赋值、进行变量运算等操作,可以实现各种复杂的程序功能。

1.2 数据类型

1.2.1 基本数据类型

基本数据类型包括:byte、short、int、long、float、double、char 和 boolean。

数据类型关键字内存占用取值范围
整数类型byte1 byte(8位)- 2^7 - 2^7 -1
short2 byte(16位)- 2^15 - 2^15 -1
int4 byte(32位)- 2^31 - 2^31 -1
long8 byte(64位)- 2^63 - 2^63 -1
浮点类型float4 byte(32位)一3.403E38~3.403E38
double8 byte(64位)1.797693e+308~ 4.9000000e-324
字符流行char2 byte(16位)0 - 2^16 -1
布尔类型boolean1 byte(-)true,false

1 byte = 8位

这些基本数据类型,在运算时,如果类型不一样,则需要进行类型的转化,如 int + float 型数据想加,我们分别讲下常见的类型转换。

  • 自动类型转换
    必须满足转换前的数据类型的位数要低于转换后的数据类型, 如上表所示,
1字节2字节4字节8字节
byteshortintlong
charfloatdouble
例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,
同样float数据类型的位数为32,可以自动转换为64位的double类型。

这种自动的转换,不需要担心精度丢失。

这里有个特例,long可以自动转换为float,简单来说因为浮点数用科学计数法存储的,而整数是用二进制存储的。
所以虽然long型是64位的,float型是32位,但是float型所能表示的数要远远大于long型。
  • 强制类型转换
    转换的数据类型必须是兼容的,格式:(type)value
    一般是大的类型转换为小类型
类型转换时可能会导致溢出或精度的丢失,另外浮点数到整数的转换是通过舍弃小数得到的。

如果涉及到不同数据类型之间的数学运算,比如+、-、*、/等操作,
小类型的数据和大类型的数据进行计算时,会自动进行类型提升,最终的结果变成大类型!

1.2.2 引用数据类型

引用数据类型包括:类、接口、数组等。

// 数组的静态初始化
int[] arr = new int[3];
int[] arr = new int[]{4,5,6};
int[] arr = {1,2,3};


// 
Anr anr = new Anr(cookie);

1.3 原码、反码、补码及进制转换

原码: 最高位是符号位(0 表示正数,1 表示负数),其他位为数值位。

10的原码:  00001010
-10的原码: 10001010

反码: 正整数的反码与原码一致,负整数的反码是在原码基础上,符号位不变,其他位按位取反

10的反码:  00001010
-10的反码: 11110101

补码: 正整数的补码与原码一致,负整数的补码是在反码基础上加1

10的补码:  00001010
-10的补码: 11110110

在这里插入图片描述

二进制
二进制,里面只有0和1
十进制
将十进制除以2再取余,然后将余数和最后的1按照从下向上倒序写的方法,即可变为二进制。
八进制
所谓八进制,就是每 3 位二进制作为一个单元,其中最小的数是 0,最大的数是 7,一共 8 个数字
在这里插入图片描述

十六进制
十六进制,就是每 4 位二进制作为一个单元,其中最小数是 0,最大数是 15,一共 16 个数字,分别用 0 ~ 9、A、B、C、D、E、F 表示。
在这里插入图片描述

1.4 运算符

运算符描述
+加法: 进行两侧变量值相加
-减法: 进两侧变量值相减
*乘法: 进行两侧变量值相乘
\除法: 左侧变量值除以右侧变量
%取模: 左侧变量值除以右侧变量取余数
++自增: 自身+1
–-自减: 自身-1
==判断两侧的变量值是否相等,如果相等条件为真
!=判断两侧变量值是否不相等,如果不相等条件为真
>判断左侧变量值是否大于右侧变量值, 如果大于条件为真
<判断左侧变量值是否小于右侧变量值, 如果小于条件为真
>=判断左侧变量值是否大于或者等于右侧变量值, 如果大于或者等于条件为真
<=判断左侧变量值是否小于或者等于右侧变量值, 如果小于或者等于条件为真
&&逻辑与。当且仅当两个操作数都为真,条件才为真。
!逻辑非。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
<<有符号左移, 相当于乘以2^n
>>有符号右移, 相当于除以2^n
>>>无符号右移
&位与 (只有1&1得1,其他得0)
~位非(反码) 即按位取反
^位异或 (即 相同的为0 不同的为1) 1^1=0 0^0=0 1^0=1

一些基本的运算符比较简单,我们说下位运算符,

位运算符 是按照二进制位操作 整数 的, 涉及到 二进制 和 整数存储方式(原码、反码、补码)

直接举例说明
以 4 & -5 = 0为例子展示运算流程:

1. 因为4为正数,所以原码和补码相同,即4的补码为:00000000 0000000 00000000 00000100

  2.因为-5为负数,所以需要进行原码 >>> 反码 >>> 补码的转换

    1)原码:10000000 00000000 00000000 00000101

    2)反码:11111111 11111111 11111111 11111010

    3)补码:11111111 11111111 11111111 11111011

  3.将4和-5的补码进行 & 运算:00000000 0000000 00000000 00000100

                  11111111 11111111 11111111 11111011         &

               00000000 00000000 00000000 00000000

  4.得到的补码结果为:00000000 00000000 00000000 00000000。所以结果为0

	/*
	 * 位运算
	 * "<<" 有符号左移
	 * ">>" 有符号右移
	 * ">>>" 无符号右移
	 * "&" 位与 (只有1&1得1,其他得0)
	 * "|" 位或 (只有0|0为0 ,其他为1)
	 * "~" 位非(反码) 即按位取反
	 * "^" 位异或 (即 相同的为0 不同的为1) 1^1=0 0^0=0 1^0=1
	 */
	private static void testWei() {
		/**
		 * "~" 位非(反码) 4 的反码 0000 0000 0000 0000 0000 0000 0000 0100 
		 *             按位取反 1111 1111 1111 1111 1111 1111 1111 1011 
		 * 此时按位取反后的值为补码 现在需要换成二进制原码用来输出 先减1
		 *                   1111 1111 1111 1111 1111 1111 1111 1010 
		 *             然后取反 0000 0000 0000 0000 0000 0000 0000 0101
		 * 最后 输出接口要加上符号位 即 -5 (先取反 ,在减1也可以)
		 */
		System.out.println("~4 " + (~4));

		/**
		 * "&" 位与 (只有1&1得1,其他得0) 4 的补码 0000 0000 0000 0000 0000 0000 0000 0100 6
		 * 的补码 0000 0000 0000 0000 0000 0000 0000 0110 位与结果 0000 0000 0000 0000
		 * 0000 0000 0000 0100
		 */
		System.out.println("4&6 " + (4 & 6));

		/**
		 * "<<" 有符号左移 规律左移是基数乘以2的移位幂次方,比如3<<2则是3*2*2也就是3乘以2的2次幂
		 */
		System.out.println("3 << 3 " + (3 << 3));

		/**
		 * ">>" 有符号右移 规律左移是基数除以2的移位幂次方,比如3>>1则是3/2也就是3除以2的1次幂
		 */
		System.out.println("3 >> 1 " + (3 >> 1));

		/**
		 * ">>>" 无符号右移 无论高位是0还是1都补0
		 */
		System.out.println("3 >>> 1 " + (3 >>> 1));
	}

1.5 修饰符

分成访问修饰符 & 非访问修饰符,这个不多说,我们看图记忆即可。
在这里插入图片描述

1.5 表达式 & 语句 & 代码块

1.5.1 表达式

Java 表达式是 Java 编程语言中的基本构建块,用于执行特定的操作并返回一个值。
Java 表达式可以包含 Java 操作符、变量、方法和常量。以下是一些 Java 表达式的示例:我们举几个常见的例子
加法表达式:

int a = 10;  
int b = 20;  
int sum = a + b;

乘法表达式:

int a = 10;  
int b = 20;  
int product = a * b;

条件表达式:

int a = 10;  
int b = 20;  
int max = (a > b) ? a : b;

字符串拼接表达式:

String str1 = "Hello";  
String str2 = "World";  
String message = str1 + " " + str2;

方法调用表达式:

int a = 10;  
int b = 20;  
int sum = add(a, b);

数组引用表达式:

int[] arr = {1, 2, 3, 4, 5};  
int firstElement = arr[0];

1.5.2 语句、代码块

在 Java 中,使用大括号({})来定义代码块,可以使用分号(;)来结束语句。

声明语句:用于声明变量、方法和类等。
赋值语句:用于给变量赋值。
条件语句:用于根据条件执行不同的代码块。
循环语句:用于重复执行一段代码。
方法调用语句:用于调用方法。
异常处理语句:用于处理程序运行时发生的异常。
注释语句:用于添加注释,帮助其他开发人员理解代码。
数组声明语句:用于声明和初始化数组。
接口声明语句:用于声明接口。
类定义语句:用于定义类。

1.6 数组

Java中的数组是一种数据结构,用于存储相同类型的数据。
一维数组

// 数组的静态初始化
int[] arr = new int[3];
int[] arr = new int[]{4,5,6};
int[] arr = {1,2,3};


二维数组

// 声明一个二维数组变量  
int[][] myArray;  
  
// 创建二维数组并初始化  
myArray = new int[3][4];

推荐阅读

Java 异常

【五一创作】Java 反射知识及实战

java 泛型知识整理

学java注解,看这一篇文章就够了

细说java动态代理及使用场景

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

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

相关文章

水处理施工方案合集

编制说明及工程简介 (一) 编制说明 本施工组织设计是依据建设单位提供的招标文件、施工图、同类工程施工资料和国家有关施工规范及验收标准进行编制的。本施工组织设计针对本工程施工中的关键点、难点及其处理措施&#xff0c;主要施工方法&#xff0c;施工组织部署&#xff…

如何理解 CRM 客户关系管理系统?

如何理解 CRM 客户关系管理系统&#xff1f; CRM的作用不止是工具&#xff0c;根据用户和对象的不同&#xff0c;CRM创造的价值也是不同的。 打个比方: 有的企业是用CRM来管理客户信息;有的企业是用CRM来获取流量的&#xff1b;有的企业是用CRM来做销售管理的&#xff1b;还…

Springboot整合OSS并实现文件上传和下载

目录 一.OSS服务器开通并创建账户 二.Springboot整合OSS 1.创建springboot项目 2.整合OSS 三.postman测试 一.OSS服务器开通并创建账户 参考阿里云OSS的使用(全程请登陆)_zhz小白的博客-CSDN博客https://blog.csdn.net/zhouhengzhe/article/details/112077301 二.Springb…

深度学习笔记之循环神经网络(八)LSTM的轻量级变体——门控循环单元(GRU)

深度学习笔记之LSTM轻量级变体——门控循环单元[GRU] 引言回顾&#xff1a; LSTM \text{LSTM} LSTM的前馈计算过程 LSTM \text{LSTM} LSTM的问题 GRU \text{GRU} GRU的前馈计算过程 GRU \text{GRU} GRU的优势 引言 上一节介绍了从反向传播过程的角度认识 LSTM \text{LSTM} LST…

【29】核心易中期刊推荐——计算语言学人工智能(AI)技术

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

使用javascript-obfuscator给js文件加密

一、安装javascript-obfuscator包 npm install javascript-obfuscator -g二、默认配置直接压缩文件 javascript-obfuscator miniprogram/src/utils/utils_create_sign.js --output miniprogram/src/utils/create_sign.js三、根据配置文件压缩文件 3.1、创建mixs.json配置文…

前端阿里云OSS直传,微信小程序版本

前言&#xff1a; 网络上许多的文章资料&#xff0c;全是使用阿里云官方的SDK&#xff0c;ali-oss插件去做直传。可是各位素未谋面的朋友要注意&#xff0c;这个SDK它支持web环境使用&#xff0c;也就是PC端浏览器。 当项目环境切换到微信小程序&#xff0c;是无法使用这种方…

Power BI Embedded自动缩放容量,为公司每个月节省上万元

哎&#xff0c;不知道今年行情怎么就这样了&#xff0c;大厂一边大批毕业生&#xff0c;一边大量招人。难道是今年的新人便宜&#xff1f;就连道哥&#xff08;吴翰清&#xff0c;阿里P10&#xff0c;中国顶级黑客&#xff09;都从阿里离职了&#xff0c;当年年少不懂学计算机&…

Nodejs批量处理图片小工具:批量修改图片信息

小工具一&#xff1a;批量修改文件夹里面的图片名称 步骤&#xff1a; 1.安装nodejs。 2.根据需要修改editFileName(filePath, formatName)函数的参数&#xff0c;也可以不改&#xff0c;直接将renameFile.js和img文件夹放在同一个目录下。 3.在renameFile.js目录下开启终端…

SQL报错this is incompatible with sql_mode=only_full_group_by

一、bug记录 1.1.bug截图 1.2.sql语句 SELECT id,batch_no,if_code,channel_mch_no,bill_date,bill_type,currency,order_id, channel_order_no,channel_amount,channel_fee_amount,channel_success_at, channel_user,channel_state,org_pay_order_id,channel_refund_amoun…

曾经由盛转衰的骈文,却引领后人在文质兼美的创作之路上坚定前行

又叫骈体文&#xff0c;是和散文相对应的一种文体&#xff0c;它兴起于汉末&#xff0c;形成于魏晋&#xff0c;最盛行于南北朝&#xff0c;在初唐、中唐、唐末、五代、宋初时也盛极一时。古人语&#xff1a;两马并驾为骈&#xff0c;所以骈文最大的特点是用对偶的手法&#xf…

Fiddler抓包工具之fiddler设置手机端抓包

fiddler设置手机端抓包 安卓手机抓包 第一步&#xff1a;配置电脑和安卓的相关设置 1、手机和fiddler位于同一个局域网内&#xff1b;首先从fiddler处获取到ip地址和端口号&#xff1a; &#xff0c;点击online&#xff0c;最后一行就是ip地址 2、路径&#xff1a;Tools》O…

数据库基础——10.子查询

这篇文章来讲一下数据库的子查询 目录 1. 需求分析与问题解决 1.1 实际问题 1.2 子查询的基本使用 1.3 子查询的分类 2. 单行子查询 2.1 单行比较操作符 2.2 代码示例 2.3 HAVING 中的子查询 2.4 CASE中的子查询 2.5 子查询中的空值问题 2.5 非法使用子查询​编辑…

数字IC验证高频面试问题整理(附答案)

后台有同学私信想要验证的面试题目&#xff0c;这不就来了~ Q1.权重约束中”:”和 /”的区别 : 操作符表示值范围内的每一个值的权重是相同的,比如[1:3]:40,表示1&#xff0c;2&#xff0c;3取到的概率为40/120&#xff1b; :&#xff0f;操作符表示权重要平均分到值范围内的…

spring security(密码编码器、授权,会话)

目录 密码编码器 授权决策 AffirmativeBased ConsensusBased UnanimousBased 授权 web授权 HttpSecurity常用方法及说明 方法授权 会话控制 会话超时 安全会话cookie 密码编码器 Spring Security为了适应多种多样的加密类型&#xff0c;又做了抽象&#xff0c;D…

虚拟机配置

配置虚拟机网络 创建虚拟机 20G 4G内存 初始化用户名和密码 zhao 123456 克隆拷贝2个虚拟机 配置内存为2G 修改主机名和固定IP hostnamectl set-hostname node1 hostnamectl set-hostname node2 vim /etc/sysconfig/network-scripts/ifcfg-ens33 systemctl stop network s…

渗透测试辅助工具箱

0x01 说明 渗透测试辅助工具箱 运行条件&#xff1a;jdk8 双击即可运行 反弹shell&#xff0c;命令生成器&#xff0c;自动编码&#xff0c;输入对应IP端口即可&#xff0c;实现一劳永逸&#xff0c;集成一些小工具&#xff0c;辅助渗透&#xff0c;提高效率 输入框说明 L…

TDengine 报错 failed to connect to server, reason: Unable to establish connection

一、前文 TDengine 入门教程——导读 二、遇到问题 taos 命令行&#xff08;CLI&#xff09;连接不上&#xff0c;进不去。 [rootiZ2ze30dygwd6yh7gu6lskZ ~]# taos Welcome to the TDengine Command Line Interface, Client Version:3.0.0.1 Copyright (c) 2022 by TDengine…

基于Azure实现Java访问OpenAI

之前使用了Java代码访问OpenAI&#xff1a;OpenAI注册以及Java代码调用_雨欲语的博客-CSDN博客但是需要vpn才能访问&#xff0c;现在可以基于微软的Azure访问OpenAI&#xff0c;不再需要vpn&#xff0c;官方文档&#xff1a;快速入门 - 开始通过 Azure OpenAI 服务使用 ChatGPT…

【国产虚拟仪器】基于JFM7K325T(复旦微FPGA)的高速数据采集平台

板卡概述 XM714是自主研制的一款5路HD-SDI视频采集图像处理平台&#xff0c;该平台采用上海复旦微的高性能Kintex系列FPGA加上华为海思的高性能视频处理器HI3531DV200来实现。 华为海思的HI3531DV200是一款集成了ARM A53四核处理器性能强大的神经网络引擎&#xff0c;支持多种…