1.为什么要搭建java环境
window只能运行.exe程序 不能直接运行java程序
java程序要想运行 需要有着自己的一个环境 所以搭建了java的运行环境
我们作为开发人员 还要开发java程序 需要使用到一些开发工具 所以 要安装JDK
JDK:java开发工具 包含开发工具 还有 JRE
JRE:java运行环境 包含 JVM 和 类库
JVM:java虚拟机 java程序都要在JVM上运行 java实现跨平台 依赖 JVM
2.为什么要配置环境变量
可以在不同目录下 直接使用 java提供的开发工具 比如 javac.exe java.exe
3.编写入门程序步骤
1.编写源代码
2.将源代码编译成class文件
javac java文件名.java
3.运行class文件
java 类名
4.注释
可以对代码进行标注 解释 注释不会运行
// 单行注释
/**/ 多行注释
/** */ 文档注释
5.关键字
java中被赋予特殊含义的单词
public class static void
6.标识符
在java中自己定义名字的地方
规则
1.字母 数字 _ $ 组成
2.数字不能开头
3.不能使用关键字
建议
类名:大驼峰式 每个单词首字母大写 例如 HelloWorld
变量名和方法名:小驼峰式 第一个单词首字母小写 其他单词首字母大写 例如 helloWorld
常量: 每个字母都大写 多个单词 _ 连接 例如 : HELLO_WORLD
7.数据类型
两种
基本类型
整数 小数 字符 布尔
引用类型
类 接口 数组
8.常量
代码中直接给的数值 不能改变的值
整数
10进制 10
2进制 0b1101
8进制 015
16进制 0xD
小数 (不精确的)
10.1
字符
单引号包裹 有且仅有一个字符 'a'
布尔
true false
字符串
"啊啊啊啊啊"
9.转义字符
将一些有特殊含义的字符 转换为普通字符
\
10.字符的存储原理
'a' --- > ASCII --->97 --->二进制存储 编码
二进制 ---->97 ---->ASCII ---->'a' 解码
11.变量
内存中临时存储数据空间
一个变量 只能存储一个数据
并且一种类型的变量 只能存储当前类型的数据
12.变量的定义格式
数据类型 变量名 ; // 定义变量
变量名 = 值; //为变量赋值
数据类型 变量名 = 值; //定义变量并赋值
13.基本类型4类8种
整数
byte 1 -128 127
short 2
int 4 默认
long 8 加L
小数(不精确的)
float 4 加f
double 8 默认
字符
char 2
布尔
boolean 1 true false
14.类型转换
byte<short=char<int < long < float<double
自动类型提升
小萝卜放大坑
大的类型 变量名 = 小类型的数值;
double b = 10;
int a = 'a';
强制类型转换
大萝卜放小坑
小的类型 变量名 = (小的类型)大类型的数值;
int a = (int)10.1;
面试题
byte b = 10;
b = 10 + b; //有问题 需要强制类型转换
b +=10; //没问题
15.运算符
算数运算符
+ 正常加法 可以拼接字符串 直接与字符串相连接 结果为字符串 否则 正常计算
- 正常减法
* 正常乘法
/ 整数整除 取商部分 小数正常计算 0不能做除数
% 整数整除 取余数部分 小数取模没有意义 符合与被除数相同
++ 自增
单独使用
+1即可
复合使用
++后 先使用 再+1
++在前 先+1 在使用
-- 自减
赋值运算符
= += -= *= /= %=
将等号两边 按照运算符进行计算 然后将得到的结果转换为等号左边的类型 最后赋值给等号左边
int a = 10;
a += 20; // a = (int)(a + 20)
比较运算符
结果是布尔值
> >= < <= == !=
逻辑运算符
操作布尔值 结果还是布尔值
&& 短路与 并且 有假则假
|| 短路或 或者 有真则真
! 非 取反 真变假 假变真
^ 相同为假 不同为真
&&和&的区别
都代表并且的意思 两个条件都为真 结果才为真 只要有一个条件为假 结果就为假
但是 && 有短路功能 如果使用&& 判断第一个条件为false 不再判断第二个条件 而是直接得出结果为false
如果是 & 没有短路功能 判断第一个条件为false 还会继续判断第二个条件
三元运算符
条件表达式? 表达式1 : 表达式2 ;
如果满足条件 执行表达式1
如果不满足条件 执行表达式2
注意: 三元表达式一定要返回一个结果 并且这个结果必须被使用
位运算符
12<<3 代表 12 * 2的3次方 M<<N 代表 M * 2的N次方
12>>3 代表12 /2 的3次方 M>>N 代表 M/2的N次方
算数优先级
优先级 最高 ()
16.引用数据类型使用三步
1.导包 找到这个类的过程
import 包名.包名.类名;
2.定义变量并赋值(创建对象)
数据类型 变量名 = new 数据类型();
3.调用方法
变量名.方法名();
17.Scanner
导包
import java.util.Scanner;
创建对象
Scanner sc = new Scanner(System.in);
方法
int nextInt()
double nextDouble();
String next();
18.Random
导包
import java.util.Random;
创建对象
Random r = new Random();
方法
double nextDouble() [0,1)
int nextInt(int max) [0,max)
19.if语句
单条件判断
if(条件){
语句...
}
满足条件 执行语句 不满足则不执行
互斥条件判断
if(条件){
if语句
}else{
else语句
}
满足条件执行 if语句 不满足条件执行 else语句
多条件判断
if(条件1){
语句1
}else if(条件2){
语句2
}else if(条件3){
语句3
}...else{
else语句
}
满足哪个条件就执行 对应条件的语句
如果所有条件都不满足 则执行else语句
if语句的注意事项
1.如果语句只有一句话 可以省略大括号
2.需要注意变量的作用域范围
//3.java在编译时 只检查语法格式是否正确 不检查变量的值是什么
20.switch语句
在几个值中 选择一个值 不能做区间的判断
switch(被判断的值){
case 值1:
语句;
break;
case 值2:
语句;
break;
....
default:
语句;
break;
}
注意事项
1.被判断的值的类型 只能是 byte short int char 枚举(JDK1.5) String(JDK1.7)
2.case只在第一次判断时生效 case穿透 如果不写break代码会一直向下执行 知道遇到break或者{}结束
21.循环
1.初始化表达式
2.布尔表达式
3.步进表达式
4.循环体
for循环格式
for(初始化表达式1;布尔表达式2;步进表达式3){
循环体4;
}
执行流程 124 324 324 324 ....2不满足为止
注意事项
1234均可为空
当1为空时 不是真的不定义初始化表达式 而是将初始化表达式定义在循环外
需要注意变量的作用域范围
当2为空时 相当于值为true的死循环
当3为空时 两种情况 一种是将步进表达式卸载循环体中
第二种 就是不写步进表达式 那么 循环变量一直没有变化 死循环
当4为空时 没有意义
while循环格式
初始化表达式1
while(布尔表达式2){
循环体3;
步进表达式4;
}
执行流程 1234 234 234 ....2不满足为止
do...while循环
初始化表达式1
do{
循环体2;
步进表达式3;
}while(布尔表达式4);
执行流程 1234 234 234 ...4不满足为止
需要注意:dowhile循环无论是否满足条件 都至少执行一次
break:在switch和循环中使用
在switch中使用 跳出switch
在循环中使用 完全跳出循环
continue:在循环中使用 不完全跳出 跳出当前循环 继续下一次循环;
22.idea
常用快捷键
psvm main方法的快捷键
sout 输出语句
数字.fori 循环
ctrl+/ 单行注释
ctrl+shift+/ 多行注释
ctrl+d 复制一行
ctrl+y 删除光标所在行
shift+回车 不改变当前行结构的情况下 将光标移动到下一行开头
ctrl+alt+L 格式化代码
alt+enter 万能修复键
23.数组
数组的特点
1.数组的长度是固定的
2.可以存储任意类型数据 但是同一个数组只能存储同一种类型的多个数据
3.数组有索引 索引从0开始 最大索引 length-1
数组的定义格式
定义变量并赋值
数据类型[] 变量名 = new 数据类型[长度];
数据类型[] 变量名 = new 数据类型[]{元素,元素};
简化
数据类型[] 变量名 = {元素,元素};// 这种写法 不能在重新赋值时使用
数组的访问
长度 变量名.length
元素 变量名[索引]
数组的遍历
for(int i = 0;i<变量名.length;i++){
变量名[i];
}
两个常见的异常
数组索引越界异常
索引不存在时 抛出此异常
空指针异常
使用null值去调用方法 访问属性