声明:本节内容为本人观看“遇见狂神说”Java教学视频后总结,仅供学习参考。
一.注释
1.注释的作用
- 平时我们编写代码时,如果代码量较少,也许我们还能看懂。但当项目结构复杂,代码量较多时。想要快速的看懂代码就比较困难了
- 注释并不会被执行,而是对代码的描述,是写给我们人看的
- 书写注释是一个非常好的习惯
2.Java中添加注释的方法
单行注释
public class HelloWorld {
public static void main(String[] args) {
// 输出一个Hello World
System.out.println("Hello World!!");
}
}
格式: // 内容
多行注释
public class HelloWorld {
public static void main(String[] args) {
/*
这是一个多行注释
输出Hello World!!
*/
System.out.println("Hello World!!");
}
}
格式: /*内容*/
二.标识符
1.关键字
有些 “单词+” 在Java语言中,是具有特定含义的。我们把这一类“单词”称为关键字。
Java中常见的关键字有:
2.标识符
Java中所有的组成部分都需要名字。类名,变量名以及方法名都被称为标识符。
例如,我们前面代码中的HelloWorld 就是一个标识符(类名)。
(1)标识符的命名规则(必须遵守)
- 所有的标识符都应该以字母(A-Z或者a-z),数字,下划线(_),美元符($)组成
- 不能以数字开头
- 不能使用关键字作为标识符
- 区分大小写(man和Man不是同一个标识符)
(2)标识符的命名规范(不强制要求,但大家约定成俗的)
-
见名知意
-
类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZzz,
例如:HelloWorld,String,System等 -
变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz,
例如:age,name,bookName,main -
包名等:每一个单词都小写,单词之间使用点.分割,形式:xxx.yyy.zzz,
例如:java.lang -
常量名等:每一个单词都大写,单词之间使用下划线_分割,形式:XXX_YYY_ZZZ,
例如:MAX_VALUE,PI
三.数据类型
1.强弱类型语言
- 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。也就是说,一旦一个变量被指定了某个数据类型,如果不经过数据转换,那么它就永远是这个数据类型了。如:Java。C,C++
- 弱类型语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。你想把这个变量当做什么类型来用,就当做什么类型来用,语言的解析器会自动(隐式)转换。如:python,JavaScript
2.Java的数据类型
Java的数据类型可以分为:基本数据类型和引用数据类型。
Java中的默认类型:整数类型是int
、浮点类型是double
。
基本数据类型:
类型名称 | 字节、位数 | 最小值 | 最大值 | 默认值 | 例子 |
---|---|---|---|---|---|
byte字节 | 1字节,8位 | -128(-2^7) | 127(2^7-1) | 0 | byte a = 100,byte b = -50 |
short短整型 | 2字节,16位 | -32768(-2^15) | 32767(2^15 - 1) | 0 | short s = 1000,short r = -20000 |
int整形 | 4字节,32位 | -2,147,483,648(-2^31) | 2,147,483,647(2^31 - 1) | 0 | int a = 100000, int b = -200000 |
lang长整型 | 8字节,64位 | -9,223,372,036,854,775,808(-2^63) | 9,223,372,036,854,775,807(2^63 -1) | 0L | long a = 100000L,Long b = -200000L |
double双精度 | 8字节,64位 | double类型同样不能表示精确的值,如货币 | 0.0d | double d1 = 123.4 | |
float单精度 | 4字节, 32位 | 在储存大型浮点数组的时候可节省内存空间 不同统计精准的货币值 | 0.0f | float f1 = 234.5f | |
char字符 | 2字节,16位 | \u0000(即为0) | \uffff(即为65,535) | 可以储存任何字符 | char letter = ‘A’; |
boolean布尔 | 返回true和false两个值 | 这种类型只作为一种标志来记录 true/false 情况 | 只有两个取值:true 和 false; | false | boolean one = true |
public class Demo01 {
public static void main(String[] args) {
// 整数
int num1 = 10; //最常用
byte num2 = 10;
short num3 = 10;
long num4 = 10L; //long类型要在数字后加L,用于区别这是一个long类型
// 浮点数
float num5 = 10.1F; //float类型要在数字后加F,用于区别这是一个float类型
double num6 = 10.1D; //float类型数字后面可以加上D,也可以不加,默认浮点数类型就为double
//布尔类型,只能为true或者false
boolean flag1 = true;
boolean flag2 = false;
//字符
char name1 = '牛'; //注意,字符型需要用单引号括起来,且只能有一个字。
//字符串。注意:字符串不是基本数据类型,String也不是关键字,它是一个类
String name2 = "牛年大吉"; //字符串类型,用双引号括起来,可以有多个字
}
}
** 引用类型**
Java中出了基本类型外,其他都是引用类型。它包含:类,接口,数组。对于引用数据类型,我们在以后去讲解,这里不做讨论。
3.什么是字节
4.数据类型拓展
4.1浮点数的问题
我们看下面两个例子:
例1:
public class Demo3 {
public static void main(String[] args) {
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);
System.out.println(f);
System.out.println(d);
}
}
运行结果:
例2:
public class Demo4 {
public static void main(String[] args) {
float f1 = 2333322222222222222f;
float f2 = f1 + 1;
System.out.println(f1==f2);
}
}
结果如下:
原因:浮点数(float和double)的位数都是有限的,当位数超出它们的极限时,就会采用四舍五入法,因此得出的结果也不是精确的结果。
所有我们在处理银行等涉及数字敏感的业务时,最好不要使用浮点数。推荐使用Java的一个数学工具类,BigDecimal。在后续我们会讲解这个类。
4.2字符与数字
我们看这个例子:
public class Demo4 {
public static void main(String[] args) {
char a = 'a';
char b = '牛';
System.out.println(a);
System.out.println((int)a); //(int)a》将变量a强制转换为int类型
System.out.println(b);
System.out.println((int)b);
}
}
结果如下:
我们可以认为:字符的本质还是数字。
所有的字符都是Unicode编码得到的,在Unicode表中每一个阿拉伯数字都对应一个字符。如:97=a;29275=牛
四.类型转换
由于Java是一门强类型的语言,所以在进行运算的时候,需要将不同的数据类型转换为同一类型,才能进行计算。这就需要使用类型转换。
Java中的类型转换分为两种:自动类型转换和强制类型转换。
在讲类型转换前我们需要先知道各种基本数据类型的位数高低情况:
1.自动类型转换
数据需要满足几点要求才能进行自动类型转换
- 两个数据要为可兼容的数据类型(boolean类型除外,其他基本数据类型都可以互相转换)
- 转换前的数据类型要低于转换后的数据类型(从低到高)
public class Demo5 {
public static void main(String[] args) {
byte b1 = 10;
int b2 = b1 + 1; //自动将b1转换为int类型,不需要我们做其他操作
}
}
2.强制类型转换
数据需要满足几点要求才能进行自动类型转换:
- 两个数据要为可兼容的数据类型(boolean类型除外,其他基本数据类型都可以互相转换)
- 转换前的数据类型要高于转换后的数据类型(从高到低)
- 格式:(转换后的数据类型)[转换前的变量]
public class Demo5 {
public static void main(String[] args) {
int b1 = 10;
byte b2 = (byte)b1; //需要强制b1转换为byte类型
}
}
强制转换的问题:
- 因为强制转换是将高位数(范围大)的数据转换为低位数(范围小)数据。当我们的高位数的数据超过低位时的最大范围时,必定会造成数据丢失。这叫做内存溢出。
public class Demo5 {
public static void main(String[] args) {
int b1 = 128;
byte b2 = (byte)b1; //byte最大的范围为127
System.out.println(b2);
}
}
结果如下:
- 浮点数转换为整数时,也必定会导致数据丢失。
- 所以我们在强制转换时,一定要注意数据丢失问题。
五.进制
进制也就是进位计数制,是人为定义的带进位的计数方法 。
1、进制的分类
(1)十进制:
数字组成:0-9
进位规则:逢十进一
(2)二进制:
数字组成:0-1
进位规则:逢二进一
十进制的256,二进制:100000000,为了缩短二进制的表示,又要贴近二进制,在程序中引入八进制和十六进制
(3)八进制:很少使用
数字组成:0-7
进位规则:逢八进一
与二进制换算规则:每三位二进制是一位八进制值
(4)十六进制
数字组成:0-9,a-f
进位规则:逢十六进一
与二进制换算规则:每四位二进制是一位十六进制值
2、进制的换算
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | a或A |
11 | 1011 | 13 | b或B |
12 | 1100 | 14 | c或C |
13 | 1101 | 15 | d或D |
14 | 1110 | 16 | e或E |
15 | 1111 | 17 | f或F |
16 | 10000 | 20 | 10 |
-
**十进制数据转成二进制数据:**使用除以2倒取余数的方式
-
二进制数据转成十进制数据:
从右边开始依次是2的0次,2的1次,2的2次。。。。
-
二进制数据转八进制数据
从右边开始,三位一组
-
二进制数据转十六进制数据
从右边开始,四位一组
3、在代码中如何表示四种进制的值
请分别用四种类型的进制来表示10,并输出它的结果:(了解)
(1)十进制:正常表示
System.out.println(10);
结果如下:
(2)二进制:0b或0B开头
System.out.println(0B10);
结果如下:
(3)八进制:0开头
System.out.println(010);
结果如下:
(4)十六进制:0x或0X开头
System.out.println(0X10);
结果如下:
4.计算机存储单位
-
**字节(Byte):**是计算机信息技术用于计量存储容量的一种计量单位,一字节等于八位。
-
**位(bit):**是数据存储的最小单位。也就是二进制。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8 bit 就称为一个字节(Byte)。
-
转换关系:
- 8 bit = 1 Byte
- 1024 Byte = 1 KB
- 1024 KB = 1 MB
- 1024 MB = 1 GB
- 1024 GB = 1 TB