【Java基础教程】(三)程序概念篇 · 上:探索Java编程基础,注释、标识符、关键字、数据类型~

news2024/11/25 3:30:27

Java基础教程之程序概念 · 上

  • 本节学习目标
  • 1️⃣ Java中的注释
  • 2️⃣ 标识符
  • 3️⃣ 关键字
  • 4️⃣ 数据类型
    • 4.1 整型
      • 🔍 什么是变量?什么是常量?
      • 🔍关于数据类型转换的规则?
    • 4.2 浮点数
      • 🔍关于Java的计算的缺陷
    • 4.3 字符型
      • 🔍一些常用编码范围
    • 4.4 布尔型
    • 4.5 字符串型
  • 🌾 总结

在这里插入图片描述

本节学习目标

  • 掌握Java中标识符的定义;
  • 掌握Java中数据类型的划分以及基本数据类型的使用原则;
  • 掌握Java运算符的使用;

1️⃣ Java中的注释

在编写程序时,为了提高程序的可维护性,我们可以在代码中添加注释。注释是一种说明性的文字,不会被编译器编译执行

Java提供了三种注释形式:

  • //:单行注释(以双斜线 // 开始);
  • /*...*/:多行注释(以 /* 开始,以 / 结束);
  • /**...*/:文档注释(以 /** 开始,以 */ 结束)。
  1. 单行注释
    单行注释,就是在注释内容前面加双斜线(//),Java编译器在进行程序编译时会忽略掉这部分信息。例如:
    //案例1:单行注释
    public class TestDemo{
    	public static void main(String[] args){
    		//此处为注释,编译代码时不会被编译
    		System.out.println("Hello xiaoshan.");
    	}
    }
    
  2. 多行注释
    多行注释,就是在注释内容前面以单斜线加一个星号(/*)开头,并在注释内容末尾以一个星号加单斜线(*/)结束。当注释内容超过一行时一般使用这种方法。例如:
    //案例2:多行注释
    public class TestDemo{
    	public static void main(String[] args){
    		/*
    		 * 此处为多行注释,编译代码时不编译
    		 */
    		System.out.println("Hello xiaoshan.");
    	}
    }
    
  3. 文档注释
    文档注释,是以单斜线加两个星号(/**)开头,并以一个星号加单斜线(*/)结束。用这种方法注释的内容会被解释成程序的正式文档,并能包含进如 javadoc工具生成的文档里,用以说明该程序的层次结构及其方法。
    //案例3:文档注释
    /**
    *此处为文档注释
    *@author xiaoshan
    *@Date 2023/07/05
    */
    public class TestDemo{
    	public static void main(String[] args){
    		System.out.println("Hello xiaoshan.");
    	}
    }
    
    在文档注释中提供了许多类似于“@author”、“@Date”的标记,例如:参数类型、返回值、方法说明等。

需要特别注意的是,在软件开发中文档注释是非常重要的。作为开发人员,技术文档是必不可少的工具之一,而且每个操作和功能在文档中都有详细的解释。因此,本文也建议读者在编写代码时养成良好的编程习惯,即添加适当的代码注释。这将帮助提高代码的可读性和可维护性,并为团队合作和未来的项目更新提供更好的支持。

2️⃣ 标识符

在前面的文章 《【Java基础教程】(二)入门介绍篇 · 下》 中,给出了一个程序的基本结构:

public class 类名称{ }

这里类名称的定义就属于一个标识符的定义范畴,而除了类名称之外,Java中属性(也叫字段)名称、方法名称等也都属于标识符的定义范畴,但是在Java中每一个标识符都有自己的严格定义要求。

标识符的定义要求是:标识符可由字母、数字、_、$ 组成,其中不能以数字开头,不能是Java中的关键字(也称保留字)。对于标识符的定义,除了应满足以上的规则要求,还应该注意以下问题:

  • 命名尽量有意义,避免使用“a” “b” “c”这样不具备意义的标识符。例如:studentname此类属于见名知意的标识符;
  • Java中标识符是区分大小写的,例如:xiaoshanXIAOSHANXiaoShan表示3个不同的标识符;
  • 对于“$”符号有特殊意义,避免去使用它(后文讲解);
  • 特别地,对于类名的定义,每个单词首字母应该大写,例如:DemoClass
  • 特别地,对于属性名、方法名的定义,应满足驼峰命名规则,即首个单词的首字母小写,其他单词首字母大写,例如:getName
  • 特别地,对于常量的定义,每个字母应该大写,例如:AGE

为了帮助大家更好的理解标识符的定义,请看下面两组合法与非法标识符的对比:

  • 下面是合法的标识符
    nameageaddress
  • 下面是非法的标识符
    class(关键字)、public(关键字)、68.6(数字开头和包含非法字符 .)、xiao shan(包含非法字符空格)

有趣的是,从JDK1.7开始标识符增加了中文的支持,即:标识符可以使用中文定义。不过虽然Java给予了中文很好的支持,但在实际开发中还是建议按照习惯性的开发标准通过英文编写程序。

3️⃣ 关键字

关键字是指具备有特殊含义的单词,例如:publicclassstatic 这些都属于关键字,关键字全部用小写字母的形式表示,在Java中可以使用的关键字罗列如下:
在这里插入图片描述

有一点需要注意的是,读者朋友们不需要死记硬背Java中的关键字。对于初学者来说,可能感到要记住所有关键字是一件繁琐的事情。但其实随着对知识的熟悉度提升,这些内容都会逐渐被记住,所以无需强行记忆。而回顾之前学过的内容时,会发现已经见过类似publicclassvoidstatic等关键字。所以,最好的掌握方法是多学多练,通过实际编程来深入理解和掌握一门编程语言。

下面对所有给出的关键字作以下几点说明:

  • Java有两个未使用到的关键字:goto(在C语言中表示无条件跳转)、const(在C语言中表示常量);
  • assert关键字和enum关键字分别是 JDK1.4之后和 JDK1.5之后增加的;
  • Java有3个特殊含义的标记(严格讲不算是关键字):truefalsenull

4️⃣ 数据类型

在程序设计中,数据的处理是最本质的,因此对于数据的存储必须有严格的限制。这些限制体现在数据类型的划分上,不同的数据类型可以保存不同类型的数据内容。

在Java中,数据类型可分为基本数据类型和引用数据类型。基本数据类型包括byteshortintlongfloatdoublecharboolean等最基本的类型,引用数据类型(类似于C/C++中的指针)在操作时需要进行内存空间的分配(如图1示)。基本数据类型不涉及内存分配问题,而引用数据类型需要开发人员为其分配内存空间,并进行关联匹配。

图1 Java中的数据类型

本节主要讲解各个基本数据类型。基本数据类型不牵扯内存的开辟问题,引用类型牵扯内存的开辟,并且引用类型作为整个Java入门的第一大难点,所以将在后面面向对象部分的文章中进行深入分析。同时需要注意的是,对于数据类型的划分以及数据类型的名称都要熟记。

Java的基本数据类型主要以数值的方式进行定义,这些基本数据类型的保存数据范围如下表所示:

基本数据类型说明占用空间取值范围
byte字节型1 byte-128~127
short短整型2 byte-32768~32767
int整型4 byte-2^31~ 2^32-1
long长整型8 byte-2^63~ 2^64-1
float单精度浮点型4 byte-2^31~ 2^32-1
double双精度浮点型8 byte-2^63 ~ 2^64-1
char字符型2 byte一个Unicode字符
boolean布尔型1 bytetrue或false

一般来说,我们使用int来表示整数值(比如人的年龄),而使用double来表示小数值(如成绩或工资)。

如果需要表示日期时间或文件大小(以字节为单位),可能会选择long类型。而如果涉及到内容传递(IO操作、网络编程)或编码转换(如JSP开发中使用UTF8编码),我们通常会选择byte类型。

在当涉及到逻辑控制时,boolean类型非常合适(它只有两个值:truefalse)。另外,当处理中文时,使用char类型可以避免乱码问题。

而由于计算机硬件价格(如CPU、内存、磁盘)逐渐降低,对数据类型大小的严格限制也不再像初始阶段编程那样必要。因此,像shortfloat这样的数据类型在大多数项目中是很少出现的。

下面主要对各种常用的基本数据类型的使用进行说明。

4.1 整型

任何一个数字常量(如30100),在Java中都属于int数据类型。也就是说在Java中所有设置的整数内容默认情况下都是int型数据。下面案例演示了如何定义int型变量。

//案例4:定义`int`型变量
public class TestDemo{
	public static void main(String args[]){
		//为变量设置内容使用如下格式:数据类型 变量名称 = 常量;
		int num = 10;	//10是常量,常量的默认类型是int
		int result = num*2;	//利用num变量的内容乘以2,并且将其赋值给result
		System.out.println(result);	//输出result变量
	}
}

程序执行结果:

20

上边案例程序首先定义了一个num的变量,并在定义变量时为其赋值为10,随后利用num变量的内容乘以一个整型常量2,并且将其计算结果(20)赋值给result变量,最后进行了result变量的输出,所以最终的输出结果就是“20”。本程序实际上只实现了一个简单的乘法算术运算,Java中可以使用“+”(加法)、“-”(减法)、“*”(乘法)、“/”(除法)实现基本的四则运算操作。

🔍 什么是变量?什么是常量?

实际上变量与常量最大的区别只有一个:常量的内容是固定的,而变量的内容是可以改变的。

变量是利用声明的方式,将内存中某个内存块保留下来以供程序使用。可以声明的数据类型为整型、字符型、浮点型或是其他数据类型,作为变量的保存使用。变量在程序语言中扮演最基本的角色。变量可以用来存放数据,而使用变量之前必须先声明它的数据类型。常量顾名思义就是一个固定的数值,是不可改变的,例如:数字12就是一个整型的常量。

案例:观察变量与常量的区别。

//案例5:变量与常量的区别
public class TestDemo{
	public static void main(String args[]){
		//所有的变量名称在同一块代码中只允许声明一次
		int num = 10;			//10是常量,常量的默认类型是int
		num=num*2;		//取出num变量的内容乘以2,并且将其设置给num变量
		System.out.println(num);
	}
}

程序执行结果:

20

上边案例程序首先定义了一个num的变量,并且为其赋值为10,然后利用num变量的内容乘以数字2,最后将计算结果又赋值给变量num(此时num的内容已经发生了改变,因为其内容可变所以称其为变量),最终num变量的内容就是20。

在上文中已经为读者列出了每种基础数据类型的取值范围,如果已经超过了其保存的最大范围会如何呢?下面通过一个具体的程序来观察此类问题。

//案例6:数据溢出
public class TestDemo{
	public static void main(String args[]){
		int max=Integer.MAX_VALUE;	//取出最大值
		int min = Integer.MINVALUE;	//取出最小值
		System.out.println(max);
		System.out.println(min);
		//int变量 ± int型常量 = int型数据
		System.out.println(max+1);		//最大值加1:2147483648
		System.out.println(min-1);		//最小值减1:2147483647
		System.out.println(min-2);		//最小值减2:2147483646
	}
}

程序执行结果:

2147483647
-2147483648
-2147483648
2147483647
2147483646

本程序首先利用Integer.MAXVALUEInteger.MINVALUE 取得int数据类型的最大值与最小值,然后分别进行超过数据保存范围的数学计算。由于maxmin变量都属于int型变量,而当int型变量与int型常量进行计算后其结果依然是int型。

但是此时由于计算超过了其保存的范围,就会出现一个循环的操作,最大值如果继续增加就变为最小值,随后一直向其次的最小值进行循环,反之最小值减1就变为最大值,此种现象称为数据的溢出(如图2所示)。

图2 int类型的数据溢出

学习过汇编语言的读者应该知道,在计算机中二进制(01)是基本的组成单元,而int型数据一共占32位(bit)长度,也就是说第一位是符号位,其余的31位都是数据位。

当数据已经是该数据类型保存的最大值时,如果继续进行“+1”的操作就会造成符号位的变更,最终就会形成这种数据溢出的问题。但也不用过于担心开发中出现数据溢出问题,只要控制得当并且合乎实际逻辑辑(例如:定义一个人年龄的时候是绝对不应该出现数据溢出问题,如果真出现了数据溢出,那么这样的数据已经是违背现实逻辑的了),自然也很少会出现此类情况。

而如果要想解决溢出问题,就只能通过扩大数据范围的方式来实现。比int范围更大的是long数据类型,将int型的变量或常量变为long数据类型有如下两种形式。

  1. int型常量转换为long型常量,使用“数字L”或者“数字l(小写的字母L)”完成;
  2. int型变量转换为long型变量,使用“(long)变量名称”。实际上可以用此类方式实现各种数据类型的转换,例如:如果将int型变量变为double型变量,可以使用“(double)变量名称”,即通用转换格式“(目标数据类型)变量”。

以下是一个案例来演示如何扩大数据类型:

//案例7:扩大数据类型
public class TestDemo{
	public static void main(String args[]){
		int max = Integer.MAX_VALUE;	//取出最大值
		int min = Integer.MIN_VALUE;	//取出最小值
		//int变量 ± long型常量 = long型数据
		System.out.println(max+1L);	//最大值加1
		System.out.println(min-(long)1);	//最小值减1
		//long变量 ± int型常量 = long型数据
		System.out.println((long)min - 2);	//最小值减2
	}
}

程序执行结果:

2147483648
-2147483649
-2147483650

以上案例程序首先取得了int数据类型的最大值与最小值,但是在进行计算时将两个int型的常量(“1L” “(long)1”)与一个int型变量(“(long)min”)转换为了long类型,由于long类型保存的数据范围较大,所以在计算时数据类型将统一自动转型为long型后再进行计算,此时就可以得出正确的计算结果。

以上代码利用数据的转型解决了数据的溢出问题。而除了可以将范围小的数据类型变为范围大的数据类型之外,也可以将范围大的数据类型变为范围小的数据类型,这种情况必须使用类型强制转换“(数据类型)数据”的格式完成。下面案例将演示如何将范围大的数据类型变为范围小的数据类型:

//案例8:使用类型强制转换来缩小数据类型
public class TestDemo{
	public static void main(String args[]){
		long num = 1000;	//1000常量是int型,使用long接受,发生了向大范围转型
		int x=(int) num;	//把long变为int
		System.out.println(x);
	}
}

程序执行结果:

1000

此程序首先将一个int型常量1000赋值给long数据类型,由于long数据类型保存的数据范围要大于int数据类型,所以此处为自动转型,而后为了验证数据类型的向下转型,又将long数据类型强制变为int数据类型((int)num)。

需要注意的是强制类型转换可能导致数据溢出问题。虽然程序支持强制类型转换,但是在将范围大的数据类型强制转换为范围小的数据类型时,依然要考虑该数据是否会发生溢出。以下案例就演示了类型强转时发生的数据溢出问题:

//案例9:类型强制转换时引发数据溢出问题
public class TestDemo{
	public static void main(String args[]){
		long num = 2147483650L;	//该数据已经超过了int数据范围
		intx = (int)num;	//把long变为int
		System.out.println(x);
	}
}

程序执行结果:

-2147483646

此程序首先定义了一个long数据类型的变量,并在变量声明时对其进行赋值,由于此时设置的数据“2147483650”已经超过了int范围,所以加上了“L”表示将此数值变为了long型。然后将long类型变量强制转换为int类型变量,但由于已经超过了int的数据保存范围,所以最终发生了数据的溢出。

🔍关于数据类型转换的规则?

在开发中数据类型的转换是经常使用到的概念,而数据类型的转换一般有以下规律。

  • 数据范围小的数据与数据范围大的数据进行数学计算时,自动向大范围的数据类型转换后计算(例如:int类型和long类型计算,由于int类型保存范围小则自动变为long类型);

  • 数据范围大的数据要变为数据范围小的数据,必须采用强制转换,例如:long数据类型转换为int数据类型,由于int数据类型保存的范围要小于long数据类型,所以必须强制转换;

  • 如果要强制性地将某一数据类型变为其他类型,则必须采用强制类型转换,例如:“(double) long型变量”,表示将long类型变量转换为double类型变量。


虽然在Java中提供了这样的转换原则,但从实际的开发来讲,建议尽量少去使用强制类型转换,以免造成数据精度的丢失以及数据功能性的破坏。这一点读者可以随着自己开发经验的提升而有更多的领悟。

在整型数据类型中,除了intlong这两个常用数据类型外,最为常用的就是byte数据类型了,byte数据类型的取值范围:-128~127。以下案例程序演示了byte类型的定义及取值范围:

//案例10:`byte`数据类型的取值范围
public class TestDemo{
	public static void main(String args[]){
		int num =130;	//此范围超过了byte定义
		byte x = (byte)num;	//由int变为byte
		System.out.println(x);
	}
}

程序执行结果:

-126

本程序首先定义了一个int型的变量,随后将此变量强制转型为byte型,由于此时num变量保存的数据值超过了byte的保存范围,那么最终会造成数据溢出问题。另外,考虑到byte数据类型较为常用,如果每次使用时都采用强制转换的方式比较麻烦,所以Java对其有一些很好的改善:

//案例11:Java对`byte`数据类型的优化
public class TestDemo{
	public static void main(String args[]){
		byte num=100;	//100没有超过byte的保存范围
		System.out.println(num);	//输出byte变量的内容
	}
}

程序执行结果:

100

从案例可以了解到,虽然任何一个整数都属于int型,但是Java编译时,如果发现使用的数据变量类型为byte,并且设置的内容在byte数据范围之内,就会自动帮助用户实现数据类型的转换。反之,如果超过了byte数据范围,则依然会以int型进行操作,此时就需要进行强制类型转换了。

虽然在Java中每个变量都有其默认值,但是这些默认值并不是在任何时候都可以使用(例如:方法中必须设置变量内容,而类中可以使用各个数据类型的默认值,这一点读者需要慢慢摸索),所以声明变量时最好的选择就是为其指派默认值。这是在JDK1.5之前的开发要求,在JDK1.5之后,Java考虑到程序的开发方便,允许在声明变量时不设置内容,但是要求在使用前必须设置内容。

//案例12:定义变量时不设置内容,使用变量前设置内容
public class TestDemo{
	public static void main(String args[]){
		int num;	//没有默认值
		num = 5;	//在使用此变量之前设置内容
		System.out.println(num);
	}
}

程序执行结果:

5

以上操作形式属于首先定义了一个变量num,但是此变量没有设置内容,然后设置了num变量的内容,最后再使用此变量。但是以上代码如果在JDK1.4及以前的版本是不可能编译通过的。因此最标准的做法是在定义变量的时候直接设置好默认值(int num=0;)。

4.2 浮点数

浮点数就是小数,Java中只要是小数,对应的默认数据类型就是double型数据,double也是取值范围最广的数据类型。以下案例演示了该类型的使用:

//案例13:定义浮点数
public class TestDemo{
	public static void main(String args[]){
		double num = 10.2;	//10.2是一个小数所以属于double型
		//double型 * int型(转化为double,3.0)= double型
		System.out.println(num*3);
	}
}

程序执行结果:

30.6

此程序首先声明了一个numdouble型变量,然后利用此变量乘以一个值为3int型常量,由于int数据类型保存的数据范围要小于double数据类型,所以int类型会自动转型为double类型,最后再参与计算。

由于默认的小数类型是double,所以如果使用float表示需要将double型变为float型,这时需要采用强制转换。转换的方式有两种:

  1. 使用字母“F”或“f”;
  2. 在变量或常量前使用“(float)”声明。
//案例14:使用float型浮点数
public class TestDemo{
	public static void main(String args[]){
		float f1 = 10.2F;		//小数都是double型,所以需要强制转换为float型
		float f2 = (float)10.2;		//小数都是double型,所以需要强制转换为float型
		System.out.println(f1*f2);	//float类型*float类型=float类型
	}
}

程序执行结果:

104.03999

此程序声明了两个float型变量,在声明变量时为其进行赋值,由于所有的小数默认类型都是double,需要进行强制类型转换,随后利用两个float型变量进行乘法计算。

🔍关于Java的计算的缺陷

可以发现,本程序的最终计算结果并不是期待的“104.04”,而是“104.03999”,这一问题本身属于Java的Bug(从JDK1.0开始的),只依靠计算本身无法解决,但是可以通过 MathBigDecimal两个高精度计算工具类来得到精确的结果,这部分知识会在后面的文章中做介绍。

实际上最早开发的时候,考虑到内存问题,往往能使用float就不使用double,例如:J2ME开发时,由于内存苛刻,所以往往会压缩数据范围,以节约空间。现在随着硬件成本的降低,是否使用doublefloat区别意义就不大了,可以直接使用double数据。需要注意的是,所有的数据类型只有doublefloat才可以保存小数。

//案例15:关于除法的问题
public class TestDemo{
	public static void main(String args[]){
		int x=9;	//声明整型变量
		int y=5;	//声明整型变量
		System.out.println(x/y);	//int型÷int型=int型
	}
}

程序执行结果:

1

此程序分别声明了两个int型变量(整型不能保存小数),而在进行除法计算时,根据两个int类型的变量计算后还是int类型这一定律,所以最终的计算结果是1,而不是正确的“1.8”。要想得出正确的计算结果,则可以将其中一个整型变为浮点类型:

//案例16:解决除法计算精度
public class TestDemo{
	public static void main(String args[]){
		int x=9;	//声明整型变量
		int y=5;	//声明整型变量
		System.out.println(x/(double)y);	//将其中一个int类型变量转换为double类型
	}
}

程序执行结果:

1.8

本程序在进行除法计算时,将变量yint类型变为double类型,所以最终计算时变量x的类型也将自动转换为double类型,计算的结果就会包含小数数据。

4.3 字符型

在计算机中,byte代表字节的单位,按照传统的概念,一个字符通常由2个字节组成。对于字符而言,除了与字节之间有一些关联外,其主要关系在于与int类型变量的转换。

在计算机世界中,一切都以编码的形式存在。Java采用十六进制的UNICODE编码,这种编码可以表示任意字符。然而,在设计过程中考虑到与其他编程语言(如C/C++)的兼容性,该编码中包含了ASCII码的部分内容。因此,如果读者之前有类似的开发经验,对于Java的编码部分可以进行无缝衔接。

学习过C语言的读者,应该清楚在C语言中转换的编码是ASCII码,其编码范围如下:

  • 大写字母范围:65~90;
  • 小写字母范围:97~122。

大写字母和小写字母之间差了32,而Java的编码很好地继承了这一特性,即也可以按照此范围的编码表示常见的英文字母。在程序中使用单引号“'”声明的内容称为字符,每一个单引号里面只能够保存一位字符。

//案例17:定义字符型数据
public class TestDemo{
	public static void main(String args[]){
		char c = 'A';	//字符
		int num = c;	//字符可以和int型互相转换(以编码的形式出现)
		System.out.println(c);
		System.out.println(num);
	}
}

程序执行结果:

A
65

此程序首先定义了一个char型的变量c,而后将此字符型变量转换为int型变量,经过计算发现字母“A”的编码数值为65

🔍一些常用编码范围

  • ‘A’(65)~’Z’(90)
  • ‘a’(z97)~’z’(122)
  • ‘0’(48)~’9’(57)

实际上字母“'A'”的编码值(65)要小于字母“'a'”的编码值(97),两者的编码值相差32,所以可以利用简单的数学计算来实现大小写转换。
//案例18:实现字母大小写转换
public class TestDemo{
	public static void main(String args[]){
		char c = 'A';		//大写字母
		int num = c;		//需要将字符变为int型才可以使用加法计算
		num = num+32;		//变为小写字母的编码
		c = (char)num;		//将int变为char型
		System.out.println(c);
	}
}

程序执行结果:

a

此程序首先定义了一个字符变量c,内容为字母“'A'”,然后为了可以实现大写变为小写的功能,将char型变量设置给int型变量,最后针对int变量num执行了加32的操作('A’与’a’的编码值相差32),随后将int型转换为char型,所以最终的输出结果就是小写的字母“'a'”。

在传统的编程语言中,字符里面只能够保存一些英文字母的标记,但是在Java中,由于使用了UNICODE编码,这种十六进制的编码可以保存任意的文字,因此可以设置一个中文字符。

//案例19:利用字符变量保存中文
public class TestDemo{
	public static void main(String args[]){
		char c='王';	
		int num = c;	
		System.out.println(num);
	}
}

程序执行结果:

29579

上边程序直接为字符设置了一个中文数据(只能是一个汉字),随后将其转换为int型数据,可以发现每一个中文在Java中都存在对应的UNICODE编码。

在最早的编程语言中,由于中文与英文字母所占的字节位数不同,在进行断句信息处理的时候,为了避免产生乱码问题(例如,在进行切割时将一个汉字拆成了两半,编码就会造成错误),往往需要进行编码范围的判断,操作过程会比较麻烦,但是在Java中由于英文与中文都使用了统一的UNICODE编码,所以此类问题也不再需要开发者做过多考虑。

4.4 布尔型

布尔型是一种逻辑结果,主要保存truefalse两类数据,这类数据主要用于一些程序的逻辑使用。

//案例20:布尔值数据定义使用
public class TestDemo{
	public static void main(String args[]){
		boolean flag = false;		//布尔只有两种取值:true、false
		if(!flag){					//if(布尔值){满足条件的操作}
			System.out.println("Hello World.");
		}
	}
}

程序执行结果:

Hello World.

布尔型数据在大多数情况下都是用于程序逻辑控制的,所以在本程序中使用if分支结构来操作,在if分支结构中,如果判断的结果为true,则表示执行相应语句,如果为false,则表示不执行。

在许多的语言之中,由于设计的初期没有考虑到布尔型的问题,那么就使用了数字0表示false,而非数字0表示true(例如:1、2、3都表示true),但是这样的设计对于代码开发发比较混乱,Java里面不允许使用01来填充布尔型的变量内容。

4.5 字符串型

String表示的是一个字符串,即:多个字符的集合,String要求使用双引号“"”声明其内容。

与其他的几种基本数据类型相比,String属于引用数据类型(它属于一个类,在Java里面只要是类名称,每一个单词的首字母都是大写的),但是这个类的使用比较特殊。

//案例21:字符串定义使用
public class TestDemo{
	public static void main(String args[]){
		String str = "Hello World!";	//字符串变量
		System.out.println(str);		//输出字符串变量
		System.out.println("Hello World!");//输出字符串常量
	}
}

程序执行结果:

Hello World!
Hello World!

此序定义了一个String型的变量,随后将此变量进行输出,而为了进行对比,也同时输出了一个常量,通过本程序可以清楚使用“"”声明的内容就表示是一个String型的常量。在字符串的操作中,如果要改变内容,在次数不多的情况下可以使用“+”进行字符串拼接操作(操作次数多的情况使用更高效的StringBufferStringBuilder类,在后面文章会详细介绍)。

//案例22:字符串连接
ppublic class TestDemo{
	public static void main(String args[]){
		String str = "Hello";
		str=str + " World";	//字符串连接
		str += "!!!";		//字符串连接
		System.out.println(str);
	}
}

程序执行结果:

HelloWorld!!!

而在基本数据类型操作中,任何数据类型都向范围大的数据类型进行转换,如果是intdoubleint应该先变为double,再进行加法计算。但是如果遇见了String这样特殊的引用类型,那么一切就变了,可以简单理解为,所有的数据类型如果遇见了String的“+”,那么所有的数据类型都先变为String型数据,再使用“+”进行连接运算。

在Java里面也支持多种转义字符的使用,例如:换行(\n)、制表符(\t)、\(\\)、双引号(\")、单引号(\')。

//案例23:转义字符
ppublic class TestDemo{
	public static void main(String args[]){
		String str= "Hello\"World\"\n\tHelloXiaoShan";
		System.out.println(str);
	}
}

程序执行结果:

Hello"World"
	HelloXiaoShan

此序在定义字符串的过程中使用了各种转义字符,而后在执行时每个转义字符都会转化为实际的样式显示出来。

🌾 总结

本文详细介绍了Java中的注释、标识符、关键字和数据类型。通过学习这些基础概念,读者可以开始他们在Java编程领域的探索。

首先,我们强调了注释的重要性。注释在代码中提供说明和解释,帮助他人理解代码的意图。我们介绍了三种常见的注释形式:单行注释、多行注释和文档注释。正确使用注释可以提高代码的可读性和可维护性。

其次,我们探讨了标识符的概念。标识符是用来命名变量、方法、类等程序元素的名称。我们强调了标识符的命名规则,如不能以数字开头、不允许使用特殊符号等。良好的命名习惯可以使代码更清晰、易于理解和维护。

接下来,我们讨论了Java的关键字。关键字是Java语言预留的特定单词,拥有固定的含义和用途。我们列举了一些常见的关键字,如publicclassvoidstatic等。了解关键字可以帮助读者理解和正确使用Java语言的各种功能和语法。

最后,我们介绍了Java的数据类型。Java提供了基本数据类型和引用数据类型。我们讨论了最常用的基本数据类型,如intdoublechar等,以及引用数据类型的一些特点。正确选择适当的数据类型可以帮助节省内存空间并提高程序的效率。

通过掌握Java中的注释、标识符、关键字和数据类型,读者已经开始建立起良好的编程基础。继续深入学习和实践将使他们在Java开发领域不断进步,探索更多丰富的功能和技术。


温习回顾上一篇(点击跳转)《【Java基础教程】(二)入门介绍篇 · 下》
继续阅读下一篇(点击跳转)《【Java基础教程】(四)程序概念篇 · 中》


本文图片来源:
《java——数据类型》

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

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

相关文章

chatGPT写综述

文献是任何学术研究的基础,但搜集和整合众多的信息,写成一篇健全的文献综述却是一项艰巨的任务。随着人工智能技术的发展,大型预训练语言模型(LM),如OpenAI的ChatGPT变得越来越流行。本文将探讨如何使用Cha…

K8S的概念和基本应用

学习视频:Kubernetes基本概念和应用_哔哩哔哩_bilibili 零 . 架构概览 master节点:管理调度集群资源,一般为多节点构成,可以是物理机,也可以是虚拟机。worker节点:资源的提供者,一般为多节点构…

沟通的层次模型

沟通的层次模型 根据沟通的倾向性将沟通划分为五个层次,分别是情绪、感受、想法、态度和事实。 模型介绍 沟通的层次 第5层:沟通情绪-带着强烈情绪表达,尤其经常使用这些字眼:“总是”、“每次都”第4层:沟通感受-不…

【APP开发】uni-data-select真机下拉框不显示问题

官网示例:uni-data-select 因为外层container有样式: width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: column; 去掉最外层 class"container"之后就可以了,但具体原因不清楚 我是对比了Hello uni-…

python中多态的作用是什么?

在强类型语言(例如Java或C#)中,多态是指允许使用一个父类类型的变量或常量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。即使用父类的类型来调用子类的方法。 在Python中,多态指在不考虑对象类型…

js压缩base64图片

今天试了用js把base64编码格式的图片进行压缩,记录一下: base64图片转换地址 base64图片转换网址 代码如下 js: $(document).ready(function(){compressImg(targetObj.src, 0.5, useImg, targetObj) });let targetObj {// base64字符串 …

机器学习26:《数据准备和特征工程-IV》数据转换

特征工程 是确定哪些特征可能对训练模型有用,然后通过转换日志文件等数据来源中的原始数据来创建这些特征的过程。在本文中,笔者将重点讨论何时以及如何转换数字和分类数据,以及不同方法的权衡。 目录 1.数据转换的原因 1.1 数据兼容性的强…

并发容器(一)CopyOnWriteArrayList

我们知道,ArrayList,LikedList,HashMap都是线程不安全的容器 同步容器:Vector,HashTable,SynchronizedList是线程安全的,因为里面加了synchronized同步,所以这样的容器也叫同步容器…

Zabbix监控

Zabbix监控 1.Zabbix监控概述1.1 zabbix是什么1.2 zabbix监控原理1.3 Zabbix 6.0新特性1.4 Zabbix 6.0功能组件1.5 Zabbix与prometheus区别对比 2. 部署Zabbix6.02.1 安装NginxPHP2.2 部署Mariadb数据库2.3 安装zabbix Server服务端2.4 部署Web前端,进行访问2.5 部署…

对给定的两个日期之间的日期进行遍历

每日一练:对给定的两个日期之间的日期进行遍历 题目 对给定的两个日期之间的日期进行遍历,比如startTime是2014-07-11;endTime是2014-08-11 如何把他们之间的日期获取并遍历出来。 思路与分析 不难看出,选项的4段实现代码中,除…

产品经理必须懂的api接口文档编写规范,api接口文档入门

很多产品经理刚接触 API 接口工作时,脑子一片空白,不理解接口(API)是什么,更看不懂接口开发文档。那么,作为一个不懂技术的产品经理,该如何看懂接口文档。今天这篇文章就跟大家好好巴拉巴拉。 …

一次阿里云Schedulerx换成Spring定时任务的过程

1、当前现状 所有的任务已经迁移到阿里云Schedulerx;阿里云Schedulerx是按照调用次数收费,有些任务每秒调用一次,费用太高; 2、明确需求 需要把执行非常频繁的定时任务从阿里云迁移(阿里云收费根据调用次数&#xff0c…

基于matlab使用迭代方法为语义分割网络生成对抗性示例(附源码)

一、前言 此示例说明如何使用基本迭代方法 (BIM) 为语义分割网络生成对抗性示例。 语义分割是将图像中的每个像素分配给类标签的过程,例如汽车、自行车、人或天空。语义分割的应用包括自动驾驶的道路分割和医疗诊断的癌细胞分割。 神经网络…

5、架构:通用 Schema 设计

作为前端开发一定会非常熟悉 AST 抽象语法树(Abstract Syntax Tree),当浏览器加载 JS 代码时,它会首先将代码转换为一棵抽象语法树(AST),然后再根据 AST 来渲染对应的 DOM 结构,对于…

接口自动化核心知识点浓缩,为面试加分

日常接触到的接口自动化从实际目标可以划分为两大类: 为模拟测试数据而开展的接口自动化 这种接口自动化大多是单次执行,目的很明确是为了功能测试创造测试数据,节约人工造数据的时间和人工成本,提高功能测试人员的测试效率。 …

Nuendo 12.0.70 资源下载及功能介绍

简介 Nuendo 12是一款屡获殊荣的影视、游戏和沉浸式环绕声音频后期制作软件,Nuendo 12在对白录音和编辑方面做了重大改进,为你的录音带来新声。Nuendo12把“对白”制作放到一个非常重要的位置,比以前更加贴近用户,它甚至起了一个…

读书笔记-《ON JAVA 中文版》-摘要19[第十八章 字符串-2]

文章目录 第十八章 字符串6. 常规表达式6.1 基础6.2 创建正则表达式6.3 量词6.4 CharSequence6.5 Pattern 和 Matcher6.5.1 find()6.5.2 组(Groups)6.5.3 start() 和 end()6.5.4 split()6.5.5 替换操作6.5.6 reset() 7. 扫描输入7.1 Scanner 分隔符7.2 用…

Python 解释器

文章目录 每日一句正能量前言交互式编程脚本式编程 每日一句正能量 不是因为生活太现实,而对生活失望;而是知道生活太现实,所以更要用心的活下去。给自己一个拥抱。 前言 Python 解释器是运行 Python 代码的工具,主要分为官方提供…

MySQL索引结构(面试题)、索引分类、语法

2索引 2.1 索引概述 2.1.1 介绍 ​ 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据&#xff…

【2022吴恩达机器学习课程视频翻译笔记】3.2线性回归模型-part-2

3.2线性回归模型-part-2 Let’s look in this video at the process of how supervised learning works. Supervised learning algorithm will input a dataset and then what exactly does it do and what does it output? Let’s find out in this video. Recall that a tr…