黑马程序员_java基础(语法)
1. 常量
1> 整数的几种进制
十进制: 由0到9组成, 逢十进一. 直接写数字即可.
二进制: 由0和1组成, 逢二进一. 以0b开头.
八进制: 由0到7组成, 逢八进一. 以0开头. 为了简化二进制的书写
十六进制: 由0到9和A到F组成, 逢十六进一. 以0x开头.
进制转换:
十进制转其他进制: 除法, 将十进制数除以进制数, 取余数, 直到除到0为止, 将所有余数反转就是二进制值
其他进制转十进制: 乘法, 给要转换的数编号, 编号从低位开始,从0开始, 用每一位上的数乘以进制数的编号次方, 再相加
二进制转八进制: 二进制每3位一看, 就是八进制, 每3个二进制数对应1个八进制
八进制转二进制: 八进制的每一位上的数转为3个二进制数, 连在一起就是二进制的值
十六进制转二进制: 每1位十六进制转为4位二进制
2> 字符的几种码表, 特殊字符
码表:
a. ASCII码表:每个字符占1字节;
b. GB2312码表:兼容ASCII,英文占1个字节(正数),中文占2个字节(由两个负数组成)。
c. GBK,GB18030码表:兼容GB2312,增加了一些中文(生僻字),英文1字节(正数),中文占2字节(首字节负数,第二个可正可负)。
d. Unicode码表:世界各国的官方语言,所有字符都占2字节,且最前面有2字节的标志位。
e. UTF-8码表:比Unicode中的字符更多,英文占1字节,中文占3个字节,且最前面有3个字节标志位。
f. ISO8859-1码表:西欧码表,不支持中文
特殊字符:
\r(回车);
\n(换行);
\t(制表);
\b(退格);
\',\",\\
2. 变量
基本数据类型:(8种)
byte | 字节 | 1字节 |
short | 短整型 | 2字节 |
int | 整型 | 4字节 |
long | 长整型 | 8字节 |
float | 浮点 | 4字节 |
double | 双精度 | 8字节 |
char | 字符 | 2字节 |
booleam | 布尔 | 1字节 |
引用数据类型:类 + 数组 + 集合
类型转换:
自动类型提升:byte,short,char类型参与数学运算后,会自动提升为int型。
强制类型转换:本来是此类型的数据,因为继承的关系,导致类型不样,因此需通过“(类型)数据”进行强制转换
字符串串联:字符串可以用加号和其他类型数据进行串联, 就是将字面值连接在一起
变量的生命周期和作用域:
变量的生命周期从定义时开始, 到超出范围结束.
变量定义在哪一级大括号中, 它就作用在哪个范围中.
3. 运算符
算数运算符
用来进行数学运算: +, -, *, /,%, ++, --
整数除法忽略小数部分
++在前就是先运算后取值, ++在后则是先取值后运算
赋值运算符
用来给变量赋值
=, +=, -=, *=, /=, %=
x += y; 类似于 x = x + y; (不拿出来进行运算,内部自增,不会提升数据类型,直接改值)
比较运算符
用来比较两个值的关系, 都是二元运算符, 比较两边的值得到一个布尔值
>, <, >=, <=,==, !=, instanceof
注意==不要写成=
4.逻辑运算符
判断一个逻辑是否成立, 得到的结果是布尔
!, ^, &, |, &&,||
&和&&都是做与运算, 运算符两边都为true, 结果才是true.&&具有短路效果, 如果前半是false就短路, 后半不执行.
|和||都是做或运算, 运算符两边只要有一个true, 结果就是true. ||具有短路效果, 如果前半是true就短路, 后半不执行.
位运算符
对数字的二进制每一位进行运算
&, |, ^, <<(最低位补0), >>(最高位补与以前数相同的数), >>>(最高位补0)
三元运算符
三元运算符?:可以操作3个元素, 第一个元素是布尔, 后面两个可以是任意类型
通常用在两个值之间取一个的时候, 根据布尔值判断, 布尔值是true就取:左边, false则取右边
运算符优先级(算术运算符、位运算符、比较运算符、逻辑运算符、赋值用算符,且&高于|,单&高于双&&。)
*/%优先于+-
单&高于双&&,&&优先与||
技巧:
a.想取小数的小数位(%1);
b." ++ "与"+"连一块,会先取++
c.运算时值从左到右,左边先赋值,右边有改动再赋值
int a = 2;
int b = a + 3* a++;
结果:a = 3; b = 8;
4. 语句
选择结构
a. if … else …
b. switch语句 : 应用场景:小范围判断
switch中的判断参数:
JDK5之前只能是int(byte,short,char),
JDK1.5之后增加枚举,
JDK7后增加String
循环结构
a. while() 用于不确定多少次;(典型:读取键盘输入的数据)
b. do ... while();
c. for( 首次执行;每次判断 ; 循环体执行完执行)
注:while 与 for根本区别是:for里的循环量外不能获取,而while可以
5. 函数
定义函数:为提高代码的利用性,一段代码在多个地方使用,就定义为函数;
函数的组成:由4个部分组成, 返回值类型 函数名 (参数列表) {函数体 };
调用函数:函数使用"函数名(实参)"形式调用, 调用的时候实参必须和形参完全匹配(个数, 类型, 顺序),函数如果定义了返回值, 调用结束后可以得到函数中返回的数据
函数的重载:函数名相同,参数不同(个数、顺序、类型、),返回值无关(相同功能,需传入不同数据)
匹配:实参数类型会自动提升、匹配、提升会一级一级,多个参数时,调用的实参数类型与形参类型提升后多个都能匹配,导致会报错。
6. 数组
定义数组:
类型[] 变量名 = {数据1, 数据2, 数据3, ...} 只能用于给变量初始化
类型[] 变量名 = new 类型[] {数据1, 数据2, 数据3, ....} 任何地方都可使
类型[] 变量名 = new 类型[长度] 同上,只不过初始化是默认的
获取数组中的元素:变量名[索引]
给数组中的元素赋值:变量名[索引] = 数据遍历数组
遍历数组:定义for循环, 循环变量从0开始, 每次+1, 直到变量等于length-1为止,每次用变量当作索引获取数组中一个元素。Jdk1.5以后可使用增强for循环
7. 堆、栈
a. 方法:执行方法就会开辟栈内存,每个方法就有一块栈空间来存储参数
b. 数组:数组存在堆内存中,栈内存中只存数组的地址(引用);
int[] array = newint[] {2,3,4};
System.out.println(array);//打印出的是array的内存地址