小战Java笔记_SE_Variable(变量)

一、 Java变量的要素:变量类型、变量名、作用域

二、 Java变量的声明(定义)语法格式为:type varName [=value][{,varName[=value]}]

一般解释来说:声明是告诉编译器存在这么一个标识符。定义则是为程序申请一块内存。

付: 变量的声明和定义,从C到编译原理到C++,再到Java

最早在编程语言中认识声明和定义是在学C语言的时候...

C语言中:如extern User user;extern int a;就是声明,变量的声明就是仅仅告诉编译器,声明的变量的存在,要预留一点空间,但并不为其分配内存.定义就是声明这个变量并真正在内存(堆或栈中)为此变量分配空间.

从编译原理上来说,声明就是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而定义就是不仅知道某类型的变量会被使用,并且已经为其分配了内存.

因为 在编译的时候,编译器先处理一些特殊数据(宏定义,函数的声明,变量的声明),在这个过程中,编译器   通过声明 可以预测整个定义需要的内存大小,并且 把这些大小预留起来,留给定义的时候使用(因为虽然定义,但是在 main函数里面没有调用,一样的不分配内存)。 如果不事先声明,直接定义,有可能会造成系统崩溃,出现内存不足,不能分配。   然而现在内存都是1G左右了,所以一般空间都足够,所以你也可以不声明直接定义函数。   但是一旦内存紧张,就会出错,而且程序简洁性就很低。(不看到定义,还不知道原来还定义了这么一个函数!!!)

在C++中,如short a;int b;这些是定义,也就是说在栈上分配了内存,而对于对象,比如自定义的类:User user;也就是说在栈上分配了引用或句柄,没有具体分配对象的内存,而User *puser就需要puser=new   User(),才会真正为对象在堆上分配空间.

在C和C++中,extern User user就是声明,并没有分配内存空间

在Java中,如果在方法中的局部变量,如使用short a;int b;也只是声明,因为没有初始化时,要想使用这个变量时编译器要会求初始化这个变量,如果不使用这个变量,那单是声明这个变量是没有问题的,如果要使用的话就要初始化这个变量,即是要给这个变量分配内存并赋值,也就是定义.如果在类中声明一个成员变量,如short a;int b; 在方法中要使用这两个变量时,编译器没有要求初始化这变量,因为当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值,所以,a 和b的值都会被初始化为0.而这个0是在堆内存中的

下面我们来看看Java中局部变量的初始化和在内存中的运行机制:局部变量声明后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化,这意味着声明局部变量后,系统并未为这个变量分配内存空间,只是在栈中分配了一个内存保存这个变量名,并没有为变量的值分配内存.直到等到程序为这个变量赋初始值时,系统才会为这个局部变量分配内存,并将初始化值保存到这块内存中.

与成员变量不同,局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中的.如果局部变量是基本类型的变量,则直接把这个变量的值保存在该变量对应内存中;如果局部变量是一个引用类型的变量,这个变量里存放的是地址,通过该地址引用到该变量实际引用的对象或数组.因为局部变量只保存基本类型的值或者对象的引用,所以局部变量所占的内存区通常比较小.

 


三、 Java变量的分类

  ◆  按被声明的位置划分:

    -    局部变量:方法或语句块内部定义的变量

    -    成员变量:方法外部、类的内部定义的变量

    -    注意:类外面(与类对应的大括号外面)不能有变量的声明

  ◆按所属的数据类型划分:

    -    基本数据类型变量

    -    引用数据类型变量

、Java变量的取值范围

TYPEBITE十进制位数MIN_VALUEMAX_VALUE
byte83-128127
short165-3276832767
float32 1.4E-453.4028235E38
int3210-21474836482147483647
long6419-92233720368547758089223372036854775807
double64 2.2250738585072014E-3081.7976931348623157E308

五、 Java变量的转换

()、 整型、实型、字符型变量中的相互转换 
在Java中整型、实型、字符型被视为同一类数据,这些类型由低级到高级分别为(byte,short,char)int-long-float-double,低级变量可以直接转换为高级变 量,例如,下面的语句可以在Java中直接通过: 
  byte b;   int i=b; 
而将高级变量转换为低级变量时,情况会复杂一些,你可以使用强制类型转换。即你必须采用下面这种语句格式: 
  int i; 
  byte b=(byte)i; 
可以想象,这种转换肯定可能会导致溢出或精度的下降,因此我们并不推荐使用这种转换。

(二)String类和其它数据类型的相互转换

1.如何将字串 String 转换成数字 A. 有两个方法:

   1).int i = Integer.parseInt([String]);

      i = Integer.parseInt([String],[int radix]);

  2). int i = Integer.valueOf(my_str).intValue();

   注: 字串转成 Double, Float, Long 的方法大同小异.

    2 如何将数字  转换成字串 String  有叁种方法:

    1.) String s = String.valueOf(i);

   2.) String s = Integer.toString(i);

   3.) String s = "" + i;

   注: Double, Float, Long 转成字串的方法大同小异.

(三)Date类与其它数据类型的相互转换 

1.int ->Date

Date(int year, int month, int date):以int型表示年、月、日 
Date(int year, int month, int date, int hrs, int min):以int型表示年、月、日、时、分 
Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年、月、日、时、分、秒

2.long ->Date

Date(long date) :date:就是将一个时间表示为距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数

3.String ->Data 

1) Date.valueOf()

reportDate_str ="2005-10-01 00:00:00.0"; 
eportDate =  java.sql.Timestamp.valueOf(reportdate_str);  或者 eportDate = java.sql.Date.valueOf(reportdate_str);

2)DateFormat.parse()
SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );

Date date = sdf.parse( " 2008-07-10 19:20:00 " );

4.Date -> String: 
1) V_DATE = reportdate.toString(); 

2)SimpleDateFormat sdf =   new SimpleDateFormat( " yyyy年MM月dd日 " );

        String str = sdf.format(new Date());


如果有误,请斧正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值