学习的大纲
- 变量–成员变量,局部变量 ,静态变量
- 学习要知新而温故.所以碰到现在陌生的,不要急,学下去 会学明白的!
- 常量(constant),不可改变的量 如 数字 字符 字符串 以及 用final 修饰的 变量 (重点)。
- 常量的命名规则:全部字母大写,两个单词之间用下划线连接 如 MAX_BIG
- 基本数据类型(primitive data type), 引用数据类型
- 不同进制表示形式
- 长整型数据的声明
- 浮点数据类型
学习笔记
局部变量(local variable)
定义;方法或语句块内部定义的变量。生命周期是从声明位置开始到方法或语句块执行完毕为止。
注意:局部变量在使用前必须先声明、初始化(赋值)-----那别的变量在这点上有什么特别呢?
成员变量(member variable)
定义:方法外部,类内部定义的变量。
成员变量从属于对象,生命周期伴随对象 始 终。
成员变量如果不初始化,编译器(?)---- 它会自动初始化成该类型的默认初始值,
Int 0
double 0.0
char ‘\u0000’
Boolean false
静态变量(类变量 static variable)
定义:使用static 定义。 从属于类,声明周期伴随类的 始 终 ,从类加载到卸载!
基本数据类型(primitive data type)
- 数值型
- 整数类型:byte (1字节), short(2字节), int(4字节, long(8字节)
- 浮点类型:float(4字节) , double(8字节)
- 字符型 :char 2字节
- 布尔型:boolean 1位
引用数据类型(4个字节)用来代表被引用对象的地址
-用来代表被引用对象的地址
进制的表示
十进制:正常表示
八进制 :0(零)开头 如 015(表示15)
十六进制:0x或0X开头 如 0x15(表示15)
二进制:用 0b或0B开头 0b0111101
根据实际情况总结
- 在对数据进行检查是会涉及到这两方面1.数值大小是否超出对应(声明变量用的,如byte a = 30; 中的byte)数据类型的范围;2.要考虑到整型数据类型默认为int,因此即便用long去声明变量,对该变量的数值进行检查时依旧用的是int的范围作为检查标准,除非在数值后面加上L。
浮点数据类型
- 浮点数据类型默认为double类型,因此在用float声明变量时,要在其数值后面加F,进行显式说明。
- 浮点数(float ,double 类型)是不精确的,不能用于比较,特别是一些对数值精确度有特别要求的场合不要使用
- Java.math包中有BigInteger和BigDecimal两个用于任意精度数值的计算!
- 如要进行浮点数的比较,请使用BigDecimal!
源代码
- 用于测试变量的代码
/**
- 测试变量
- @author L
*/
public class TestVariable {
int a;//成员变量,从属于对象。 成员变量会自动被初始化
static int size;//静态变量, 从属于类
public static void main(String[] args) {
int age;//该变量在main方法中声明,就仅能在该方法中使用,就是main后面的{}之间的范围
age = 18; //局部变量,从属于方法
{
double salary = 3000.0;
}//语句块,因此salary仅在该语句快中有效;局部变量,从属于语句块
//int big;
System.out.println(age);
//System.out.println(big);
//System.out.println(salary); 如果不注释掉 ,其报错原因为:salary变量未声明
}
}
- 用于测试基本数据类型的源代码
/**
- 测试基本数据类型(整型变量)
- @author L
*/
public class TestPrimitiveDataType {
public static void main(String[] args) {
int a = 15;
int b = 015;//以0开头的表示该数字为8进制数,其真正数值(用十进制看)为13
int c = 0x15;//以0x开头的是16进制数
int d = 0b1101;//以0b开头的是二进制数
System.out.println(a);
System.out.println(b);//正常这要显示为十进制数.
System.out.println©;
System.out.println(d);
//byte age = 300; 报错了 ,数值大小超出了 类型范围
byte age = 30;
int population = 2000000000;//整型常量默认为int 类型
long globalPopulation = 7400000000L;//所以在long类型数值后面要显式的加个L或l。
//建议用L
//根据byte的使用情况可以总结:(笔记中)
}
}
- 用于测试基本数据类型中浮点型的源代码
import java.math.*;
/**
- 测试基本数据类型中的浮点型
- @author L
*/
public class TestPrimitiveDataType2 {
public static void main(String[] args) {
//float a = 3.14;报错,浮点型默认数据类型为double
float a = 3.14F;//因此float类型的浮点数要在后面加F。
double b = 3.14;
double c = 314E-2;
System.out.println©;
float f = 0.1F;
double d = 1.0/10;
System.out.println(f==d);//报错,因为浮点数是不精确的 所以在数学上看似相等的f和d在这里并不相等。
//浮点数是不精确的,一定不要用于比较!例子如下
float d1 = 423432423F;
float d2 = d1+1;
if(d1==d2) {
System.out.println("d1==d2");//实际运行结果是这行,显然是不对的
}
else {
System.out.println("d1!=d2");
}
/* java.math这个包下面有 BigInteger和BigDecimal,这两个类可以处理任意
长度的数值,BigDecimal可以实现任意精度的浮点运算,即可以用于比较*/
System.out.println("#######################");
BigDecimal bd =BigDecimal.valueOf(1.0);//定义bd的值为1.0
bd = bd.subtract(BigDecimal.valueOf(0.1));//bd减0.1,下面4条同理
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd);//结果0.5
System.out.println(1.0-0.1-0.1-0.1-0.1-0.1);//用默认数据类型进行运算的结果0.5000000000000001
BigDecimal bd2 = BigDecimal.valueOf(0.1);
BigDecimal bd3 = BigDecimal.valueOf(1.0/10.0);
System.out.println(bd2.equals(bd3));
System.out.println(bd2==bd3);//为什么用‘==’该符号进行比较结果是错的?
}
}
关于最后一篇代码中的最后的问题我百度到了一个解释,但目前没有看明白,所以将其记入笔记中日后再看