关键字
关键字是指在java系统中已经赋予了特殊含义的单词。关键字的特点是
全部都是小写字母。
常用或者常见的关键字见下:
定义数据类型的关键字
|
class
|
interface
|
byte
|
short
|
int
|
long
|
float
|
double
|
char
|
boolean
|
void
|
|
|
|
|
定义流程控制的关键字
|
if
|
else
|
switch
|
case
|
default
|
while
|
do
|
for
|
break
|
continue
|
return
|
|
|
|
|
布尔值
|
true
|
false
|
|
|
引用类型空值
|
null
|
|
|
|
标识符
用于给方法、变量、类和接口等命名的字符序列。
组成规则:
1、由26个英文字母大小写和数字、_、$符组成
2、数字不能开头
3、不可以使用关键字或者保留字作为标识符
Java中的名称规范:
•包名:多单词组成时所有字母都小写(以后详讲)
–xxxyyyzzz
•类名,接口名:多单词组成时,所有单词的首字母大写
–XxxYyyZzz
–Test
•变量名,方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写(即驼峰语法)
–xxxYyyZzz
–main
•final变量名:所有字母都大写,多单词时单词之间用下划线分隔
–XXX_YYY_ZZZ
–MAX_VALUE
•在命名时,为了提高阅读性,要尽量做到见名知意。
常量与变量
java
中的常量大体上分为两种:
1.
字面量常量(字面量表示不能改变的数值(程序中直接出现的值))
2.
自定义常量(
后面讲)
Java中常量(字面量)的分类:
1,整数常量:直接出现的整数
2,小数常量:直接出现的小数
3,布尔(boolean)型常量:只有两个值:true 和 false
4,字符常量:将一个数字,字母或者符号用单引号('')括起来
5,字符串常量:将一个或者多个字符用双引号("")括起来
6,null常量:只有一个数值:null
示例:
public class ConstantDemo{
public static void main(String[] args){
System.out.println(100);//整数常量
System.out.println(3.14);//浮点数常量
System.out.println(true);//布尔型常量
System.out.println(false);//布尔型常量
System.out.println('a');//字符常量
System.out.println('中');//字符常量
// System.out.println('');//字符常量不能为空
//System.out.println('ab');//字符常量只能出现一个字符
System.out.println('@');//ok
System.out.println(' ');//ok
System.out.println("");//字符串常量
System.out.println("H");//字符串常量
System.out.println(" ");//字符串常量
}
}
进制介绍及转换
对于整数,有四种表现形式:
二进制:由0,1组成 ,满2进1.用0b/0B开头表示,只能表示0,1两种状态
八进制:由0-7组成 ,满8进1. 用0开头表示
十进制:由0-9组成 ,满10进1.
十六进制:由0-9,A-F组成,满16进1. 用0x/0X开头表示
进制的基本转换
–十进制 二进制 互转
•十进制转成二进制 除以2取余数,将余数倒排
•二进制转成十进制 乘以2的幂数,将结果相加
–十进制 八进制 互转
–十进制 十六进制 互转
二进制和八进制,十六进制互转(8421法则)
八进制和十六进制出现的原因:简化书写和记忆
十进制数转换到其他进制数,除以进制数,直到商为0,并将余数进行倒排。
例如:十进制转二进制
例如:十进制转八进制
例如:十进制转十六进制
其他进制数转换为十进制,是用每一位的系数乘以进制的n次幂(从右向左,从0开始),再进行求和。
例如:二进制转换为十进制:
例如:八进制转换为十进制
例如:十六进制转换为十进制
二进制常用的进制转换,除了转换为十进制外,还会转八进制和十六进制。
例如:二进制转八进制的实现过程:三位一组,计算对应的十进制,并结合即可
例如:二进制转十六进制的实现过程:四位一组
从上面多个例子中,我们可以不难发现有种规律,这个规律就叫做8421法则
二进制和十进制互相转化是,将常用的四位二进制数表示的十进制数变成规律,方便计算.
例如:有如下二进制位,那么它们分别代表了8421,基数为1,表示在结果中加上对应的数,如果基数为0,则在最终的结果中不用加它对应的数.
以1 1 1 1为例:
各个位上代表的数分别为8421,并且每位上的数都是1,说明在结果中都加上,所以总的结果是8+4+2+1 = 15
1 0 0 1
表示结果中有:8 和 1,并没有4和2 ,所以总的结果是8+1=9
8421法则在二进制转换成八进制:
111 001
7 1 --> 071
8421法则在二进制转换为十六进制:
1001 1010
9 a --> 0X9A
在八进制转二进制,或者十六进制转二进制时同样适用.
原码、反码及补码
正数的原码,反码,补码:都一样
+7对应的二进制是: 0000 0111 ,既是+7的原码,也是它的反码和补码.
负数:和正数的存储方式不同,负数都是以
补码形式
存储的.
而负数的补码计算的过程是:
把负数的原码除了符号位取反之后再+1.
但是,观察求-7,-12的补码的过程
+7 0 000 0111
-7 1 111 1001
+12 0 000 1100
-12 1 111 0100
发现规律如下:
求一个负数的表示形式
:
先求其对应正数的表示形式
,
然后
,
从右往左
,
遇到第一个
1,
从这个
1
开始
,
包含这个
1,
右边保持不变
,
左边全取反
,
就是这个负数的表示形式
.
练习:
求-20
的存储形式:
先求出对应正数的二进制形式,
再利用规律即可得到负数的表示形式.
+20 0001 0100
-20 1110 1100
总结的规律可以反过来使用:
从一个负数的补码,也可以直接得到对应的正数的二进制形式.
练习:
给定一个二进制数,
求其对应的十进制数.
思路:
先判断符号位,
如果是0,
直接使用位权展开法求.
如果是1,
先利用规律求出对应的正数的表示形式,
再利用位权展开法求出正数对应十进制数,
然后取相反数.
练习:
给定二进制位,
求其对应的十进制数是多少?
1000 1100
-116
根据规律算出的正数的二进制数:
0111 0100
= 64 + 32+ 16 + 4 = 96+20 = 116
练习:
1111 1111 -1
0000 0001 1
总结:
全1
表示的数是-1.
练习:
1000 0000 -128
1000 0000
用位权展开法计算结果是:128
变量
内存
内存就是程序运行的地方,存放着数据和指令,不同的数据存储在不同的空间,互不影响,内存空间使用之前必须先申请。如果一个数据已经存储到内存中了,怎么找到它呢?
只要在申请空间的时候,给这个空间起一个名字就可以了,使用变量的时候,通过变量名就可以找到变量的值了。
变量的概念:
1、内存中的一块存储区域
2、该区域有自己的名称(变量名)和类型(数据类型)
3、定义变量就是为了使用内存空间。
变量的三个要素:
类型(数据类型:能存放的数据类型)
变量名(标识符:通过标识符可以访问内存空间的值)
值(需要存储的内容)
定义变量的格式:
格式一:
数据类型 变量名 = 初始值;
格式二:
数据类型 变量名;
变量名 = 初始值;
变量的作用域:
变量定义的{}就是变量的作用域,变量只能在自己的作用域内有效,出了定义变量的作用域就不能再使用了。
基本数据类型介绍
基本数据类型:四类八种
引用数据类型:类、接口和数组
整数默认类型:int 小数默认类型:double
字符串是类:String,是引用数据类型
基本数据类型的类型转换:
1、隐式转换:从小范围到大范围的转换
long lon = 120;
2、显示转换:从大范围到小范围的转换
byte b = (byte)120L;
基本数据类型隐式转换图:
boolean类型不参与类型的转换和算术的运算。
问题思考:
1、
System.out.println('a')与System.out.println('a'+1)
的区别
System.out.println('a')是直接打印字符a
System.out.println('a'+1)是将ASCII码中的'a'对应的值与1进行相加。
2、
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
b=b1+b2;//会失败,错误: 不兼容的类型: 从int转换到byte可能会有损失
更准确的解释是:
凡是byte类型的数
一旦参与算术运算会自动转换为int型
,所以系统会提示从int转换到byte可能会有损失,
这个地方需要扩展下,比如float类型的数一旦参与算术运算会自动转换为double类型,这个需要明确。
3、
double d = 3.14;
int i = (int)d;
System.out.println(d);//
强转之后的
d
值是?
强转之后的d值还是3.14.
原因为:虽然d强制转换为int类型,,转换之后变为了3,并将值3存入到变量i中了,但是需要打印的是d,即还是原来的3.14,如果打印i,则i值为3,可以测试下:
4、
面试题
byte b = 130;
以上语句是否正确?
如果想让赋值语句变得正确,如何更改?
赋值之后的结果又是多少呢?
以上语句不正确,130超出了byte类型的范围,其范围是-128~127,如果让赋值语句变得正确,需要对其进行强转,byte b = (byte)130,结果为:-126
结果是这样得出来的:
130 二进制表示: 1000 0010 (可以看出最高位是1,表示是一个负数)
求一个负数的表示形式
:
先求其对应正数的表示形式
,
然后
,
从右往左
,
遇到第一个
1,
从这个
1
开始
,
包含这个
1,
右边保持不变
,
左边全取反
,
就是这个负数的表示形式
.
那么结果为:二进制表示0111 1110 (这是正数的表示结果:126)
所以原来的数则为-126