二,数据类型和运算类型
1.标识符是什么?
Java对各种变量,方法,类和包等要素命名时使用的字符序列称为标识符。
标识符规则:
a.标识符有字母,数字,下划线_(下划线要在输入法是英文状态下,按住Shift后才能输入),美元符号$组成,并且首字符不能是数字。
b.不能把Java关键字作为标识符。
c.标识符对大小写敏感。
不同类型的标识符的命名规则:
对于变量和方法名,建议第一个单词应以小写字母作为开头,后面的每个单词则都要以大写字母开头,例如 stuAge、sendMessage。
对于类名,它和变量名、方法名的区别在于,第一个单词的首字母也需要大写,如果类名称中包含单词缩写,则这个缩写词的每个字母均应大写,例如 XMLModule(XML 是几个单词的缩写)。另外,由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。
常量(即不可变的量)标识符应该都使用大写字母,并且指出该常量完整的含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词,例如 MAX_VALUE。
对于包的名字,通常用小写。
2.关键字是什么?
Java 关键字对 Java 编译器有特殊的意义,它们用来表示一种数据类型或者表示程序的结构,不能用作变量名、方法名、类名和包名。
大多数的编辑器(例如 Notepad++ 和 UltraEdit 等,不含记事本)和集成开发环境(Eclipse 和 MyEclipse)都会用特殊颜色把 Java 关键字标识出来。
Java 的关键字都是小写的英文字符串,需要注意的是,goto 这个标识符虽然从不使用,但也作为 Java 保留字进行保留。下图列出了所有的 Java 关键字。
var也是一个关键字,但表中没有提到。(注意:关键字是不能作为标志符,比如int)
3变量和常量
我们先看一下概念型的东西。
变量被用于存储程序中后面要用到的值,它们之所以被称为变量是因为它们的值可以被改变。变量是程序中数据的临时存放场所,变量中可以存放字符串、数值、日期和对象等数据。
Java 变量定义的核心要素是变量类型、变量名和变量值,其声明格式如下:
type varName [=value];
其中,type 表示 Java 的数据类型(后续章节会详细介绍 Java 的基本数据类型),其含义为这个变量里存放的是什么类型的数据。varName 是变量名,声明后可通过这个变量名来存 、取数据。value 是变量值,在声明变量的时候可以直接赋值(第一次赋值也称变量初始化)。通过 varName = newValue,可以给这个变量赋新的变量值。
对于内存而言,type varName 是声明变量,相当于根据数据类型向内存申请一块空间,而 =value 相当于把值放到这个内存空间中。例如 int stuAge = 22(省略分号,下同),可以拆分成 int stuAge 和 stuAge = 22 两条语句,其中 int stuAge 相当于向内存申请一块可以存储 int 型变量的空间(实际为 4 个字节,32 位),而 stuAge = 22 相当于把 22 这个数字放到了这块内存空间中,接下来还可以通过 stuAge = 27 这条语句把 27 这个数字放到刚才的内存空间中替换了原来的 22。
在使用变量时,要避免出现未赋值就使用的情况。虽然在后面的章节中,会看到一些变量即使不赋值也会有默认值,但为了避免程序出错,应尽量对变量先赋值后使用。
知道了变量,我们来看看什么是常量。
在 Java 语言中,利用 final 关键字来定义 Java 常量,其本质为值不可变的变量。
Java 常量的本质是值不可变的变量,并且常量在声明的时候,要么直接进行初始化赋值,要么通过后续讲解的构造方法赋值。并且和变量不同的是,常量在程序中将无法再次赋值,如果强行赋值,程序会抛出错误信息,并拒绝接受这个新值。
4.数据类型
a.变量类型
假设编写程序让计算机完成这样的操作:一个学生的年龄是 22 岁,新年的钟声敲响之后,他的年龄就应该增加一岁,即为 22+1。计算机如何执行这样的操作呢?首先,计算机要向内存申请一块空间,存放 22 这个数字,再申请一块空间,存放 1 这个数字,然后让计算机求这两个数字的和,存放到内存中。
现在是用整数存储学生的年龄,申请了一块内存空间,如果要存储学生的姓名,或者存储学生的成绩(例如 78.5),也是申请同样大小的一块内存空间吗?这样的内存空间能存下需要存储的数据吗?答案是否定的。
根据能对数据进行的操作以及存储数据所需内存大小的不同,编程语言都会把数据分成不同的类型。Java 中数据类型分为两大类,即基本数据类型和引用数据类型,如下图所示。其中引用数据类型又分为类、接口和数组(在后续章节会详细介绍)。
基本数据类型又分为 3 类 8 种,3 类分别是数值型、字符型和布尔型,数值型又可细分。下表列出了不同的基本数据类型所占的字节数、位数和使用说明。
b.4种整形特点
Java 的整型又细分为 byte、short、int、long 四种类型,它们都有固定的取值范围而不受具体操作系统的影响,以保证 Java 程序的可移植性。
以 byte 为例说明取值范围的推理过程:
- 最大值:高位为 0 表示正数,其余7个位为1,十进制为127
- 最小值:高位为 1 表示负数,其余7个位为0,十进制为-128
c.进制转换
Java 整型字面值常量有以下 4 种表示形式。
- 十进制整数,例如 12,-127,0。
- 八进制整数,以 0 开头,例如 014(对应于十进制的 12)。
- 十六进制整数,以 0x 或 0X 开头,例如 0XC(对应于十进制的 12),0XA5(对应于十进制的165)。
- 自 JDK7 以后,还可以用 0b 或 0B 开头,表示二进制整数,例如 0b11(对应于十进制的 3)。
其他常见进制,虽然不能直接表示,但仍然可以通过 Java 中的一些 API 转换后得到。关于 API 的相关知识,大家也会随着学习的深入逐渐了解。
自 JDK7 以后,为了提高数字的可读性,还可以使用下划线(_)对数字分组,但要注意下划线不能出现在数字的首部或尾部,也不能出现在 0b 和 0x 左右、小数点左右、L 和 F 符号前。例如,在定义变量时,double d = 123_456.7_8 和 double d = 123456.78 是等价的。
常见的进制转换
不懂的可以点这个链接,去看看进制到底是如何转换的。
d.浮点类型
在计算机系统的发展过程中,曾经提出过多种表示实数的方法,但是到目前为止使用最广泛的是浮点表示法。相对于定点数而言,浮点数利用指数使小数点的位置可以根据需要而上下浮动,从而可以灵活地表达更大范围的实数。
Java 浮点类型字面值常量有以下两种表示形式。
- 十进制形式,例如 3.14,314.0,.314。
- 科学记数法形式,例如 3.14e2,3.14E2,100E-2。
Java 语言浮点型字面值常量默认为 double 型,表示 float 型字面值常量需要在字面值常量后面加上 f 或 F,例如:
float floatNum = 3.14F;
不同于整型,通过简单的推算,程序员就可以知道这个类型的取值范围。对于 float 和 double,要想推算出来,需要理解浮点型的存储原理,且计算起来比较复杂。
e.字符型
字符型(char 型)数据用来表示通常意义上的字符。
字符字面值常量为用单引号括起来的单个字符,因为 Java 使用 Unicode 编码,一个 Unicode 编码占 2 个字节,一个汉字也是占 2 个字节,所以 Java 中字符型变量可以存放一个汉字,例如:
char eChar = ‘q’; char cChar = ‘桥’;
说明:在编写代码时,所有的标点符号都是半角符号。例如,程序中的单引号是 ‘,而不是 ’;程序中的分号是 ;,而不是 ;。
Java 字符型字面值常量有以下 3 种表示形式。
- 用英文单引号括起来的单个字符,例如’a’、‘汉’。
- 用英文单引号括起来的十六进制代码值来表示单个字符,其格式为’\uXXXX’,其中 u 是约定的前缀(u 是 Unicode 的第一个字母),而后面的 XXXX 位是 4 位十六进制数,是该字符在 Unicode 字符集中的序号,例如 ‘\u0061’ 等价于 ‘a’。
- 某些特殊的字符可以采用转义符’‘来转换,转义符可以将其后面的字符转变为其他的含义,例如 ‘\t’ 代表制表符,’\n’ 代表换行符,’\r’ 代表回车符等。
f.布尔类型
ava 中的布尔型(boolean)可以表示真或假,只允许取值 true 或 false(不可以用 0 或非 0 的整数替代 true 和 false,这点和 C 语言不同),例如:
boolean flag = true;
boolean 类型适于逻辑运算,一般用于程序流程控制。
g.字符串类型
首先强调,在 Java 对数据类型的分类中,字符串不属于基本数据类型。对于字符串类型的具体使用,我们也将会在第 5 章进行详尽的讲解,此处仅作概述。
在前面的若干输出语句中我们已经见过这样的形式,在学习 Java 的前期我们会经常在输出语句中使用字符串和字符串拼接(+ 号用于字符串拼接)以帮助观察程序运行过程。
h.基本数据类型的转换
编写 Java 程序时,经常涉及数据类型转换,我们可以将其分为 3 类:基本数据类型转换、字符串与其他数据类型转换、其他实用数据类型转换。此处介绍基本数据类型转换,其中 boolean 类型不可以和其他数据类型互相转换。整型、字符型、浮点型的数据在混合运算中可相互转换并遵循以下原则。
5.成员变量和局部变量
a.成员变量
根据变量声明位置的不同,可以将变量分为成员变量和局部变量。理解这部分内容,又涉及到我们暂时没有深入探讨的类、方法、参数等概念,这里先简单给出一些说明以帮助同学们理解:
b.局部变量
局部变量是在方法内部(含语句块)定义的变量(包括前面说到的参效),具作用域从变量定义位置起到方法(含语句块儿)结束(重点)
6.从控制台输入数据
之前,我们都是通过 = 直接赋值数据的,例如 int i = 10,就是将变量 i 的值设置为 10。除此以外,还可以通过控制台动态的输入数据。在通过控制台输入数据前,需要先在程序的第一行加入了代码 import java.util.Scanner;,引入 Scanner 工具类,通过该工具类从控制台获取输入。之后,就可以通过固定的方式(Scanner input = new Scanner(System.in);)创建一个输入对象,然后输入各种类型的数据。
注意,Scanner(System.in) 的对象存在多个是无意义的,而且作为标准输入流也无需去区分不同的场合用什么不同的 Scanner,所以完全可以将 Scanner 对象定义为全局的对象,并实现相关的方法在不再需要它的地方执行 close() 方法关闭标准输入流。
7.Java中的运算符
a.运算符
来点简单的运算
代码如下
import java.util.Scanner;
public class Hello {
public static void main(final String[] args) {
// 创建Scanner对象
final Scanner scanner = new Scanner(System.in);
// +,-,*,/,%,++,--
int i = scanner.nextInt();
final int j = scanner.nextInt();
System.out.println("两数相加的结果:"+(i+j));
System.out.println("两数相减的结果:"+(i-j));
System.out.println("两数相乘的结果:"+(i*j));
System.out.println("两数相除的结果:"+(i/j));
System.out.println("两数相取余的结果:"+(i%j));
//i++ 先取值,再加1
System.out.println(i++);
//i++ 再加1,先取值
System.out.println(++i);
}
}
b.关系运算符
关系运算符和赋值运算符比较简单,这里不展开介绍。需要注意的是,关系运算符 == 和赋值运算符 = 看起来比较类似,但含义完全不同,== 用于判断两边是否相等,而 = 是将右边的值赋给左边。此外,关系运算符的比较结果是布尔类型,例如:
boolean flag = 3 > 2 ; //比较结果:true
+=、-= 等是扩展的赋值运算符,x += y 等价于 x = x + y,程序员在实际的编程过程中,为了方便阅读,尽量不要使用这种扩展的赋值运算符。
c.赋值运算
//导入Scanner类
import java.util.Scanner;
public class HelloWorld{
public static void main(final String[] args) {
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
// int j = scanner.nextInt();
//=,+=,-=,*=,/=
//把i的值赋给j
int j = i;
System.out.println("j:"+j);
i+=10;
System.out.println("i:"+i);
}
}
d.逻辑运算
在 Java 语言中有 3 种逻辑运算符,它们是逻辑非(用符号“!”表示)、逻辑与(用符号“&&”表示)和逻辑或(用符号“||”表示)。
逻辑非表示取反,其逻辑关系值表如下表所示。
逻辑与的运算规则为:有一个运算数为假,其值为假,两个运算数都为真,其值为真。逻辑与的关系值表如下表所示。
逻辑或的运算规则为:有一个运算数为真,其值为真,两个运算数都为假,其值为假。逻辑或的关系值表如下表所示。
逻辑运算符还会在后面经常用到。
例如:
//导入Scanner类
import java.util.Scanner;
public class HelloWorld{
public static void main(final String[] args) {
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
//int j = scanner.nextInt();
//=,+=,-=,*=,/=
//把i的值赋给j
//int j = i;
//System.out.println("j:"+j);
//给i加上10,再赋给i
//i+=10; //i = i + 10
//i*=10; //i = i * 10
//i-=10; //i = i - 10
//i/=10; //i = i / 10
//System.out.println("i:"+i);
System.out.println(i>0&&i<10);
}
}
输入10,运行得到如下结果
输入5,得到如下结果
e.位运算符
在计算机中,所有的信息都是以二进制形式存储的。可以用位运算符对整数的二进制位进行操作。位运算符主要包括按位非(用符号 ~ 表示)、按位与(用符号 & 表示)、按位或(用符号 | 表示)、按位异或(用符号 ^ 表示)和移位运算符(用符号 <<、>>、>>> 表示)。
在企业面试 Java 工程师的时候,也常会问到 && 和 & 以及 || 与 | 的区别,通过下面的学习,可以清楚地理解逻辑运算符和位运算符的区别。
按位非表示按位取反,其关系值表如下表所示。
按位与是逐位逻辑与。按位与的关系值表如下表所示。
按位或是逐位逻辑或。按位或的关系值表如下表所示。
按位异或是当两个运算位不同时(重点在“异”字),结果为 1,否则为 0。按位异或的关系值表如下表所示。
public class HelloWorld{
public static void main(final String[] args) {
/* 0000 0110 6 1111 1001 -7 1000 0111 1111 1000 1111 1001 */
byte b1 = 6;
//按位非
System.out.println(~b1);//-7
//按位与
/* 0000 0101 0000 0010 0000 0000 */
System.out.println(5&2);//0
//按位或
/* 0000 0101 0000 0011 0000 0111 */
System.out.println(5|2);//7
//按位异或
/* 0000 0101 0000 0011 0000 0110 */
System.out.println(5^2);//7
//向左移,每向左移动一次,代表乘一次2
int i = 6<<2;
/* 0000 0110 0001 1000 */
System.out.println(i);//24
//向右移,向右移动以后,如果是一个正数,右边使用0补齐
//如果是一个负数,左边使用1补齐
int i2 = 6>>2;
/* 0000 0110 0000 0001 */
System.out.println(i2);//1
//无符号右移:无论整数还是负数,左边都用0补齐
/* 1111111 1111111 1111111 11111001 001111111 1111111 1111111 111110 */
System.out.println(-7>>>2);//1073741822
}
}
结果如下
8.表达式
表达式是符合一定语法规则的运算符和操作数的组合。下面列举了一些表达式,需要注意的是,单个操作数也是表达式。
x
y * 5
(a-b) * c - 4
(x>y)&&(m<=n)
表达式的值:对表达式中的操作数进行运算得到的结果。 表达式的类型:表达式的值的数据类型即为表达式的类型。
表达式的运算顺序
Java 表达式按照运算符的优先级从高到低的顺序进行运算,优先级相同的运算符按照事先约定的结合方向进行运算。运算符的优先级和结合性如下图所示。需要注意的是,程序员在编写代码时,是不会去记运算符的优先级的,当不确定运算符的优先级时,程序员通常的做法就是对先运算的部分加上小括号,保证此运算优先执行。
public class HelloWorld{
public static void main(final String[] args) {
int i = 0;
int j = 1;
int k = j+++i;
System.out.println(i);
System.out.println(j);
System.out.println(k);
System.out.println(5<<2==3/2);
}
}
结果如下
今天的文章Java学习笔记02分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86193.html