黑马程序员技术交流社区

标题: 【石家庄校区】经典基础知识总结 [打印本页]

作者: syc123    时间: 2017-11-30 01:21
标题: 【石家庄校区】经典基础知识总结
本帖最后由 小石姐姐 于 2017-12-7 14:55 编辑

day1
   ava语言平台版本:
                JavaSE: Standard Edition标准版本. 开发桌面软件
                JavaME: Micro Edition嵌入式版本. 开发机顶盒, 手机等嵌入式设备的程序
                JavaEE: Enterprise Edition企业版本. 开发服务器程序
                JVM:
                   Java Virtual Machine, Java虚拟机. Java实现的虚拟的计算机, 在不同的操作系统中模拟出相同的运行环境
                JRE:
                    Java Runtime Environment, Java运行时环境.
                     包括JVM和Java核心类库
                      是运行Java程序的最小环境
                JDK:
                     Java Development Kit, Java开发工具包
                     包括JRE和Java开发工具(javac等)
                JVM, JRE, JDK的关系:
                     JVM < JRE < JDKc
     Dos命令
             打开控制台:
                                win + r, 输出cmd, 回车
                常用DOS命令
                        切换盘符: 盘:, 如切换到d盘d:
                列出当前目录下的文件和目录: dir (dir = directory)
                查看指定目录下的文件和目录: dir 目录名
                切换目录: cd 目录名 (cd = change directory)
                        目录以\作为级别分隔
                        切换到上一级目录: cd ..
                        当前目录: .
                        切换到当前目录下的a目录: cd .\a, cd a
                        切换多个目录: cd a\b\c
                清空屏幕: cls (clear screen)
                退出控制台: exit
                上        下箭头:
        注释的概述和分类
                注释:
                        用于解释说明程序的文字, 相当于备注, 只是为了帮助程序员理解代码或者做说明, 并不是代码
                注释的种类:
                        单行注释: // 注释内容
                        多行注释: /* 注释内容 */
                        文档注释: /** 文档注释内容 */, 用于生成文档
                注意: 多行注释, 文档注释都不能嵌套使用
        常量:
                概念: 在程序的执行过程中, 其值不可以发生改变的量
                分类:
                        字符串常量: "hello"
                        字符常量: 'a'
                        整数常量: 12
                        小数常量: 12.23
                        布尔常量: true, false
                        空常量: null
       数据类型分类和数据大小
                8种基本数据类型(4类8种)
                        整数
                        byte:
                        1字节(2^8)
                                范围: -128 ~ 127
                        short:
                        2字节(2^16)
                                范围: -32768 ~ 32767
                        int:
                        4字节(2^32)
                                范围: -2147483648 ~ 2147483647
                        long:
                        8字节(2^64)
                                范围: -9223372036854775808 ~ 9223372036854775807
                        浮点数
                        float: 单精度
                        4字节
                                范围: -3,40292347E+38 ~ +3,40292347E+38
                        double: 双精度
                        8字节
                                范围: -1.79769313486231576E+308 ~ 1.79769313486231576E+308
                        字符
                        char: 2字节, 范围 -128 ~ 127
                        布尔
                        boolean: 1字节, 范围 true/false
                        3种引用数据类型
                        数组
                        类
                        接口
       标识符
                概念: 用于给 包, 类, 方法, 变量 等起名字的符号
                        组成规则:
                        unicode字符:
                        数字 (注意不能以数字开头)
                        大小写英文字母
                        汉字 (不建议使用)
                        下划线: _
                        美元符号: $
        标识符的常见命名规则
                基本要求:
                        见名知意, 看到就明白是什么意思
                包名的要求:
                        什么是包: 文件夹, 用于对类进行分类管理
                        全部小写, 多级包用点隔开: com.itheima.haha
                类名的要求:
                        每个单词的首字母都要大写: Demo, HelloWorld
                方法名的要求
                        第一个单词字母全小写, 从第二个单词开始首字母大写: main(), eat(), eatMeat()
                变量名的要求
                        第一个单词字母全小写, 从第二个单词开始首字母大写: age, yourAge
        变量定义的注意事项
                变量定义时的注意事项
                变量未赋值时不能使用
                变量只在它声明时所属的范围内有效(所在的大括号)
                一行上可以定义多个变量, 但是不建议这样做
        类型转换:
                一种数据类型转换为另一种类型
                类型转换的种类:
                        隐式转换(自动转换)
                        类型按照容量由小到大可以进行类型转换
                        转换规则: byte, short, char --> int --> long --> float --> double
                强制转换
                        不考虑类型的大小关系, 强制进行类型转换, 可能会引发问题

day2

        算符
        算术运算符
        +: 加
        -: 减
        *: 乘
        /: 除
        整数相除结果仍然为整数
        如果想要得到小数, 需要有小数参与运算
        %: 取余
        ++: 自增
        --: 自减
        增和自减的注意事项
                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类的对象: Scanner sc = new Scanner(System.in);
                调        用方法获取输入的整数: int i = sc.nextInt();
               
       day3
            流程控制语句
                        顺序结构
                        选择结构
                        if语句
                        else语句可以省略
                        switch语句
                        case穿透
                        switch表达式允许的数据类型:
                        byte, short, char, int
                        都是可隐式转换为int的类型, 因为byte, short, char可以隐式转换为int, 所以也可以使用
                        JDK5起可以是枚举类型
                        JDK7起可以是String
                        小括号中可以是常量, 也可以是变量
                        用来和表达式的值进行匹配
                        值只能是常量
                        值的类型应该和switch小括号中值的类型一致
                        break: 中断
                        default: 当所有case都不匹配时, 执行default
                        if语句适用于有范围的场景, 或者具体值的场景
                        switch语句适用于具体值场景, 不适用于范围的场景
                        循环结构
                        for循环
                        适用于知道循环次数的场景
                        while循环
                        适用于不知道循环次数的场景
                        至少执行0次循环体
                        do...while循环
                        适        用于不知道循环次数的场景
                        至少执行1次循环体case后面的值:
                        循环控制语句
                        break
                                适用场景: switch语句, 循环
                        作用: 结束switch语句或所在循环
                        continue
                                适用场景: 循环
                        作用: 结束本次循环, 继续下次循环
                        

        day4
            Random类: 用于生成随机数的类
                        使用步骤:
                        导包: import java.util.Random;
                                创建Random类的对象: Random r = new Random();
                                使用对象调用方法获取随机数: int number = r.nextInt(10);
                                nextInt(y)表示产生的数据在0到y之间, 包括0, 但不包括y
                数组:
                        存储同一种数据类型的多个元素的容器
                        2种定义格式(区别在于中括号的位置不同):
                        数据类型[] 数组名;
                        推荐使用这种格式
                        示例: int[] arr;
                        数据类型 数组名[];
                        示例: int arr[];
                初始化
                        为数组开辟内存空间, 并为数组中的每一个元素赋一个初始值
                        2种初始化:
                        动态初始化: 我们给出数组长度, 由系统给出元素的默认值
                        静态初始化: 我们给出初始化值, 由系统给出数组长度
                数组的元素: 数组中的单个数据
                        数组的索引: 元素在数组中的位置序号, 从0开始
                        角标
                        访问数组的元素: 数组名[索引];
                Java中的内存分配
                        栈: 存储局部变量
                        堆: 存储new出来的实体(对象)
                        方法区: 存储加载的类, 面向对象进阶讲解
                        本地方法区: 和系统相关
                                寄存器: 给CPU使用
                        局部变量
                        定义在方法中的变量
                        堆的特点:
                        每一个对象都有地址值
                        每一个对象的数据都有默认值
                        使用完毕后会在垃圾回收器空闲的时候被垃圾回收器回收内存
                        栈的特点:数组的静态初始化
                数组的静态初始化:
                        我们给出初始化值, 由系统给出数组长度
                                静态初始化方式创建数组, 数组最开始也有默认值0, 但立刻就被静态初始化值覆盖了
                                静态初始化2种格式:
                                先进后出
                                使用完毕后立即回收内存
            操作数组的2个常见异常:
                        ArrayIndexOutOfBoundsException: 数组索引越界异常
                        发生原因: 我们访问了不存在的索引
                        如何避免: 不要访问不存在的索引
                        NullPointerException: 空指针异常
                        发生原因: 数组名为null时使用数组名
                        如何避免: 判断数组是否为null, 如果不是null, 再操作: if(arr != null) { 操作 }
                        null只能赋值给引用数据类型的变量, 包括数组, 类, 接口
                数组操作之遍历数组
                        数组遍历:
                        依次获取数组中的每一个元素
                        一般使用for循环
                        获取数组的长度:
                        使        用数组的length属性, int length = arr.length;
            数组操作之获取最值
                        最值
                                最小值和最大值
                                编程思维: 数组获取最大值
                                定义一个变量max, 保存最大值, 先拿数组中的第一个元素作为参照物
                                for循环遍历数组中的其他元素, 让其他元素和max依次比较
                                如果元素比max大, 则说明该元素应作为最大值, 所以将该元素存入max
                                整个for循环遍历比较结束, max保存的就是最大值
                                编程思维: 数组获取最小值
                                        定义一个变量min, 保存最小值, 先拿数组中的第一个元素作为参照物
                                        for循环遍历数组中的其他元素, 让其他元素和min依次比较
                                        如果元素比min小, 则说明该元素应作为最小值, 所以将该元素存入min
                                        整个for循环遍历比较结束, min保存的就是最小值
                二维数组:
                        概念: 二维数组是元素为一维数组的数组
                                定义格式:
                                格式1(推荐): 数据类型[][] 数组名;
                                格式2: 数据类型 数组名[][];
                                格式3: 数据类型[] 数组名[];
                                初始化格式
                                动态初始化: 数据类型[][] 数组名 = new 数据类型[m][n];
                                m: 二维数组中一维数组的个数(二维数组的长度)
                                n: 一位数组中的元素个数(二维数组中一维数组的长度)
                                静态初始化:
                                标准格式: 数据类型[][] 数组名 = new 数据类型[][]{{...}, {...}, {...}, ...};
                                简化格式: 数据类型[][] 数组名 = {{...}, {...}, {...}, ...};
                                两种初始化的区别:
                                动态初始化, 二维数组中的一维数组的长度是固定的, 因为n已经确定
                                静态初始化, 二维数组中的一位数组长度可以是不同的
                                注意:
                                int[][] arr = new int[3][];不给一维数组长度是正确的
                                含义: 创建了一个长度为3的二维数组, 而不创建内部的一维数组. 而动态初始化是需要给元素默认值的, 二维数组中的一维数组是引用类型, 所以是默认值null. 即创建完的数组为[null, null, null]
                                如果不给二维数组长度则是错误的, 因为虚拟机无法知道要如何创建该数组
                                获取二维数组中某个一维数组的某个元素值:
                                arr[二维数组索引][一维数组索引]               
day5

    方法定义格式
                方法:
                        完成特定功能的代码块
                作用
                        提高代码复用性和可维护性
                定义格式:
                        修饰符: 目前记住public static
                        返回值类型: 用于限定返回值的数据类型
                        方法名: 方法的名字, 便于我们调用
                        参数类型: 用于限定调用方法时传入数据的类型
                        参数名: 用于接收调用方法时传入数据的变量
                        用于告诉方法的调用者, 调用该方法时需要传入何种数据
                        方法体: 完成我们需要的功能的代码
                        return语句: 结束方法, 并把返回值传递给调用者        
        求和方法的调用
                调用方法的3种格式
                        单独调用: sum(10, 20);
                        输出调用: System.out.println(sum(10, 20));
                        赋值调用: int result = sum(10, 20);
                注意:
                        所有定义的方法都需要被调用才能执行, 包括main()方法, main()方法由虚拟机调用        
                        
        方法重载的概述和基本使用
        方法的重载:
                英文Overload
                概念: 在同一个类中, 有多个方法名相同, 参数列表不同的方法
        方法重载的特点:
                在同一个类中
                方法名相同
                参数列表不同
                参数个数不同
                参数的数据类型不同(包括数据类型相同但参数列表的顺序不同)
                方法重载和什么无关?
                和返回值类型无关
                和参数的变量名无关
                和方法体无关
        方法的形参类型
                方法形参是基本数据类型
                结论: 形参的值的改变不会影响实际参数
                        为什么? 形参是定义在调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 两者内存区域不同, 所以互不影响
                方法形参是引用数据类型
                结论:
                如果形参是修改自身保存的引用, 不会影响实际参数
                原因: 因为形参是调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 形参改变其保存的引用指向, 并不影响实际参数的引用指向
                如果形参是通过引用修改堆内存中保存的数据, 会影响实际参数获取的值
                原因: 因为形参是调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 形参通过引用修改的是堆内存中的数据, 而实际参数也是指向该堆内存中的数据, 所以形参修改后, 实际参数获取的值也会改变

day6
   断点:
                breakpoint, 标记程序在这里暂停
                断点调试的作用:
                可以在程序运行中查看程序的执行流程
                调试程序, 如查看变量的值
        如何加断点:
                在行号左边双击
                创建/取消断点
                单个断点: 双击
                多个断点: 在debug视图中的breakpoints窗口中点击Remove all breakpoints按钮
                执行debug:
                右键 - debug as
       数组元素反转
      反转: reverse
                分析
                定义数组
                Scanner输入数组元素
                实现反转
                首尾元素交换
                开头索引++, 结尾索引--
                引        入第三方变量交换
                注意界限
        数组基本查找
                查找元素第一次出现的索引
                分析
                Scanner录入数组数据
                实现查找方法
                遍历数组, 依次比较元素, 如果相等, 就把该处索引返回
                异常情况处理
                查不到返回-1
        数据加密
                分析
                将录入密码存入数组
                进行加密处理
                每位数字都加上5, 然后除以10的余数, 来替代该数字
                再将第一位和第四位交换, 第二位和第三位交换        
                 
作者: Port    时间: 2017-11-30 15:48






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2