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

Java基础使用②Java数据变量和类型+小知识点

目录

1. Java小知识点

1.1 Java注释

1.2 Java标识符命名

1.3 Java关键字

2. 字面常量和数据变量

2.1 字面常量

2.2 数据类型

3.变量

3.1 变量概念

3.2 语法格式

3.3 整型变量

3.4 浮点型变量

3.5 字符型变量

3.6 布尔型变量

3.7 类型转换

3.8 类型提升

4. 字符串类型

本篇完。


1. Java小知识点

上一篇的Hello程序:

在一个好的程序中不但包含好的代码,还会包含很多注释。

1.1 Java注释

        注释是为了让代码更容易被读懂而附加的描述信息, 不参与编译运行,但是却非常重要。时刻牢记代码写出来是为了给人看的, 更是为了给以后的看的。

Java中的注释主要分为三种:

  • 单行注释:// 注释内容(用的最多)
  • 多行注释:/* 注释内容*/ (不推荐,不常用)
  • 文档注释:/** 文档内容 */(常见于方法和类之上描述 方法和类 的作用,可以被javadoc工具解析,生成一套以网页文件形式体现的程序说明文档)

注意:

  1. 多行注释不能够嵌套使用
  2. 不论是单行还是多行注释,都不参与编译,即编译生成的 .class文件不包含注释信息。

代码示例:

/**
文档注释:
@version v1.0.0
@author rtx
作用HelloWorld类,入门第一个程序练习
*/
public class HelloWorld{/*多行注释:1. main方法是Java程序的入口方法2. main函数的格式是固定的,必须为public static void main(String[] args)*//**main方法是程序的入口函数@param args 命令行参数。*/public static void main(String[] args){// 单行注释:System.out.println是Java中标准输出,会将内容输出到控制台System.out.println("Hello World");}
}
------------------------------------------------------------------------------------// 在cmd中,使用javadoc工具从Java源码中抽离出注释// -d 创建目录 myHello为目录名// -author 显示作者// -version 显示版本号// -encoding UTF-8 -charset UTF-8 字符集修改为UTF-8javadoc -d myHello -author -version -encoding UTF-8 -charset UTF-8 HelloWorld.java

1.2 Java标识符命名

一些标识符命名规则和建议:

【硬性规则】

标识符中可以包含:字母、数字以及下划线和$符号等等。
标识符不能以数字开头,也不能是关键字,且严格区分大小写。

【软性建议】

类名:每个单词的首字母大写(大驼峰)。
方法名:首字母小写,后面每个单词的首字母大写(小驼峰)。
变量名:与方法名规则相同。


1.3 Java关键字

        通过观察上述程序可以发现,public、class以及static等会出现颜色变化,Java环境将这些具有特殊意义的标识符成为关键字。即:关键字是由JAVA语言提前定义好的,有特殊含义的标识符,或者保留字。

注:用户不能使用关键字定义标识符

Java关键字分类:

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

2个保留字
goto const

3个特殊直接量:
true、false、null


2. 字面常量和数据变量

2.1 字面常量

        在HelloWorld程序中, System.Out.println("Hello World"); 语句,不论程序何时运行,输出的都是Hello World,其实"Hello World"就是字面常量。

常量即程序运行期间,不论何时运行都固定不变的量称为常量。

字面常量的分类:

  1. 字符串常量:双引号中的内容,如“hello world”、“哈哈”
  2. 整型常量:程序中直接写的数字(没有小数点)
  3. 浮点型常量:程序中直接写的小数。
  4. 字符常量:‘’中的单个字符,如‘A’、‘1’
  5. 布尔常量:只有true和false两种
  6. 空常量:null
public class Demo{public static void main(String[] args){System.Out.println("hello world!");System.Out.println(100);System.Out.println(3.14);System.Out.println('A');System.Out.println(true);System.Out.println(false);}
}

其中:100、3.14、‘A’、true/false、“hello world”都是常量,将其称为字面常量。

注意:字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。


2.2 数据类型

在Java中,数据类型主要分为两类:基本数据类型引用数据类型

基本数据类型有四类八种:

  1. 四类:整型、浮点型、字符型和布尔型
  2. 八种:如下图


3.变量

3.1 变量概念

        在程序中,如果仅有这些字面常量显然是不够的,有些内容可能需要经常改变。对于这些经常改变的内容,在Java程序中,称为变量,而数据类型就是用来定义不同种类的变量的。

3.2 语法格式

语法格式也就是定义变量的格式,和C语言基本一致:

数据类型 变量名 = 初始值;

比如:

int a = 10; // 定义整型变量a,a是变量名,初始值为10
double d =3.14;
char c = 'A';
boolean b = true;a = 100; // a是变量,a中的值在过程中是可以修改的int a1 = 10,a2 = 100,a3 = 1000;
// 在一行可以定义多个相同类型的变量

注意:变量在使用之前必须要赋初始值,否则编译报错。(不会像C语言有随机值)

3.3 整型变量

整型变量中有int、short、long、byte变量类型。

3.3.1 整型变量

整型变量,也就是int类型变量,有如下几种特点:

  1. int在任何系统下都是4个字节
  2. 给变量设置初始值时,不能超过表示范围,否则会导致溢出
  3. int的包装类型为 Integer

3.3.2 短整型变量

短整型变量,也就是short类型变量,有如下几种特点:

  1. short在任何系统下都占2个字节
  2. short的表示范围为:-32768~32767
  3. short的包装类型为Short

3.3.3 长整型变量

长整型变量,也就是long类型变量,有如下几种特点:

  1. 长整型变量的初始值后加L(L和l都可以,但是L便于区分)
  2. 长整型在任意系统下都是8个字节
  3. long的包装类型为Long
int a = 10;
long b = 10;
long c = 10L; // 为了区分int和long类型,一般建议long类型变量的初始值后加L 

3.3.4 字节型变量

在Java中还有个字节型变量,byte类型,具有以下特点:

  1. byte在任何系统下都占1个字节
  2. byte的范围是 -128~127
  3. byte的包装类型是Byte
byte a = 10;
System.Out.println(a);

3.4 浮点型变量

3.4.1双精度浮点型变量

在Java中,int除以int的值仍然是int(直接舍弃小数部分)。如果想得到小数,需要使用double类型计算,该类型具有以下特点:

  1. double在任何系统下都占8个字节
  2. double的包装类型为Double
  3. double类型的内存布局遵守IEEE 754标准(和C语言一致),尝试使用有限的内存空间标识可能无线的小数,因此浮点数是个近似值,并不是精确值。
double a = 1.0;
System.Out.println(a);
double b = 2.0;
System.out.println(a / b); // 输出0.5double num = 1.1;
System.out.println(num * num); // 输出1.21吗?
// 执行结果
1.2100000000000002

3.4.2单精度浮点型变量

也就是float类型,具有以下几种特点:

  1. 在任意系统中占4个字节
  2. 与double相同遵守IEEE 754标准
  3. 由于float表示精度较小,一般优先考虑double
  4. float的包装类型为Float
  5. 在定义变量时后面加上‘f’或‘F’进行区分
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num)

3.5 字符型变量

        字符型变量也就是char类型,Java中使用单引号+单个字母的形式表示字符字面值。
计算机中的字符本质上也是一个整数,在C语言中我们使用ASCII值表示字符,而Java中我们使用Unicode来表示字符,因此,一个字符占用两个字节,表示的字符也就更多。

char c1 = 'A'; // 大写字母
char c2 = '1'; // 数字字符
System.out.println(c1);
System.out.println(c2)

char的包装类型为Character。


3.6 布尔型变量

布尔类型常用来表示真假,和C语言中的bool类型很相似。

boolean a = true;
System.out.println(a);
boolean b = false;
System.out.println(b);

该变量有以下几种特点:

  1. boolean类型的变量只有两种取值,true表示真,false表示假
  2. Java的boolean类型和int不能相互转换,也就不存在“1表示true,0表示false”这种用法
    boolean value = true;
    System.out.println(value + 1);// 代码编译会出现如下错误
    Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误System.out.println(value + 1);^第一个类型: boolean第二个类型: int
    1 个错误
  3. Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现过程中,boolean占1个字节。
  4. boolean的包装类型为Boolean。

3.7 类型转换

        Java作为一个强类型编程语言,当不同类型的变量相互赋值的时候,也会有较严格的校验。在Java中,当参与运算的数据类型不一致时,就会进行类型转换,Java中类型转换主要分为两类:自动类型转换和强制类型转换。

3.7.1自动类型转换

自动类型转换即代码不需要经过任何处理,在代码编译时,编译器会自动进行处理

    public static void main(String[] args) {System.out.println(100); // 默认为int类型System.out.println(3.14); // 默认为double类型int a = 100;long b = 10L;b = a; // a和b都是整型变量,a的范围比b小,赋值时系统会自动将a提升为long类型,然后赋值a = b; // 编译报错,long范围比int大,赋值时可能会丢失数据,不安全

3.7.2强制类型转换

强制类型转换即当进行操作时,代码需要经过一定格式的处理,不能自动完成。

int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错

注意:

  1. 不同数据类型的变量之间赋值,表示范围更小的类型会自动转换为范围较大的类型。
  2. 如果把范围大的类型赋值给范围小的,需要强制类型转换,但可能丢失精度
  3. 将一个字面常量进行赋值的时候,Java会自动针对数字范围进行检查。
  4. 强制转换不一定成功,不相关的类型不能相互转换(如boolean类型不能强转为int类型)

3.8 类型提升

        通过上面知识点我们知道不同类型的数据之间相互运算时,数据类型范围小的会被提升为数据类型范围更大的。

  1. int与long之间:int会被提升为long
    int a = 10;
    long b = 20;
    int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
    long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long
    
  2. byte与byte的运算
    这个很有意思,先看一段代码:
    byte a = 10;
    byte b = 20;
    byte c = a + b;
    System.out.println(c);
    

在IDEA中会发现编译报错:
java: 不兼容的类型: 从int转换到byte可能会有损失

        结论:上述变量都是相同类型,但是还是出现了编译报错,为什么呢?原因是,虽然a和b都是byte类型,但是计算a+b时会先将a和b都提升为int类型,再进行计算,得到结果的类型也是int,通过上面我们知道大放小可能会丢失数据,这里赋值给c,就出现了编译报错。

那为什么会先提升再计算呢?:

        因为计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了硬件上实现方便,诸如byte和short这种低于4个字节的类型就会先被提升成int,再参与计算。

正确的写法:

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

4. 字符串类型

在Java中使用String类定义字符串类型,比如:

public static void main(String[] args) {String s1 = "hello";String s2 = " world";System.out.println(s1);System.out.println(s2);System.out.println(s1 + s2); // s1 + s2表示:将s1和s2进行拼接
}

在有些情况下,需要将字符串和整形数字之间进行转换:

1. int 转成 String

int num = 10;
// 方法1
String str1 = num + ""; 
// 方法2
String str2 = String.valueOf(num);

2. String 转成 int

String str = "100";
int num = Integer.parseInt(str);

这里只是对字符串进行简单的介绍,能够正常使用即可,后序会详细介绍。

本篇完。

下一篇学习Java运算符的内容。

相关文章:

Java基础使用②Java数据变量和类型+小知识点

目录 1. Java小知识点 1.1 Java注释 1.2 Java标识符命名 1.3 Java关键字 2. 字面常量和数据变量 2.1 字面常量 2.2 数据类型 3.变量 3.1 变量概念 3.2 语法格式 3.3 整型变量 3.4 浮点型变量 3.5 字符型变量 3.6 布尔型变量 3.7 类型转换 3.8 类型提升 4. 字符…...

从 HTTP 到 HTTPS 再到 HSTS:网站安全的演变与实践

近年来,随着域名劫持、信息泄漏等网络安全事件的频繁发生,网站安全变得越来越重要。这促使网络传输协议从 HTTP 发展到 HTTPS,再到 HSTS。本文将详细介绍这些协议的演变过程及其在实际应用中的重要性。 一、HTTP 协议 1.1 HTTP 简介 HTTP&…...

Qt的跨平台介绍

在实际开发中,Ubuntu 使用 Qt 编译并跨平台到 Windows 的场景并不算特别常见,但在一些特定情况下是非常有用的,尤其是在开发需要支持多个平台的跨平台应用时。这种方式的应用主要体现在以下几个方面: Linux 环境下开发 Windows 应…...

数据库DQL

DQL 语法 SELECT字段列表 FROM表名列表 WHERE条件列表 GROUP BY分组字段列表 HAVING分组后条件列表 ORDER BY排序字段列表 LIMIT分页参数 基本查询 查询多个字段 SELECT 字段1,字段2,字段3,... FROM 表名; SELECT * FROM 表名; 设置别名 SELECT 字段1 [AS 别名1],字段2 …...

Am I Isolated:一款安全态势基准测试工具

基于Rust的容器运行时扫描器作为一个容器运行,检测用户容器运行时隔离中的漏洞。 它还提供指导,帮助用户改善运行时环境,以提供更强的隔离保证。 容器的现状是它们并不包含(隔离)。 容器隔离的缺失在云原生环境中有…...

Unity性能优化 -- 性能分析工具

Stats窗口Profiler窗口Memory Profiler其他性能分析工具(Physica Debugger 窗口,Import Activity 窗口,Code Coverage 窗口,Profile Analyzer 窗口,IMGUI Debugger 窗口) Stats 统级数据窗口 game窗口 可…...

【微信小程序】基本语法

一、导入小程序 选择代码目录 项目配置文件 appid 当前小程序的 AppIDprojectname 当前小程序的项目名称 变更AppID(视情况而定,如果没有开发权限时需要变更成个人的 AppID) 二、模板语法 在页面中渲染数据时所用到的一系列语法叫做模板…...

go中的类型断言详解

在Go语言中,类型断言(Type Assertion)是一种将接口类型的变量转换为具体类型的机制。类型断言允许我们从接口类型的变量中提取出具体的值,以便访问具体类型的方法或属性。类型断言的语法如下: value, ok : interfaceV…...

vite构建的react程序放置图片

在 Vite 中,将图片放置在 public 文件夹中可以直接使用相对路径(如 /logo.png)的原因主要与 Vite 的构建和资源处理方式有关。以下是详细的解释: 1. 公共访问性 public 文件夹中的文件在构建过程中不会被 Vite 处理或哈希化。这…...

学习事件循环

本文内容由智谱清言产生。 什么是事件循环? 事件循环(Event Loop)是一个编程概念,特别是在异步编程和GUI(图形用户界面)应用程序中非常常见。它是用来处理和管理事件(如用户输入、计时器事件、…...

终端NuShell git权限异常处理

使用nushell git,关联老的秘钥文件 D:\phpstudy_pro\WWW\xmh\backend|10-312> mkdir d:\Users\Administrator\.ssh PC-20240719ZOSM||2411063145840 D:\phpstudy_pro\WWW\xmh\backend|10-312> cp -r c:\U…...

Mybatis Plus 集成 PgSQL 指南

“哲学家们只是用不同的方式解释世界,而问题在于改变世界。” ——卡尔马克思 (Karl Marx) 解读:马克思强调了实践的重要性,主张哲学不仅要理解世界,更要致力于改造世界。 本文我们引入 Mybatis Plus 作为 ORM ,并且使…...

Rust常用数据结构教程 Map

文章目录 一、Map类型1.HashMaphashMap的简单插入entry().or_insert()更新hashMap 2.什么时候用HashMap3.HashMap中的键 二、BTreeMap1.什么时候用BTreeMap2.BTreeMap中的键 参考 一、Map类型 键值对数据又称字典数据类型 主要有两种 HashMap - BTreeMap 1.HashMap HashM…...

<el-popover>可以展示select change改变值的时候popover 框会自动隐藏

一、问题定位 点击查看详细链接 element-plus 的 popover 组件,依赖 tooltip 组件;当 tooltip 的 trigger 的值不是 hover 时,会触发 close 事件;下拉框的 click 事件,触发了 tooltip 组件的 close 事件 总结一下&am…...

SQLI LABS | Less-37 POST-Bypass mysql_real_escape_string

关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-37/ 是一个登…...

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

Module 16 Wire Editing 这个章节的学习目标是学习如何在innovus中手工画线,切断一根线,换孔,更改一条net shape的layer和width等等。这个技能是每个数字IC后端工程师必须具备的。因为项目后期都需要这些技能来修复DRC和做一些手工custom走线…...

深度学习:GLUE(General Language Understanding Evaluation)详解

GLUE(General Language Understanding Evaluation)详解 GLUE(General Language Understanding Evaluation)是一个用于评估和比较自然语言理解(NLU)系统的综合基准测试。它包括了一系列的任务,旨…...

基于Multisim直流稳压电源电路±9V、±5V(含仿真和报告)

【全套资料.zip】直流稳压电源电路9V、5VMultisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 一般直流稳压电源都使用220伏市电作为电源,经过变压、整流、滤波后给稳压电路进行稳压…...

Vue Cli的配置中configureWebpack和chainWebpack的主要作用及区别是什么?

直接区别: configureWebpack项直接覆盖同名配置;chainWebpack项直接修改默认配置。 configureWebpack配置: // vue.config.js module.exports {configureWebpack: {plugins: [new MyAwesomeWebpackPlugin()]} }该代码段中的对象将会被web…...

ubuntu主机搭建sysroot交叉编译环境

ubuntu主机搭建sysroot交叉编译环境 主机是 ubuntu22.04 x86-64 hostubuntu22.04host-archx86-64host-cpui9-13900k 目标板是香橙派5b ,ubuntu22.04,aarch64 ,cpu rk3588s targetubuntu22.04target-archaarch64target-cpurk3588s 安装 qemu-user-static 进入 …...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...