A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2017-11-30 09:34 编辑

s1-day01
* Java概述
        * 创始人: 詹姆斯高斯林
        * Java最初由SUN公司运行, 后来被Oracle收购
        * Java版本: (看笔记)
                * JDK1.5, 重命名为JavaSE, JavaME, JavaEE
                * 目前使用最广泛的Java版本: 7.0, 8.0
        * Java语言的平台版本:
                * JavaSE: 标准版本, 用于桌面软件开发
                * JavaME: 嵌入式版本, 用于嵌入式程序开发
                * JavaEE: (重要)企业版本, 开发服务器程序(网站后台, ERP, OA, 银行结算系统)
        * 3个概念:
                * JVM: Java虚拟机, 他是实现Java跨平台的关键, 不同系统平台上有不同的JVM
                * JRE: Java运行时环境, 是运行Java程序的一个最小环境
                        * 包括JVM和Java核心类库
                * JDK: Java开发工具包, 用于开发Java程序
                        * 包括JRE和Java的开发工具(javac)
        * 开发环境配置
                * 安装JDK
                        * Windows下, 使用exe安装包
                * 配置环境变量
                        * 什么是配置环境变量: 将jdk的bin目录放入系统的Path环境变量中, 这样在命令行中在任意目录下都可以使用jdk的bin目录中的命令
                        * 怎么配置:
                                * 复制jdk的路径
                                * 我的电脑右键, 属性, 高级选项卡中, 环境变量, 系统变量:
                                        * 新建一个名为JAVA_HOME的变量名, 值为jdk的路径, 保存
                                        * 找到名为Path的变量, 编辑, 在值的最开始, 添加`%JAVA_HOME%\bin;`, 保存
                                * 验证环境变量是否配置成功
                                        * 关掉已经打开的cmd, 重新打开cmd
                                        * 在任意目录下输入`java -version`, 如果显示版本, 说明配置成功
        * 编写HelloWorld
                * 创建一个名为`HelloWorld.java`的文件, 注意这是源代码文件, 以`.java`文件名结尾
                * 使用文本编辑器打开该文件, 编写代码
                        * 定义一个类: `public class 类名 {}`
                                * 注意: 类名和文件名要一致, 并且单词首字母大写, 其他小写
                        * 在类中定义主方法: `public static void main(String[] args) {}`
                                * 注意: 一个字都不能错
                        * 在主方法中编写代码, 输出语句: `System.out.println("HelloWorld");`
                * 保存代码
                * 编译源代码文件: `javac 文件名.java`
                        * 编译完毕后, 会自动生成`.class`文件
                * 运行`.class`文件: `java 文件名`
                        * 注意没有后缀
        * Java基本语法
                * 3种注释
                        * 单行注释: `// 注释内容`
                        * 多行注释: `/* 多行的内容 */`
                        * 文档注释: `/** 文档注释内容 */`
                * 关键字
                        * 是什么: Java中赋予特殊含义的单词
                        * 特点:
                                * 字母小写
                                * 某些编辑器会高亮显示
                * 常量
                        * 概念: 在程序执行过程中, 其值不能改变
                        * 分类
                                * 字符串常量: `"Hello"`
                                * 字符常量: `'a'`
                                * 整数常量: `123`
                                * 浮点数常量: `3.14`
                                * 布尔常量: `true`
                                * 空常量: `null`
                        * 如何使用: 直接使用, 如输入
                * 变量
                        * 概念: 内存中的一片区域, 可以保存值. 在程序的执行过程中, 其值可以在一定范围内发生改变.
                        * 定义格式:
                                * `数据类型 变量名 = 初始化值;`
                                * `数据类型 变量名;`
                        * 注意事项
                                * 变量没有赋值不能直接使用
                                * 变量的作用域只在定义变量所在的大括号内
                                * 一条Java语句中可以定义多个变量, 这些变量可以有初始化值, 也可以没有. 但不建议
                * 数据类型
                        * 基本数据类型(4类8种)
                                * 整数
                                        * byte
                                        * short
                                        * int
                                        * long: 数字后加L
                                * 浮点数
                                        * float: 数字后加F
                                        * double
                                * 字符
                                        * char
                                * 布尔
                                        * boolean
                        * 引用数据类型
                                * 数组
                                * 类
                                * 接口
                * 标识符
                        * 作用: 给包, 类, 方法, 变量起名
                        * 组成规则:
                                * Unicode字符
                                        * 数字: 不能开头
                                        * 大写, 小写英文字母
                                        * 汉字: 不建议使用
                                * 下划线: `_`
                                * 美元符号: `$`
                        * 起名的一个惯例: 见名知义
                * 类型转换
                        * 隐式转换: 从数据类型的小到大进行转换
                                * 规则: `byte, short, char -> int -> long -> float -> double`
                        * 强制转换: 手动强制转换类型
                                * 格式: `目标类型 变量名 = (目标类型)(被转换的数据);`
* DOS命令
        * 打开cmd:
                * `Win + r`, 输入cmd, 回车
        * 切换盘符: `d:` , 回车
        * 切换目录: `cd 目录名`
                * 返回上一层目录: `cd ..`
                * 返回该盘符的顶层目录: `cd \`
                * 多级目录: `cd a\b\c`
        * 查看当前目录中的文件和目录: `dir`
        * 查看指定目录下的文件和目录: `dir 目录名`
        * 清空屏幕: `cls`
        * 退出cmd: `exit`
s1-day02
* Eclipse
        * 安装: 解压
        * 配置: 字体等
        * 工作空间(workspace): 保存项目
        * Eclipse是以项目为单位管理的
        * 开发步骤
                * 创建项目
                * 在src目录下创建包
                * 在包中创建类
* 运算符
        * 算术运算符
                * `+`: 加
                * `-`: 减
                * `*`: 乘
                * `/`: 除
                        * 整数相除结果仍然为整数
                        * 如果想要得到小数, 需要有小数参与运算
                * `%`: 取余
                * `++`: 自增
                * `--`: 自减
                * 自增和自减的注意事项
                        * `i++`和`++i`的区别:
                                * 单独使用时, 结果一样
                                * 参与运算时
                                        * `i++`: 先使用i的值作为i++表达式的值, 然后i自增
                                        * `++i`: i先自增, 然后使用自增后的值作为++i表达式的值
                * 字符参与加法运算
                        * 在参与加法运算时, 以字符本身的值进行运算, 结果为数字
                        * 直接打印字符时, 输出的仍然是字符
                * 字符串参与加法运算: 拼接字符串
        * 赋值运算符
                * `=`: 赋值
                * `+=`: 拿左边和右边的值相加, 然后赋值给左边
                * `-=`: 拿左边和右边的值相减, 然后赋值给左边
                * `*=`: 拿左边和右边的值相乘, 然后赋值给左边
                * `/=`: 拿左边和右边的值相除, 然后赋值给左边
                * `%=`: 拿左边和右边的值取余, 然后赋值给左边
                * 注意事项
                        * 扩展的赋值运算符隐含了强制类型转换
                        * `int i += 10;`相当于`int i = (int)(i + 10);`
        * 关系运算符
                * `==`: 相等
                * `!=`: 不等
                * `>`: 大于
                * `>=`: 大于等于
                * `<`: 小于
                * `<=`: 小于等于
                * 关系运算符的结果是boolean类型的
        * 逻辑运算符
                * `&`: 与. 两边都为true则为true, 否则为false
                * `|`: 或. 只要有一边为true则为true, 否则false
                * `^`: 异或. 男女是真爱(两边不同为true, 两边相同为false)
                * `!`: 非. 取相反的值
                * `&&`: 短路与. 和`&`结果一样, 但如果左边能够直接确定结果, 则右边不判断
                * `||`: 短路或. 和`|`结果一样, 但如果左边能够直接确定结果, 则右边不判断
        * 三元运算符
                * 格式: `关系表达式? 结果为true的表达式 : 结果为false的表达式;`
                        * 当关系表达式为true时, 返回左边的
                        * 当关系表达式为false时, 返回右边的
                        * 注意, 三元运算符是有返回值的
* 键盘录入
        * 三个步骤
                * 导包: `import java.util.Scanner;`
                        * 导包的位置: 在package之后, class定义之前
                * 创建对象: `Scanner sc = new Scanner(System.in);`
                * 获取键盘输入的整数: `int i = sc.nextInt();`

s1-day03
* 流程控制语句
        * 顺序结构
        * 选择结构
                * if语句
                        * else语句可以省略
                * switch语句
                        * case穿透
                        * switch表达式允许的数据类型:
                                * byte, short, char, int
                                        * 都是可隐式转换为int的类型, 因为byte, short, char可以隐式转换为int, 所以也可以使用
                                * JDK5起可以是枚举类型
                                * JDK7起可以是String
                                * 小括号中可以是常量, 也可以是变量
                        * case后面的值:
                                * 用来和表达式的值进行匹配
                                * 值只能是常量
                                * 值的类型应该和switch小括号中值的类型一致
                        * break: 中断
                        * default: 当所有case都不匹配时, 执行default
                * if语句适用于有范围的场景, 或者具体值的场景
                * switch语句适用于具体值场景, 不适用于范围的场景
        * 循环结构
                * for循环
                        * 适用于知道循环次数的场景
                * while循环
                        * 适用于不知道循环次数的场景
                        * 至少执行0次循环体
                * do...while循环
                        * 适用于不知道循环次数的场景
                        * 至少执行1次循环体
                * 循环控制语句
                        * break
                                * 适用场景: switch语句, 循环
                                * 作用: 结束switch语句或所在循环
                        * continue
                                * 适用场景: 循环
                                * 作用: 结束本次循环, 继续下次循环

s1-day04
* Random类
        * 作用: 生成一个随机数
        * 步骤:
                * 导包: `import java.util.Random;`
                * 创建对象: `Random r = new Random();`
                * 生成随机数: `int n = r.nextInt(10);`, 获取0到9的随机数(0到10, 包含0不包含10)
* 数组
        * 一维数组
                * 数组概念: 存储同一种数据类型的多个元素的容器
                * 定义:
                        * `数据类型[] 数组名;`, **推荐**
                        * `数据类型 数组名[];`
                * 初始化
                        * 动态初始化: 我们给定数组长度, 由系统给定元素的初始值
                                * 格式: `数据类型[] 数组名 = new 数据类型[数组长度];`
                                * 示例: `int[] arr = new int[3];`
                        * 静态初始化: 我们给定元素的初始值, 由系统给定数组长度
                                * 格式:
                                        * 普通格式: `数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ...};`
                                                * 示例: `int[] arr = new int[]{1, 2, 3};`
                                        * 简化格式: `数据类型[] 数组名 = {元素1, 元素2, ...};`
                                                * 示例: `int[] arr = {1,2,3};`
                * 数组的长度
                        * 什么是长度? 数组中元素的个数
                        * 数组名.length: length是属性, 获取数组的长度
                * 数组中元素的默认值
                        * int: `0`
                        * float, double: `0.0`
                        * char: `\u0000`
                        * boolean: `false`
                        * 引用类型: `null`
                * 数组元素的访问
                        * 格式: `数组名[索引]`
                        * 数组的索引: 元素的编号, 从0开始
                * 数组的遍历
                        * 什么叫做遍历: 依次获取数组中的所有元素
                        * 如何遍历? for循环实现
        * 二维数组
                * 什么是二维数组: 元素为一维数组的数组
                * 定义
                        * `数据类型[][] 数组名;`, **推荐**
                        * `数据类型[] 数组名[];`
                        * `数据类型 数组名[][];`
                * 初始化
                        * 动态初始化
                                * 格式: `数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度];`
                                        * 示例: `int[][] arr = new int[2][3];`
                        * 静态初始化
                                * 普通格式: `数据类型[][] 数组名 = new 数据类型[][]{{元素1, 元素2,...}, {元素1, 元素2,...}, ...};`
                                        * 示例: `int[][] arr = new int[][]{{1, 2}, {3, 4, 5}};`
                                * 简化格式: `数据类型[][] 数组名 = {{元素1, 元素2,...}, {元素1, 元素2,...}, ...};`
                                        * 示例: `int[][] arr = {{1, 2}, {3, 4, 5}};`
                * 访问元素:
                        * 格式: `数组名[二维数组的索引][一维数组的索引]`
                * 二维数组的遍历: 嵌套for循环
        * 数组操作常见的2个异常:
                * `ArrayIndexOutOfBoundsException`: 数组索引越界异常
                        * 发生原因: 使用了不存在的索引
                        * 如何避免: 检查索引, 防止越界
                * `NullPointerException`: 空指针异常
                        * 发生原因: 引用类型的变量保存的值为null, 然后访问了数组元素或是调用了方法或属性
                        * 如何避免: `if (引用类型变量 != null) {操作}`
        * 数组获取最值(熟练代码书写)
        * 两个数组变量指向同一个数组的操作(会画图, 会分析)
* Java内存
        * 内存分区
                * 栈: 存放局部变量
                        * 垃圾会立即回收
                * 堆: 存放new出来的对象
                        * 垃圾要在垃圾回收器空闲时回收
                * 方法区
                * 本地方法区
                * 寄存器
        * 数组的内存分配
                * `int[] arr`: 在栈中开辟内存空间
                * `new int[3];`: 在堆中开辟内存空间, 并初始化元素的默认值
                * `=`: 将堆内存中数组的地址值赋值给arr变量


```java
// 一维数组的遍历
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
        syso(arr);
}

// 二维数组的遍历
int[][] arr2 = {{1, 2}, {3, 4, 5}};
for (int i = 0; i < arr2.length; i++) {
        for (int j = 0; j < arr2.length; j++) {
                syso(arr2[j]);
        }
}
for (int i = 0; i < arr2.length; i++) {
        int[] subArr = arr2;
        for (int j = 0; j < subArr.length; j++) {
                syso(subArr[j]);
        }
}
```

* 编程思维: 数组获取最大值
        * 定义一个变量max, 保存最大值, 先拿数组中的第一个元素作为参照物
        * for循环遍历数组中的其他元素, 让其他元素和max依次比较
        * 如果元素比max大, 则说明该元素应作为最大值, 所以将该元素存入max
    * 整个for循环遍历比较结束, max保存的就是最大值

```java
// 用数组第一个元素作为临时最大值
int max = arr[0];
// 遍历数组, 获取其他元素与最大值比较
for (int i = 1; i < arr.length; i++) {
        // 获取数组中的一个元素, 与max比较
        if (max < arr) {
                // 说明max比当前元素小, 应该将当前元素存入max
                max = arr;
        }
}
// 循环结束后, max就是最大值
System.out.println("数组中的最大值为:" + max);
```


* 编程思维: 数组获取最小值
        * 定义一个变量min, 保存最小值, 先拿数组中的第一个元素作为参照物
        * for循环遍历数组中的其他元素, 让其他元素和min依次比较
        * 如果元素比min小, 则说明该元素应作为最小值, 所以将该元素存入min
    * 整个for循环遍历比较结束, min保存的就是最小值

```java
// 用数组第一个元素作为临时最小值
int min = arr[0];
// 遍历数组, 获取其他元素与最小值比较
for (int i = 1; i < arr.length; i++) {
        // 获取数组中的一个元素, 与max比较
        if (min > arr) {
                // 说明min比当前元素大, 应该将当前元素存入min
                min = arr;
        }
}
// 循环结束后, min就是最小值
System.out.println("数组中的最小值为:" + min);
```
s1-day05
* 方法(method, 函数function)
        * 定义格式: `修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) { 方法体; return 返回值;}`
                * 修饰符: 目前记住public static
                * 返回值类型: 限定返回值的数据类型
                * 方法名: 方法的名字, 便于调用
                * 参数类型: 限定参数的数据类型以及调用方法时传入的数据类型
                * 参数名(形式参数=形参): 用于接收调用方法时传入的数据
                * 方法体: 完成该方法的功能
                * return语句: 结束方法, 并把返回值传递给方法的调用者
        * 如何调用方法:
                * 直接调用: `sum(1, 2);`
                * 输出调用: `System.out.println(sum(1, 2));`
                * 赋值调用 : `int n = sum(1, 2);`
        * 方法的重载
                * 概念: Overload, 在同一个类中, 多个方法有相同的方法名, 方法参数列表不同
                * 特点:
                        * 在同一个类中
                        * 方法名相同
                        * 方法的参数列表不同
                                * 参数的个数不同
                                * 参数的数据类型不同(包括顺序不同)
                * 重载与以下几点无关
                        * 与方法的返回值类型无关
                        * 和参数的参数名无关
                        * 和方法体无关
        * 方法的形参类型
                * 方法形参是基本数据类型
                        * 结论: 形参的值的改变不会影响实际参数
                        * 为什么? 形参是定义在调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 两者内存区域不同, 所以互不影响
                * 方法形参是引用数据类型
                        * 结论:
                                * 如果形参是修改自身保存的引用, 不会影响实际参数
                                        * 原因: 因为形参是调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 形参改变其保存的引用指向, 并不影响实际参数的引用指向
                                * 如果形参是通过引用修改堆内存中保存的数据, 会影响实际参数获取的值
                                        * 原因: 因为形参是调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 形参通过引用修改的是堆内存中的数据, 而实际参数也是指向该堆内存中的数据, 所以形参修改后, 实际参数获取的值也会改变

```java
// 定义格式
修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) {
        方法体;
        return 返回值;
}
```

* 数组的操作
        * 遍历
        * 美化格式打印
        * 求最大值最小值
        * 求和
s1-day06
断点调试  分析基本数据类型 及引用数据类型 调用方法前后是否改变实参
基础语法练习

1 个回复

倒序浏览
顶一下吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马