Java学习变量与数据类型

一、变量变量是java中基本的存储单元,主要由三部分组成:
  • ①变量名
  • ②变量类型
  • ③变量的作用域
    例如:
    int k = 0 // int代表变量类型,k是变量名,0是变量值;
二、变量名称,在同一个方法里面不允许出现多个同名的变量
   public class Test{
    public static void main(String[] args){
         int aa = 20;
         int aa=30;//报错,命名重复
    }
  } 
三、变量类型

1.java属于强类型语言,变量类型一但声明,不可修改

        public class Test1{
              public static void main(String[] args){
                    int kk = 100;
                    String kk = "java"; //报错,也是重名问题
              }
        }

2.数据类型可以决定变量所需要的存储空间大小和对应的处理逻辑

public class  Test2{
       public static void main(String[] args){
           int number = 100;
           System.out.println(number/2);   //计算规则是在变量类型中定义的不可更改
           String s= "java" ;
           System.out.println(s+1);//这里的加号在java内部重新定义,在字符串中不是执行数值计算,而是进行字符串拼接
      }
}

3.作用域是指变量的有效范围,一般是指所在花括号范围内

public class Test3{
    public static void main(String[] args){
          {
              int kk=100;//这个kk只在他所在的花括号范围内有效
              System.out.println(kk);
          }
          System.out.println(kk);//语法报错,超出定义的范围,访问不到变量kk。
    }
}
Java是强类型语言

  • 每个变量有类型,每个表达式有类型,而且每种类型都有严格的定义
  • Java编译器对所有的表达式和参数都要进行类型相容性的检查,以保证类型是兼容的
  • 任何类型的不匹配都将被报告为错误而不是警告。在编译器完成编译以前,错误必须被改正过来
四、Java语言数据类型

整型

有4种:byte字节型,short短整型,int整数型,long长整型。

  1. java中的数据都是采用补码形式存储。
    • 原码、反码、补码:正数没有区别,最高位为符号位,java中没有无符号整数的概念
    • 16机制15=116+516^0=21
    • 10进制的21=00010101=15
  2. byte:1B(8b) 取值范围是: [-128~127]
    byte k = (byte)3000; //如果不进行数据类型转换,则IDE工具会报错。但是将大范围数据强转[窄化操作]为小类型变量会有精度损失
  3. short:2B:-32768到32767
  4. int:4B:-2147483648到2147483647
  5. long:8B:-9223372036854775808到9223372036854775807
//具体数据取值范围的查询方法
public class Test4 {
    public static void main(String[] args) {
        System.out.println(Long.MAX_VALUE);//上限
        System.out.println(Integer.MIN_VALUE);//下限
    }
}
  • 十进制整数。如123,-456,0
  • 八进制整数。以0开头,如0123表示十进制数83,-011表示十进制数-9。
  • 十六进制整数。以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18
  • 二进制整数,以0b或0B开头,例如0b10110010
    整数类缺省为int类型,如在其后有一个字母“l或者L”表示一个long值
short k1=123;
k1=k1+1;//报错的原因是1默认是int类型,所以计算结果为int类型,需要进行窄化操作

short k=Short.MAX_VALUE;
k+=1; //+=这个运算符会自动进行数据类型转换

浮点数类型

  • 分为 float单精度、double双精度

    在Java中浮点数无法精确存放,除非使用BigDecimal
    
  • 在金融系统中针对浮点数一般都会转换为整数进行处理

    float:4B:1.4E-45到3.4028235E38 保存7-8位有效数据
    
    double:8B:4.9E-324到1.7976931348623157E308 保存15-16位有效数据
    
  • 默认浮点数类型为double,如果需要使用float,则默认添加f或者F
    注意:浮点数无法精确存放
    float f1=1.23; float f2=2-0.77f; //判断f1和非相等,使用f1==f2是错误的

    public static void main(String[] args) {
        float k=0;//这里不报错的原因是0为int类型,计算中会自动转换为float
        for(int i=0;i<10;i++){
            k=k+0.1f;//如果不写0.1f则报错,因为系统识别0.1为double类型,则计算结果为double。
        }
        System.out.println(k); //1.0000001
    }
}

表示方法:

  • 十进制数形式。由数字和小数点组成,且必须有小数点,如0.123, 1.23, 123.0
  • 科学计数法形式。如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数
字符类型 char

Java中存放字符采用的是Unicode编码字符集,2B,0-65535

  • 可以充当整形数进行计算
  • 这里允许的字符包括中英文等,实际可以包含全世界范围的所有文字
  • windows默认编码字符集为GB18030(GBK)
//字符类型的变量可以当作整数使用

char c='a'; //注意:这里使用的是单引号,不是双引号,单引号中只能包含一个字符

需要记忆:
'0' < 'A' <'a'

查询对应字符的整形值
char c='中';
System.out.println((int)c);

Java也提供转义字符,以反斜杠(\)开头,将其后的字符转变为另外的含义
\ddd    1到3位8进制数所表示的字符(ddd)  例如'\110'实际就是字符H
    char c='\129'; // 注意这里是8进制数,报错原因是9超出范围
\uxxxx  1到4位16进制数所表示的字符(xxxx),例如'\u9110'表示字符'鄐'
\’      单引号字符,例如'\''
\"      双引号字符,例如'"'实际上是可以的,但是这样写可读性非常差,所以建议使用'\"'
\\      反斜杠字符
布尔类型
  1. oolean数据类型有两种文字值:true真和false假
  2. 在Java编程语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算
    boolean bb=0; //语法错误

五、基本数据类型转换

小转大自动转换

byte b1=123;
long k1=b1;
double kk=k1;
System.out.println(kk);

大转小需要强制转换--窄化操作,可能会有数据精度丢失

double dd=123.567;
long kk=(int)dd;
System.out.println(kk);

类型转换的语法:

int k=100;
char cc=(char)k; //强制类型转换:  窄化操作

char k='d';
System.out.println((int)k);

boolean bb=true;
System.out.println((int)bb);//语法错误,因为boolean类型和数值类型之间没有任何对应关系,所以这里的强转会报语法错误

float f1=123.456;//语法报错,因为系统默认带小数点的数据为double类型,所以123.456是double类型的数据,而声明f1为float,所以这里需要进行数据类型转换或者进行特殊声明。如果浮点数转换为整数是直接截断小数部分。

float f1=(float)123.456;
float f1=123.456f; //数字末尾的f类似于数字末尾的L,用于进行数据类型 的说明,f/F表示这是一个float类型的数据 d/D表示是一个double类型的数据

float f1=123.456;//语法报错,因为系统默认带小数点的数据为double类型,所以123.456是double类型的数据,而声明f1为float,所以这里需要进行数据类型转换或者进行特殊声明。如果浮点数转换为整数是直接截断小数部分。

六、复合数据类型

复合数据类型包括:class类、interface接口、数组。

null 索引在运行时并没有对应的类型,但它可以被转换为任何类型(不能是简单类型)。在虚拟机中null是一个固定位置上数据

Object b=null;
System.out.println(null==b);//返回为true

//在数据库中bb=null是永不为真,bb!=null是永不为真。只能使用is null或者is not null进行判断

索引类型的默认值就是null

七、常量与表达式

常量就是指在程序执行期间其值不能发生变化的数据,常量是固定的。如整型常量123【字面量】,实型常量1.23,字符常量'A',布尔常量true等

表达式就是运算符、操作数以及方法调用的序列,用来说明某个计算过程并返回计算结果. 按照运算符功能来分,基本的运算符分包括算术运算符、关系运算符、位运算符、条件运算符等

算术运算符 +、-、*、/、%、++、--

关系运算符 >、<、>=、<=、==、!=

逻辑运算符 &&、 ||、 !。注意:逻辑计算支持短路操作

位运算符 &、|、^、~、<< 、 >>、>>>。注意:为运算符不支持短路操作[考点]

赋值运算符 =,+=,―=,*=,/=

三目条件运算符(?:)规则是完全一致的,使用的形式是: x ? y:z;

+-*/
整除:参与运算的双方都是整数,这里的小数部分是直接抛弃,没有进位一说。 10/3=3而不是3.33333
10./3=3.333...这里由于10.是浮点数,则3会自动转换为大类型并参与计算,所以最终是 10.0/3.0的计算结果

计算次序为先乘除后加减,如果优先级一致,则自动从左向右进行计算  10+2*5=20

%求余(取模)  10%3=1实际就是10除以3求余数
double k=10.12;
System.out.println(k%3);  //参与计算的只有整数部分,符号不参与计算
输出:1.1199999999999992

++和--是单目运算符
i++等价于i=i+1,i--等价于i=i-1,注意类型问题
以++为例写法有2个:i++或者++i

    short kk=1;
    kk++; //自动类型转换
    kk=kk+1; //报错,因为数据类型

i++是先获取i的值,然后再对i加1
    int age=100;
    System.out.println(age++);输出为100
    System.out.println(age);  输出为101,因为上面进行加1
    
++i是先对i加1,然后再获取i的值
    int age=100;
    System.out.println(++age);输出101,先加1然后获取值
    System.out.println(age);  输出101

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351