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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

醉心客

初级黑马

  • 黑马币:29

  • 帖子:9

  • 精华:0

本帖最后由 小石姐姐 于 2017-12-7 14:42 编辑


day01
Java语言
创始人: `詹姆斯高斯林`(秃)
后由SUN公司维护2009年04月20日, Oracle(甲骨文)收购SUN, 现在Java属于甲骨文公司

Java语言平台版本:
JavaSE:标准版本. 开发桌面软件
JavaME:嵌入式版本. 开发机顶盒, 手机等嵌入式设备的程序
JavaEE:企业版本. 开发服务器程序


JVM, JRE, JDK的概述
Java是**跨平台**的编程语言
跨平台: Java程序可以在任意操作系统上运行, 一次编写到处运行
跨平台的原理: Java在不同的操作系统中有不同的JVM(Java虚拟机), 实现跨平台运行
(类似于游戏模拟器, 让相同的游戏在windows, 手机上都可以玩)

JVM:Java虚拟机. Java实现的虚拟的计算机, 在不同的操作系统中模拟出相同的运行环境
JRE:Java Runtime Environment, Java运行时环境,包括JVM和Java核心类库,是运行Java程序的最小环境
JDK:Java Development Kit, Java开发工具包,包括JRE和Java开发工具(javac等)

JVM < JRE < JDK


常用DOS命令

打开控制台:  `win + r`, 输出cmd, 回车
切换盘符: `盘:`, 如切换到d盘`d:`
列出当前目录下的文件和目录: `dir` (dir = directory)
查看指定目录下的文件和目录: `dir 目录名`
切换目录: `cd 目录名` (cd = change directory)
切换到上一级目录: `cd ..`
当前目录: `.`
切换到当前目录下的a目录: `cd .\a`, `cd a`
切换多个目录: `cd a\b\c`
回到最底层目录 'cd\'
清空屏幕: `cls` (clear screen)
退出控制台: `exit`
上下箭头: 切换之前执行过的命令

要会安装JDK及运行环境配置

Java程序运行流程图
                             
java文件(源代码)----编译----->.class文件------运行----->程序运行
注意:
Java是区分字母大小写的, hello和Hello不一样,标点符号只能用半角英文符号,单行语句以分号`;`结尾

编写Hello World程序步骤
1. 创建一个文件, 后缀名是`.java`
2. 在文件中定义一个类:
                `public class 类名 {}`
             注意类名每个单词的首字母要大写
                 文件名和类名要相同
3. 在类的大括号中定义一个主方法:
                `public static void main(String[] args) {}`
                 注意main不要拼写错
                 注意String首字母S要大写
4. 在主方法的大括号中添加一行输出语句:
                `System.out.println("Hello world!");`
                 注意System首字母S要大写
运行Hello world
        1. 在命令行中使用javac命令编译java源代码文件: `javac Xxx.java`
                 如果没有报错, 则说明编译成功, 执行dir命令查看是否多了Xxx.class文件, 这就是编译后的字节码文件
        2. 使用java命令运行字节码文件: `java Xxx`
             注意, 不用输.class的后缀

Hello World 常见问题
看不到文件扩展名时,设置一下显示后缀文件格式。
单词拼写问题
报错: 找不到符号string,原因: string的s应该是大写的S, String 正确的是: String[] args
报错: 程序包system不存在,原因: system的s应该是大写的S, System,正确的是: System.out.println();
报错: 在类HelloWorld中找不到主方法,原因: 主方法写错了, 或者没写。正确的是: public static void main(String[] args) {}
中文符号问题 报错: 非法字符: /xxxx 原因: 在代码中使用了中文标点符号, 如中文的逗号, 句号, 分号, 小括号, 或者全角的空格
正确: 全部使用英文字符, 包括标点符号.
最好的办法: 将输入法设置为"中文状态下使用英文标点"

Nodepad++的安装和配置

Notepad++是一款更高级的编辑器,其可以显示行号,方便查询。可以设置颜色,也能自动补全。安装简单
配置问题:设置新文件的编码格式: 设置 > 首选项 > 新建 > 默认语言选Java > 编码选ANSI
为什么选ANSI? ANSI是本地编码, 由于Windows使用GBK编码, 所以cmd使用的也是GBK编码, 所以编辑器选择ANSI相当于是GBK, 中文不会出现乱码

Path环境变量的配置(重要)
Path环境变量:
概念: 系统中保存着一个变量, 变量名为Path, 该变量存储了常用命令的所在路径
作用: 控制台在运行类似于java, javac等命令的时候, 会首先到Path代表的目录中去寻找是否有该命令, 有则运行, 没有则提示找不到命令
1:为什么要将jdk的bin配置到Path中: 因为一般我们会把项目代码写在其他目录中, 而我们想在任意目录下运行javac, java等命令, 必须将java等命令配置到Path中
配置方法:打开环境变量设置窗口: 右键点击计算机 > 属性 > 高级系统设置 > 高级 > 环境变量 > 系统变量
1:创建一个叫JAVA_HOME的系统变量, 用于保存JDK的bin目录路径: 在系统变量中点击`新建`, 变量名输入`JAVA_HOME`, 变量值输出java的bin目录的绝对路径, 确定
2:将JAVA_HOME变量添加到Path中: 在系统变量列表中找到Path, 双击, 在变量值的最前面增加`%JAVA_HOME%\bin;`, 确定
创建JAVA_HOME变量有什么用:这个变量不是必须的, 我们最终的目的是将JDK的bin目录添加到Path中, 直接写路径也是可以的
但如果JDK的安装目录由于某种情况进行了变动, 直接修改Path很麻烦且容易出错, 所以使用JAVA_HOME来保存JDK的bin目录路径, 更容易修改
在以后做JavaEE时, 某些软件要求必须要有JAVA_HOME这个环境变量
验证配置成功()重要: 重新打开命令行, 在任意目录下执行`java -version`, 如果显示jdk版本号则安装正确; 如果提示找不到java命令则安装失败


注释的种类:(markdownpad和eclipse注释的格式一样)
1:单行注释: `// 注释内容`
2:多行注释: `/* 注释内容 */`
3:文档注释: `/** 文档注释内容 */`, 用于生成文档

关键字:被Java赋予特殊用途的单词     
特点: 1. 关键字的字母全都是小写的
          2. 常见的代码编辑器对关键字都有颜色高亮

常量的概述和分类
常量: 概念: 在程序的执行过程中, 其值不可以发生改变的量
分类:
1:字符串常量: `"hello"`
2:字符常量: `'a'`
3:整数常量: `12`
4:小数常量: `12.23`
5:布尔常量: `true`, `false`
6:空常量: `null`

变量的概述和定义格式
变量: 变量是内存中的一块区域, 保存着一个值.在程序的执行过程中, 其值可以在一定范围内发生改变.变量通过数据类型来限定
变量名: 变量的名字
初始化值: 变量的最初的值
定义格式:  `数据类型 变量名 = 初始化值;`



计算机存储单元
位:  bit, 比特. 是计算机存储设备的最小信息单元, 通常用b表示
字节: byte, 字节. 是计算机最小的存储单元. 通常用B表示
换算规则:
1 byte = 8 bit
1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 PB = 1024 TB


整数默认`int`类型
浮点数默认`double`类型   123.34
long类型要加L
float类型要加F
double类型可以选择加D, 也可以不加


标识符的组成和注意事项
标识符:         用于给 包, 类, 方法, 变量 等起名字的符号
组成规则:
unicode字符:
数字 (注意不能以数字开头)
大小写英文字母
汉字 (不建议使用)
下划线: _
美元符号: $

标识符的常见命名规则
基本要求: 见名知意, 看到就明白是什么意思   
包名的要求:
什么是包: 文件夹, 用于对类进行分类管理,全部小写, 多级包用点隔开: com.itheima.haha
类名的要求:每个单词的首字母都要大写: Demo, HelloWorld
方法名的要求:第一个单词字母全小写, 从第二个单词开始首字母大写: main(), eat(), eatMeat()
变量名的要求:第一个单词字母全小写, 从第二个单词开始首字母大写: age, yourAge


变量定义时的注意事项
1. 变量未赋值时不能使用
2. 变量只在它声明时所属的范围内有效(所在的大括号)
3. 一行上可以定义多个变量, 但是不建议这样做


类型转换 - 隐式转换
类型转换: 一种数据类型转换为另一种类型
类型转换的种类:
1. 隐式转换(自动转换)
类型按照容量由小到大可以进行类型转换
转换规则: `byte, short, char --> int --> long --> float --> double`
2. 强制转换
不考虑类型的大小关系, 强制进行类型转换, 可能会引发问题
        
类型转换 - 强制转换
强制类型转换的格式: `目标类型 变量名 = (目标类型) (被转换的变量或表达式);`

day02

主要知识点: Eclipse, 运算符, 键盘录入

Eclipse的概述和安装
IDE:  集成开发环境,集成了代码编写, 代码分析, 编译, 调试等功能的开发软件

Eclipse的基本使用
运行环境: 需要JRE
workspace: 工作空间, 存放项目代码的地方
设置工作空间的所在目录:
在开启Eclipse时出现的`Select a workspace`窗口, 点击`Browse`按钮选择目录
设置为默认的工作空间:
`Select a workspace`窗口勾选下方的`Use this as the default and do not ask again`(使用该路径作为默认工作空间并且不再询问)
如果勾选了, 下次打开Eclipse不会再出现选择工作空间的窗口
什么叫切换工作空间??????????????: 也就是设置一个新的目录作为workspace.
注意: 如果切换了工作空间, 那么之前的Eclipse设置也会恢复默认


基本使用:
创建Java项目的2种方式:
1. 菜单栏点击File > New > Project > Java Project
2. 在项目导航区右键 > New > Project > Java Project
        填写项目信息:
       在`Project name`中填写项目名称 > Finish
弹窗: 是否打开Java视图? Yes!
        先创建包:
           右键点击`src` > New > Package
           在Name中填写包名 > Finish
再创建类:
           右键点击包名 > New > Class
           在Name中填写类名 > Finish
保存和编译: 编写完类的代码后, 按`Ctrl + s`保存, 此时Eclipse会自动编译该类, 生成字节码文件
运行: 在要运行的类中, 右键点击代码区的空白处 > Run As > Java Application
查看控制台输出: 此时会出现控制台, 出现打印语句

Eclipse工作空间的基本配置
行号的显示和隐藏: `在代码区的最左边边框上点击右键 > 点击Show Line Numbers`, 打钩则显示, 不打钩则不显示
字体大小和颜色:
        所有代码字体和颜色都改: `Window > Preferences > General > Appearance > Colors And Fonts > Basic > Text Font`
        只改Java代码: `Window > Preferences > General > Appearance > Colors And Fonts > Java > Java Editor Text Font`
        控制台字体和颜色: `Window > Preferences > General > Appearance > Colors And Fonts > Debug > Console Font`
窗体错乱丢失, 如何回复原状????????????: `Window > Perspective > Reset Perspective`
控制台没有了, 重新打开??????????????: `Window > Show View > Console`


Eclipse的辅助键和快捷键
内容辅助键: `Alt + /`
    快速写main方法: 写`main`, 然后按`Alt + /`
        快速写输出语句: 写`syso`, 然后按`Alt + /`
更快速的自动提示设置, 连辅助键都不用按:
        1. `Window > Preferences > Java > Editor > Content Assist`
        2. 找到右侧Auto Activation(自动激活)
           将Auto activation delay(ms)的值设置为: 0 (激活提示的延迟时间)
           将Auto activation trigers for Java的值设置为: .abcde...xyz (激活提示的字符)
        3. 点击Apply
快捷键:
           单行注释的开启和取消: `Ctrl + /`
           多行注释的开启: `Ctrl + Shift + /`
           多行注释的取消: `Ctrl + Shift + \`

1 个回复

倒序浏览
自动格式化代码: `Ctrl + Shift + f`


Eclipse项目的删除和导入
删除项目
    右键点击项目 > Delete > 弹窗询问是否同时从硬盘删除项目? Yes/No`
导入项目
   `项目窗口内, 点击右键 > Import > 窗口中选择General > Existing Projects into Workspace > Next > Select Root Directory选择要导入的项目的根目录 > Finish`
*查看项目的路径:
   `右键点击项目 > Properties > 查看Location`


算术运算符的基本用法
运算符: 用于对常量和变量进行操作的符号
表达式:
    用运算符链接起来的, 符合Java语法的式子.
        不同的运算符链接的表达式是不同类型的表达式

赋值运算符的基本用法和扩展用法
基本赋值运算符:
`=`: 将等号右边的值赋给左边的变量, `int a = 10;`
扩展赋值运算符:
`+=`: 将运算符左边和右边的数据做加法, 然后将结果赋值给左边. `a += 10;` 相当于 `a = (a的类型)(a + 10);` (其他类似)

注意: 扩展赋值运算符隐含了强制类型转换       `a += 10; 相当于 a = (a的类型)(a + 10);`


关系运算符
`==`: 相等
`!=`: 不等
`>`: 大于
`>=`: 大于等于
`<`: 小于
`<=`: 小于等于

关系运算符的结果是: boolean类型的值
(重要)注意区分`==`和`=`, 别写错


逻辑运算符
比较两边的条件
`&`: 与, 并且. 两边同时成立则true, 只要有一边不成立(false), 就为false
`|`: 或, 或者. 两边只要有一边成立则true, 两边都是false则false
`^`: 异或. 两边相同false, 两边不同true     男:true, 女:false, 男女(或女男)才是真爱, 所以是true, 男男或女女都是false
`!`: 非, 取相反的结果, 只和一边有关


逻辑运算符&&和&的区别
`&`: 与. 两边同时为true则为true, 否则为false
`|`: 或. 两边有任意一个true则为true, 否则为false
`&&`: 逻辑与(短路与). 只要左边是false, 则不判断右边, 直接false
`||`: 逻辑或(短路或). 只要左边是true, 则不判断右边, 直接true



三元运算符的基本使用
三元运算符的格式: `(关系表达式)? 表达式1 : 表达式2;`
三元运算符的执行流程:
        1. 先计算关系表达式的布尔值
        2. 如果是true, 则表达式1是结果; 如果是false, 则表达式2是结果


键盘录入的基本步骤和使用

键盘录入数据: `Scanner`类
        1. 导包: `import java.util.Scanner;`  可以先创建Scanner,之后按shift+ctrl+o 快捷导包
        2. 创建Scanner类的对象: `Scanner sc = new Scanner(System.in);`   
        3. 接收键盘输入数据: `int i = sc.nextInt();`
注意:
导包的目的是为了使用需要的类
`sc.nextInt()`方法会阻塞住, 等待有数据输入



* 取余, 取模
两者区别: `x 操作 y`, 当x和y的正负号一样的时候,取余和取模结果是等同的; 当x和y的符号不同时,取余结果的符号和x的一致,而取模和y一致
   Java中`%`只表示取余, 即结果的符号和x一致, 与y的符号无关
   Java中没有直接的取模运算符, 有些书中将取余等同于取模(了解就好)

ay03

主要知识 流程控制语句

顺序结构的基本使用
流程控制语句分类:
        1. 顺序结构
        2. 选择结构
        3. 循环结构

顺序结构的特点: 从上往下依次进行


选择结构


if (关系表达式) {
        语句体;   // 关系表达式为true时执行
}

// 格式2
if (关系表达式) {
        语句体1;   // 关系表达式为true时执行
} else {
        语句体2;   // 关系表达式为false时执行
}

// 格式3
if (关系表达式1) {
        语句体1;   // 关系表达式1为true时执行
} else if (关系表达式2) {
        语句体2;   // 关系表达式2为true时执行
}
...
} else {
        语句体n;   // 以上关系表达式都为false时执行
}

switch语句的格式和执行流程
switch语句的格式
switch(表达式) {
        case 值1:
                语句体1;
                break;
        case 值2:
                语句体2;
                break;
        ...
        case 值n:
                语句体n;
                break;
        default:
                语句体n+1;
                break;
}

循环控制语句
循环语句: 在满足循环条件的情况下, 反复执行某段代码.
循环体: 这段被重复执行的代码
循环的停止: 在合适的时候将循环判断条件修改为false, 从而结束循环. 否则循环将一直执行下去, 形成死循环

3种循环结构语句
        1. for循环
        2. while循环
        3. do...while循环


for循环
格式

for(初始化语句; 判断条件语句; 控制条件语句) {
        循环体语句;
}

(重要)for循环实现打印水仙花数
什么是水仙花数? 一个三位数, 其每一位数字的立方和等于该数本身. 如`153 = 1*1*1 + 5*5*5 + 3*3*3`.



    打印印100-999之间的水仙花数,并打印共有多少个
public class Test {

        public static void main(String[] args) {
                // 定义计数器变量
                int count = 0;
                // for循环获取三位数
                for (int i = 100; i <= 999; i++) {
                        // 获取i的每位数值
                        int ge = i % 10;
                        int shi = i / 10 % 10;
                        int bai = i / 100 % 10;
                        // 判断是否符合水仙花数条件
                        if ((ge*ge*ge + shi*shi*shi + bai*bai*bai) == i) {
                                // 是水仙花数, 打印
                                System.out.println(i);
                                // 计数器自增
                                count++;
                        }
                }
                // 当for循环结束后, 打印计数器的值
                System.out.println("水仙花数共有" + count);
        }
}



while循环格式和基本使用
while循环的格式:
// while普通格式
while(判断条件语句) {
    循环体语句;
}

while扩展版格式
初始化语句;
while(判断条件语句) {
    循环体语句;
    控制条件语句;
}

do...while循环格式及基本使用(用的不多)

语句格式:
do {
    循环体语句;
} while(判断条件语句);

扩展格式:
初始化语句;
do {
    循环体语句;
    控制条件语句;
} while(判断条件语句);

for, while, do...while三种循环的区别

区别
    do...while: 至少执行一次循环体
    for, while: 必须判断条件成立, 才可以执行循环体
for循环的初始化语句的作用域: for的大括号内

控制循环语句
2个控制循环语句:
`break`: 直接结束循环, 或switch语句
`continue`: 结束本次循环, 继续执行下一次

break跳转控制语句的概述和基本使用
break的使用场景: 不能单独使用, 必须用于switch或循环中
break的作用:
    1. 在switch语句中, 用于结束case
    2. 在循环中, 用于结束所在的循环


continue跳转控制语句

continue的使用场景: 循环中
continue的作用: 结束本次循环, 继续下一次的循环
--------------------

(常用)switch语句的case穿透
         如果switch的case语句中没有break, 则会继续执行下一个case的代码, 这称为case穿透
         case穿透有时会导致代码出现问题, 但有时我们也利用case穿透简化代码


if语句不写大括号的格式    当if语句不写大括号时, 只有if语句后的第一条语句算作if语句的语句体, 其余不算

while语句, for语句不写大括号的格式
当语句不写大括号时, 只有语句后的第一条语句算作语句的语句体, 其余不算

day04

主要是 Random   数组


Random类的概述和基本使用
`Random`类: 用于生成随机数的类
使用步骤:
         1. 导包: `import java.util.Random;`
         2. 创建Random类的对象: `Random r = new Random();`  也可以使用shift + ctrl + O
         3. 使用对象调用方法获取随机数: `int number = r.nextInt(10);`
`nextInt(y)`表示产生的数据在0到y之间, 包括0, 但不包括y


数组概述和定义格式
数组:存储**同一种数据类型**的**多个**元素的**容器**
2种定义格式(区别在于中括号的位置不同):
    1. `数据类型[] 数组名;`  
            推荐使用这种格式
             示例: `int[] arr;`
    2. `数据类型 数组名[];`
             示例: `int arr[];`



数组的动态初始化
    动态初始化: 我们给出数组长度, 由系统给出元素的默认值0
    静态初始化: 我们给出初始化值, 由系统给出数组长度


int[] arr = new int[3];

int[] arr = {0, 1, 2};


二维数组的概述和基本使用
二维数组: 二维数组是元素为一维数组的数组
         1. 动态初始化: `数据类型[][] 数组名 = new 数据类型[m][n];`
            `m`: 二维数组中一维数组的个数(二维数组的长度)
            `n`: 一位数组中的元素个数(二维数组中一维数组的长度)
         2. 静态初始化:
            标准格式: `数据类型[][] 数组名 = new 数据类型[][]{{...}, {...}, {...}, ...};`
            简化格式: `数据类型[][] 数组名 = {{...}, {...}, {...}, ...};`


arr = {{1, 2}, {3, 4, 5}};`
访问元素:
格式: `数组名[二维数组的索引][一维数组的索引]`
二维数组的遍历: 嵌套for循环

day05

主讲  方法


方法:完成特定功能的代码块
作用:提高代码复用性和可维护性
定义格式:
修饰符: 目前记住public static
返回值类型: 用于限定返回值的数据类型
方法名: 方法的名字, 便于我们调用
参数类型: 用于限定调用方法时传入数据的类型
参数名: 用于接收调用方法时传入数据的变量
用于告诉方法的调用者, 调用该方法时需要传入何种数据
方法体: 完成我们需要的功能的代码
return语句: 结束方法, 并把返回值传递给调用者

求和方法的调用
调用方法的3种格式
    1. 单独调用: `sum(10, 20);`
    2. 输出调用: `System.out.println(sum(10, 20));`
    3. 赋值调用: `int result = sum(10, 20);`
注意:所有定义的方法都需要被调用才能执行, 包括main()方法, main()方法由虚拟机调用



void: 当方法没有返回值时, 返回值类型写void
注意:  返回值类型为void的方法只能单独调用
           void作为返回值类型的方法, 可以不写return语句; 或使用`return;`结束方法, 但不能使用`return 值;`
为什么main方法中定义了变量a, 在main方法中调用一个方法, 该方法中形参变量名也为a, 却不会冲突?
        因为在栈中开辟了不同的内存空间, 就好比石家庄市的中山路和南京市的中山路, 名字相同, 却不是同一个地方

方法返回值类型为void, 方法内可以使用return吗? 怎么用?
        可以使用`return;`, 作用是结束方法
        但注意, return后不能跟任何值

方法(method, 又称 函数function)
        定义格式: `修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) { 方法体; return 返回值;}`
               
        如何调用方法:
                直接调用: `sum(1, 2);`
                输出调用: `System.out.println(sum(1, 2));`
                赋值调用 : `int n = sum(1, 2);`
        方法的重载
                概念: Overload, 在同一个类中, 多个方法有相同的方法名, 方法参数列表不同
                特点:
                        在同一个类中
                        方法名相同
                        方法的参数列表不同
                                参数的个数不同
                                参数的数据类型不同(包括顺序不同)
                重载与以下几点无关
                        与方法的返回值类型无关
                        和参数的参数名无关
                        和方法体无关
day06

Eclipse断点调试 基础语法练习

Eclipse断点调试的作用和步骤

断点: breakpoint, 标记程序在这里暂停
断点调试的作用:
可以在程序运行中查看程序的执行流程
调试程序, 如查看变量的值
如何加断点: 在行号左边双击
创建/取消断点
        - 单个断点: 双击
        - 多个断点: 在debug视图中的breakpoints窗口中点击`Remove all breakpoints`按钮
执行debug: 右键 - debug as
窗口功能介绍
        开启debug窗口方式
        点击右上角创建窗口按钮
        右键debug as出现
窗口区域
    代码区域: 看程序的执行流程
    Debug区域: 看程序的执行流程
    Variables: 看变量的值
    Console: 看控制台输出
    breakpoints: 查看所有断点

断点调试: 查看循环求和执行流程
断点必须加载有效的语句上
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马