目录
变量
概念:变量是指内存中的一个存储区域,该区域要有自己的名称(变量名)、类型(数据类型),该区域的数据可以在同一数据类型的范围内不断变化值。
变量的命名规则:
(1)名称由字母,数字,_和$任意组成,数字不能开头
(2)大小写敏感(声明式用的什么名称,在接下来就要用什么,不能随意更改其大小写)
(3)可以使用汉字,但是不建议使用
(4)驼峰命名法,见名知意 列:myDogName = "旺财";
(5)不能使用关键字(java保留字)
变量的使用规则:
(1) 必须先定义和初始化(也就是创建完成后要对创建好的变量进行初始化)
(2) 变量可以重复使用(即可以进行多次存取操作),不需要强调类型,但是存储数据时 一定要与第一次声明时的类型匹配
(3) 变量有自己的作用域,出了范围,变量失效。出了作用域:想使用,需要重新定义和初始化。(变量的作用域:即从定义开始的大括号,到所在的大括号的结束符号为止。)
数据类型
java语言中共分两大类型:基本数据类型-原始数据类型,引用数据类型
基本数据类型:
8种:byte,short,int,long,float,double,char,boolean
归纳分类:
(1) 整数类型:4种,byte,short,int,long
(2) 浮点数类型:float,double
(3) 字符类型:char
(4) 布尔类型:boolean
(1)整数类型:
byte(不常用):也叫字节类型,在内存中占8位二进制,即在内存中占1字节大小的空间,是数据存储的最小单位。
范围:-128~127
幂表示:-2^7~2^7-1
short(不常用):也叫短整型。在内存中占16位二进制,2字节大小。
范围:-32768~32767
幂表示:-2^15~2^15-1
int(常用):也叫整型。在内存占32位的二进制,4字节大小。
范围:-2147483648~2147483647
幂表示:-2^31~2^31-1
long(常用):也叫长整型。在内存占64位二进制,8字节大小。(要想初始就赋一个long值,在数字后面加上L或l)
范围:正负922亿亿左右
幂表示:-2^63~2^63-1
补充:1、因为计算机存储的是二进制的数,所以要想表示正负的话,就要看二进制数中的第一位,1表示负数,0表示正数。
2、整数类型在进行运算时,要遵守封闭式运算原则,即:max+1 等于min,min-1 等于max。
3、直接写的整数值,叫字面量(字面量的类型为int类型)
4、同位数的二进制进行运算时,结果位数不变。
练习代码:
public static void main(String[] args){
/*整型的封闭式运算*/
int max = 2147483647;
int count = max+1;
System.out.println(count);
}
(2)浮点数类型:
小数类型
float: 在内存中占4字节大小,32位二进制
范围:-3.403E38~3.403E38
double: 在内存中占8字节大小,64位二进制
范围:-1.79E308~1.79E308
浮点类型的字面量:默认类型为double,即64位的浮点数类型如果想直接写32位的浮点数,需要在数值后添加f/F
列:double num = 3.14; float num1 = 3.14F;
扩展说明:把浮点型和整型放到一起比较
范围大小从大到小排序:double>float>long>int>short>byte
精度大小从大到小排序(int,long,float,double) :long>int>double>float
浮点数类型在存储数据时,会有舍入误差即,不够精确。但是,double要比float更精确一些(相比float,要精确多一倍)
浮点数类型无法精准表示1/10,就像10进制数无法表示1/3一样。所以,在运算时,多数情况下,都是不精确运算(因为在内存中存储的格式为二进制,所以会有误差,但计算类似1/2的结果时,则很精确)
练习代码:
public static void main(String[] args){
float m = 1.1234567890123456789F;
double n = 1.1234567890123456789;
System.out.println(m);
System.out.println(n);
}
(3)字符类型:
在内存中占2字节大小,16位二进制。
赋值特点:
1、所赋的值有且只能是一个字符
2、字符必须使用单引号 ' ' 引起来。
另外特点:底层二进制是无符号的整数类型,即 0~2^16-1 ---> 0~65535 所以,赋值时,也可以赋值整数。但是,存入变量空间后,其实是其整数对应的字符。
练习代码:
public static void main(String[] args){
char c1 = 'a';
System.out.println(c1);
char c2 = '啊';
System.out.println(c2);
//char c3 = '';//编译错误,不能为空
char c3 = ' ';//编译正确,可以为空格
//char c4 = ' ';//编译错误,只能为一个空格
//char c5 = "b";//编译错误,只能使用单引号
char c8 = 65;
char c9 = 97;
char c10 = 48;
System.out.println(c8+" "+c9+" "+c10);
}
扩展:java语言默认使用的字符集为unicode(不同字符集中字符所对应的二进制的值也不相同)。
什么是字符集:即二进制与字符的一一对应关系的表
unicode字符集: 无论字母,还是汉字,都占两个字节大小
列:'A'---00000000 01000001
'a'---00000000 01100001
'0'---00000000 00110000
java语言常用的字符: 'A'~'Z' ->65~90
'a'~'z' ->97~122
'0'~'9' ->48~57
java语言中的转义字符:'\':将特殊字符变成相应意义的字符。
java语言中的特殊字符:单引号,双引号,制表符,换行符,回车符号
'\'' 单引号
'\"' 双引号
'\\' 反斜线
'\t' 制表符
'\r' 换行符,(有翻页效果,类似于回车符)
'\n' 回车符,
(4)布尔类型:
用来判断条件是否成立的,在内存中占1字节大小。
只有两个值 true/false
true:表示条件成立
false:表示条件不成立
引用数据类型
常用的引用类型:
String:字符串类型
赋值特点:
1.必须使用双引号 " "
2.引号内有0或0个以上的字符都可
3.字符串可以做拼接操作,拼接后的数据 仍是字符串类型。
练习代码
public static void main(String[] args){
String name = "小张";
//String n1 = '小王';//编译错误。
String n1 = "";//编译正确,可以为空字符串
String n2 = " ";//编译正确,空格字符串
String m = "中国";
String m1 = "666";
//可以进行拼接操作,拼接符号为 +
String m2 = m+m1;
System.out.println(m2);
}
Math:是一个数学类型,此类型中有很多方法
如:Math.random():功能是随机产生一个[0,1)区间内的任意浮点数
范围:0~0.99999999999999999999;
关于产生随机数的范围:
如果想要[m,n)区间内的任意小数
Math.random()*(n-m)+m
如果想要[m,n)区间内的任意整数
(int)(Math.random()*(n-m)+m)
如果想要[m,n]区间内的任意整数
(int)(Math.random()*(n+1-m)+m);
练习代码:
public static void main(String[] args){
/*
随机生成一个[-5,4]区间内的任意整数
包含:-5,-4,-3,-2,-1,0,1,2,3,4
使用Math.random()达到上述目的
小数范围为:
-5.0~4.999999999,然后取整
范围就变成:
-5,-4,-3,-2,-1,0,1,2,3,4
浮点数强制转换整数的语法:
(int)(浮点数的变量)
*/
int n2 = (int)(Math.random()*10-5);
System.out.println("n2:"+n2);
/*
随机产生一个[10,20]区间的任意整数
10.0~20.999
此范围由0~1扩了11倍
然后由0~10.9999,向右平移10
*/
double n3 = (int)(Math.random()*11+10);
System.out.println(n3);
}
Scanner:是一个开启键盘输入的类型,此类型中有很多方法。
如:可以扫描键盘输入的整数,浮点数,布尔类型,字符串
nextInt():扫描整数
nextDouble():扫描浮点数
nextBoolean():扫描布尔类型
next():扫描字符串
nextLine():扫描字符串 (会出现小bug,不是经常用)
注:这些功能都有阻塞程序的效果,当扫描到数据后,并回车,阻塞效果消失,程序继续向下运行,没有扫描到的话将不会向下执行。
使用步骤:
(1)导包:import java.util.Scanner;
(2)新建对象:Scanner scan = new Scanner(System.in);
(3)使用功能: int num = scan.nextInt();
double num = scan.nextDouble();
String name = scan.next();
练习代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入整数n1:");
int n1 = sc.nextInt();
System.out.println("请输入整数n2:");
int n2 = sc.nextInt();
System.out.println(n1+"+"+n2+"="+(n1+n2));
}
类型转换
1.自动转换(隐式转换):占内存小的类型变量赋值给占内存大的类型变量,会发生自动转换。
自动转行中,有小类型向大类型转换,转换后在其对应的二进制数组中前面添加相应数量的0或1
类型的大小顺序:byte-->short-->int-->long-->float-->double
char
2、强制转换:占内存大的类型变量赋值给占内存小的类型变量,需要强制转换。
语法如下:(占内存小的变量类型名)变量;列: int a = 1;byte a1 = (byte)a;
注意:有可能出现精度损失。
类型的大小顺序 double->float-->long-->int-->short--byte
char
练习代码
public static void main(String[] args){
/*
练习:
将 short类型的b赋值给int类型的a;
将 byte类型的c赋值给double类型的d;
将float类型的e赋值给double类型的g;
将double类型的n1赋值给float类型的n2
将float类型的n2赋值给int类型的n3;
将int类型的n3赋值给byte类型的n4;
分别输出
*/
short b = 10;
int a = b;
System.out.println(a);
byte c = 100;
double d = c;
System.out.println(d);
float e = 1.0F;
double g = e;
System.out.println(g);
double n1 = 0.618;
float n2 = (float)n1;
int n3 = (int)n2;
byte n4 = (byte)n3;
System.out.println(n2);
System.out.println(n3);
System.out.println(n4);
}