Java
Java简介
JAVA的由来
Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的詹姆斯·高斯林(James Gosling:“地中海行为艺术家”)等人于1990年代初开发,它最初被命名为Oak。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。2009年4月20日,Oracle公司宣布正式以74亿美元的价格收购Sun公司,Java商标从此正式归Oracle所有
• Sun Microsystems 于1995年推出的Java面向对象的程序设计语言
• 1996年发布JDK 1.0
• 1999年发布J2SE、J2EE、J2ME
• 2005年更名Java SE、Java EE、Java ME
• 2009年被Oracle收购
• 2011年由Oracle发布Java 7.0
• 2014年由Oracle发布Java 8.0
JAVA语言特点
- 面对对象
- 简单
- 跨平台
计算机的执行机制
• 编译执行: 直译性语言
• 将源文件编译成机器码,一次编译,多次执行。
• 执行效率高,不可跨平台。
编译的结果直接交给我们的CPU运作执行,效率较高,但是不能跨平台
• 解释执行: 解释性语言
• 将源文件被一行一行解释,一行一行执行。不同的操作系统具备不同的解释器。
• 执行效率低,可以跨平台。
编译结果需要通过解释器解释之后在交给CPU执行,效率较低
Java :先编译,再解释
名词解释
JVM :Java Virtual Machine 虚拟机
注: 使用软件在不同操作系统中,模拟相同的环境
JRE :Java Runtime Environment 运行环境
注:包含JVM和解释器,完整的Java运行环境
JDK :Java Development Kit 开发环境
注:包含JRE + 类库 + 开发工具包(编译器+调试工具)
安装JDK
bin:
binary 二进制目录
都是二进制可以执行文件,包含.exe文件
java.exe
javac.exe
javap.exe
javadoc.exe
db
JDK自带的小型数据库
include
系统接口目录!!!
jre
Java运行环境 Java Runtime Environment
lib
资源库目录,存在一些.jar文件 Jar包
src.zip
源文件代码
Java的完整源代码
作为参考的标准,学习的参照物
环境变量配置
Windows + E 我的电脑
我的电脑空白处 ==> 属性 ==> 高级系统设置 ==> 环境变量 ==>
系统变量修改:
新建:
变量名:JAVA_HOME
变量值:D:\Program Files\Java\jdk1.8.0_211
新建:
变量名:CLASS_PATH
变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
修改:
变量名:path
添加内容:
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
DOS命令
#开启命令提示符
Windows + R 弹出对话框 输入cmd
dir
查看当前工作目录的所有文件和文件夹
cd
切换工作目录
格式 cd 路径
mkdir
创建文件夹
格式 mkdir 文件夹名
rd
删除文件夹
del
#删除普通文件
del
删除普通文件
方向键上下
回顾之前的命令
*
通配符,匹配
cls
清理屏幕
exit
退出终端
Java 第一行代码
class FirstJava {
public static void main(String[] args) {
System.out.println("欢迎来到Java的课堂~~~");
}
}
编译执行
javac 编译工具
javac 源文件名.java
java 执行工具
java 类名
AJCG
- 标识符可以使用的字符范围,英文字母(A ~ Z a ~ z) 数字(0 ~ 9) 唯一可以使用的标点符号 _
- 标识符要求必须英文字母开头
- 标识符严格区分大小写,大写A和小写a完全不一样!
- 标识符没有严格的长度限制,但是会根据实际需求来限制标识符的长度
- 标识符组需要做到见名知意,动宾结构!!!
- 推荐使用驼峰命名法和下划线命名法
小驼峰命名法:【适用于 变量名,方法名】
标识符首字母小写,之后的每一个单词首字母大写
大驼峰命名法:【适用于 类名,接口名】
标识符所有的单词首字母全部大写
下划线命名法:
所有的字母都是大写的情况下,为了区分单词直接的间隔,使用下划线命名法 - 已经被Java使用的关键字和保留字不得用于自定义标识符使用
变色的不能使用,大写开头的不能使用
变量
a. 变量是定义在计算机内存中
1. 明确的数据类型
2. 明确的变量名
3. 明确的对应数据
b. 基本的定义格式
1.
数据类型 变量名;
变量名 = 对应数据类型的值; = 赋值
2.
数据类型 变量名 = 对应数据类型的值;
c. 变量分类
a. 基本数据类型
八大基本数据类型
整数
小数
布尔
字符
b. 引用数据类型
字符串
数组
对象
基本数据类型
整型数据类型
浮点型数据类型
boolean数据类型
char数据类型
定义变量的问题总结
数据类型不兼容问题
VariableTest.java:16: 错误: 不兼容的类型: 从double转换到float可能会有损失
float floatNumber = 3.14;
^
1 个错误
计算机为了保证数据的精度,同时为了数据后期的延展性,会默认把所有的小数都认为是double类型,double占用的内存空间是8字节,而float是4字节,会报错。这里需要告诉计算机3.14是一个float类型,在小数之后加上一个大写F
修改:
float floatNumber = 3.14F;
long类型变量赋值操作要求
【要求】
给予long类型的数据需要在常量之后加上一个大写L,明确告知计算机这里使用的是一个long类型数据
修改:
long longNumber = 40L;
Java中变量未赋值不能使用
未定义不能使用
字符
概念:英文单引号包含的单个元素
转义字符
\ 转义字符标记
将带有特定含义字符转换为无意义字符
或者把无意义字符,转换成带有一定含义字符
常用:
’
"
\n 回车
\t tab键 制表符
转义字符有且只能处理一个字符
\ 表示一个反斜杠
\\ 表示两个反斜杠
类型转换
- 自动类型转换 小数据类型转换到大数据类型
- 强制类型转换 是从大数据类型到小数据类型的转换过程。
运算符
算术运算符
+ - * / % ()
1. 从左至右计算
2. 先乘除后加减
3. 有括号先处理括号里面的内容
4. 除数不能为0
= 赋值号
作用是将赋值号右侧的数据,赋值给左侧的【变量】
算术运算符优化
+=, -=, *=, /=, %=
关系运算符
> < >= <= == !=
关系运算符的结果有且只有 true or false
用于在开发中的条件判断使用
逻辑运算符
&&
与,并且
同真为真,有假【即】假
||
或,或者
有真【即】真,同假为假
!
非,取反
强牛 犟,假变真来,真变假
逻辑运算符:
一般用于组合条件的判断,条件过滤,多情况分析。
断路原则
自增自减运算符
++:
在变量之后,首先执行变量所在行语句,再执行自增1操作
在变量之前,首先执行变量自增1操作,再执行所在行语句
--:
在变量之后,首先执行变量所在行语句,再执行自减1操作
在变量之前,首先执行变量自减1操作,再执行所在行语句
分支结构
if分支结构
if (/* 布尔类型的表达式 true or false */) {
// 语句体
}
// 后续代码
/*
执行流程
首先判断布尔类型的表达式 true还是false
true 执行语句体
false 执行后续代码
*/
if - else分支结构
if (/* 布尔类型的表达式 true or false */) {
// true语句体
} else {
// false语句体
}
/*
执行流程:
首先判断if之后小括号里面的布尔类型数据到底是什么
如果为true,执行true语句体
如果为false,执行false语句体
世界上最遥远的距离是,我在if里,你在else里
*/
if - else if分支结构
if (/* 布尔条件1 */) {
// 处理方式1
} else if (/* 布尔条件2*/) {
// 处理方式2
} else if (/* 布尔条件3 */) {
// 处理方式3
} else {
// 无匹配项处理方式
}
switch - case结构
switch (/* 变量|表达式 */) {
case 值1:
// 处理方式1;
break;
case 值2:
// 处理方式2;
break;
default:
// 最终处理方式
break;
}
条件运算符/三目运算符
格式:
条件判断 ? true处理方式 : false处理方式;
条件运算符/三目运算符
使用局限性较大,类似于if - else结构。
局部变量
存在于代码块中的变量!!!
1. 局部变量有且只能在当前所处的代码块中使用,超出当前代码块范围无效!!!【作用域问题】
2. 在作用域范围以内,任何的地方可以直接使用对应的变量
3. 在一个变量的作用域范围以内,不能重定义同名变量,报错!
4. 局部变量未赋值不能使用
循环结构
while循环
while (/* 循环条件判断 */) {
// 循环体
// (循环条件变更)
}
/*
执行流程:
首先判断while之后小括号里面的内容结果如何
如果为true,执行循环体,回到循环条件判断
如果为false,终止循环!!!
注意事项:
1. 学会循环过程推理,避免死循环
2. 如果出现了死循环,Ctrl + C 终止循环
*/
do - while循环
do {
// 循环体
// (循环条件变更)
} while (/* 循环条件判断 */);
/*
执行流程:
首先do - while循环结构会执行一次循环体,然后再来判断while之后的条件
如果循环条件为true,循环继续运行
如果循环条件为false,终止循环!!!
*/
for循环
for (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件变更 */) {
// 循环体
}
/*
for循环优势
for循环小括号里面的条件可以简要的推出当前循环的执行次数和结束条件,后期使用到数组,算法中非常常见。
*/
break关键字
字面含义:
打破!!!
在switch - case功能中,跳出case选择或者是default选择。
break在循环中使用是用于跳出循环!!!
continue关键字
字面含义:
继续!
功能:
结束本次循环,直接进入下一次循环!!!
使用注意事项:
1. 在while循环和do - while循环使用,需要注意continue关键字和循环条件变更之间的位置关系,防止出现死循环情况!
2. for循环中使用continue关键字没有太多的顾虑。
方法
无参数无返回值方法
/*
需求
展示一个烤羊排~~~,sout
方法分析
public static 固定格式,不要问
返回值类型: void
方法名: bbq
形式参数列表: ()
方法声明:
public static void bbq()
*/
/**
* 打印烤羊排~~~
*/
public static void bbq() {
System.out.println("烤羊排!!!");
}
有参数无返回值方法
/*
什么是参数
当前方法执行所需的外部数据
例如: 登陆时需要的账号和密码,取现金时银行卡和密码
需求
展示一个int类型数据
方法分析:
public static 固定格式,不要问
返回值类型:
void 没有返回值,Sysout不是一个返回值,是一个展示数据的方式,是一种
反馈
方法名:
printIntNumber 见名知意,动宾结构,小驼峰命名法
形式参数列表:
这里需要打印int类型数据
(int num)
方法声明:
public static void printIntNumber(int num);
*/
/**
* 展示一个int类型数据
*
* @param num 要求用户传入一个int类型数据
*/
public static void printIntNumber(int num) {
System.out.println("用户提供的int类型数据为:" + num);
}
无参数有返回值方法
/*
return关键字
1. 结束当前方法的运行
方法运行到return之后,方法运行结束,return之后的代码不再执行。
2. 可以返回到方法之外数据
在return关键字之后的数据,可以返回到方法之外,利用返回值。
什么是返回值:
返回值是当前方法对于方法之外提供的数据和表现。
这里需要对应返回的数据,声明对应的返回值类型。
【注意】
方法中如果需要返回值,必有有一个明确的return
1. 方法需要返回值,没有retrun报错
2. 方法需要返回值,return存在于一个非必须执行代码中,会报错。
方法中返回值类型是void,那么可以使用return作为方法的结束,return之后不能有任何数据。
需求:
give Me Five
需要返回一个int类型数据5
方法分析:
public static 固定格式,不要问
返回值类型:
这里需要返回的数值为5,是一个int类型
int
方法名:
giveMeFive
形式参数列表:
不需要参数
()
方法声明:
public static int giveMeFive()
*/
/**
* 返回一个int类型数据5
*
* @return 返回值为int类型数据5
*/
public static int giveMeFive() {
// return之后的数据会被返回到方法之外
return 5;
}
有参数有返回值方法
/*
需求:
计算两个int类型数据之和,返回结果
方法分析:
public static: 固定格式,不要问
返回值类型:
int完全够用
方法名:
getSumOfTwoNumber √
returnSumOfTwoNumber 见名知意,动宾结构,小驼峰命名法
形式参数列表:
需要两个int类型数据
(int num1, int num2)
方法声明:
public static int getSumOfTwoNumber(int num1, int num2);
*/
/**
* 计算两个int类型数据,并且通过返回值返回
*
* @param num1 int类型数据
* @param num2 int类型数据
* @return 两个int类型数据的之后,返回值类型为int类型
*/
public static int getSumOfTwoNumber(int num1, int num2) {
return num1 + num2;
}
方法的三要素
返回值
方法名
形式参数列表
方法文档注释规范
/**
* 对于当前方法的整体解释,可以把方法的分析过程,利害关系全部写上
*
* @param argumentName参数名字 对于当前参数的功能解释,提一些要求. 有多少个参
* 数就需要完成多少@param
* @return 返回值解释,数据类型,返回值的含义,状态,要求。
*/