1关键字
1.1关键字的概述
Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。
2标识符
2.1什么是标识符
就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Demo,就是我们定义的类名。类名就属于标识符的一种。
标识符除了应用在类名上,还可以用在变量、函数名、包名上。(要求同学们先记住,以后会详细见到这些)。
2.2标识符必须遵循以下规则
1.标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。
2.不能以数字开头,不能是关键字
3.严格区分大小写
4.标识符的可以为任意长度
5.标识符不能存在空格
2.3 标识符案例
将类名修改,查看不同效果
2.3.1合法的标识符
ComputeArea,radius,area $itcast _itcast gz_itcast
注意:由于Java严格区分大小写,ITCAST 和itcast是完全不同的标识符
2.3.2非法标识符
1.class (关键字)
2.100java(不能以数字开头)
3.Hello java (空格不是组成标识符的元素)
2.3.3Java中的标识符命名规范
1.包名
多个单词组成时所有字母小写(例:package com.itcast)
2.类名和接口
多个单词组成时所有单词的首字母大写(例:HelloWorld)
3.变量名和函数名
多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:lastAccessTime、getTime)。
4.常量名
多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:INTEGER_CACHE)
注意:只是为了增加规范性、可读性而做的一种约定,标识符在定义的时候最 好见名知意,提高代码阅读性。
33.注释
3.1注释的作用
通过注释提高程序的可读性,是java程序的条理更加清晰,易于区分代码行与注释行。另外通常在程序开头加入作者,时间,版本,要实现的功能等内容注释,方便后来的维护以及程序员的交流。
3.2注释的种类
1.单行注释(line comment)用//表示,编译器看到//会忽略该行//后的所文本
2.多行注释(block comment)用/**/表示,编译器看到/*时会搜索接下来的*/,忽略掉/**/之间的文本。
3.文档注释用/** */表示,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
文档注释语法结构:Javadoc *.java
4常量
4.1常量的概述
常量是指在程序运行过程中其值不能改变的量。
4.2常量类型
Java中常量的分类:
整数常量 : 所有整数
小数常量 : 所有小数
布尔常量 : 只有true和false
字符常量 :使用’’引起来的单个字符
字符串常量 :使用“”引起来的字符序列,“” 、“a” 、” ”
null常量 : 只有一个值null
转义字符 名称 Unicode
\b Backspace (退格键) \u0008
\t Tab (Tab键盘) \u0009
\n Linefeed (换行) \u000A
\r Carriage Return(回车) \u000D
\\ Backslash (反斜杠) \u005C
\' Single Quote (单引号) \u0027
\" Double Quote (双引号) \u0022
\r 表示接受键盘输入,相当于按下回车。
\n 表示换行。
\t 制表符,相当于Table键
\b 退格键,相当于Back Space
\’ 单引号
\’’ 双引号
\\ 表示一个斜跨
System.out.println("teacher said\"java is fun\"");
5进制的转换
进制:进制是一种记数方式 ,可以用有限的数字符号代表所有的数值。由特定的数值组成。
5.1整型的表现形式
1.十进制: 都是以0-9这九个数字组成,不能以0开头。
2.二进制: 由0和1两个数字组成。
3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。
4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以ox开始。
5.2进制的由来
几乎每个民族最早都使用都十进制计数法,这是因为人类计数时自然而然地首先使用的是十个手指。 但是这不等于说只有十进制计数法一种计数方法。例如,世界各国在计算年月日时不约而同地使用“十二进制”12个月为一年又如:我国过去16两才算为一斤,这就是“十六进计数法”,一个星期七天,这个就是”七进制计算法”。 计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。
如果要在计算机里面保存十进制的7.
5.2.1 十进制与二进制之间的转换
十进制转二进制的转换原理:除以2,反向取余数,直到商为0终止。
二进制转十进制的转换原理:就是用二进制的每一个乘以2的n次方,n从0开始,每次递增1。然后得出来的每个数相加
存在问题:书写特别长,不方便记忆。
5.2.2十进制与八进制之间转换
1.八进制的由来
二进位制在计算机内部使用是再自然不过的。但在人机交流上,二进位制有致命的弱点——数字的书写特别冗长。例如,十进位制的100000写成二进位制成为11000011010100000。为了解决这个问题,在计算机的理论和应用中还使用两种辅助的进位制——八进位制和十六进位制。二进位制的三个数位正好记为八进位制的一个数位,这样,数字长度就只有二进位制的三分之一,与十进位制记的数长度相差不多。例如,十进位制的100000写成八进位制就是303240。十六进位制的一个数位可以代表二进位制的四个数位,这样,一个字节正好是十六进位制的两个数位。十六进位制要求使用十六个不同的符号,除了0—9十个符号外,常用A、B、C、D、E、F六个符号分别代表(十进位制的)10、11、12、13、14、15。这样,十进位制的100000写成十六进位制就是186A0。
2.八进制的特点
由数字0-7组成。即使用三个开关表示一个八进制数。
10进制转换8进制原理:就是用十进制的数字不断除于8,取余数。
八进制转十进制原理: 用把进制的数不断乘以8的n次方,n从0开始,每次递增1。
除了这种方法之外,我们还有另一种方法,因为三个开关表示一个八进制数。
6变量
6.1变量的概述
1.变量的概述
在程序运行过程中,其值可以发生变化的量。
用于存储可变数据的容器。(如同房间)
2.变量存在的意义
计算机主要用于处理生活中的数据,由于生活中存在大量的可变数据,那么计算机就必须具备存储可变数据的能力。
比如:
1.时间每一秒都在发生变化,根据不同的时间要有不同的处理方式。
2.气象站会根据温度发布天气预报信号。
3.变量的特点
正常情况下牛奶盒装的都是牛奶,而且会根据牛奶的多少去决定要多大的容量的牛奶盒,区分牛奶盒是谁的,都需要在牛奶盒上做一个标志。
特点:
1.必须要有大小
2.存储一定格式的可变数据(根据数据大小进行改变)
3.必须要有名字
6.2变量的声明
根据上述变量的特点,所以我们声明一个变量的时候需要确定变量的大小,类型、名字三个特点:
容量(变量的数据类型) 容量名称(变量名) = 数据
6.2.1变量的数据类型
1. 整型
byte 代表一个字节的大小 8bit(位,内存分配8个2进制位) 2(8) -128~127 2^8 = 256个数据,我们口袋里只有127块钱,够吗?
byte超过 127
short 代表两个字节的大小 16bit 2(16) -2(15)~2(15)-1 2^16=65536
int 代表四个字节的大小 32bit 2(32) -2(31)~2(31)-1
long 代表八个字节的大小 64bit 2(64) -2(63)~2(63)-1
如果一个数值没有采取特殊的处理,那么该整数默认的类型是int。
可以使用数值后面添加L或小写L改变默认的整数类型。
2. 浮点型
float 代表四个字节的大小 32bit 9.3f
double 代表八个字节的大小 64bit
java程序中所有的小数默认的类型是double类型,所以需要使用特殊的符号改变默认的小数类型。
3. 字符型
char 代表两个字节的大小 16bit 2(16)
原理:将字符映射为码表中对应的十进制数据加以存储。
4. 布尔型
boolean 占一个字节或四个字节。只有true与false两个值。
如果使用boolean声明一个基本类型的变量时,该变量占4个字节。
如果使用boolean声明一个数组类型的变量时,数组的每个元素占一个字节。
6.2.2变量的声明
格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,;
案例:
int i 声明了一个整形的变量。
double d 声明了一个double数据类型的变量
float f 声明了一个float数据类型的变量。
备注:变量名的首字母都一般都是以小写字母开始。
6.2.3变量的初始化
6.2.4变量的初始化方式
初始化方式1: 数据类型 变量名字 = 数值。
初始化方式2: 数据类型 变量名字 , 变量名字 = 数值。
案例:
方式1: double d = 3.14;
方式2: double d ; d = 3.14 ;
7java数据类型的转换
Java中可以进行不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉小数部分。如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.0
1、自动类型转换(也叫隐式类型转换)
可以将一个数赋值给更大数值范围的变量,例如可以经byte 变量赋值给short变量可以将short变量赋值给int变量可以将int变量赋值给long变量。
Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)
byte b = 1; //00000001
short s = b; //00000000 00000001
int i = s;
long lon = i;
double d = lon; //1.0
自动类型转换(也叫隐式类型转换)
要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取
值范围必须大于源类型。所有的数字类型,包括整形和浮点型彼此都可以进行转换。
2、强制类型转换(也叫显式类型转换)
不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。
byte b = 100;
b = b + 2;
System.out.println(b);
上述例子发生了什么,发生了类型转换。
b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为
了int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。
byte b=1;
b=(byte)(b+2);
当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int)
无法自动转换,此时就需要进行强制类型转换。
强制类型转换需要注意:
损失精度!!!
int a=128;
byte b=(byte)a;
System.out.println(b);//-128
/*
* 此时的强转已经造成了数值的不准确
*/
8java运算符
8.1.算术运算符
1. 自增
(++)前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式;
后自增,先运算完整个表达式(分号前面的都是表达式),再进行自增;
备注:参与自增运算的操作数据每次会加1.
结论:
如果运算符在变量的前面,则该变量自增1或者自减1,然后返回的是变量的新值,如
果运算符在变量的后面,则变量也会自增或者自减1,但是返回的是变量原来的值。++在前就是先运算,再取值,++在后就是先取值,再运算。
8.1赋值运算符
= , +=, -=, *=, /=, %=
运算符 运算 范例 结果
= 赋值 a=3,b=2 a=3,b=2
+= 加等于 a=3,b=3;a+=b; a=5,b=2;
-= 减等于 a=3,b=2,a-=b; a=1,b=2;
*= 乘等于 a=3,b=2,a*=b; a=6,b=2
/= 除等于 a=3,b=2,a/=b; a=1,b=2;
%= 模等于 a=3,b=2,a%=b; a=1,b=2
a+=b 可以想象成 a=a+b;
8.1比较运算符
如何比较两个值?使用比较运算符 3和5谁大,在java中如何比较?
比较运算符比较的两边操作数,结果都是boolean的,只有true和false两种结果。
运算符 运算 例子 结果
== 相等于 4= =3 false
!= 不等于 4!= 3 true
< 小于 4 < 3 flase
> 大于 4>3 true
<= 小于等于 4<=3 false
>= 大于等于 4>=3 true
Instanceof 检查是否是类的对象 "hello"instanceof String true
注意的细节:
1.使用比较运算符的时候,要求两种数据类型必须一致。
byte、short、char 会自动提升至int。
8.1逻辑运算符
什么是逻辑运算符?连接比较运算符的符号称之为逻辑运算符。那么为什么要连接比较运算符? 举例:当你去公司应聘,招聘要求,男性(判断为真),并且开发经验1年(判断为假)那么,我们还适合去面试吗,不能,因为只满足了一项,总体是不满足的(总体结果为假)。
逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。我们的比较运算符只能进行一次判断,对于对此判断无能为力,那么逻辑运算符就可以经将较运算符连接起来。
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3
“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真右边不参与运算。
“ ^ ”异或与“|”或的不同之处是:当左右都为true时,结果为false。
^ : 两边相同结果是false
两边不同结果是true;
8.1位运算符
按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。
1、& 与运算
& 参见运算的两位数都为1,&运算符结果才为1,否则就为0。
6&3
00000000 00000000 00000000 00000110 6
00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000010 & =2
2、| 或运算
| 参与运算的两位都为0,|运算的结果才为0,否则就为1。
00000000 00000000 00000000 00000110 6
00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000111 | =7
3、^ 异或运算
^只有参加运算的两位不同,^运算的结果才为1,否则就为0。
00000000 00000000 00000000 00000110 6
00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000101 ^ =5
1、~ 反码
就是取反,二进制只有1和0,取反就是如果为1,取反就是0,如果是0,取反就是1。
0000-0000 0000-0000 0000-0000 0000-0110 6
1111-1111 1111-1111 1111-1111 1111-1001 取反 -7
移位操作符
<< 左移:左移就相当于乘以2的位移个数次幂
>> 右移
>>> 无符号右移
位运算符
运算符 运算 范例
<< 左移 3 << 2 = 12 --> 3*2*2=12
>> 右移 3 >> 1 = 1 --> 3/2=1
三元运算符
格式
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
1获取两个数中大数。
int x=3,y=4,z;
z = (x>y)?x:y;//z变量存储的就是两个数的大数。
int x = 1;
int y = 2;
int z;
z = x > y ? x : y;
System.out.println(z); //2