day05
变量
变量定义:只能以大小写字母、$、_开头定义。
变量转换
低 --> 高:byte,short,char --> int --> long --> float -->double
强制转换:高容量向低容量转换,(类型)变量名
int i = 128;
byte b = (byte)i;
System.out.println(i);
System.out.println(b); //输出-128,这还是因为内存溢出所以输出的不是128.byte占一个字节范围,-128~127
自动转换:低容量向高容量转换
int i = 23;
double d = f;
System.out.println(f);
System.out.println(d); //输出23.0
char c = 'a';
int d = c+1;
System.out.println(c); //a
System.out.println((char)d); //b
注意:
1. 不能对布尔值进行转换,布尔值变量只有两个值,false、true。
2. 不能把对象类型转换为不相干的类型。
3. 在把高容量变量向低容量变量转换时要强制转换。
4. 在转换过程中还可能出现内存溢出或精度问题。
精度问题实例
System.out.println((int)23.7); //23
System.out.println((int)-45.34); //-45
当操作数比较大时,注意溢出问题:
int money = 10_0000_0000; //JDK7新特性,数字之间可以用下划线分割,下划线不会被输出。
int year = 20;
int total = money*year;
System.out.println(total); //-1474836480 计算的时候溢出了,int占四个字节范围,最大21亿。
long total2 = money*year;
System.out.println(total); //-1474836480 输出溢出了,虽然使用long变量但是输出还是不是200亿,以为两个int变量相乘,默认int,在转换前就已经存在问题。
long total3 = ((long)money)*year; //long total3 = money*((long)year) 先将一个数转换为long,之后相乘的一个int会自动转换为long。
System.out.println(total3); //200亿 注意L l,尽量用L表示。
变量作用域
1. 类变量
类变量定义时,需要加上static关键字。类变量的生存周期在整个类中,可在类的方法内直接调用。
public class Demo08 {
static double salary = 2500;
}
2. 实例变量
实例变量从属于对象,定义在方法的外面,类的里面。实例变量如果不初始化,输出的会是默认值,整数型、小数型变量的默认值是0 0.0等,除了八大基本数据类型外其他类型默认值是null。(char类型的默认值好像不输出)
public class Demo08{
int age;
String name;
public static void main(String[] args){
Demo08 demo08 = new Demo08();
System.out.println(demo08.age);
System.out.println(demo08.name);
}
}
3. 局部变量
局部变量必须声明和初始化。
局部变量如果定义在方法内,则生存周期只在定义的方法中,不可跨方法调用。
public class Demo08 {
//类变量 static
static double salary = 2500;
//static、final、public、private等都是修饰符,修饰符是没有先后顺序区别的。
//常量 变量名用大写字母表示 final
static final double PI = 3.14; //final static double PI =3.14; 效果是一样的
//属性:变量
/*实例变量:从属于对象;(定义在方法的外面,类的里面,有点类似于c的全局变量)
实例对象如果不初始化,整数型、小数型输出的是0 0.0等,char类型好像不输出。除了基本类型其他类型输出null。
布尔型变量的默认初始值是false
*/
boolean name;
int age;
//main方法
public static void main(String[] args) {
//局部变量;必须声明和初始化值
/*
int i;
System.out.println(i); //会报错,因为i局部变量,没有初始化无法输出。
*/
int i = 10;
//System.out.println(i);
//变量类型 变量名字 = new Demo08();
Demo08 demo08 = new Demo08(); //alt+enter 快捷键可以生成对象。
System.out.println(demo08.age); //0
System.out.println(demo08.name); //null
//类变量 static
System.out.println(salary);
}
//其他方法
public void add() {
/*
System.out.println(i); //报错,因为i只有在main方法里面定义,生存周期也只在main方法函数中。
*/
}
}
变量的命名规范:
1. 所有的变量、方法和类名定义全都要见名知意。
2. 类名要求首字母大写,然后遵循驼峰原则。
驼峰原则:除第一个单词之外,后面的所以单词首字母大写。
3. 常量要求所有字母大写,多个字母间用下划线间隔。
4.方法名、局部变量、类成员变量则全部首字母小写,然后遵循驼峰原则。
2020 9.8 21:25