关键字
关键字定义
Java语言赋予特定含义的单词。
关键字特点
组成关键字的字母全部小写。
注意main虽然经常用,但不是关键字
标识符
标识符是什么?
用来标识某个实体的一个符号,给类,接口,方法,变量等起名字时使用的字符序列。
组成规则
由英文大小写字母、数字字符、$和_组成。
注意事项
标识符不能以数字开头,不能是Java中的关键字,区分大小写。
标识符命名规则
标识符的命名主要分为以下几种:
- 包:其实就是文件夹,用于把相同的类名进行区分。包名全部小写。
- 类或接口
一个单词:首字母大写; 如:class Student{}
多个单词:每个单词的首字母大写;如:class StudentName{}
- 方法或变量
一个单词:单词的首字母小写;如:main
多个单词:从第二个单词开始,首字母大写;如:myName
- 常量
一个单词:全部大写;如:PI
多个单词:每个单词都大写,中间用_隔开;如:STUDENT_AGE
注意,不同人提出的命名规则不一样,只要遵循一种常用的即可。
注释
单行注释,格式为://注释文字
多行注释,格式为: /* 注释文字 */
文档注释,格式为:/** 注释文字 */
数据中进制
不同进制的数据组成
二进制
由0,1组成。以0b开头
八进制
由0,1,…7组成。以0开头
十进制
由0,1,…9组成。整数默认是十进制的
十六进制
由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
进制转换
关于进制转换,将以以下四幅图去展示,四幅图是我看传播智客上视频得到的资料,如下所示:
下面图片给出的是二进制到十进制、八进制和十六进制的转换:
下面给出任意进制到十进制的转换:
下面给出的是十进制到任意进制的转换:
原码、反码、补码
原码
最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码
正数的反码与其原码相同;负数的反码是除符号位外对其原码逐位取反。
补码
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
原码、补码及反码的相互转化
计算机中所有数据的运算都是采用补码进行。
Java中数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,具体类型及所占内存空间大小如下表所示:
编号 | 数据类型 | 占用空间 | 表示范围 |
---|---|---|---|
1 | 整数类型(byte) | 1字节 | -128~127 |
2 | 整数类型(short) | 2字节 | −215 ~ 215−1 |
3 | 整数类型(int) | 4字节 | −231 ~ 231−1 |
4 | 整数类型(long) | 8字节 | −263 ~ 263−1 |
5 | 浮点类型(float) | 4字节 | -3.403E38~3.403E38 |
6 | 浮点类型(double) | 8字节 | -1.798E308~1.798E308 |
7 | 字符型(char) | 2字节 | 0~65535 |
8 | 布尔型(boolean) | 1字节 | true或false |
9 | 类(class) | ||
10 | 接口(interface) | ||
11 | 数组([]) |
注意事项
- 上表中1~8是基本数据类型,9~10是引用数据类型。整数默认为:int,小数默认为:double
- boolean类型数据只允许取值 true 或 false,不可以0或非0的整数替代true和false
- 声明long型常量必须后加‘ l ’或‘ L ’
- Java 浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需在数字后面加 f 或 F
数据类型转换
默认转换
不同数据类型之间的默认转换如下所示:
byte,short,char相互之间不转换,他们参与运算首先转换为int类型;
byte,short,char—int—long—float—double看下例:
class DataType {
public static void main(String[] args) {
//两个int类型做加法
int x = 3;
int y = 4;
int z = x + y;
System.out.println(z); //输出结果为7
//定义一个byte类型,一个int类型,做加法
byte a = 3;
int b = 4;
int c = a + b;
//因为int类型大于byte类型,因此a首先转换为int型,再进行加法,最后赋给c
System.out.println(c);
//byte c = a + b; 错误,a + b后的类型为int型,可能造成精度损失
System.out.println(c);
}
}
强制转换
格式为:目标类型 变量名=(目标类型)(被转换的数据);一个例子:
class DataTypeDemo4 {
public static void main(String[] args) {
byte a = 3;
int b = 4;
//上一个例子会造成编译错误,因为精度损失。byte c = 7;
byte c = (byte) (a + b);//用强制类型转换改进
System.out.println(c);
}
}
典型题目
题目1:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么?
答案1:
class DataTypeDemo6 {
public static void main(String[] args) {
byte b1 = 3,b2 = 4,b;
//b = b1 + b2; 错误,变量相加,会首先看类型问题,
//最终把结果赋值的也会考虑类型问题,byte型会默认转换为int型。
b = 3 + 4; //常量,先把结果计算出来,
//然后看是否在byte的范围内,如果在就不报错。
}
}
题目2:
byte b = 130;有没有问题? 如果想让赋值正确,可以怎么做?结果是多少?
答案2:
class DataTypeDemo7 {
public static void main(String[] args) {
//因为byte的范围是:-128到127。
//而130不在此范围内,所以报错。
//byte b = 130;
//我们可以使用强制类型转换
byte b = (byte) 130;
//结果是多少呢?
System.out.println(b);
}
}
结果的分析过程:
由前面可知,计算机中数据的运算都是补码进行的。因此主要分为以下进步:
A. 得到130这个数据的二进制
由于130为正数,因此原码、反码和补码都一样,为:
00000000 00000000 00000000 10000010
B. 截取操作
由于130为int型,字节数大于byte类型字节数,因此要进行截取,如下所示:10000010 ,这个是补码
C. 已知补码求原码
类型 | 符号位 | 数值位 |
---|---|---|
补码 | 1 | 0000010 |
反码 | 1 | 0000001 |
原码 | 1 | 1111110 |
所以最后结果为-126
题目3:
写出下列输出结果:
System.out.println(“hello”+’a’+1);
System.out.println(‘a’+1+”hello”);
System.out.println(“5+5=”+5+5);
System.out.println(5+5+”=5+5”);
答案3:
class DataTypeDemo9 {
public static void main(String[] args) {
System.out.println("hello"+'a'+1); //helloa1
System.out.println('a'+1+"hello"); //98hello
System.out.println("5+5="+5+5); //5+5=55
System.out.println(5+5+"=5+5"); //10=5+5
}
}
字符串数据和其他数据做+,结果是字符串类型。这里的+不是加法运算,而是字符串连接符。并且按照自左向右运算
未完待续!!!!