一、关键字和保留字
1、关键字
定义:被Java语言赋予了特殊含义,用做专门用途的字符串
特点:都是小写字母
用于定义数据类型的关键字:class interface enum byte short int long float double char boolean void
用于定义流程控制的关键字:if else switch case default while do for break conyinue return
用于定义访问权修饰符的关键字:private protected public
用于定义类、函数、变量修饰符的关键字:abstract final static synchronized
用于定义类与类之间关系的关键字:extends implements
用于定义建立实例及引用实例,判断实例之间的关键字:new this super instanceof
用于异常处理的关键字:try catch finally throw throws
用于包的关键字:package import
其他修饰符关键字:native strictfp transient volatile assert
用于定义数据类型值的字面值:true false null
2、保留字
定义:现有的Java版本尚未使用,但以后版本可能会作为关键字来使用,自己命名标识符时要注意避免使用保留字
保留字包含:goto const
二、标识符
1、什么是标识符
Java中对各种变量、方法和类等要素命名时使用的字符序列称为标识
2、标识符命名规则
以字母或者下划线开头,包含数字、字母、下划线和_、$组成,不能使用空格、关键字和保留字,Java严格区分大小写,长度无限制,
3、Java中名称的命名规范
包名:多单词组成时所有字母全部小写,xxxyyyzzz
类名、接口名:多单词组成时,所有单词首字母大写XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词字母小写,其余单词首字母大写,xxxYyyZzz
常量名:所有字母都大写,,多单词组成时每个单词用下划线分割,XXX_YYY_ZZZ
4、见名知意
在起名字时,为了提高阅读性,要尽量有意义,做到“见名知意”
三、变量
1、变量的定义
Ø 内存中的一个存储区域
Ø 该区域的数据可以在同一类型范围内不断变化
Ø 变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
2、变量的作用
用于在内存中保存数据
3、使用变量的注意事项
• 必须先声明后使用
• 使用变量名来访问这块区域的数据
• 作用域:在其所定义的{}内
• 同一个作用域内,不能定义重名变量
4、变量的分类
按照数据类型分类:
按照声明位置分类:
在方法体外,类体内声明的变量称为成员变量
在方法体内部声明的变量称为局部变量
布尔类型boolean
boolean类型用来判断逻辑条件,一般用于程序流程控制:(if、while、do-while、for循环),取值为true和false,无null。不可以使用0或非0的整数来代替true或false
§ char型数据用来表示通常意义上的“字符”(2字节)
§ Java中的所有字符都是用Unicode编码,一个字符可以存储一个字母,一个汉字或其他书面字符
§ 字符型变量的三种表现形式:
□ 字符常量是单引号‘’括起来的dan'ge
□ Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符常量
□ 直接使用Unicode值来表示字符型常量‘uXXXX’
§ char类型是可以进行运算的,因为它都有对应的Unicode编码
字符换类型String
§ String不是基本数据,属于引用数据类型
§ 使用方式与基本数据类型一致,例如:String str="abcd";
ASCII码:共128个字符编码,A是65。
Unicode编码:将世界上所有符号都纳入其中。每一个符号都给予一个独一无二的编码,使用Unicode没有乱码的问题,缺点是Unicode只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储,无法区分Unicode和ASCII。UTF-8是互联网上使用最广泛的一种Unicode实现方式。
5、基本数据类型之间的数据转换
①自动类型提升
- byte、short、char-->int-->long-->float-->double
- 当容量小的数据类型的变量与容量大的数据类型变量做运算时,结果自动提升为容量大的数据类型
- byte、short、char之间不会进行相互转换他们三者计算时首先转换为int
- boolean类型不能与其他数据类型运算。
- 当把任何基本数据类型的值和字符串进行连接运算时,基本数据类型的值将自动转换为字符串类型。
- 特别地:当byte、char、short三种数据类型做运算时,结果为int
②强制类型转换
- 自动类型提升的逆运算,将容量大的转换为容量小的变量。
- 需要注意强转符号()
- 注意点:强制类型转换,可能导致精度损失
- 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换为基本数据类型
③整型常量默认类型为int,浮点常量默认类型为double
6、String
①String属于引用数据类型,字符串
②声明String类型变量时,使用""
③可以和前面8种数据类型做运算,且只能为连接运算
④String与8种基本类型运算,结果仍然为String
四、进制
1、进制:所有数字在计算机底层都以二进制形式存在
2、各种进制的表示方法:
- 二进制:0,1,以0b或者0B开头
- 十进制:0-9
- 八进制:0-7,以数字0开头
- 十六进制:0-9及A-F,满16进1,以0X或者0x开头
3、进制转换
二进制 0 1 10 11 100 101 110 111 1000 1001 1010
八进制 0 1 2 3 4 5 6 7 10 11 12
十进制 0 1 2 3 4 5 6 7 8 9 10
十六进制 0 1 2 3 4 5 6 7 8 9 A
4、源码、反码、补码
- 计算机底层以二进制补码的形式保存所有的整数
- 对于正数来说,源码、反码、补码都相同
- 负数的补码是其反码+1
五、运算符
1、算数运算符
- + - + - * / % ++ -- +(字符串连接)
- 取余结果:结果的符号与被模数的符号相同
- 自增不会改变本身变量的数据类型
2、赋值运算符=
- 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理
- 支持连续赋值
- 扩展赋值运算符:+= -+ *= /= %= 不会改变本身数据类型
3、比较运算符
- == != < > <= >= instanceof(检查是否为类的对象)
- 比较运算符的结果都是boolean类型,要么是true,要么是false
- 比较运算符“==”不能误写为“=”
4、逻辑运算符
&-逻辑与 |-逻辑或 !-逻辑非
&&-短路与 ||-短路或 ^-逻辑异或
区分&和&&:
1、&与&&的运算结果相同
2、当符号左边是true时,二者都会执行符号右边的运算
3、当符号左边时false时,&&不会执行符号右边的运算,称为短路
5、位运算符
<< >> >>> & | ^ ~
交换两个变量的值
6、三元运算符
v (条件表达式)?表达式1:表达式2 : 条件表达式为真,执行表达式1,否则执行表达式2
v 凡是可以使用三元运算符的地方,都可以改写为if-else,反之不成立
v 如果程序既可以使用三元运算符又可以使用if-else,首选三元运算符
7、运算符的优先级
如果要改变优先级,首选加括号。
六、程序流程控制
1、顺序结构:程序从上到下逐行地执行,中间没有任何判断和跳转
2、分支结构
§ 根据条件,选择性的执行某段代码
§ 有if-else和switch-case两种分支语句
switch语句有关规则:
- switch(表达式)中表达式的值必须是下述几种类型之一:byte,short, char,int,枚举 (jdk 5.0),String (jdk 7.0);
- case子句中的值必须是常量,不能是变量名或不确定的表达式值; 同一个switch语句,所有case子句中的常量值互不相同;
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如 果没有break,程序会顺序执行到switch结尾
- default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时, 执行defaul
3、循环结构
▪ 根据循环条件,重复性的执行某段代码
▪ 有while、do-while、for三种循环代码
▪ 注:JDK1.5提供了foreach循环,方便地便利集合、数组元素
4、如何从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1、导包:import java.util.Scanner
2、Scanner实例化:Scanner scan=new Scanner(System.in);
3、调用Scanner类的相关方法,来获取指定类型的变量
5、break和continue关键字的使用
break:switch-case中使用,结束当前循环,关键字后面不能有其他语句
continue:循环结构中使用,结束当次循环,关键字后面不能有其他语句