本帖最后由 小石姐姐 于 2017-12-7 15:03 编辑
Java基础介绍
Java语言的公司
创始人: 詹姆斯高斯林
后由SUN公司维护
2009年04月20日, Oracle(甲骨文)收购SUN, 现在Java属于甲骨文公司
Java版本:
JDK 1.0
JDK 1.1
JDK 1.2(将Java分成了J2SE, J2EE, J2ME)
J2SE 1.3
J2SE 1.4
JDK 1.5(改名为JavaSE, JavaEE, JavaME)
JavaSE 6.0
JavaSE 7.0
JavaSE 8.0o JavaSE 9.0 (2017-9-21)
Java语言平台版本:
JavaSE: Standard Edition标准版本. 开发桌面软件
JavaME: Micro Edition嵌入式版本. 开发机顶盒, 手机等嵌入式设备的程序
JavaEE: Enterprise Edition企业版本. 开发服务器程序
Java包括JVM, JRE, JDK
Eclipse的概述和安装
IDE: Integrated Development Environment, 集成开发环境
集成了代码编写, 代码分析, 编译, 调试等功能的开发软件
下载和安装:
官网下载: https://eclipse.org/ide/
安装: 压缩包解压
常见启动错误:
A java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations:...
运行Eclipse需要依靠JRE或JDK, 需要将JDK的bin目录配置到Path环境变量中
Failed to load the JNI shared library "...".
JDK和Eclipse安装的版本不一致, 要么都安装32位, 要么都64位
JDK和Eclipse安装的版本不一致, 要么都安装32位, 要么都64位
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
查看控制台输出: 此时会出现控制台, 出现打印语句
算术运算符的基本用法
运算符:
用于对常量和变量进行操作的符号• 表达式:
用运算符链接起来的, 符合Java语法的式子.
不同的运算符链接的表达式是不同类型的表达式
5种运算符:
1. 算数运算符
+: 加
-: 减
*: 乘
/: 除 (整数相除结果是整数, 有浮点数参与运算, 结果才为浮点数) 除法: 4 / 3 商1 余1
%: 取余
++: 自增1
--: 自减1
2. 赋值运算符
3. 关系运算符
4. 逻辑运算符
5. 三元运算符
顺序结构的基本使用
• 流程控制语句分类:
1. 顺序结构
2. 选择结构
3. 循环结构
顺序结构
顺序结构是最基本的流程
顺序结构的特点: 从上往下依次进行
选择结构
if语句
if语句的基本使用
选择结构:
也被称为分支结构
选择结构有2种:
1. if语句
2. switch语句
循环控制语句
循环语句: 在满足循环条件的情况下, 反复执行某段代码.
循环体: 这段被重复执行的代码
循环的停止: 在合适的时候将循环判断条件修改为false, 从而结束循环. 否则循环将一直执行下去, 形成死循环
循环语句的组成
初始化语句: 一条语句(一条语句可以初始化多个变量), 这些语句完成一些初始化操作
判断条件语句: boolean表达式, 这个表达式能决定是否执行循环体
循环体语句: 要重复做的事情
控制条件语句: 控制循环结束
3种循环结构语句
1. for循环
2. while循环
do...w Random类
作用: 生成一个随机数
步骤:
导包: import java.util.Random;
创建对象: Random r = new Random();
生成随机数: int n = r.nextInt(10);, 获取0到9的随机数(0到10, 包含0不包含10)
数组
o 一维数组
数组概念: 存储同一种数据类型的多个元素的容器
定义:
数据类型[] 数组名;, 推荐
数据类型 数组名[];
初始化
动态初始化: 我们给定数组长度, 由系统给定元素的初始值
格式: 数据类型[] 数组名 = 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循环实现
o 二维数组
什么是二维数组: 元素为一维数组的数组
定义
数据类型[][] 数组名;, 推荐
数据类型[] 数组名[];
数据类型 数组名[][];
初始化
动态初始化
格式: 数据类型[][] 数组名 = 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循环
o 数组操作常见的2个异常:
ArrayIndexOutOfBoundsException: 数组索引越界异常
发生原因: 使用了不存在的索引
如何避免: 检查索引, 防止越界
NullPointerException: 空指针异常
发生原因: 引用类型的变量保存的值为null, 然后访问了数组元素或是调用了方法或属性
如何避免: if (引用类型变量 != null) {操作}
o 数组获取最值(熟练代码书写)
o 两个数组变量指向同一个数组的操作(会画图, 会分析)
• Java内存
o 内存分区
栈: 存放局部变量
垃圾会立即回收
堆: 存放new出来的对象
垃圾要在垃圾回收器空闲时回收
方法区
本地方法区
寄存器
o 数组的内存分配
int[] arr: 在栈中开辟内存空间
new int[3];: 在堆中开辟内存空间, 并初始化元素的默认值
=: 将堆内存中数组的地址值赋值给arr变量
3. hile循环
• 方法(method, 函数function)
0. 定义格式: 修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) { 方法体; return 返回值;}
修饰符: 目前记住public static
返回值类型: 限定返回值的数据类型
方法名: 方法的名字, 便于调用
参数类型: 限定参数的数据类型以及调用方法时传入的数据类型
参数名(形式参数=形参): 用于接收调用方法时传入的数据
方法体: 完成该方法的功能
return语句: 结束方法, 并把返回值传递给方法的调用者
1. 如何调用方法:
直接调用: sum(1, 2);
输出调用: System.out.println(sum(1, 2));
赋值调用 : int n = sum(1, 2);
2. 方法的重载
概念: Overload, 在同一个类中, 多个方法有相同的方法名, 方法参数列表不同
特点:
在同一个类中
方法名相同
方法的参数列表不同
参数的个数不同
参数的数据类型不同(包括顺序不同)
重载与以下几点无关
与方法的返回值类型无关
和参数的参数名无关
和方法体无关
3. 方法的形参类型
方法形参是基本数据类型
结论: 形参的值的改变不会影响实际参数
为什么? 形参是定义在调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 两者内存区域不同, 所以互不影响
方法形参是引用数据类型
结论:
如果形参是修改自身保存的引用, 不会影响实际参数
原因: 因为形参是调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 形参改变其保存的引用指向, 并不影响实际参数的引用指向
如果形参是通过引用修改堆内存中保存的数据, 会影响实际参数获取的值
原因: 因为形参是调用方法中的一个单独变量, 实际参数是定义在main方法中的另一个单独变量, 形参通过引用修改的是堆内存中的数据, 而实际参数也是指向该堆内存中的数据, 所以形参修改后, 实际参数获取的值也会改变
|
|