基础语法 数据类型
基础语法 数据类型
狂神说Java BV12J41137hu P21-P
注释
书写注释是一个非常好的习惯
单行注释
// 注释
//
// _oo0oo_
// o8888888o
// 88" . "88
// (| -_- |)
// 0\ = /0
// ___/`---'\___
// .' \\| |// '.
// / \\||| : |||// \
// / _||||| -:- |||||- \
// | | \\\ - /// | |
// | \_| ''\---/'' |_/ |
// \ .-\__ '-' ___/-. /
// ___'. .' /--.--\ `. .'___
// ."" '< `.___\_<|>_/___.' >' "".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `_. \_ __\ /__ _/ .-` / /
// =====`-.____`.___ \_____/___.-`___.-'=====
// `=---='
//
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 佛祖保佑 永无BUG
//
//
//
多行注释
/*注释*/
/*
_oo0oo_
o8888888o
88" . "88
(| -_- |)
0\ = /0
___/`---'\___
.' \\| | '.
/ \\||| : ||| \
/ _||||| -:- |||||- \
| | \\\ - / | |
| \_| ''\---/'' |_/ |
\ .-\__ '-' ___/-. /
___'. .' /--.--\ `. .'___
."" '< `.___\_<|>_/___.' >' "".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `_. \_ __\ /__ _/ .-` / /
=====`-.____`.___ \_____/___.-`___.-'=====
`=---='
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
佛祖保佑 永无BUG
*/
文档注释
见下,其中 @是特殊声明
/**
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ____/`---'\____
* .' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 佛祖保佑 永无BUG
* 佛曰:
* 写字楼里写字间,写字间里程序员;
* 程序人员写程序,又拿程序换酒钱。
* 酒醒只在网上坐,酒醉还来网下眠;
* 酒醉酒醒日复日,网上网下年复年。
* 但愿老死电脑间,不愿鞠躬老板前;
* 奔驰宝马贵者趣,公交自行程序员。
* 别人笑我忒疯癫,我笑自己命太贱;
* 不见满街漂亮妹,哪个归得程序员?
*/
/**
* @Description Helloworld
* @Author
*/
标识符
关键字
Java中的所有的组成部分所需要的名字。类名、变量名以及方法名都被称为标识符。
注意点
-
标识符的开头字符必须是
A-Z a-z $ _
-
标识符开头之后的字符除了上述的之外,还可以包括数字
0-9
-
不能使用关键字作为变量名或者方法名
-
大小写敏感
-
可以使用中文命名,但是不推荐,也不推荐用拼音
数据类型
Java是强类型语言,要求变量使用严格符合规定,所有变量必须先定义后才能使用
基本数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
byte:
- byte 数据类型是8位、有符号的,以二进制补码表示的整数;
- 最小值是 -128(-2^7);
- 最大值是 127(2^7-1);
- 默认值是 0;
- byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
- 例子:byte a = 100,byte b = -50。
short:
- short 数据类型是 16 位、有符号的以二进制补码表示的整数
- 最小值是 -32768(-2^15);
- 最大值是 32767(2^15 - 1);
- Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
- 默认值是 0;
- 例子:short s = 1000,short r = -20000。
int:
- int 数据类型是32位、有符号的以二进制补码表示的整数;
- 最小值是 -2,147,483,648(-2^31);
- 最大值是 2,147,483,647(2^31 - 1);
- 一般地整型变量默认为 int 类型;
- 默认值是 0 ;
- 例子:int a = 100000, int b = -200000。
long:
- long 数据类型是 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。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
float:
- float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
- float 在储存大型浮点数组的时候可节省内存空间;
- 默认值是 0.0f;
- 浮点数不能用来表示精确的值,如货币;
- 例子:float f1 = 234.5f。
"f"大小写均可,最好大写
double:
-
double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
-
浮点数的默认类型为 double 类型;
-
double类型同样不能表示精确的值,如货币;
-
默认值是 0.0d;
-
例子:
double d1 = 7D ; double d2 = 7.; double d3 = 8.0; double d4 = 8.D; double d5 = 12.9867;
7 是一个 int 字面量,而 7D,7. 和 8.0 是 double 字面量。
boolean:
- boolean数据类型表示一位的信息;
- 只有两个取值:true 和 false;
- 这种类型只作为一种标志来记录 true/false 情况;
- 默认值是 false;
- 例子:boolean one = true。
char:
- char 类型是一个单一的 16 位 Unicode 字符;
- 最小值是 \u0000(十进制等效值为 0);
- 最大值是 \uffff(即为 65535);
- char 数据类型可以储存任何字符,包括一个中文汉字;
- 例子:char letter = 'A';。
字符串 String不是关键字,而是一个类
JAVA中还存在另外一种基本类型 void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作
Java的数据类型也是有默认值的
数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | 'u0000' |
String (or any object) | null |
boolean | false |
实例
public class DataTypeTest {
static boolean aBoolean;
static byte aByte;
static short aShort;
static int anInt;
static long aLong;
static float aFloat;
static double aDouble;
static char aChar;
static String str;
public static void main(String[] args) {
/*
type.SIZE
type.MIN_VALUE
type.MAX_VALUE
*/
// byte 一个字节
System.out.println("Byte 位 (-2^-7 ~ 2^7 - 1) " + Byte.SIZE);
System.out.println("最小值:" + Byte.MIN_VALUE);
System.out.println("最大值:" + Byte.MAX_VALUE);
System.out.println("默认值:" + aByte);
// short 两个字节
System.out.println();
System.out.println("Short 短整 (2^-15 ~ 2^15 - 1) " + Short.SIZE);
System.out.println("最小值:" + Short.MIN_VALUE);
System.out.println("最大值:" + Short.MAX_VALUE);
System.out.println("默认值:" + aShort);
// int 四个字节
System.out.println();
System.out.println("Int 整数 (2^-31 ~ 2^31 - 1) " + Integer.SIZE);
System.out.println("最小值:" + Integer.MIN_VALUE);
System.out.println("最大值:" + Integer.MAX_VALUE);
System.out.println("默认值:" + anInt);
// long 八字节
System.out.println();
System.out.println("Long 长整数 (2^-63 ~ 2^63 - 1) " + Long.SIZE);
System.out.println("最小值:" + Long.MIN_VALUE);
System.out.println("最大值:" + Long.MAX_VALUE);
System.out.println("默认值:" + aLong);
// float 四字节
System.out.println();
System.out.println("Float 单精度 " + Float.SIZE);
System.out.println("最小值:" + Float.MIN_VALUE);
System.out.println("最大值:" + Float.MAX_VALUE);
System.out.println("默认值:" + aFloat);
// double 八字节
System.out.println();
System.out.println("Double 双精度 " + Double.SIZE);
System.out.println("最小值:" + Double.MIN_VALUE);
System.out.println("最大值:" + Double.MAX_VALUE );
System.out.println("默认值:" + aDouble);
// char 二字节
System.out.println();
System.out.println("Char 字 " + Character.SIZE);
System.out.println("最小值:" + (int)Character.MIN_VALUE);
System.out.println("最大值:" + (int)Character.MAX_VALUE);
System.out.println("默认值:" + aChar);
// String
System.out.println();
System.out.println("String 字符串");
System.out.println("默认值:" + str);
}
}
输出
Byte 位 (-2^-7 ~ 2^7 - 1) 8
最小值:-128
最大值:127
默认值:0
Short 短整 (2^-15 ~ 2^15 - 1) 16
最小值:-32768
最大值:32767
默认值:0
Int 整数 (2^-31 ~ 2^31 - 1) 32
最小值:-2147483648
最大值:2147483647
默认值:0
Long 长整数 (2^-63 ~ 2^63 - 1) 64
最小值:-9223372036854775808
最大值:9223372036854775807
默认值:0
Float 单精度 32
最小值:1.4E-45
最大值:3.4028235E38
默认值:0.0
Double 双精度 64
最小值:4.9E-324
最大值:1.7976931348623157E308
默认值:0.0
Char 字 16
最小值:0
最大值:65535
默认值:
String 字符串
默认值:null
引用类型
类、接口、数组
什么是字节
- 位(bit):是计算机内部的最小存储单位,11001100是一个八位二进制数
- 字节(byte):计算机中数据处理的基本单位,习惯上用B表示,1B = 8 bit
- 字符:是指计算机中使用的字母、数字、字和符号
常见的字节单位有:比特Bit(b), 字节Byte(B), 千字节Kilobytes(KB), 兆字节Megabytes(MB), 吉字节Gigabyte(GB) and 太字节terabyte(TB)
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
整数拓展 进制
byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。
当使用字面量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制, 例如:
int decimal = 100;
int octal = 0144;
int hexa = 0x64;
数字拓展
JDK7 新特性,数字之间可以用下划线分割
int money = 10_0000_0000; // 1000000000
浮点数拓展
比较数字大小不要用float
float有: 离散 有限 摄入误差 大约 接近但不等于 等特性
大数字使用 BigDecimal 类
字符拓展
字符串常量和字符常量都可以包含任何Unicode字符。例如:
char a = '\u0001';
String a = "\u0001";
布尔值拓展
boolean flag = true;
if (flag){
//path1
}
else{
//path2
}
转义字符
Java语言支持一些特殊的转义字符序列。
符号 | 字符含义 |
---|---|
\n | 换行 (0x0a) |
\r | 回车 (0x0d) |
\f | 换页符(0x0c) |
\b | 退格 (0x08) |
\0 | 空字符 (0x0) |
\s | 空格 (0x20) |
\t | 制表符 |
" | 双引号 |
' | 单引号 |
\ | 反斜杠 |
\ddd | 八进制字符 (ddd) |
\uxxxx | 16进制Unicode字符 (xxxx) |
常量
常量在程序运行时是不能被修改的。
在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:
final double PI = 3.1415927;
虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。
字面量可以赋给任何内置类型的变量。例如:
byte a = 68;
char a = 'A'
类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
数据类型转换必须满足如下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度,例如:
int i =128;
byte b = (byte)i; // 128.0
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23; // true
(int)-45.89f == -45 // true
自动类型转换
必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
public class ZiDongLeiZhuan{
public static void main(String[] args){
char c1='a';//定义一个char类型
int i1 = c1;//char自动类型转换为int
System.out.println("char自动类型转换为int后的值等于"+i1);
char c2 = 'A';//定义一个char类型
int i2 = c2+1;//char 类型和 int 类型计算
System.out.println("char类型和int计算后的值等于"+i2);
}
}
/* output
char自动类型转换为int后的值等于97
char类型和int计算后的值等于66
*/
注意类型的范围
public class demoTypeTrans {
public static void main(String[] args) {
int money = 10_0000_0000;
int years = 20;
int total = money * years;
long total2 = money * (long) years;
System.out.println(total); // -1474836480
System.out.println(total2); //20000000000
}
}