一,Java的概述和环境搭建
1.1 什么是程序
程序:解决生活中实际问题的由一系列指令组成的集合,即是软件、APP
程序开发:制作软件
1.2 Java的历史与特点
1995年由SUN公司开发的面向对象的程序设计语言,创始人
高斯林
称作Java之父
Java:JavaME、JavaSE、JavaEE
2004年发布JDK1.5,更名为Java5
2009年被Oracle收购
2014年Oracle发布Java8
特点:
- 面向对象
- 跨平台性:跨操作系统、服务器
- 安全性
- 健壮性
1.3 Java的运行机制
先编译,后运行
.java文件(编译)->.class二进制字节码文件(运行)
JDK:Java Development Kit,Java开发工具
包含:JRE + 类库 + 工具包(编译器、调试工具)
JRE:Java Runtime Enviroment,Java运行环境
包含:JVM + 解释器
JVM:Java Vitrual Machine,Java虚拟机
使用软件在不同的操作系统中,模拟相同的Java运行环境,使Java程序得以运行
1.4 Java的环境搭建
JDK的下载:https://www.oracle.com/java/technologies/javase-downloads.html
卸载:控制面板直接卸载即可
安装:双击即可,不要安装在有中文的路径下,jdk和jre要保持在同一个目录下
环境变量的配置:
- 右键“此电脑”,点击“属性”,点击“高级系统设置”,在“高级”标签下,选择“环境变量”
- 在“系统变量”中,点击“新建”,在“变量名”中输入
JAVA_HOME
,在“变量值”中输入C:\Program Files\Java\jdk1.8.0_152
- 点击“系统变量”中“Path”,点击“编辑”,添加
%JAVA_HOME%\bin
和%JAVA_HOME%\jre\bin
1.5 第一个Java程序
1.5.1 编写代码
1
2
3
4
5 public class HelloWorld{
public static void main(String[] args){
System.out.println("五五开");
}
}Java文件的扩展名是
.java
1.5.2 编译代码
通过
javac
指令对Java文件进行编译,编译后会生成对应的.class
二进制字节码文件步骤:
按下
win + r
,输入cmd
,按下回车,打开命令提示符输入:
1 cd java文件所在的位置切换cmd的执行指令的位置是在当前Java文件所在的位置
输入:
1 javac 文件名.java
1.5.3 运行程序
通过
java
指令对编译后的.class
执行,从而运行程序在上述的cmd中继续输入:
1 java 文件名
1.5.4 注意事项
同一个Java文件可以定义多个类,但是只能有一个类是
public
的,并且该文件的文件名必须与这个被public
修饰的类的类名一致任何一个类在被编译后都会生成一个唯一的
.class
文件一个类中,只能有一个主方法,每个类都可以有自己的主方法
Java代码都是以
;
和}
结尾Java中所有的括号必须成对出现
任何一个程序必须有一个主函数,主函数也叫主方法是程序的入口,主函数必须被定义成如下:
1
2
3 public static void main(String[] args){
}层级之间必须有良好的缩进
1.6 Java的语言规范
1.6.1 注释
注释:对代码进行解释说明的文本
单行注释:// 注释内容
多行注释:/* 注释内容 */
文档注释:/** 注释内容 */,有文档注释的代码,可以通过以下指令生成外部文档API
1 javadoc -d . HelloWorld.java注:注释不参与编译、运行
1.6.2 关键字
概念:在Java中已经预先定义好的具有特殊含义的单词
例如:public、class、static、void
注:main不是关键字
1.6.3 标识符
概念:类、方法、变量的名字都是标识符
规则:
- 可以由数字、字母、下划线、美元符组成
- 数字不能开头
- 不能与关键字重名
规范:
- 变量和方法:首字母小写,多个单词组成时,从第二个单词起每个单词的首字母大写(小驼峰)
- 类和接口:每个单词的首字母大写(大驼峰)
- 常量:所有字母大写,多个单词组成时,单词之间用下划线连接
二,Java的基础语法
2.1 常量
概念:不能变化的数据
分类:
整数常量:所有整数
小数常量:所有小数
字符串常量:所有字符串,
字符串:一串字符,若干个字符组成的有序序列,字符串必须使用一对双引号括起来
字符常量:任何一个字符
例如:’1’、’+’、’a’、’Z’、’是’,由一对单引号括起来的单个字符,不能有空字符
2.2 数据类型
在Java中有严格的数据类型的划分(强类型的语言)
在Java任何一个值,都有所对应的类型
分类:
- 基本数据类型
- 引用数据类型
2.2.1 基本数据类型
整数类型
- byte:字节型,1个字节,范围:
-2^7 ~ 2^7-1 也就是 -128 ~ 127
- short:短整型,2个字节,范围:
-2^15 ~ 2^15-1 也就是-32768 ~ 32767
- int:整型,默认整型,4个字节,范围:
-2^31 ~ 2^31-1
- long:长整型,8个字节,范围:
-2^63 ~ 2^63-1
小数类型(浮点类型)
float:单精度浮点类型,4个字节,
负数范围:
-3.4E38 ~ -1.4E-45
正数范围:1.4E-45 ~ 3.4E38
double:双精度浮点类型,8个字节,默认小数
负数范围:
-1.7E308 ~ -4.9E-324
正数范围:4.9E-324 ~ 1.7E308
字符类型
- char:2个字节,范围:
0 ~ 65535
,它遵循Unicode万国码,字符值必须使用一对单引号括起来,有且只能有一个字符布尔类型
- boolean:1个字节,取值范围:
true/false
,描述成”满足条件”/“不满足条件”
2.2.2 引用数据类型
字符串:Java 程序中的所有字符串字面值(如
"abc"
)都是字符串值,字符串中允许没有字符,称为空字符串,简称空串定义格式:同基本数据类型的定义
1
2
3 String 变量名1 = 值;
String 变量名2;
变量名2 = 值;数组
对象
2.2.3 转义字符
Java中可以通过对特定字符进行转义,来表示其他含义
例如:
1
2
3 public static void main(String[] args){
System.out.println(''');// 这句话编译失败,我们需要对中间的单引号进行转义
}转义符号:
\
常见的转义:
\n
:换行符\t
:制表符(缩进)\'
:单引号\"
:双引号\\
:反斜杠
2.3 变量
2.3.1 变量的概念
计算机内存中的一块存储空间,是存储数据的基本单元
2.3.2 变量的定义
- 先定义,后赋值
格式:
1
2 数据类型 变量名;
变量名 = 值;
- 定义的同时赋值
格式:
1 数据类型 变量名 = 值;
- 同时为多个同类型的变量定义和赋值
格式:
1 数据类型 变量名1,变量名2 = 值,变量名3 = 值,变量名4,...;
注:
- 在同一个代码块中变量名不能重复
- 变量必须先赋值才能使用
- 赋值的类型必须与变量的类型一致
- 赋的值必须在指定类型范围中
- 将小数赋值给float类型的变量时,需要加上
f
或者F
- 一个超过int范围的整数必须加上
l
或者L
2.4 运算符
2.4.1 算术运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 +:求和运算,如果参与运算的数据中有字符串,那么“+”就是拼接,拼接后的结果仍然是字符串
-:求差
*:求乘积
/:求商,整数之间的除法可能存在精度损失
%:取模,求余数
注:
1.a % b,如果a < b,结果就是a
2.a % b,如果a > b,结果是[0,b-1]
3.a % b结果是正负与a一致
++(自增1)、--(自减1):
自增和自减的前置和后置:将++、--运算符写在变量前称为前置;反之,称为后置
1.在单独运算时,前置和后置没有区别
2.在复合运算时,
(1)前置:先执行自增(减),再执行其他操作
(2)后置:先执行其他操作,再执行自增(减)
2.4.2 赋值运算符
1
2
3
4
5
6 =:赋值,将=右边表达式的结果运算完毕后,赋值给=左边的变量
+=:a += b 等价于 a = a + b
-=:a -= b 等价于 a = a - b
*=:a *= b 等价于 a = a * b
/=:a /= b 等价于 a = a / b
%=:a %= b 等价于 a = a % b
2.4.3 逻辑运算符
1
2
3
4 &:与,并且,表达式两边只要出现了false,整个表达式的结果就是false
|:或,或者,表达式两边只要出现了true,整个表达式的结果就是true
!:非,取反,true的取反结果是false,false的取反结果是true
^:异或,表达式两边相同结果是false,两边不同结果是true
1
2 &&:表达式左边为false,表达式右边不再运算,整个表达式的结果是false
||:表达式左边为true,表达式右边不再运算,整个表达式的结果是true注:
- 逻辑运算符参与运算的数据和运算的结果一定是布尔值
- 多个布尔值的逻辑运算仍然遵循上述特点
2.4.4 关系运算符
1
2
3
4
5
6 >
<
>=
<=
==:比较两个值是否相等
!=:比较两个值是否不相等注:
- 关系运算符的结果是布尔值
- 表达式两边的数据类型必须是相同的,或者可以互相转换的
2.4.5 三元运算符
格式:
1 表达式1 ? 表达式2 : 表达式3逻辑:运算表达式1,结果为true执行表达式2;反之,执行表达式3
注:
- 表达式1运算的结果必须是一个布尔值
- 表达式2、表达式3必须执行一个,并且只会执行一个
- 表达式2、表达式3可以是值,也可以是表达式,不能是语句
2.4.6 位运算
1
2
3 &:按位与
|:按位或
^:按位异或将十进制数转换成二进制,按位进行
与、或、异或
的运算,再将最后的结果转换成十进制数转换成的二进制数中的
0视作false,1视作true
,进行逻辑运算,运算完毕后,再转换成0或1
1
2
3 System.out.println(3 & 4);
System.out.println(6 | 5);
System.out.println(4 & 5 | 6 ^ 7);//5左移:将十进制数转换成二进制数,向左移动指定的位数,移动后用0补全,最后转换成十进制数
公式:
a << b 等价于 a乘以2的b次方
2.5 数据类型转换
问:两种不同类型的数据是否可以一起运算?
答:可以
2.5.1 自动类型转换
概念:范围小的数据与范围大的数据运算时,结果会自动转换成范围大的数据类型
自动类型转换的规则:
double > float > long > int > short > byte
注:
1
2
3
4 byte b = 120;// 编译通过,原因是120是常量,程序在执行过程中,不会发生变化
int i = 120;
byte c = i;// 编译失败,原因是i是int类型的变量,程序在执行过程中,i可能发生变化从而超出byte的范围
- 数据类型所占的空间大小(字节)与所能表示的数据范围无关
2.5.2 强制类型转换
概念:范围大的数据赋值给范围小的数据类型的变量
格式:
1 范围小的数据类型 变量名 = (范围小的数据类型)范围大的数据类型的数据;注:
强制类型转换可能出现精度损失、数据错误等问题,所以慎用
1
2
3
4
5
6 float f = 20.886f;
long l = (long)f;
System.out.println(l);// 20
byte bb = (byte)128;
System.out.println(bb);// -128byte和short之间运算的结果是int
如果表达式的运算结果超过了范围,需要对整个表达式的结果进行强制类型转换
1
2
3
4 byte b1 = 3;
byte b2 = 4;
// int b3 = b1 + b2;
short b3 = (short) (b1 + b2);++、–、+=、-=、… 自带强制类型转换
2.5.3 char的类型转换
char类型的数据可以与十进制数遵循ASCII码表进行转换
1
2
3 ‘0’~‘9’:48~57
'A'~'Z':65~90
'a'~'z':97~122
三,Random、Scanner
3.1 Random
概念:Random是系统提供的一个专门用于获取伪随机数的一个类,在这个类中提供了一些获取随机数的方法
使用步骤:
创建对象
1 Random r = new Random();调用方法
1
2
3 double d = r.nextDouble();// 随机产生一个[0.0,1.0)范围内的浮点数
int num1 = r.nextInt();// 随机产生一个int范围内的数
int num2 = r.nextInt(n);// [0,n)注:随机指定范围数据的公式:
[a,b]: nextInt(b-a+1)+a
3.2 Scanner
概念:Scanner是系统提供的一个专门用于接收键盘输入的类
使用步骤:
创建对象
1 Scanner sc = new Scanner(System.in);调用方法
1
2
3
4 sc.nextInt();// 接收键盘输入的整数值
sc.nextDouble();// 接收键盘输入的浮点数
sc.next();// 接收键盘输入的字符串
sc.nextLine();// 接收键盘输入的字符串注:
- next()和nextLine()都用于接收字符串,但是next()不能接收空白字符串
- 必须保证所调用方法能接收输入的数据类型,否则会发生
InputMisMatchException输入不匹配异常
补:
1
2 nextInt(int radix):radix表示进制,
例如:参数是2,也就是nextInt(2),表示键盘所输入的内容,系统会将其视为一个二进制数,转换成十进制数后返回