1.预备知识:内存(了解)
①.内存
内存的概念
内存的最小单元:字节。
内存的地址:每个字节有个编号就是地址
计算机是一种电子设备,由复杂的电子元器件组合而成,一个电子元器件有带电和不带电两种状态,通常我们将带电状态表示为数值1,不带电状态表示为数值0,多个这样的元器件的组合可以表示更多状态,也就是可以表示更多的数据,一个元器件可表示一位(bit)数据,这种表示数据的方式就叫二进制。在实际的电子设备中,我们将8个这样的元器件形成一个单元,这样的单元叫一个字节(byte)。
一个字节由8个二进位组成,其中最右边的一位称为“最低有效位”或“最低位”,最左边的一位称为“最高有效位”或“最高位”。每一个二进位的值是0或1。
②.进制及进制转换
二进制转成十进制 乘以2 的幂数
十进制转成二进制 除以2取余数
③.整数在计算机中的存储方式
所有数字在计算机底层都以 二进制形式存在。
对于整数,有四种表示方式:
二进制(binary) :0,1 ,满2进1.以0b或0B开头。
十进制(decimal) :0-9 ,满10进1。
八进制(octal) :0-7 ,满8进1. 以数字0开头表示。
十六进制(hex) :0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
2.Eclipse的使用(掌握)
3.变量、常量、字面量(重点)
①变量:本质是存储空间的表示,存储空间的数据可以发生变化
(1).变量名称的规则:
1.可以保含数字 字母 下划线 $,但是不能以数字开头
2.不能为JAVA中的关键字或者保留字(不用记忆)
(2).变量名称的规范:
1.望文生义
2.首字母小写,选用驼峰命名法或者 user_name
②常量:final修饰,只能赋一次值
③字面量:
在代码中直接写出来的数据我们可以叫字面量
如:int a=10中的10
4.数据类型(重点,难点)
①. 基本类型和引用数据类型的区别
基本数据类型的变量或者常量所占的空间中存放的就是数据内容本身。
引用数据类型的变量或者常量所占的空间中存放的是个地址信息,实际的数据内容在另外的空间中存放,引用数据类型的变量相当于一个快捷方式
②.基本数据类型
(1)整数类型(byte、short、int、long):
关键点的结论:记住每个数据类型所占的空间,因为空间的不同,导致**01组合长度不同,进而导致可以存放不同范围的数据,要为合适的数据选择合适的数据类型,便于节省空间。
注意:整数字面量产生int 值,在Java 中它是32位的整数值。既然Java 对类型要求严格,你可能会纳闷,将一个整数字面量赋给Java 的其他整数类型如byte 或long 而没有产生类型不匹配的错误,怎么可能呢。庆幸的是,这个问题很好解决。当一个字面量的值被赋给一个byte 或short型的变量时,如果字面量的值没有超过对应类型的范围时不会产生错误。
Long型记得加后缀L l
(2)浮点类型注意(float 、double):
- 浮点数:能表示的数据的范围比较大,但是不够精确
- 代码中小数字面量默认是**double类型的**
- 不是准确数字,不能进行精确运算,如:<br />System.out.println(0.05+0.01);//不能进行精确运算,
- 如果真的想对小数进行精确运算,那么需要用到java其它的类BigDecimal
- 精度(本质上是由尾数决定,float的尾数占23位 double的尾数占52位<br />float :7到8(有效数字位数,一般能保证7位的准确性)<br />float:2^23 = 8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位2*8388608 = 16777216 。有8位有效数字,但绝对能保证的为7位,也即float的精度为7~8位有效数字;<br />double:16**到17(有效数字位数。一般能保证16位的准确性)**double的精度为16~17位。<br />浮点数无法精确表示其值范围内的所有数值
(3)布尔型(boolean):
(4)字符型(char):
2个字节
必须用单引号引起来,且只能写一个字符,如char a=’c’
③特殊的引用类型
String 类型:可以表示一串字符
String str=”abcde”;
注意:必须将字面量用双引号引起来,那怕只有一个字符,也得用双引号引起来
④数据类型的选择:
整数用 byte short int long,**具体哪种看数字大小**
小数用 float**或者double ,具体哪种看数字大小,及你想要的有效数字的位数**
一个字符用**char**
一串字符用**String**
5.数据类型转换(重点,难点)
①自动类型提升
(1)整数之间
(2)小数之间
小空间向大空间放:够放,但是可能存在小数没有办法精确表示的情况如:float赋值给double,2.2本身不能进行精确表示,转换补位之后也不能精确表示
double d =2.2f;System.out.println(d); //输出 2.2000000476837162
(3)将整数赋值给小数类型
但是有可能发生损失,因为小数的尾数可能不够存储
如:整数赋值给小数float e=20014999;
System.out.println(e);//输出2.0015E7,因为按照小数的规则进行存储,有的数字的尾数用23位不能精确表示
float e=123456789;
System.out.println(e);//依然用23位不能精确表示
(4)字符和整形之间
可以将char类型的变量赋值个int型或者long型,不能将char型的变量赋值给byte及short型,但是可以将char型的字面量赋值给short或者byte,前提是要看字符的编码够不够放Int a=’c’;//a中存储的是c这个字符的编码
课堂练习:请用byte存储你的年龄,然后自动提升为Int型
②强制转换
(1)整数之间
大空间向小空间放:会发生高位截断操作,剩下的二进制能表示个啥数,就是个啥数
short a=128;
byte b=(byte)a;
System.out.println(b);
(2)小数向整数放
小数部分截断,整数部分如果不够放,也会发生损失
int c=(int)45.67
System.out.println(c);
short a=(short)1234567.34;
(3)整形到char型
可以将一个整形的字面量赋值给char类型的,但是整形的字面量的范围必须是[0~65535]
不可以将一个整形的变量直接赋值给字符型的变量,如果要这样做,需要做强制类型转换
(4)小数到小数
③数据类型转换的小陷阱:
实例:
等号右边的两个操作数都是int型的,所以整体运算结果为int型的,但是int型可能不够存放相加之后的结果,就出现了精度损失 解决:将其中的一个可以改为long
long a=2147483647l+2222222;
System.out.println(a);
6.控制台输入
//sc可以换(sc是可以从控制台输入信息的输入器)
Scanner sc=new Scanner(System.in);
System.out.println(“请输入名称”);
//输入字符串
String name=sc.next();
System.out.println("请输入年龄");
//输入整数
int age=sc.nextInt();
System.out.println("请输入身高");
//输入一个小数(float)
float height=sc.nextFloat();
//输入一个小数
System.out.println("请输入分数");
double score=sc.nextDouble();
System.out.println("请输入正确还是错误:");
boolean tag=sc.nextBoolean();
System.out.println("名称:"+name);
System.out.println("年龄"+age);
System.out.println("身高:"+height);
System.out.println("分数"+score);
System.out.println("ok/no:"+tag);