课程链接:https://edu.aliyun.com/course/1000
(同样建议直接去看课程,此笔记仅作为参考,其中有些为个人的总结或示例)
(思维导图在最后)
————————————————————————————————————
第1章:Java语言简介public class Hello {
public static void main(String[] args) {
System.out.println("Hello World !");
}
}
· 对源代码程序进行编译:javac Hello.java,产生Hello.class的字节码文件
|- 利用JVM进行编译,编译出一套与平台无关的字节码文件(*.class);
· 在JVM上进行程序的解释执行:java Hello
|- 解释字节码文件,字节码文件的后缀不需要输入
[public] class 类名称 {
public static void main(String[] args) {
// 程序的代码由此开始执行
}
}
· 主方法所在的类为“主类”,所有的“主类”都将采用public class定义
③ 屏幕打印(系统输出):执行结果的展示,语法形式如下:
· 输出之后换行:System.out.println(输出内容);
· 输出之后不换行:System.out.print(输出内容);
SET CLASSPATH = 路径(默认为 . ),此命令仅为当前命令行下的设置,关闭当前命令行窗口则失效;
Java程序解释时会自动通过CLASSPATH所设置的路径进行类的加载。(CLASSPATH默认设置为当前所在目录);
全局CLASSPATH需在系统环境变量中设置。
面试题:请问PATH和CLASSPATH的区别?
第4章:Java基本概念
· PATH:是操作系统提供的路径配置,定义所有可执行程序的路径;
· CLASSPATH:是由JRE提供的,用于定义Java程序解释时的类加载路径,默认设置的为当前所在目录,可以通过“SET CLASSPATH = 路径”来进行设置。
|- 关系: JVM → CLASSPATH定义的路径 → 加载字节码文件
编译器在进行程序编译时,如发现有注释的内容,则不对此部分进行编译处理。
· 单行注释: //
· 多行注释: /* ... */
· 文档注释: /** ... */ (建议重要的类或方法使用)
由字母、数字、_、$组成,其中不能使用数字开头,不能使用java中的保留字(关键字)。
· JDK1.4时出现assert关键字,用于异常处理上;
第5章:Java数据类型划分
· JDK1.5时出现enum关键字,用于枚举定义上;
· 未使用到的关键字:goto、const。
程序是一套数字处理的游戏框架,也就是说在整个程序开发过程中,所达到的最终目的就是对一些数据的处理过程,那么既然要进行数据的处理,就一定需要提供有各种类型的数据定义。
· 基本数据类型:描述的是一些具体的数字单元。
|- 数值型:
|- 整型:byte、short、int、long 默认值:0
|- 浮点型:float、double 默认值:0.0
|- 布尔型:boolean 默认值:false
|- 字符型:char 默认值:’\u0000’
· 引用数据类型:牵扯到内存关系的使用。
|- 数组、类、接口 默认值:null
public class JavaDemo {
public static void main(String[] args) {
int max = Integer.MAX_VALUE; // 获取int的最大值
int min = Integer.MIN_VALUE; // 获取int的最小值
System.out.println(max); // 2147483647
System.out.println(min); // -2147483648
System.out.println("—————— 无以言表的分割线 ——————");
// int型变量 + int型变量 = int型计算结果
System.out.println(max + 1); // -2147483648,最大值 + 1 = 最小值
System.out.println(max + 2); // -2147483647,最大值 + 2 = 次最小值
// int型变量 - int型变量 = int型计算结果
System.out.println(min - 1); // 2147483647,最小值 - 1 = 最大值
}
}
public class JavaDemo {
public static void main(String[] args) {
// long long变量 = int的数值
long max = Integer.MAX_VALUE; // 获取int的最大值
long min = Integer.MIN_VALUE; // 获取int的最小值
System.out.println(max); // 2147483647
System.out.println(min); // -2147483648
System.out.println("—————— 无以言表的分割线 ——————");
// long型变量 + int型变量 = long型计算结果
System.out.println(max + 1); // 2147483648
System.out.println(max + 2); // 2147483649
// long型变量 - int型变量 = long型计算结果
System.out.println(min - 1); // -2147483649
}
}
public class JavaDemo {
public static void main(String[] args) {
int max = Integer.MAX_VALUE; // 获取int的最大值
int min = Integer.MIN_VALUE; // 获取int的最小值
System.out.println(max); // 2147483647
System.out.println(min); // -2147483648
System.out.println("—————— 无以言表的分割线 ——————");
// int型变量 + long型变量 = long型计算结果
System.out.println(max + 1L); // 2147483648
System.out.println(max + 2L); // 2147483649
// long型变量 - int型变量 = long型计算结果
System.out.println((long)min - 1); // -2147483649
}
}
public class JavaDemo {
public static void main(String[] args) {
long num = 2147483649L; // 此数据已经超过了int范围
int temp = (int) num; // long范围比int范围大,无法自动转换
System.out.println(temp);
}
}
public class JavaDemo {
public static void main(String[] args) {
// 10.2是一个小鼠,其对应的类型为double
double x = 10.2;
int y = 10;
// double类型 * int类型 = double类型
double result = x * y;
System.out.println(result);
}
}
public class JavaDemo {
public static void main(String[] args) {
float x = (float) 10.2;
float y = 10.1F;
System.out.println(x * y); // float型
}
}
public class JavaDemo {
public static void main(String[] args) {
char c = 'A'; // 一个字符变量
int num = c; // 可以获得该字符的编码
System.out.println(num); // 输出 65
}
}
|- 大写字母:'A'(65) ~ ‘Z’(90)
|- 小写字母:'a'(97) ~ ‘z’(122)
|- 数字:'0'(48) ~ ‘9’(57)
(大小写字母相差32个长度。)
public class JavaDemo {
public static void main(String[] args) {
char c = '加'; // 一个字符变量
int num = c; // 可以获得该字符的编码
System.out.println(num); // 输出 21152
}
}
public class JavaDemo {
public static void main(String[] args) {
boolean flag = true;
if (flag) { // 判断flag的内容,如果是true就执行
System.out.println("我很帅,我很年轻!");
}
else {
System.out.println("不许问年龄!");
}
}
}
public class JavaDemo {
public static void main(String[] args) {
String str = "Hello World!";
System.out.println(str); // 输出 Hello world!
}
}
public class JavaDemo {
public static void main(String[] args) {
String str = "Hello";
str + " world!"; // 这里的“+”为字符串连接
System.out.println(str); // 输出 Hello world!
}
}
|- 字符串的连接
|- 数字的加法计算
public class JavaDemo {
public static void main(String[] args) {
double x = 10.1;
int y = 20;
System.out.println("计算结果:" + x + y); // 输出 计算结果:10.120
System.out.println("计算结果:" + (x + y)); // 输出 计算结果:30.1
}
}
public class JavaDemo {
第6章:Java运算符
public static void main(String[] args) {
System.out.println("\t Hello World!\nHello \"pikaqiu\"!");
}
}
|- ++ 变量、-- 变量:先进行变量的自增/自减,而后再进行数字的计算;
|- 变量 ++、变量 --:先使用变量进行计算,而后再进行自增/自减。
public class JavaDemo {
public static void main(String[] args) {
int x = 10;
int y = 20;
// 判断x与y的大小关系来决定最终max变量的值
int max = x > y ? x : y;
System.out.println(max);
}
}
13
2
———————
6 ······ 1
2
———————
3 ······ 0
2
———————
1 ······ 1
2
———————
0 ······ 1
所以13的二进制为1101
public class JavaDemo {
public static void main(String[] args) {
int x = 13;
int y = 7;
System.out.println(x & y); // 输出 5
}
}
13的二进制: 1 1 0 1
7的二进制: 1 1 1
&计算: 1 0 1 → 5
public class JavaDemo {
public static void main(String[] args) {
int x = 13;
int y = 7;
System.out.println(x | y); // 输出 15
}
}
13的二进制: 1 1 0 1
7的二进制: 1 1 1
&计算: 1 1 0 1 → 15
public class JavaDemo {
public static void main(String[] args) {
int x = 2;
System.out.println(x <<1); // 向左移1位,输出 4
}
}
2的二进制: 0 1 0
向左移1位: 1 0 0 → 4
面试题:请解释&和&&、|和||的区别?(视频答案)
· &和|可以进行位运算与逻辑运算
|- 在进行逻辑运算时,所有的判断条件都要执行;
|- 在进行位运算时,只是针对当前的数据进行与和或的处理;
· 在逻辑运算上还可以使用&&、||
|- &&:在多个条件判断时,如前面的条件已经返回了false,则不会再走后续的判断,结果就是false
|- ||:在多个条件判断时,如前面的条件已经返回了true,则不会再走后续的判断,结果就是true
面试题:请解释&和&&、|和||的区别?(个人答案)
第7章:Java程序逻辑控制
· 按位与&、按位或|可以进行位运算与逻辑运算;而逻辑与&&、逻辑或||只能进行逻辑运算;
· 在进行逻辑运算时
|- 按位与&、按位或|对所有的条件都要进行判断;
|- 逻辑与&&、逻辑或||具有短路功能。
|- 主要针对关系表达式进行判断处理的分支操作。
|- 使用关键字:if、else
|- 使用格式:
if (布尔表达式) {
条件满足时执行
}
[else if (布尔表达式) {
条件满足时执行
}]
[else {
上述条件都不满足时执行
}]
switch(数据) {
case 数值 : {
数值满足时执行
[break;]
}
case 数值 : {
数值满足时执行
[break;]
}
[default : {
其余数值均不满足时执行
[break;]
}]
}
public class JavaDemo {
public static void main(String[] args) {
String str = "hello";
switch(str) {
case "Hello" :
System.out.println("Hello");
break;
case "hello" :
System.out.println("hello");
break;
default :
System.out.println("no match");
}
}
}
|- while(先判断再执行,所以内层代码可能一次都不执行,99%使用):
while() {
条件满足时执行
修改循环条件
}
|- do...while(先执行再判断,所以内层代码至少会执行一次,1%使用):
do {
条件满足时执行
修改循环条件
} while(布尔表达式);
for (定义循环的初始化数值 ; 循环的判断条件 ; 修改循环变量) {
循环语句的执行
}
public class JavaDemo {
public static void main(String[] args) {
int sum = 0; // 保存最终的计算总和
for (int i = 0; x <= 100; x ++) {
sum += x; // 累加
}
System.out.println(sum);
}
}
上述代码等价于:
public class JavaDemo {
public static void main(String[] args) {
int sum = 0; // 保存最终的计算总和
int x = 1; // 循环条件初始化
for (; x <= 100;) {
sum += x; // 累加
x ++; // 修改循环变量
}
System.out.println(sum);
}
}
|- 在明确确定循环次数时,优先选择for循环;
|- 在不明确确定循环次数,但知道循环结束条件时,使用while循环。
|- break:退出整个循环结构
|- continue:跳出当前的循环,继续执行下一次循环
|- 可以使用continue实现goto功能(java中不提供goto语句),但不建议使用
// 个人示例
public class JavaDemo {
public static void main(String[] args) {
point :
for (int x = 0; x <10; x++) {
System.out.print("x = " + x + "\t");
for (int y = 0; y
System.out.println();
continue point;
}
System.out.print("y = " + y + "\t");
}
System.out.println();
}
}
}
权限修饰符 [static] 返回值类型 方法名称([参数类型 定义参数名, ...]) {
// 该方法要执行的代码
[ return [返回值]; ]
}
public class JavaDemo {
public static void main(String[] args) {
int resultA = sum(10, 20); // 调用两个int参数的方法
int resultB = sum(10, 20, 30); // 调用三个int参数的方法
double resultC = sum(10.2, 20.3); // 调用两个double参数的方法
System.out.println(resultA);
System.out.println(resultB);
System.out.println(resultC);
}
public static int sum(int x, int y) { return x + y; }
public static int sum(int x, int y, int z) { return x + y + z; }
public static int sum(double x, double y) { return x + y; }
}
public class JavaDemo {
public static void main(String[] args) {
System.out.println(1);
System.out.println(1.1);
System.out.println(true);
System.out.println('A');
System.out.println("Hello World!");
}
}
定义:指一个方法自己调用自己。
作用:可以解决一些重复且麻烦的问题。
使用时需要注意的问题:
|- 一定要设置方法递归调用的结束条件;
|- 每一次调用的过程中,一定要修改传递的参数条件。
public class JavaDemo {
public static void main(String[] args) {
System.out.println(sum(100));
}
public static int sum(int num) {
if (1 == num) return 1;
return num + sum(num - 1); // 递归调用,将当前num与前面的sum相加
}
}
代码分析:
【第1次执行sum(),主方法执行】return 100 + sum(99);
【第2次执行sum(),sum()递归调用】return 99 + sum(98);
【第3次执行sum(),sum()递归调用】return 98 + sum(97);
………………………………
【第99次执行sum(),sum()递归调用】return 2 + sum(1);
【第100次执行sum(),sum()递归调用】return 1;
|- 大部分情况下考虑的都只是一些简单的处理逻辑;
|- 如果处理不当,则会造成内存溢出
————————————————————————————————————
思维导图