本帖最后由 小石姐姐 于 2017-11-30 10:40 编辑
Day01
Java语言 创始人:詹姆斯·高斯林
SUN公司拥有
2009年04月20日由Oracle公司收购SUN
期间:JDK 1.2:Java分为J2SE, J2EE, J2ME
JDK 1.5:Java又改变分为JavaSE, JavaEE, JavaME
现在我们经常使用的是JavaSE 7.0版本
JVM:Java虚拟机
JRE:Java运行环境
JRE=JVM+Java核心类库 它是运行Java程序的最小环境
JDK:Java开发工具包
JDk=JRE+Java开发工具
常用dos命令
打开控制台:win + R,然后cmd回车
切换盘符: 盘:
列出当前目录下的文件和目录: dir
查看指定目录下的文件和目录: dir 目录名
切换目录: cd 目录名
清空屏幕: cls
注释
单行注释: //注释内容
多行注释: /*注释内容 */
文档注释: /** 文档注释内容 */
关键字
关键字:被Java赋予特殊用途的单词
常量
常量:整数常量,小数常量,字符串常量,字符常量,布尔常量,空常量
变量
变量:变量是内存中的一块区域, 保存着一个值.
定义格式:数据类型 变量名 = 初始化值;
数据类型
数据类型:基本数据类型+引用数据类型
基本数据类型(4类8种):整数(byte,short,int,long),浮点数(float,double),字符(char),布尔(boolean)
引用数据类型:数组,类,接口
标识符
标识符: 给包, 类, 方法, 变量起名
类型转换
类型转换:隐式转换+强制转换
隐式转换:从数据类型的小到大进行转换
byte, short, char -> int -> long -> float -> double
强制转换: 手动强制转换类型
格式: 目标类型 变量名 = (目标类型)(被转换的数据);
Day02
运算符
算术运算符
+: 加
-: 减
*: 乘
/: 除
%: 取余
++: 自增
--: 自减
i++和++i的区别:
单独使用时, 结果一样
参与运算时
i++: 先使用i的值作为i++表达式的值, 然后i自增
++i: i先自增, 然后使用自增后的值作为++i表达式的值
字符参与加法运算
在参与运算时, 以字符本身的值进行运算, 结果为数字
直接打印字符时, 输出的仍然是字符
字符串参与加法运算: 拼接字符串
赋值运算符
=: 赋值
+=: 拿左边和右边的值相加, 然后赋值给左边
-=: 拿左边和右边的值相减, 然后赋值给左边
*=: 拿左边和右边的值相乘, 然后赋值给左边
/=: 拿左边和右边的值相除, 然后赋值给左边
%=: 拿左边和右边的值取余, 然后赋值给左边
扩展的赋值运算符隐含了强制类型转换
关系运算符
==: 相等
!=: 不等
>: 大于
>=: 大于等于
<: 小于
<=: 小于等于
关系运算符的结果是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();
Day03
流程控制语句
顺序结构
选择结构
if语句:else语句可以省略
switch语句
switch表达式允许的数据类型:
byte, short, char, int
都是可隐式转换为int的类型
JDK5起可以是枚举类型
JDK7起可以是String
小括号中可以是常量, 也可以是变量
case后面的值:
用来和表达式的值进行匹配
值只能是常量
值的类型应该和switch小括号中值的类型一致
break: 中断
default: 当所有case都不匹配时, 执行default
if语句适用于有范围的场景, 或者具体值的场景
switch语句适用于具体值场景, 不适用于范围的场景
循环结构
for循环
适用于知道循环次数的场景
while循环
适用于不知道循环次数的场景
至少执行0次循环体
do...while循环
适用于不知道循环次数的场景
至少执行1次循环体
循环控制语句
break
适用场景: switch语句, 循环
作用: 结束switch语句或所在循环
continue
适用场景: 循环
作用: 结束本次循环, 继续下次循环
Random类
作用: 生成一个随机数
步骤:
导包: import java.util.Random;
创建对象: Random r = new Random();
生成随机数: int n = r.nextInt(10);, 获取0到9的随机数(0到10, 包含0不包含10)
Day04
数组
一维数组
数组概念: 存储同一种数据类型的多个元素的容器
定义:
数据类型[] 数组名;, 推荐
数据类型 数组名[];
初始化
动态初始化: 我们给定数组长度, 由系统给定元素的初始值
格式: 数据类型[] 数组名 = 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变量
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方法中的另一个单独变量, 形参通过引用修改的是堆内存中的数据, 而实际参数也是指向该堆内存中的数据, 所以形参修改后, 实际参数获取的值也会改变
Day06
断点:
breakpoint, 标记程序在这里暂停
断点调试的作用:
可以在程序运行中查看程序的执行流程
调试程序, 如查看变量的值
如何加断点:
在行号左边双击
创建/取消断点
单个断点: 双击
多个断点: 在debug视图中的breakpoints窗口中点击Remove all breakpoints按钮 |
|