十进制:人类使用
二进制:计算机使用
八进制和十六进制:为了更好的表示二进制(缩短二进制长度)
物理上容易实现,可靠性强;
运算简单
便于进行逻辑运算。
最小值 0
最大值 1
表示的数的范围 0-1(2^1-1)
1byte=8bit
最小值 00000000
最大值 11111111
表示的数的范围 0-255(2^8-1)
最小值 0000 0000 0000 0000
最大值 1111 1111 1111 1111
表示的数的范围0-65535(2^16-1)
位(bit):一个数字0或者一个数字1,代表一位。
字节(Byte):每逢8位是一个字节,这是数据存储的最小单位。
1 Byte = 8 bit
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 PB = 1024 TB
1 EB = 1024 PB
1 ZB = 1024 EB
二进制数如何表示正数和负数呢?
使用最高位作为符号位,0代表整数,1代表负数; 其余数位用作数值位,代表数值。
无符号数:0-255(28-1) 256个数
有符号数:-128(-27)–127(27-1) 还是256个数
无符号数 0-65535(216-1) 65536个数
有符号数 -32768(-215)-----32767(215-1) 还是65536个数
作用
常量、变量、方法、类和包等的名称
命名规则
必须以**字母、_下划线、美元符$**开头。其它部分可以是字母、下划线“_、美元符“$和数字的任意组合大小写区分,长度无限制。不可以是Java的关键字,但可以包含关键字或保留字,如class1等。标识符不能包含空格。注意
Java不采用通常语言使用的ASCII字符集Java采用unicode这样的标准的国际字符集。因此,这里的字母的含义:英文、汉字等等。(不建议大家使用汉字来定义标识符!)Java关键字是Java语言保留供内部使用的,如class用于定义类。 关键字也可以称为保留字,它们的意思是一样的。
注意:
Java中所有的关键字都是小写的。TRUE,FALSE,NULLenum是JavaASCII
英文字符集 1个字节ISO8859-1
西欧字符集 1个字节GB2312
大陆使用最早、最广的简体中文字符集 2个字节GBK
GB2312的扩展,可以表示繁体中文 2个字节GB18030
最新GBK的扩展,可以表示汉字、维吾尔文、藏文等中华民族字符 2个字节BIG5
台湾的大五码,表示繁体汉字 2个字节Unicode ----UTF-8 UTF-16
国际通用字符集 2个字节Java是一种强类型语言
常量是有数据类型的变量都必须声明其数据类型八大基本数据类型
byte 1byte
short 2byte
int 4byte
long 8byte
float 4byte 单精度
double 8byte 双精度
字符类型 unicode字符 不是ascii
char 2byte
布尔类型:表示判断的结果,if,while条件判断的结果
boolean 1bit true false 0,1
问题1.float在内存中占据4个字节,int在内存中占据4个字节,从而两种类型表示的范围应该是相同的?
不相同!!!
存储的方式,表示的方法是不同的
int 整数类型 10进制直接转换成二进制,存入即可
float 浮点类型 4个字节分为前后两部分,前面存储基数,后一部分存放的是指数
符号为1位 基数位23 指数位 8
前一部分决定精度,后一部分用来决定范围
问题2.char和int的区别和联系
char类型常量在内存中存储的就是该字符的Unicode编码值(是一个整数),A–65 a—97
在一定范围内,字符类型和整型可以通用
区别
1.分配的空间不同 int 4 char 2
2.数值的范围不同 int的范围更大,并且char只有正数没有负数
注意事项:
字符串不是基本类型,而是引用类型。
浮点型可能只是一个近似值,并非精确的值。
数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是8字节。
浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F。 如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L。 推荐使用大写字母后缀。
整型常量
十进制整数,如:99, -500, 0
八进制整数,要求以 0 开头,如:015
十六进制数,要求 0x 或 0X 开头,如:0x15
整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ‘(建议使用大写,小写容易误认为数字1),如:
long a = 55555555; //不出错,在Int表示的范围内(21亿内)。
long b = 55555555555;//不加l出错,已经超过int表示的范围。
整型变量
final int YEAR=365;
浮点类型常量
十进制数形式,例如:
3.14 314.0 0.314
科学记数法形式,如
314e2 314E2 314E-2
double f = 314e2; //314*10^2–>31400.0
double f2 = 314e-2; //314*10^(-2)–>3.14
浮点型变量
float类型:单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
double类型:双精度类型 精度是float类型的两倍,绝大部分应用程序都采用double类型。
注意
浮点常量默认为double。要变为float,需在后面增加F/f. 如: 3.14F
浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串。
char 类型用来表示在Unicode编码表中的字符。
Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;ASCII码占1个字节,可允许有128个字符(最高位是0),是Unicode编码表中前128个字符。
Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义,
char c2 = ‘\n’; //代表换行符
char类型在内存中存储的是该字符的Unicode编码值,所以char类型可以当做int类型来处理
boolean类型有两个值,true和false
boolean 类型用来判断逻辑条件,一般用于程序流程控制
实践:
请不要这样写:if ( is == true && done == false ) ,只有新手才那么写。对于任何程序员 if ( whether && !done ) 都不难理解吧。所以去掉所有的==false 和 ==true。
public class TestDataType{ public static void main(String [] args){ //整数类型 byte b = 64; //byte b = 640; //超过了byte类型变量的存储范围 -128---127 System.out.println("b="+b); int i = 640; System.out.println("i="+i); long l = 6401234576L; //如果整数常量值超过了int的范围,要添加l或者L后缀,建议大写 System.out.println("l="+l); int i1 = 0111; //0 开头 八进制 int i2 = 0x111; //0x 0X开头 十六进制 0b二进制 int i3 = 111; System.out.println(i1+" "+i2+" "+i3);//73 273 111 //浮点类型 double pi = 3141.59; //小数写法 System.out.println("pi = "+ pi); pi = 3.14159e3; //科学计数法 System.out.println("pi = "+ pi); float f = 3.14F; //默认的浮点常量是double类型 ,如果赋给float变量,需要添加F或者f后缀 System.out.println("f="+f); //字符类型 1个字符(不能是0,2,3,n个字符) 使用单引号括起来 unicode编码 //存储一个Unicode字符,不仅仅是一个英文字符; //只能是一个字符;字符常量使用单引号;还可以是转义字符 char ch = 'A';//charactor 字符 System.out.println("ch="+ch); ch = '学'; System.out.println("ch="+ch); ch = 'ж'; System.out.println("ch="+ch); ch = '\n'; //转义字符 转义字符也是一个(控制)字符 System.out.println("ch="+ch); ch = '\"'; // \ ' "的转义表示 System.out.println("ch="+ch); ch = 97; //A:65 a:97 char变量在内存中存储的就是字符的编码值 System.out.println("ch="+ch); System.out.println("MaxInteger: "+Integer.MAX_VALUE); System.out.println("MinInteger: "+Integer.MIN_VALUE); System.out.println("MaxCharacter: "+(int)Character.MAX_VALUE); System.out.println("MinCharacter: "+(int)Character.MIN_VALUE); //布尔类型: boolean flag = false; System.out.println("flag = " + flag ); flag = true; System.out.println("flag = " + flag ); } }常量变量定义
在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。
年龄和体重会变化,使用变量存储 年龄是整数类型;体重应该是浮点数类型
变量:程序运行期间,内容可以发生改变的量。
创建一个变量并且使用的格式:
数据类型 变量名称; // 创建了一个变量
变量名称 = 数据值; // 赋值,将右边的数据值,赋值交给左边的变量
一步到位的格式:数据类型 变量名称 = 数据值; // 在创建一个变量的同时,立刻放入指定的数据值
变量举例
在2D游戏程序中,需要代表人物的位置,则需要2个变量,一个是x坐标,一个是y坐标,在程序运行过程中,这两个变量的值会发生改变注意:
1.右侧数值的范围不能超过左侧数据类型的取值范围
2.一个变量定义一次,可以多次使用
3.理解=,不是数学中的等于,代表赋值
使用变量的时候,有一些注意事项:
如果创建多个变量,那么变量之间的名称不可以重复。
对于float和long类型来说,字母后缀F和L不要丢掉。
如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。
没有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。
变量使用不能超过作用域的范围。
【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。可以通过一个语句来创建多个变量,但是一般情况不推荐这么写。
常量:在程序运行期间,固定不变的量。
常量举例
代表常数,便于程序的修改(例如:圆周率的值) 增强程序的可读性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其数值分别是1、2、3和4)常量的分类:
字符串常量:凡是用双引号引起来的部分,叫做字符串常量。例如:“abc”、“Hello”、“123”字符串两个双引号中间的内容可以为空
整数常量:直接写上的数字,没有小数点。例如:100、200、0、-250
浮点数常量:直接写上的数字,有小数点。例如:2.5、-3.14、0.0
字符常量:凡是用单引号引起来的单个字符,就做字符常量。例如:‘A’、‘b’、‘9’、‘中’
两个单引号中间必须有且仅有一个字符,没有不行。两个单引号中间必须有且仅有一个字符,有两个不行。
布尔常量:只有量中取值。true、false。
空常量:null。代表没有任何数据。空常量不能直接用来打印输出。
总结1.认识数据类型常量变量
数据类型:int double
变量 age weight1 weight2
常量值 10 67.5 76.3
总结2:在内存中到底发生了什么
变量其实代表内存中一块空间
变量 房间
变量名 age weight1 房间号
变量类型 int double 房间类型(标准间,三人间 ,总统间)
变量的值 15 70.5 房间中客人
总结3:变量如何定义
int age = 15;
变量的类型 变量名 = 变量值;
可以一次定义多个变量
可以定义变量的时候赋值,也可以分开进行
方法中定义的变量没有默认值
final常量: final double PI=3.14159;
问题1:如果要修改圆周率的精度,需要修改每个值,繁琐
解决:定义一个变量pi,存储圆周率的值,减少了修改量
问题2:因为pi是变量,所以可以中途修改pi的值,导致整个程序中pi的值不一致
解决:使用final修饰pi finally 最后的 最终的 不能再变化的
使用final修饰的变量就成了常量
3.14159 3 字面常量
pi 符号常量
问题3:存在常量、变量、方法、类等,不能够通过名称直接判断类型
解决:
命名规范
testdatatype 类: TestDataType 驼峰命名法 变量和方法 testDataType testDataType()
常量 TESTDATATYPE
包 testdatatype
问题4:半径是死的,要通过键盘输入半径
解决:Scanner 扫描仪
1.import java.util.Scanner;
2.Scanner input = new Scanner(System.in);
3.double r = input.nextDouble();
总结
常量:PI 3.14159
字面常量 3.14159 10 67 6.5 true ‘A’
符号常量 final double PI = 3.14159;
1.什么是类型转换
在(赋值运算或算术)运算时,要求数据类型相同,否则要进行类型转换
2.类型转换的类型
基本数据类型的类型转换:
数值类型(int short byte long float double char)和非数值类型(boolean),
类型转换不涉及布尔类型
引用数据类型的类型转换:父类和子类 Person Student Animal Dog 以后再讲
3.基本数据类型的类型转换的方向
byte,short,char---->int—>long—>float---->double
4.算术运算中的转换
操作数都转换为最大宽度的类型,再运算
3+‘a’+3.14+5L====>3.0+97.0+3.14+5.0
5.赋值运算中的转换
左=右 long n = 5+‘a’+123L; 没有发生类型转换
左<右 int n = 5+‘a’+123L; 强制转换 (类型) 做手术
左>右 double n = 5+‘a’+123L; 自动转换
6.特例
byte b = 12;
把int赋给byte,short,char,如果数值在byte,short,char范围内,不用强制转换
b=(byte)129;
如果超过了 byte,short,char范围,必须进行强制转换
7.数字和字符的对照关系表(编码表):
ASCII码表:American Standard Code for Information Interchange,美国信息交换标准代码。
Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。
48 - '0’
65 - 'A’
97 - 'a’
特点:代码不需要进行特殊处理,自动完成。
规则:数据范围从小到大。
注意:s += 1; 不是等价于 s = s + 1; 而是等价于 s = (s的数据类型)(s + 1);
而s=s+1则会报错,因为右侧数据类型为 byte+int 大于左侧的 byte
public class TestTypeConvert{ public static void main(String [] args){ //int n = 10/3; //double n = 10/3; //double n = 10/3.0; //int n = (int)(10/3.0); //System.out.println(n); //算术运算时的类型转换:自动 System.out.println(3+'a'+3.14+5L); System.out.println(3+'a'+5L); //赋值运算时 long l = 3+'a'+5L; //105 Long; 左 = 右 不需要转换 System.out.println(l); double d = 3+'a'+5L; // 左double > 右 long 自动类型转换 System.out.println(d); int i = (int)(3+'a'+5L+3.14); // 左int < 右 double 强制类型转换 108.14 System.out.println(i); //特例 byte b = (byte)270; System.out.println(b); b = 20; //-128--127 System.out.println(b); byte s = 5; //s = s+1; s+=1;//这个没有问题 内部强制转换 /* s += 1; 不是等价于 s = s + 1; 而是等价于 s = (s的数据类型)(s + 1); */ System.out.println(s); } }特点:代码需要进行特殊的格式处理,不能自动完成。
格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
注意事项:
强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
byte/short/char这三种类型都可以发生数学运算,例如加法“+”.
byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
一旦char类型进行了数学运算,那么字符就会按照一定的规则翻译成为一个数字
boolean类型不能发生数据类型转换
int强制转换为short:注意必须保证逻辑上真实大小本来就没有超过short范围,否则会发生数据溢出
(int)3.99 会显示为3 小数位去掉
理解运算符的结合性
单目,条件,赋值自右向左其他自左向右数据类型:基本数据类型和引用数据类型
整型数据类型 byte short int long浮点型数据类型 float double字符数据类型 char布尔数据类型 boolean运算符
算术运算符 难点 ++ – 注意+的三个作用赋值运算符 = += -=… sum+=6---->sum=sum+6关关系运算符 > < == 关系运算的结果是boolean类型逻辑运算符 操作数和结果都是boolean型 &和&&的区别和联系(是否短路)条件运算符 ? : 唯一的三目运算符 int max = num1>num2?num1:num2;位运算符 了解即可运算符的优先级别
不用刻意背诵,多做练习单目>算术>关系>逻辑>条件>赋值基本数据类型的类型转换
自动类型转换 double d=5;强制类型转换 int n =(int)3.14;其他
字符集 Java采用Unicode字符集 常用字符集都兼容ASCII字符集final常量 使用final修饰变量,变量变成常量,值不能再被改变Scanner 可以接收来自键盘的输入