①.变量
- 强类型语言:变量的使用严格符合规定,所有变量都必须先定义后才能使用。
安全性高,但速度相对较慢 - 弱类型语言:对变量的使用不是很严格。
安全性相对较低,但速度快
变量的定义:
- 本质上是内存中的一块存储空间,这块空间有 数据类型、变量名、字面值。
变量是内存中存储数据的最基本的单元。
- 声明格式:
数据类型 变量名 (= 字面值);
变量必须先声明在赋值,才可以访问。
- 作用域:变量的有效范围
“出了大括号就失效了 ”
在不同作用域当中,变量名可以重名- 分类:
类变量:写在类当中的变量 需要static关键字
局部变量:在方法体当中声明的变量
成员变量:在方法体外(类体中)声明的变量
变量的表数范围:
byte一字节——-27~27-1
short二字节——-215~215-1
int四字节——-231~231-1
long八字节——-263~263-1
float:-3.403E38~3.408E38【七位有效数字】
double:-1.798E308~1.798E308【十五位有效数字】
public class VarTest {
public static void main(String[] args){
//变量必须先定义再使用
String name = "iFinder";
System.out.println(name);
//byte范围-128~127 一字节
//byte b1 = 257; //不兼容的类型: 从int转换到byte可能会有损失 超过表数范围就会报错
byte b = 10;
//short范围 -32768~32767 二字节
//short s1 = 256256; 不兼容的类型: 从int转换到short可能会有损失
short s = 256;
//int范围 -2147483648~2147483647 四字节
//int i1 = 25256256256; 整数太大
int i = 256256256;
long l = 256256256;
//声明float字面值后要加注“F/f” 否则报错:不兼容的类型: 从double转换到float可能会有损失
//float f = 12.3652;
float f = 12.3652f;
double d = 12.3652;
//String类型声明时字面值要写在""当中 不兼容的类型: int无法转换为java.lang.String
//String S = 123;
String S = "123";
char c = 1; //值为1的字符的值
char c2 = '1'; //字符 1
System.out.println(c); //
System.out.println(c2); //1
}
}
②.变量拓展知识
不同的进制
二进制:0b10 —— 2 用0b开头
十进制:10 —— 10 正常开头
八进制:010 —— 8 用0开头
十六进制:0x10 —— 16 用0x开头
浮点数据注意
- 浮点数的表述范围是有限的、离散的,存在一定的误差
- 在做数据比较的时候要尽量的避免使用浮点类型的数据
- 如果需要进行大数比较则需要使用BigDecimal这一类数学工具
字符型注意
- 字符型的字面值可以为 ‘a’ ‘请’······等等,也可以为表数范围内的数字,但是表示的内容不一样
- Java支持Unicode字符集,0~65535是Unicode的表数范围,Unicode占2字节
- ‘a’ = 97 ‘A’ = 65
转义字符
\t——制表符tab
\n——换行符
\——转义\本身
\”——转义"
更多请看大佬博客
public class VarAdvancedTest {
public static void main(String[] args){
//不同进制的开头 二进制0b 十进制 八进制0 十六进制0x
int i1 = 0b10; //二进制 2
int i2 = 10; //十进制 10
int i3 = 010; //八进制 8
int i4 = 0x10; //十六进制 16 0~9 A~F
System.out.println(i1); // 2
System.out.println(i2); // 10
System.out.println(i3); // 8
System.out.println(i4); // 16
System.out.println("=======================================");
//浮点数拓展,注意!!!!!
//float与double计算数据是不准确的!!!
float f1 = 0.1f;
double f2 = 1.0/10;
System.out.println(f1 == f2); //输出false
float f3 = 233333333333f;
float f4 = f3 + 1;
System.out.println(f3 == f4); //输出true
//原因,浮点数的表数范围是有限的离散的,有误差的
//最好完全避免使用浮点数进行数据大小的比较
//如果需要进行大数比较需要使用BigDecimal这一类数学工具做大数比较
System.out.println("======================================");
//字符串类型拓展
char c1 = 'a';
char c2 = '铨';
System.out.println(c1); // 输出 a
System.out.println(c2); // 输出 铨
System.out.println((int)c1); // 输出 97
System.out.println((int)c2); // 输出 38120
//java通过支持Unicode来进行编码
//a = 97 A = 65 ;Unicode表数范围2字节 0~65535
//Unicode 一般表示
}
}
③.常量
常量 Constant:初始化initialize之后不能再改变值,是不会变动的值。
其实是一种特殊的变量,一旦被设定,在程序运行的过程中就不允许修改
命名:常量名一般使用大写字母
声明方法:
final 常量名 = 字面值;
如:
final double PI = 3.1415925;
④.数据类型
定义
- 定义:不同的数据有不同的数据类型,用于指导内存应该分配多大的内存空间。
变量中存储的数据必须和变量的数据类型一致,否则编译时就会报错。
数据类型的分类- 数据类型主要分两大类:
1.基本数据类型(8个):
byte、short、int、long、float、double、boolean、char
2.引用数据类型:
数组、类、接口、枚举、标注
强制类型转换
- 格式:(类型)变量名
- “从高到低的转换”
注意:
1.不能对布尔值进行转换
2.不能转换为不相干的类型
3.高容量转换为低容量的时候,需要强制转换
4.转换时可能会导致内存溢出,或是丢失数据精度
常见问题
1.操纵比较大的数时注意数据溢出问题。
自动类型转换
- 定义:当Java中小容量变量向大容量变量转换时,jdk会自动进行类型转换。
转换条件:1.两种数据类型彼此兼容。 2.目标类型范围大于当前类型范围
自动类型转换顺序:
数值型数据的转换:byte→short→int→long→float→double。
字符型转换为整型:char→int。
public class VarBigNum {
public static void main(String[] args) {
//操作大数的时候,注意数据溢出问题
//JDK7的新特性,大数据可以用下划线隔开,方便计数
int money = 10_0000_0000;
int years = 25;
int total1 = money*years;
System.out.println(total1); //输出:-769803776 数据已经溢出
long total2 = money*years;
System.out.println(total2); //输出:-769803776 因为在类型转换之前,就已经存在问题
long total3 = ((long)money)*years;
System.out.println(total3); //输出:25000000000 先将一个数据转换为long,之后进行强制类型转换
}
}