看完了常量,那我们来看下变量。

变量顾名思义,也就是能变化的量,也就是说已经定义之后它的值仍然是可以变的,不像常量一经定义便不能够改变了。比如说现在我们需要一个数,需要用户输入之后才能,确定这个数是几,如何计算。例如,现在有一个程序,可以根据用户输入的数字,输出对应的星期。那么,用户输入的数字,是我们写程序的时候无法确定的,是变化的,那么此时我们就需要有这么一个量,来存储这个变化的值,那么这个值就是一变量。

int week;//用户可能输入的数字,可变的无法确定的,此时就需要有一个变量来存储这个值

  

(疑问?常量和变量在内存中是如何存储的???希望知道的拍砖)。

一、变量的分类

那么变量都分哪几类呢?

               |--整型变量 byte(一个字节),short(二个字节),int(四个字节),long(八个字节)

               |--浮点型变量  float(四个字节),double(八个字节)

     |--基本类型变量  |--字符变量char(2个字节)

     |         |--字符串变量

     |         |--布尔值变量(一个字节)   

变量类型--|

     |         |--类变量 class

     |--引用类型变量  |--接口变量 interface

               |--数组变量 array[]

因为java是一种强类型语言,声明一个变量的时候必须以固定的形式来声明即:

  变量类型     合法标志符       值 example: int a = 10; char a='a'; byte b = 3

二、不同类型变量之间的相互转换

  一个类型的变量只能接受与其相对应的类型的常量

  eg:  int a = 'a';//这样赋值到底合不合法呢?

  

class Trans{

	public static void main(String[] args) {
int a = 'a';
System.out.print(a);
} }

  运行代码之后我们得到了 97 也就是'a' 在ascii中a对应的阿斯科码,这种转换是编译器底层给予的变换,也叫做隐式变换。

  在隐式变换中单个字符串就对应ascii中的码表 做相应的整数变换。

  小空间类型只能向大精度类型做变换,当需要大类型向小类型变换的时候,叫做有损转换,此时需要做强制转换。

几种特殊情况:

  1、int a = 'a';//是合法的 会隐式取a在ascii中码表的对应数字做替代

  2、byte a = 10;//因为10默认是int类型(同时浮点型默认的是double类型),此时编译器首先验证byte类型能否存放得了10这个数,byte的取值范围是-128-127,所以可以,因此这个赋值是合法的。所以编译器没有提示,直接赋值完成。但是如果我们给a赋值为10000,此时就超出了byte所能承载的最大值,这个时候就会报错,“可能损失精度”编译失败。

    还有一种情况是:

    byte a = 10;

    byte b = 20;

    byte c = a+b;

    这种能否编译成功呢,我们编译一下

    

class Trans{

	public static void main(String[] args) {
byte a = 10;
byte b = 10;
byte c = a+b;
System.out.print(a);
} }

  此时编译仍然是失败的,提示损失精度,这是为何?

  因为在编译过程中a,b是不确定的一个数,随时可变的,编译器无法确定,只能报错警告。(我也有一个地方不是很明白,上面两个不是已经具体赋值了么?有知道的解释下:) )

  自问自答:

  

class Trans{

	public static void main(String[] args) {

		byte a = 10;
byte b;
byte c = a+b;
System.out.println(c); } }

  

  上图中的ForDemo 换成 Trans 哈......(*^__^*) 嘻嘻

  按照正常的编译顺序应该先提示b没有初始化才对啊,但是这里却是先提示的“可能损失精度”,从这一点,也就解释了上面为什么初始化了,但是结果还是损失精度。在编译的过程中,是先求证byte c这个变量是否可能损失精度,再去找byte a; byte b的值进行计算。因此在可能损失精度的情况下,是无法编译通过的。

  3、但是如果我们把byte类型换成int类型则不会报错,为什么?因为在编译器中默认的就是int类型,即使这个数字太大造成溢出,此时仍然是int,尽管损失精度。JVM就是这个样子规定的。

  4、隐式转换之整数和浮点数:

    当整数和浮点数做运算的时候,此时会以存储空间大的一个为基准,进行隐式转换。【在运算符当中会讲到】

    布尔类型不能强转,boolean b = true;(char)b,是编译不过的。

  5、char类型是可以放中文的,之所以可以放中文是因为,char本身就是两个字节,一个汉字恰好能够放两个字节,所以char b="孙";这个是可以编译通过的。char类型当中只能够放单个字符,并且要用单引号括起来。

java学习之变量的更多相关文章

  1. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  2. Java 学习第一步-JDK安装和Java环境变量配置

    Java学习第一步——JDK安装及Java环境变量配置 [原文]  2014-05-30 9:09  Java SE  阿超  9046 views Java作为当下很主流的编程语言,学习Java的朋 ...

  3. Java学习第一步——JDK安装及Java环境变量配置

    Java作为当下很主流的编程语言,学习Java的朋友也越来越多了,作为一门面向对象的编程语言,Java也有着安全.高 效等诸多有点.从TIOBE(TIOBE排行榜是根据互联网上有经验的程序员.课程和第 ...

  4. Java 学习(4):基本数据类型,变量类型

    目录 --- 基本数据类型 --- 变量类型 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用 ...

  5. Java 学习(14):接口 & 包(设置 CLASSPATH 系统变量)

    Java 接口(英文:Interface) 定义:在JAVA编程语言中,接口是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明. 一个类通过继承接口的方式,从而来继承接口的抽象方 ...

  6. java学习笔记(2)注释、public lcass、class、标识符、字面值、变量

    java学习笔记(1)中说过了java的一些基础知识,发展史,特点,编译和运行过程,配置环境变量等,接下来开始介绍java的语法等只是点  关于java源程序中的注释: *什么是注释?注释的作用是什么 ...

  7. java学习笔记(1)java的基础介绍 、JDK下载、配置环境变量、运行java程序

    java工程师是开发软件的 什么是软件呢? 计算机包括两部分: 硬件: 鼠标.键盘.显示器.主机箱内部的cpu.内存条.硬盘等 软件: 软件包括:系统软件和应用软件 系统软件:直接和硬件交互的软件:w ...

  8. Java学习笔记(二)——变量与常量

    一.java中的关键字 Java 语言中有一些具有特殊用途的词被称为关键字.关键字对 Java 的编译器有着特殊的意义,在程序中应用时一定要慎重哦!! 二.认识Java标识符 1.定义 标识符就是用于 ...

  9. Java学习笔记(一):数据类型与变量

    数据类型 Java中存在2种数据类型,下面我们来详解一下: 基本数据类型: 引用数据类型: 可以用一张表来记录: 基本数据类型 整型 byte:1个字节8位,取值范围为:[-128, 127],直接写 ...

随机推荐

  1. Python 记录(一)

    一开始没发现3.5与2.x版本的区别,导致浪费了很多时间在导包等问题上: 如: Pyhton2中的urllib2工具包,在Python3中分拆成了urllib.request和urllib.error ...

  2. 【css面试题】三个DIV要求水平对齐,左右两个DIV宽度固定为100px,中间那个DIV充满剩余的宽度(至少2种方法)

    这是我在一家公司面试时遇到的问题,当时没有答上来!! 所以看到的小伙伴一定要注意了!! 变化浏览器宽度可看到效果: 左 右 中 然后我们来看看代码: 第一种方法:(浮动) <style type ...

  3. web前端开发随手笔记 - 持续更新

    本文仅为个人常用代码整理,供自己日常查阅 html 浏览器内核 <!--[if IE]><![endif]--> <!--[if IE 6]><![endif ...

  4. 实训第二天早上--hibernate之配置文件映射和注解

    hibernate 逐步优化第一步 只按照步骤来提取的jre包导入错误第二步 继续封装,把增删改查提取出来,同时进行代码的封装HQL语句  be stranger in the code .be fo ...

  5. .NET Core的介绍

    ASP.NET5应用程序默认使用.net core来构建应用程序,.net core是一个小的,优化过的.net运行时应用程序. 1. 什么是的.NET Core .NET Core 5 是一由模块化 ...

  6. 内存储与外存储(IO流的应用)

    存储分为内存储,外存储(Sd卡存储),其中还涉及IO流的应用. 我们先来看内存储,在布局中EditView中输入的内容,通过点击按钮,分别进行保存,读取,删除的操作,读取时显示在下面的TextView ...

  7. appium系列教程(转载)

    1.系列文章:转载来源:乙醇的cnblog http://www.kuqin.com/shuoit/20140704/340994.html 2.环境部署:http://www.51testing.c ...

  8. 用WebStorm调试本地html(含嵌入的javascript).

    题外话: 以前很少能调试,甚至以为不能调试(好笨),后来我看了一本叫做<<Learning Three.js>>的一本书后,里面推荐有几种javascript的编辑工具,都蛮好 ...

  9. 查询Sqlserver数据库死锁的一个存储过程(转)

        使用sqlserver作为数据库的应用系统,都避免不了有时候会产生死锁, 死锁出现以后,维护人员或者开发人员大多只会通过sp_who来查找死锁的进程,然后用sp_kill杀掉.利用sp_who ...

  10. 简单讲解iOS应用开发中的MD5加密的相关使用<转>

    这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用,示例代码基于传统的Objective-C,需要的朋友可以参考下 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POS ...