1、java语言的背景
语言:人们互相沟通交流的表达方式。(自然界有属于各自沟通交流的方式)
计算机语言:人和计算机之间进行信息交流沟通的语言(人们想要表达的意志使得计算机能识别)。
java就是计算机语言当中的一种,它是美国sun公司在1995年推出的计算机语言。詹姆斯·高斯林被誉为java之父
Java 开发工具
Eclipse MyEclipse Idea
java语言跨平台原理
平台:操作系统
PC:电脑
移动:手机、平板智能设备
跨平台:Java能够再其他操作系统上运行
Java语言为什么能跨平台
java不运行在操作系统上而是虚拟机(JVM
JVM本身不跨平台
jdk包含jre jdk是开发环境 jre是运行环境
jdk:
包含jre 开发工具
jre:jvm和核心类库
配置环境变量
在dos命令行:
jdk安装目录下的bin指令
按环境变量后可在任何目录运行否则需要进入相关目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VchTxUVm-1658133424657)(…/老师笔记/day01/img/9.png)]
java程序开发流程:
1.编写源代码:
.java后缀名
规范:类名第一个字母大写
2.编译源代码:
把源代码编译成字节码文件 字节码文件后缀名.class
使用javac编译
3.运行代码:运行字节码文件
java字节码文件名
不要加class
常见错误
1.文件名与类名不符合
2.使用中文符号
3.String System 等小写
4.分号 括号漏写
控制台中文乱码:记事本默认UTF -8 dos默认GBK
解决方法:改记事本为ANSI
输出
System.out.println() //在控制台输出 输出后换行 小括号可以没有内容 System.out.print() //不换行 一定要参数
转义符
”\“转义符开始符号
\n:换行符
\t:制表符 tab键
想输出‘\’须写成‘\\’
注释
养成学注释的习惯
给人看的
注释的位置
1.类名
2.方法名
3.复杂的逻辑代码
Java的注释
//单行注释
/* */多行注释
/**
*/ javaDoC注释:文本注释,多行 在类名,方法上 使用
变量
内存中的存储是临时存储
本质:一个小空间
变量要素:
1.变量名:方便取数据 类似门牌号
要求: 1)数字 字母 下划线 不能以数字开头`
2)不能使用关键字 public… class static void
3)变量名第一个字母小写 遵循小驼峰 第一个单词首字母小写 剩下的大写
4)见名知意,推荐使用英文单词
2.数据类型 :注意开辟空间大小
-
基本数据类型[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tUG9xvw8-1658133424659)(…/老师笔记/7-7笔记/assets/image-20220707104410094.png)]
数值类型:整数、浮点数、
字符类型:
布尔类型:
-
引用数据类型
- String
- 变量的值
- 整数 默认的数据类型: int 1 小数: 默认的数据类型: double 1.5
- char类型值: 只能是单字符, 值必须使用单引号引起 ‘a’ ‘中’ ‘1’ ‘ab’ 错误
- boolean类型值: 只有两个: true,false
- String类型: 不能基本数据类型, 值必须使用双引号引起, 可以是n个字符组成, “a”, “abcd”,“”,“阿达的撒大大”
变量使用方法
1.声明变量(开辟空间 数据类型 变量名
2.给变量名 变量名=值;有方向的赋值符号
3.使用,取值
整型赋值注意事项
byte short int long
如果变量是byte:复制的数组是-128—127之间可以直接复制
但如果超出该范围则会报错
如果整型类型赋值,数字超出类型的范围则会报错
浮点型
float : 单精度浮点数
double:双精度浮点数
小数默认类型是double类型,double优先级比float高
高类型不能转低类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-maJfKZqm-1658133424661)(…/老师笔记/day01/img/46.png)]
数据类型转换:
1)由低到高 Java自动转换
2)由高转到低 需要强制转换
简写:float num =1.2f
Scanner 输入
使用步骤
1.在类上导入Scanner类 位于java.util包 import.Java.util.Scanner
String/System位于Java.lang包 程序自动加载不需要导包
2.创建scanner
scanner input = new Scanner(System.in);
3.调用next相关的方法进行输入
nextInt()输入整型
nextDouble()
nextBoolean()
nextFloat()
但是:不能输入char 没有nextChar()
next()输入字符串 nextLine()输入字符串
细节:
输入字符串的next()和nextLine()
next()输入有效字符串 不包含空格 tab 回车 遇到这些结束输入但是这些内容存在到缓存中
nextLine()可以包含空格,但是前面有其他next方法则不起作用,无法输入
解决方案:1.nextLine()放在所有next()方法前
2.清除next缓存
运算符
1.运算符
2.赋值运算符
3.比较运算符
4.逻辑运算符
5.++,–运算符
6.位运算: & (与) |(或) ^(异或)
算术运算符
+: 1) 数值类型+加法
2)字符串与任意类型+ 表示拼接 字符串加任何东西都会变成字符串
/:1)整数/整数 *两个整数会取整 有小数会保留
%:取余 5%2=1
- 判断是否整除
- 得到某位的值
自加自减
++:+1 语法 变量++ ++变量
前加加 :++变量 先变量加1后运算
后加加:变量++ 先运算后加1
–:减1 语法 变量-- --变量
前减减:–变量
后减减:变量–
赋值运算符
- = 变量=值 变量=变量1
- -= a=a-b
- += a=a+b
- /= a=a/b
- %= a=a%b
赋值符号与算数符号 涉及隐式转换
低数据类型与高数据类型运算 结果会是高的
int a = 10;
byte b= 1;
b+=a 隐式转换成byte
比较运算符
-
== 等于
-
!=不等于
-
> 大于
-
< 小于
-
>= <=
都是boolen类型
逻辑运算符
-
&& 短路与 前一个为flase 则后面不执行
-
|| 短路非 前一个为true 则后面不执行
-
!非
-
&与
都是boolen类型 连接多个表达式
三目运算符
语法:条件(boolea的表达式)?值1:值2
如果条件为true:返回值1
flase 则返回值2
对if-else某些场景简化 而且可以嵌套 超过三层不建议
位运算( 二进制)
& :按位与 只要有0就是0
| :按位或 只要全0才是0
! :按位非 1取反->0 0-取反->1
^ : 异或 相同为0不同为1
位移操作
>>左移
<<右移
一个数异或同一个数两次 则是自己
分支语句
1.if 条件语句
if(){
}else if(){
}else{
}
2.switch 条件语句 等值判断
switch()
case 1:
…
break;
case 2:
…
break;
default:
…
break;
break可以省略也可以不省略
类型:基本数据类型 String 枚举
default一般写在最后面 如果写在前面一定要加break;
无论default在switch语句中的哪个位置,编译器都是先找case,程序从第1个找到的case开始判断执行,只有所有的case都不满足条件,才会执行default,(这一点说明编译器作者想的很多,兼容性很强),所以default的位置可以随便放,但是出于编码规范的考虑,一般写在最后
循环
使用循环的步骤
- 判断是否需要用循环
- 看问题中是否有重复的事情
- 找循环条件
- 找循环要做的事情
1.for 循环
for(表达式1;表达式2;表达式3){
循环要做的事情
}
表达式1:初始化循环变量,给循环变量赋值,只执行一次
表达式2:循环条件表达式,boolean类型结果,如果true:表示继续循环
每循环执行一次
表达式3:修改循环变量
难点:把循环条件,循环要做的事情转换成代码
细节:
-
表达式1可以省略 将表达式1写在for循环外面 提升循环变量的作用域
-
表达式2可以省略 默认为true 出现死循环 可以用break关键字退出循环
-
表达式3也可以省略 但也有可能出现死循环 也可以在循环体写表达式三
-
三个表达式都省略 但两个分号不能省略 for(;😉{死循环
//在循环体中使用break退出循环
}
2.while 循环
while(条件语句){
循环体
}
for/while :先判断后循环,可能一次都不执行
3.do-while 循环
do{}while()
先执行后循环
循环关键字
break : 在switch使用 退出Switch
在循环里使用退出循环
continue:跳过本次循环,直接进入下一次循环
循环嵌套
for(){//外循环
for(){//内循环
}
}
外循环循环一次内循环循环一轮
数组
变量:只能存储一个值
数组:存储的一组相同数据类型
缺点:固定长度
也成为容器
数组要素:
-
数组名
-
数据类型
-
元素
-
下标:获取指定位置的元素:从0开始 0是第一位
-
数组长度:表示数组最大允许存多少个元素
- ==0<下标<数组长度
使用数组:
1.声明数组 :(没有开辟空间)
>语法 :
>
> 数据类型[] 数组名;
>
> 数据类型 数组名[];
>
>
2.开辟空间,指定数组的长度 通过new关键字
初始值由数据类型决定
int / byte /long :0
double / float :0.0
char :\u0000
boolearn: false
String / 类 : null
3.通过下标放元素
如果下标超出最大下标:抛出数组越界异常
如果没开辟空间则使用数组会编译不通过
在实际开发中使用循环遍历数组
动态获取数组长度,
数组属性:length
int[] arr4 = new int[]{1,2,3}//数组静态创建
int[] arr5 = {1,2,3}
栈区:方法执行时,方法入栈,存放临时变量,当方法执行完成后,出栈回收
堆区:new 出来的东西都在堆区,Java提供GC(垃圾回收器)机制
垃圾回收器
二维数组
有多个一维数组组成
声明一个二维数组
数据类型[][] [][] [][] 数组名
数组名 = new 数据类型[长度1][长度2]
长度1:一维数组的长度
长度2:一维数组元素个数
赋值 数组名[i][j] = 值
使用同理
数组名.length :二维数组的一维数组的个数
开辟空间,指定数组的长度 通过new关键字
初始值由数据类型决定
int / byte /long :0
double / float :0.0
char :\u0000
boolearn: false
String / 类 : null
3.通过下标放元素
如果下标超出最大下标:抛出数组越界异常
如果没开辟空间则使用数组会编译不通过
在实际开发中使用循环遍历数组
动态获取数组长度,
数组属性:length
int[] arr4 = new int[]{1,2,3}//数组静态创建
int[] arr5 = {1,2,3}
栈区:方法执行时,方法入栈,存放临时变量,当方法执行完成后,出栈回收
堆区:new 出来的东西都在堆区,Java提供GC(垃圾回收器)机制
垃圾回收器
二维数组
有多个一维数组组成
声明一个二维数组
数据类型[][] [][] [][] 数组名
数组名 = new 数据类型[长度1][长度2]
长度1:一维数组的长度
长度2:一维数组元素个数
赋值 数组名[i][j] = 值
使用同理
数组名.length :二维数组的一维数组的个数
数组名[i].length:二维数组里第i位置的一维数组元素个数