02_数据类型和变量

数据类型和变量

1.1 内存如何存储数据

数据是各式各样的,开发者要根据数据的类型为其在内存中申请一块合适空间。

 

1.2 数据类型(A)

Java是一门强类型语言,任何数据都需要数据类型。

 

 

Java分为基本数据类型和引用数据类型。

byte、short、intlongfloatdouble、charboolean 统称为java八大基本数据类类型。

1.3 字符集(A)

计算机只认识0或者1,计算机8二级制位称为一个字节,把1024字节称为1KB,1024KB称为1MB1024MB 称为1GB

0000 0000 

 

键盘上的常用字符可以用1字节

 

ASCII码

ISO8859-1 西欧字符集

GB2312 简体中文

GBK 简体中文+繁体

Unicode 万国码

 

总结

[1]以什么编码存文件,一定要以对应编码解码文件。

[2]存储二进制文件不需要编码

 

思考:unicodeutf8有什么关系?

 

1.4 进制转换(B)

1.4.1 二进制转换

二进制->十进制

 = 0x20+1x21+0x22+1x23+0x24+0x25+0x26+1x27

=> 138

 

十进制->二进制

 

 

 

八进制->十进制(C)

java八进制表示法用数字0开头,例如017

015 => 5x80+1x81

=> 13

 

十六进制->十进制(C)

java中十六进制表示用0x开头,例如0x15,

10=a 11=b …15=f

0x15 => 5x160+1x161 => 12

 

十六进制和八进制的出现是为了更方便的表述二进制而已

 

 

 

 

1.5 数据类型

1.5.1 整形

整形根据其所占用的长度分为4

byte 1字节

short 2字节

int 4字节

long 8字节

 

byte 占一个字节,表示的数据范围0000 0000 – 1111 1111 => 0-28-1

 

 

 

总结

开发中,一定要根据数据选择合适的数据类型。

 

可以通过十进制、八进制、十六进制给变量赋值。但初学还是建议十进制赋值。

public class Test01{

public static void main(String[] args){

// byte a = 257;

 

// short a = 257;

 

//short a = 015;

//short a = 0x15;

 

short a = 0x0;

System.out.println(a);

}

}

 

整形默认是int类型,如果要声明一个long类型的量,在量的后面加l或者L,建议大写。

 

1.5.2 浮点型

浮点型在计算机中表示小数,根据其精确的位置有可以分为两类。

float类型单精度可以精确6-7位有效数字。

double类型 进度,可以精确到15-16有效数字。

 

浮点型数据的声明方式

十进制

3.14  314.0

科学计数法(C)

314e2      314E2      314E-2

double  f = 314e2;  //314*10^2-->31400.0

double  f2 = 314e-2; //314*10^(-2)-->3.14

 

声明一个浮点型的数据时,默认是double类型如果要声明成float需要加f/F.d/D表示double类型。

 

 

 

浮点型数据有舍入误差,避免在金融计算使用浮点数而渲染BigDecimal类来处理

 

避免使用浮点数进行比较

1/10 ó 0.1 在计算机中不相等在现实世界相等。

 

1.5.3 字符型

在java中,用单引号(‘’)引起来的数据表示字符型数据。‘A’、‘a’、‘2’、‘中’。用char表示。

用“”引起来的数据字符串 “abc”、“中国”、“好”。字符串就是字符连成串。

字符和字符串是完全不同的数据类型。

 

char 类型用来表示在Unicode编码表中的字符。

 

转义字符

 

 

 

1.5.4 boolean

布尔类型,两个值true或者false。用一个二进制位存储。一般用在逻辑判断。

 

1.6 变量(A)

1.6.1 什么是变量?

程序开发过程中,值可以发生变化的量就是变量。变量本质是一块内存,这个内存有一个名字,这个名字就是变量名,该内存的数据可以变化。

 

 

public class Test03{

public static void main(String[] args){

// 1】声明变量 => 申请2个字节的内存空间

short money;

// 2】赋值

money = 1000;

 

 

// 声明变量 声明和赋值合二为一

double rate = 0.05;

double allMoney = 0.0;

 

// 3】使用变量

allMoney = money + money * rate;

System.out.println(allMoney);

}

}

 

 

 

1.6.2 声明变量

[1]声明变量 => 向内存申请空间

数据类型    变量名;               

数据类型能省略吗?-> 数据类型决定了申请多个空间。

变量名能省略吗? -> 不能

[2]变量赋值 => 给内存空间赋值

[3]使用变量 => 修改内存空间的值

 

注意:声明变量和赋值变量合二为一。

 

1.6.3 变量命名规则

[1]可以是字母、数字、_$

[2]数字不能开头

[3]不能java关键字或者保留字

 

命名规范

[1]驼峰命名法:字母小写,后续具有单个意义的单词首字母大写。

[2]见名知意

 

1.6.4 局部变量和成员变量

局部变量

方法内或者语句块内定义的变量,局部变量必须先声明后赋值才能使用。

 

public class Test08{

 

 

public static void main(String[] args){

 

// 方法中的局部变量

int count = 0;

System.out.println("count="+count);

 

// 语句块中的局部变量

{

int price = 998;

System.out.println("price="+price);

}

 

System.out.println("price="+price);

System.out.println("count="+count);

}

}

 

总结:

局部变量有其作用域,在其作用域中可见。在java{}表示作用域。

 

成员变量

在类的内部,方法的外部定义的变量。

成员变量如果没有初始化jvm自动给成员变量初始化成默认值。

数值型默认值是0/0.0

字符型默认值是0x00  \u0000

布尔值默认值false

public class Test09{

 

// 成员变量

int age;

 

public void test(){

System.out.println("age="+age);

}

 

public static void main(String[] args){

 

Test09 t = new Test09();

t.test();

}

}

1.7 常量

在开发过程中,值不能发生变化的量称之为常量Final表示

 

public class Test10{

public static void main(String[] args){

 

// 求半径为10的圆的面积

//final float PI = 3.14f;

// PI = 3.14159f;

 

final float PI;

PI = 3.14f;

 

int r = 10;

float area = PI * r * r;

System.out.println("area="+area);

 

}

}

 

总结

Final类型的常量只能被赋值一次。

 

1.8 标识符命名规范

所有变量、常量、方法、类名:见名知意

变量、方法名:

首字母小写和驼峰原则

run(), runRun(),  age     ageNew   monthSalary

常量:

大写字母和下划线:MAX_VALUE

类名:

首字母大写和驼峰原则:  Man, GoodMan

 

1.9 运算符和表达式

1.9.1 赋值运算符

int var = value

赋值运算符,用于把右边的量value赋值给左边的变量var

 

1.9.2 算术运算符

+ - * / %

/ 表示整除。两个整数相除结果为整两个浮点数结果为小数

int a = 15;

double b = 3.0;

double c = a / b;

System.out.println("c="+c);

 

% 表示取余数,也叫求模

// %

a = 1;

int d = 3;

int e = a % d;

System.out.println("e="+e);

 

// 案例:12356转化成时分秒

int ts = 12356;

int h = ts / 3600;

//int m = (ts-h*3600)/60;

int m = (ts % 3600) / 60;

int s = ts % 60;

总结

%a结果就不会超过a

 

i++/i—-

i++/i--:i先参与运算,运算完成后自/1

public class Test12{

public static void main(String[] args){

 

// 1

int i = 10;

i++;

 

// 2

i = 10;

int j = 0;

j = i++;

// i=? j=?

 

// 3

i = 10;

j = i++ + i++;

// i=? j=?

System.out.println("i="+i);

System.out.println("j="+j);

}

}

 

++i/--i

++i:i在参与运算前就自加1.

public class Test13{

public static void main(String[] args){

 

// 1

int i = 10;

++i;

 

// 2

i = 10;

int j = 0;

j = ++i;

// i=? j=?

 

// 3

i = 10;

j = ++i + ++i;

// i=? j=?

System.out.println("i="+i);

System.out.println("j="+j);

}

}

 

1.9.3 拓展运算符

+= -= *= /= %=

 

public class Test14{

public static void main(String[] args){

 

// += 步增

int a = 10;

a += 2; //=> a=a+2

System.out.println("a="+a);

 

// -= 步减

a = 10;

a -= 2;

System.out.println("a="+a);

 

// *= 倍增

a = 10;

a *= 2; //=> a=a*2;

 

// *= 倍减

a = 10;

a /= 2;

 

}

}

 

 

1.9.4 关系运算符

><>=<===!=

关系运算符的结果是布尔类型。

 

int a = 10;

int b = 11;

boolean r = b != a;

System.out.println("r="+r);

 

1.9.5 逻辑运算符

逻辑运算符 &&(与)、||(或)、(!)

逻辑运算符两边的表达式一定是布尔值,结果也是布尔值。

 

逻辑 && => 表示并且、且
true && true = true

true && false = false

false && true  = false

false && false = false

 

逻辑&&两边的表达式只要有一个为false,结果就为false

 

常见错误

int a = 10;

int b = 4;

r = (a>b) && (++b);

System.out.println("r="+r);

System.out.println("b="+b);

 

 

 

 

逻辑&&的短路运算

逻辑&&左边的表达式结果为false时,第二个表达式将不进行任何运算。

int a = 10;

int b = 4;

r = (a<b) && (a<++b);

System.out.println("r="+r);

System.out.println("b="+b);

 

 

逻辑 || => 表示或者、或

运算规则

true || true = true

true || false = true

false || true = true

false || false = false

逻辑||两边的表达式只要有一个为true结果为true

 

逻辑||短路运算

逻辑||左边的表达式如果为true,第二个表达式将不进行任何运算

 

逻辑

!true = false

!false = true

1.9.6 运算符(C)

~ -- 取反

~0000 0000 = 1111 1111

 

&   -- 按位与   

0000 1010

& 0000 0000

-------------

  0000 0000

 

|  -- 按位或

0000 1010

| 0000 0000

-------------

  0000 1010

 

^  -- 按位异或:相同0不同为1

0000 1010

^ 0000 1000

-------------

  0000 0010

 

<<:左移运算符

0000 1010 << 2 => 0010 1000

n,相当于乘以2n

 

>>:右移运算符

n,相当于除以2n

 

查资料了解 <<<>>>

 

1.9.7 目运算符

(布尔表达式) ? r1 : r2

布尔表达式为true,这个运算结果取r1,否则取r2

public class Test19{

public static void main(String[] args){

 

int a = 2;

int b = 10;

int r = (a>b)? 1:2;

System.out.println("r="+r);

 

// 案例:求两个数的最大值

int m = 10;

int n = 4;

int max = 0;

max = (m>n) ? m : n;

System.out.println("max="+max);

}

}

 

1.9.8 字符串连接符+

+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接

 

int e = 10;

int f = 20;

System.out.println(e+f);//加法运算

System.out.println("e="+e);// 字符串连接

 


posted @ 2019-07-15 18:23  wang小帅  阅读(343)  评论(0编辑  收藏  举报