在我们的编程中经常会使用变量,可是我们对于变量的使用,貌似一直都是会用,但是要说出个所以然,貌似又不怎么行,例如为什么要用int,什么情况下用int,为什么有时候是float,有时候是double,即使我们知道了他们的大小不一样,那么到底是查多少呢?
如果用声明周期来评论变量的话,也就是说一下他们在我们的程序能活多长时间吧。
局部变量就是活的时间最短的了,他随着方法的调用而出生,也随着方法的结束而消亡,听着好伤感,不过用法确实我们最常用的了,因为真的很简答。
public class test {
public void putAge(int nowAge){
int age = 0;
age = age + nowAge;
System.out.println("我今年:"+age + "岁了");
}
/** * @param args */
public static void main(String[] args) {
test test = new test();
test.putAge(26);
}
}
结果如下:
当然这里需要注意的是在我们使用局部变量的时候一定要为他们赋予初始的值,否则程序再编译期间就会报错。不能写成
int age; //错
int age = 0; //对
全局变量也交实例变量,他定义在方法的外边,类的里边,当空间分配给某个对象在堆中,插槽为每隔实例变量创建值,一个对象如果用new来创建,再对象被销毁创建的实例变量。
实例变量有默认值,他不像局部变量。对于数字的默认值是0,为布尔值是false和对象引用为null。值可以在声明或构造函数中分配。
public String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
/** * @param args */
public static void main(String[] args) {
test test = new test();
test.setUserName("menghaibin");
System.out.println(test.getUserName());
}
效果如下:
静态变量的性质更加独特,它不仅可以一直存在,而且和他调用他的类没有直接的关系,因为他是再内存中占有一个固定的内存,所以如果有一个人调用了静态变量,并且修改了值,那么其他的人查看的话,就是修改以后的值,他不是像全局变量伴随这类的生成而出现,每new一个类,都会有相应的变量,而静态变量只有那么一个,独此一份。
静态变量的使用也非常的方便。
//公司
private static double salary;
//部门 //静态常量
public static final String DEPARTMENT = "Development ";
public static void main(String args[]){
salary = 1000;
System.out.println(DEPARTMENT+"的平均公司是:"+salary);
}
基本类型有byte,int,Long,float,double,
byte占用一个字节,数字大小为-2^7—2^7-1,byte由1个字节8位表示,是最小的整数类型。主要用于节省内存空间关键。当操作来自网络、文件或者其他IO的数据流时,byte类型特别有用。
byte s1 = 'a';
short占用两个字节,数字大小为-2^15—2^15-1short可能是最不常用的类型了。可以通过整型字面值或者字符字面值赋值,前提是不超出范围(16 bit)。short类型参与运算的时候,一样被提升为int或者更高的类型。(顺序为 byte short int long float double).
public static void main(String args[]){
byte s1 = 10;
byte s2 = 'a';
byte sum =(byte) (s1 + s2);
System.out.println(sum);
}
输出结果是107
int占用四个字节,数字大小为-2^31—2^31-1有符号的二进制补码表示的整数。常用语控制循环,注意byte 和 short在运算中会被提升为int类型或更高。Java 8以后,可以使用int类型表示无符号32位整数[ 0, 2^31 - 1]。
int num = 2;
long占用八个字节,数字大小为-2^63—2^63-1.当需要计算非常大的数时,如果int不足以容纳大小,可以使用long类型。如果long也不够,可以使用BigInteger类。
Long num = 1L;
16 bits, [0, 65535], [0, 2^16 -1],从’\u0000’到’\uffff’。无符号,默认值为’\u0000’。Java使用Unicode字符集表示字符,Unicode是完全国际化的字符集,可以表示全部人类语言中的字符。Unicode需要16位宽,所以Java中的char类型也使用16 bit表示。 赋值可能是这样的:
char ch1 = 88;
char ch2 = 'A';
ASCII字符集占用了Unicode的前127个值。之所以把char归入整型,是因为Java为char提供算术运算支持,例如可以ch2++;之后ch2就变成Y。当char进行加减乘除运算的时候,也被转换成int类型,必须显式转化回来。
包含单精度的float和双精度的double,分别用32、64bits表示,遵循IEEE 754规范。、
float使用32 bit表示,对应单精度浮点数,运行速度相比double更快,占内存更小,但是当数值非常大或者非常小的时候会变得不精确。精度要求不高的时候可以使用float类型,声明赋值示例:
public static void main(String args[]){
float f1 =10;
System.out.println(f1);
f1 = 10L;
System.out.println(f1);
f1 = 10.0f;
System.out.println(f1);
}
64为表示,将浮点子面子赋给某个变量时,如果不显示在字面值后面加f或者F,则默认为double类型。java.lang.Math中的函数都采用double类型。
如果double和float都无法达到想要的精度,可以使用BigDecimal类。
boolean类型只有两个值true和false,默认为false。boolean与是否为0没有任何关系,但是可以根据想要的逻辑进行转换。许多地方都需要用到boolean类型。
对于刚刚接触java的人,很多人以为string也是基本类型,因为我们用的非常的频繁,但是
string是一个对象,是一个引用类型,基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构
基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为
java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。
我们经常把string理解成字符串,而基本类型中char我们表示字符,也就是char的序列,那么我们能把序列称为基本类型吗。
对于8中基本类型,我们可以按照大小排序(byte,boolean)8位,(short,char)16位 ,(int,folat)32位,(Long,double)64位。按照类型是整形(byte,short,int,Long),字符(char),浮点型(float,double),boolean(boolean类型)。还有就是我们再运用我们这些基本变量的时候一定要注意他们的作用于,大致就是局部变量,全局变量,静态变量,一个活的比一个时间长。