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

news2024/11/14 5:02:02

目录

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-8
    javadoc -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.5

double 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运算符的内容。

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

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

相关文章

Blender 几何、线框猴头的构建 笔记

一、学习blender视频教程链接 案例7:猴头构建_建模动画_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?spm_id_from333.788.videopod.episodes&vd_sourced0ea58f1127eed138a4ba5421c577eb1&p23 二、几何节点基础教程 1.首先添加几何节…

Kafka面试题解答(二)

1.怎么尽可能保证 Kafka 的可靠性 kafka是可能会出现数据丢失问题的,Leader维护了一个动态的in-sync replica set(ISR),意为和 Leader保持同步的FollowerLeader集合(leader:0,isr:0,1,2)。 如果Follower长…

用科技力量,重塑数字化园区新生态!

数字化园区的成功打造绝非易事,它需要在多个关键层面付出持之以恒的努力,而成都树莓集团在这一进程中无疑发挥着重要作用。 在数据的管理与应用方面,成都树莓集团更是展现出卓越的实力。集团运用先进的数据挖掘、分析技术,助力园区…

Mac上无法访问usr/local的文件

sudo chmod 755 /usr/loca 最后用百度提供的方法解决了

【Lucene】原理学习路线

基于《Lucene原理与代码分析完整版》,借助chatgpt等大模型,制定了一个系统学习Lucene原理的计划,并将每个阶段的学习内容组织成专栏文章,zero2hero 手搓 Lucene的核心概念和实现细节。 深入的学习和专栏计划,覆盖Lucen…

友思特应用 | 动态捕捉:高光谱相机用于移动产线上的食品检测

导读 高光谱成像技术能够为食品安全助力。以友思特BlackIndustry SWIR 1.7 Max 为代表的高光谱相机,完美解决了移动产线检测的应用难点。 高光谱技术:为食品安全保驾护航 食品安全一直是大众关心的热点话题,提供安全、高质量的食品需要对食…

HarmonyOS使用arkTS拉起指定第三方应用程序

HarmonyOS使用arkTS拉起指定第三方应用程序 前言代码及说明bundleName获取abilityName获取 前言 本篇只说采用startAbility方式拉起第三方应用,需要用到两个必备的参数bundleName,abilityName,本篇就介绍如何获取参数… 代码及说明 bundle…

Linux的基本指令(一)

1.ls指令 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及信息。 常用选项: -a列出目录下的所有文件,包括以 . 开头的隐含文件。 -l列出文件的详细信息 举例: rooti…

基于Springboot+Vue的博客系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

华为OD机试真题-矩形绘制

题目描述 实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除 当新绘制的矩形与之前的图形重善时,对图形取并集 当新擦除的矩形与之前的图形重善时,对图形取差集 给定一系列矩形的绘制和擦除操作,计算最终图形的面积。下…

数据编排与ETL有什么关系?

数据编排作为近期比较有热度的一个话题,讨论度比较高,同时数据编排的出现也暗示着数字化进程的自动化发展。在谈及数据编排时,通常也会谈到ETL,这两个东西有相似点也有不同点。 数据编排和ETL(提取、转换、加载&#x…

【Golang】Go语言教程

Go语言教程 文章目录 Go语言教程一、Go语言教程二、Go语言特色三、Go语言用途四、第一个Go程序六、运行代码的两种方式七、go run和go buil的区别7.1、go run7.2、Go build 一、Go语言教程 Go全称Golang Go是一个开源的编程语言,它能让构造简单、可靠且高效的软件变…

【重装系统后重新配置2】pycharm 终端无法激活conda环境

pycharm 终端无法激活 conda 环境,但是 Windows本地终端是可以激活的 原因是pycharm 默认的终端是 Windows PowerShell 解决方法有两个: 一、在设置里,修改为cmd 二、下面直接选择

这是一个bug求助帖子--安装kali 遇坑

第一个报错 介质:kali-linux-2024.1-live-amd64 环境:Dell笔记本 i510代cpu 现象及操作 安装完以后 然后我换了个国内的源进行了以下操作 apt-get update:更新源列表 apt-get upgrade:更新所有可以更新的软件包 然后进行清理。…

教你在.Net8.0的WinForm中使用WebView2,实现C#和JavaScript的实时双向互操作

1. 前言 随着 Web 技术的发展,使用网页内容(HTML、JavaScript、CSS 等)作为桌面应用程序的一部分变得越来越常见。在 C# WinForm 中,Microsoft 提供的 WebView2 控件让我们可以轻松地嵌入 Chromium 浏览器,并实现 C# …

如何安装QT(linux/windows)

1. linux 1.1 下载安装程序 进入QT官网,点击右上角下载 Qt | Tools for Each Stage of Software Development Lifecycle​www.qt.io/ 然后选择下载linux版本,这里你需要填写一些信息,注册一些即可 填写之后会出现下面这个网页,…

PVE纵览-PVE与VM:谁才是你的最佳虚拟化选择?

PVE纵览-PVE与VM:谁才是你的最佳虚拟化选择? 文章目录 PVE纵览-PVE与VM:谁才是你的最佳虚拟化选择?摘要1 不同虚拟化平台的基础2 平台特性与功能3 性能与可靠性4 成本与经济性5 应用场景比较6 用户体验与支持7 结论与建议 关键字&…

C/C++语言基础--C++模板与元编程系列四(类型模板参数、整数、指针 、模板类型)

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 模板与元编程是C的重要特点,也是难点,本人预计将会更新10期左右进行讲解,这是第四期,有些和前面三期重合,这一期也是为明天更新打下基础&#xff…

数据结构:顺序表(动态顺序表)

专栏说明:本专栏用于数据结构复习,文章中出现的代码由C语言实现,在专栏中会涉及到部分OJ题目,如对你学习有所帮助,可以点赞鼓励一下博主喔💓 博客主页:Duck Bro 博客主页系列专栏:数…

力扣动态规划基础版(矩阵型)

62.不同路径(唯一路径问题) 62. 不同路径https://leetcode.cn/problems/unique-paths/ 方法一:动态规划 找状态转移方程,也就是说它从左上角走到右下角,只能往右或者往下走,那么设置一个位置为&#xff…