JAVASE(2)

运算符 :

// &是只要有0结果就是0

​ // 0000 0000 0000 0000 0000 0000 0101 1010 &

​ // 0000 0000 0000 0000 0000 0000 1100 0011 =

​ // 0000 0000 0000 0000 0000 0000 0100 0010 => 0x42 -> 66

​ System.out.println(n1 & n2);

​ // |是只要有1结果就是1

​ // 0000 0000 0000 0000 0000 0000 0101 1010 |

​ // 0000 0000 0000 0000 0000 0000 1100 0011 =

​ // 0000 0000 0000 0000 0000 0000 1101 1011 => 0xDB -> 13 * 16 + 11

​ System.out.println(n1 | n2);

​ // ^是只要不同就是1

​ // 0000 0000 0000 0000 0000 0000 0101 1010 |

​ // 0000 0000 0000 0000 0000 0000 1100 0011 =

​ // 0000 0000 0000 0000 0000 0000 1001 1001 => 0x99 -> 9 * 16 + 9

​ System.out.println(n1 ^ n2);

+ 是取一个数本身

- 取相反数

/ 如果是两个整数相除, 结果会直接丢弃小数部分, 有可能会丢失精度.

% 取余

  1. 如果n % m == 0 说明n能被m整除.

  2. 如果n % 2 == 0 说明n是偶数, 如果n % 2 != 0, 说明n是奇数

  3. N % M 的结果总是小于M, 让一个完全未知的数落在一个已知的M范围内.

如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。

++n 前加加, 先加后用, 不需要临时空间 效率高

n++ 后加加, 先用后加, 需要一个临时空间保存老值(也就是用的值), 效率低

int n = 10; n += 30;

效果相当于 n = n + 30, 但是不会引起数据类型的变化, 更安全.

比较运算的结果总是boolean

比较大小的运算只适用于基本数据类型中的数值型

==, != 可以适用于任意数据类型.

在Java中不可以写成3 < x < 6. 为什么? 因为 3 < x结果是boolean, 让boolean再和6比大小出问题.

逻辑运算符 只适用于布尔之间.

逻辑与 : 只要有假就是假

& 和 && 的区别 就是双& 有短路效果. 在实际使用中必须使用这个.

逻辑或 : 只要有真就是真

| 和 || 的区别 双|| 有短路效果, 在实际使用必须使用这个.

变量 = (布尔表达式) ? 表达式1 : 表达式2; //表达式1和表达2的值类型要一致.

运算符优先级, 先记住最高的.() 最低的赋值和累操作

结合性 由高到低

. () {} ; ,
R—>L ++ -- ~ !(data type)
L—>R * / %
L—>R + -
L—>R << >> >>>
L—>R < > <= >= instanceof
L—>R == !=
L—>R &
L—>R ^
L—>R |
L—>R &&
L—>R ||
R—>L ? :
R—>L = *= /= %=
+= -= <<= >>=
>>>= &= ^= |=

流程控制

l 顺序结构

  • 程序从上到下逐行地执行,中间没有任何判断和跳转。

l 分支结构

  • 根据条件,选择性地执行某段代码。

  • 有if…else和switch两种分支语句。

If

// if (条件布尔) {

​ //语句块; 如果条件布尔为真时此语句块就执行.

​ //}

​ if (n == 5) {

​ System.out.println("n == 5"); // 有条件执行语句

​ }

If else

If else if else if…

switch

l 循环结构

Ø 根据循环条件,重复性的执行某段代码。

Ø 有while、do…while、for三种循环语句。

每日一考_day04

\1. 变量分类有两种分法, 第一种是按数据类型来分,另外一种是按照声明位置来分, 每一种又各分为哪些种类型. 各有什么特点?

变量分类 :

  1. 按照数据类型来分

  2. 基本数据类型 : 内存区域中保存的是数据本身

  3. 数值型

  4. 整数

a) byte

b) short

c) int

d) long

e) char

  1. 浮点数

  2. float

  3. double

只有数值型之间可以强制互相转换, 只有数值型之间可以比大小.

在赋值时 :

如果右侧的量值范围大于左侧的变量类型的范围, 必须强制类型转换(强转有风险)

如果右侧的量值范围小于左侧的变量类型的范围, 可以直接自动完成.

double > float > long > int > short > byte

​ > char

3)布尔型 boolean : true, false

  1. 引用数据类型 : 内存区域中保存的是对象地址 : 对象在内存中的某个字节的编号. 本质上是一个正整数, 所有的引用变量都8字节(64位JDK)

String s = “abc”;

  1. 按照声明位置来分

  2. 局部变量 范围小, 寿命短.

声明在方法中的变量

  1. 成员变量 范围大, 寿命长

声明在类中方法外的变量

\2. 计算下列结果, 分析过程, 只需要计算到十六进制形式即可.

​ int a = 0x6B;

​ int b = 0x5D;

​ // 0110 1011 &

​ // 0101 1101 =

​ // 0100 1001 => 0x49

​ System.out.println(a & b);

// 0110 1011 |

​ // 0101 1101 =

​ // 0111 1111 => 0x7F

​ System.out.println(a | b);

// 0110 1011 ^

​ // 0101 1101 =

​ // 0011 0110 => 0x36

​ System.out.println(a ^ b);

\3. 运算符%的作用是什么? 有什么实际的应用?

​ 1) n % m 如果结果是0, 说明n能被m整除, 如果结果不为0, 说明n不能被m整除

​ 2) n % 2 如果结果是0, 说明n是偶数, 如果结果是非0, 说明n是奇数

​ 3) n % m 结果总是0~m-1,

​ 判断一个数是否是奇数

​ If (n & 0x01 == 1) {

说明它一定是奇数

}

\4. 判断:

​ 1) if else if else if else 语句中, 如果同时有多个条件都为true, 那么将会有多个语句块被执行, 错误, 因为if else 是绝对的分支, 多语句块之间互斥

​ 2) switch case case default 语句中, 如果同时有多个条件都为true, 那么将会有多个语句块被执行

​ 如果是switch, case, case之间绝对不允许相同

​ Switch(n) {

​ Case 1 :

​ Case 2 :

​ Case 1 : // 此行直接报错, 因为case不允许重复

}

\5. 在switch结构中, switch()括号中的要求具体是什么? case后面的要求又是什么?

​ Switch()中的要求是必须是变量或表达式, 数据类型是非long整数.字符串,枚举.

​ Case 后面要求必须是常量, 包括字面量和final修饰的量. 不允许表达式和变量

​ switch (n * 2 / 5) {

}

每日一考_day05

\1. 列出变量的使用注意事项(至少6点)(尝试解释一下原因)

​ 1) 必须要有数据类型和变量名

​ 2) 先声明, 后使用

​ 3) 变量有其作用范围

​ 4) 变量有其数据范围

​ 5) 变量必须初始化值才能读取.

​ 6) 同一范围内变量不允许重复声明.

\2. 变量分类有两种分法, 第一种是按数据类型来分,另外一种是按照声明位置来分, 每一种又各分为哪些种类型. 各有什么特点?

​ 分类 :

  1. 按照数据类型来分 :

  2. 基本数据类型 : 内存区域中保存的是数据本身

  3. 数值型 : 可以互相转换, 可以互相比大小

  4. 整数 : byte, short, int, char, long

  5. 浮点数 : float, double

  6. 布尔型 : 都不行, 只允许两个常量值, true, false

  7. 引用数据类型 : 内存区域中保存的是对象地址, 本质上就是内存的某个字节的编号.

  8. 按照声明位置来分 :

  9. 局部变量 : 声明在方法中

范围小, 寿命短

  1. 成员变量 : 声明在类中方法外

​ 范围大, 寿命长

\3. for循环的结构是什么? 执行流程是如何?

​ for (初始语句A; 条件语句B; 迭代语句C) { // 和while很像

​ 循环体语句D;

}

A B D C B D C B D C B D …… B

迭代语句C 是每次循环的开始语句

写程序, 打印一个倒直角三角形.

​ int n = ?;

​ for (int i = 0; i < n; i++) {

​ for (int j = 0; j < -i + n; j++) {

​ System.out.print(“*”);

}

​ System.out.println();

}

循环总结 :

循环 : 在某些条件满足的情况下, 反复执行特定的代码的功能.

循环的组成 :

  1. 初始化语句 : 作准备工作, 通常是int i = 0;

  2. 循环条件 : 控制循环的生死, 如果条件为真就一直循环, 直接条件为假. i < n

  3. 循环体 : 被多次执行的语句

  4. 迭代语句 : 让i向n靠近, 每次i++, 使用循环趋于结束, 如果没有迭代, 循环不能自然结束

while : 适用于循环次数不确定的循环, 结束取决于外部条件

while (布尔条件) { // 如果布尔条件为假, 循环次数是0~N次

​ 循环体; 在循环中控制布尔

}

do while : 适用于循环次数不确定的循环

do { // 如果布尔条件为假, 至少也要循环1次. 循环次数是1~N次.

​ 循环体; 在循环体中控制布尔

} while (布尔条件);

for : 适用于循环次数确定的循环

for (初始语句int i = 0; 循环条件 i < n; 迭代语句i++) {

​ //循环体;

}

方法

方法 : java程序中某个功能的封装, 一个独立的功能体. 也称为函数

​ 方法声明 :

​ 修饰符 返回值类型 方法名(数据类型1 形式参数1, 数据类型2 形式参数2, ....) {

​ 语句, 方法体

​ return 返回值;

​ }

​ 返回值类型 : 方法的功能的最终体现 , 成果是什么, 数据类型是什么.

​ 方法名 : 标识方法的.

​ 形式参数 : 形式上需要的数据, 但是实际数据是多少不影响功能, 没有这个数据也不行. 在功能的完成时需要的数据

​ return 返回值, 最终的功能的结果数据要返回给调用者

​ 调用者 : 使用这个方法的角色. 方法在调用时必须要由调用者传递实际参数.

​ 方法 = 方法签名 + 方法体(body)

​ 方法签名 : 方法的使用说明书. API

​ 方法体 : 实际执行的代码.

​ 注意 : 方法不可以嵌套, 必须是并行的.

​ 方法调用(method invoke) : 是一个语句

​ 方法名(实参列表); // 实参列表必须完全遵照形参的要求来写. 类型和个数及顺序要完全匹配.

​ 方法的返回值? 方法调用本身

​ 方法的返回值的接收只有一次机会, 错过了, 就错过了....

如果方法没有返回值, 必须使用void作为返回值类型

如果方法不需要参数, 参数列表空着, 但是()必须要有

l 注 意:

Ø 没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。

Ø 定义方法时,方法的结果应该返回给调用者,交由调用者处理。

Ø 方法中只能调用方法,不可以在方法内部定义方法。

Ø 方法的返回值只有一次机会接收, 就是在调用时

Ø 如果在方法中又调用了方法本身, 称为递归调用

每日一考_day06

\1. 写出while循环和do while循环的区别, 三个循环分别在什么场景下使用?

​ While至少执行0次

​ Do while 至少执行1次

​ While和dowhile 适用于循环次数不确定的循环

​ For循环适用于循环次数确定的循环.

\2. 简述break语句和continue语句的作用.

​ break 中断某个语句块的执行

public class BreakTest { public static void main(String[] args) { boolean flag = true; l1 : { System.out.println("hello"); if (flag) { break l1; } System.out.println("world"); // 它不执行 } System.out.println("three"); } }

​ continue 中断循环的某次循环, 进入下一次.

\3. 声明定义一个方法的语法格式是什么? 解释每部分的作用.

​ 修饰符 返回值类型 方法名(形参列表) {

​ 方法体;

​ return 返回值;

}

方法 = 方法签名(方法的使用说明书) + 方法体(真正执行的)

修饰符 : 修饰public, private 访问控制修饰符, static 静态, synchronized, abstract, final….

返回值类型 : 方法执行完毕后的结果数据的类型 ( 输出 ), 返回值只能返回一个.

方法名 : 标识符

形参列表 : 形式参数, 形式上的数据, 虽然没有值, 在方法体中可以直接使用. 在方法调用时 会由调用者传入实际的值. 此方法如果需要外部传入的数据, 就可以使用参数.( 输入 )

方法体 : 由一个个的语句构成, 是将来在方法时真正的执行部分.

返回值 : 方法在结束后, 产生的结果值, 值必须被返回值类型兼容.

\4. 方法的返回值是什么? 如何使用这个返回值?

​ 方法调用本身 :

变量 = 方法名(实参列表);

\5. 什么是方法重载, 为什么要方法重载?

​ 同一个类中, 方法名相同, 参数不同. 参数不同体现在类型不同, 个数不同, 顺序不同.

​ 功能相近的一组方法, 便于使用者记忆. 调用简单.

注意点 :

1)方法在调用时实参是通过值传递给形参数据, 本质上就是一个赋值操作. 值传递更安全

​ 2)方法永远无法修改另一个方法的局部变量.

猜你喜欢

转载自www.cnblogs.com/earnest-jie/p/12584464.html
今日推荐