Java语言的跨平台
就是指通过Java语言来写的程序是可以在任何平台(操作系统)上运行。
如何实现跨平台
-
Java语言跨平台依赖于Java虚拟机
-
Java虚拟机本身不是跨平台的,只不过是针对不同的平台版本,有不同的虚拟机
DOS操作
(1)如何打开DOS窗口:
-
正常打开:Window + R 输入cmd
-
以管理员身份打开DOS窗口:Windows + X ctrl + A
-
文件夹内打开DOS窗口:Shift + 鼠标右键 点击“在此处打开powershell窗口”
(2)常见的DOS命令有哪些:
注意:标点符号为英文符号
| 命令 | 说明 |
|---|---|
| dir + 回车 | 展示当前文件夹中所有的子文件和子文件夹的一些信息 |
| cd.. + 回车 | 退回到上一级目录 |
| cd/ 或cd\ | 退回到根目录(盘符) |
| 盘符名称: | 切换到指定盘符 eg: c: |
| cd + 指定目录 | 切换到指定目录如果跨盘符的话需要先切换到指定盘符再切换至指定目录 |
| cls + 回车 | 清屏 |
| exit + 回车 | 退出dos窗口 |
JDK、JRE和JVM
(1) 什么是JDK? Java语言开发环境,里面包含JRE和开发工具包(一些文件夹和应用程序)
(2) 什么是JRE? Java语言的运行环境,里面包含JVM和核心类库
(3) 什么是JVM? Java虚拟机
JDK安装
-
下载JDK8安装包 x64版本
-
傻瓜式安装
-
安装目录:不要安装到有中文和有空格的文件夹下,否则有些功能会失效的
JDK环境搭建:dos窗口里可以在任何目录下运行javac和java
最后:一路确定到最后
Helloword小程序
-
创建文本文档,更改后缀名为.java eg:helloword.java
-
文本文档中书写
class HelloWord {
public statc void main(String[] arg){
System.out.printfln(“hello word”);
}
}
-
编译工具 javac.exe
- 命令:javac 文件名.java
- 结果:生成新文件---文件名.class
- eg: javac helloword.java 生成helloword.class文件
-
运行工具 java.exe
- 命令:java 文件名
注意:helloword.java文件是源文件,helloword.class文件是字节码文件
进制
(1)计算机中使用的是二进制
(2)在Java中进制的分类:十进制、二进制(0b开头)、八进制(0开头)、十六进制(0x开头)
(3)计算机中进行存储和运算的最小单位是字节(byte)—— 1byte = 8bit(比特)
键盘录入:
第一步:导包
import java.util.Scanner;
第二步:创建对象
Scanner sc = new Scanner(System.in);
第三步:调用方法
int a = sc.nextInt();
eg:
import java.util.Scanner;
public class demo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.println(i);
}
}
基本语法
注释:
(1)什么是注释:用来解释说明的,给程序员看的
(2)注释的分类:
- 单行注释: //
- 多行注释: /* */
- 文档注释: /** */
- 注释的作用:用来解释说明,提高了代码的阅读性。可以帮助我们查找错误。
- 注释的注意事项:单行注释可以嵌套,多行注释不可以嵌套
关键字
(1)什么是关键字:Java给我们提供好的一些单词,这些单词在java中具有特殊的意义。这些单词就称为关键字。
(2)关键字的注意事项:
-
关键字都是小写的
-
main不是关键字
标识符
(1)什么是标识符:我们自己起的名字就是标识符
(2)标识符的组成规则:由26个大小写字母、下划线和美元$符以及数字组成的。
(3)标识符的注意事项:
-
数字不能开头
-
关键字不能作为标识符
常量
(1)什么是常量:永恒不变的量,就是常量
(2)常量的分类:
- 字面值常量:
- 整数常量
- ii.小数常量
- iii.字符常量:字符常量是必须用单引号括起来的,引号里面有且只能有一个字
- iv.字符串常量:字符串常量必须是用双引号括起来的,引号里可以有零个或多个字
- v.布尔常量:只有两个值——true/false
- vi.空常量:只有一个值——null
- 整数常量
- 自定义常量(后面学)
变量:
(1)什么是变量:在一定范围内,可以发生变化的量
(2)变量的定义格式:
-
格式一:数据类型 变量名 = 数据;—— int a = 12;
-
格式二:数据类型 变量名; 变量名 = 数据;
数据类型:
(1)Java中数据类型的分类有些:2大类4小类8小种
(2)基本数据类型:4类8种
-
整形
- i. Byte 1个字节 -128 ~ 127
- ii. short 2个字节 -32768 ~ 32767
- iii. int 4个字节
- iv. long 8个字节
-
浮点型
- i. Float 4个字节
- ii. Double 8个字节
-
字符型:char 2个字节 0 ~ 65535
-
布尔型:boolean 1个字节 true,false
注意:当给float类型变量赋值的时候,建议后面加上f或F。当给long类型变量赋值的时候,建议后面加上l或L。
当我们想要使用某个变量的手,一定要先赋值,再使用,要不然会报错。
当我们想要给某个变量赋值的时候,一定要考虑该变量的范围,要不然会报错。
在同一个花括号内不能兴义同名变量。
(3)引用数据类型(以后学)
数据类型的转换
(1)隐式类型转换:就是指小的数据类型会自动提升为大的数据类型。
当多个数据类型参与运算的时候,晓得数据类型会自动提升为大的数据类型。
注意:boolean类型不能和其他的数据类型相互转换。
(2)强制类型转换:是指大的数据类型被强制转换成小的数据类型。
强制类型转换的格式:小的数据类型 小的数据类型的变量名 = (小的数据类型)大的数据类型的变量名;
eg: int i= 130; byte b = (byte)i;
注意:尽量不要使用强制转换,会导致数据失真。
ASCII码
运算符
算术运算符:+ - * / % ++ --
+:加号
- 加减乘除的加
- 正负的正
- 连接符:任意类型的数据与字符串相连接的时候,那个+号就是连接符
/:整数除以整数等到的还是整数
eg:int i = 5;
int j = 2;
double z = 2;
int a = i / j;
double b = i / j;
double c = i / z;
System.out.println(a); // 2
System.out.println(b);// 2.0
System.out.println(c);//2.5
%:模 取余
++:自增/ --:自减
a) 单独使用:不管++/--是在前还是在后,结果都是一样
b) 参与运算:
- i) ++在前:先自加,在运算
- ii) ++在后:先运算,在自加
eg: byte b = 1;
b = b + 1;
System.out.println(b);//编译报错
byte b1 = 1;
b1++;// b1 = (byte)(b1 + 1);
System.out.println(b1);//正确,因为++里面自带强制类型转换
赋值运算符
= += -= *= /= %= 都自带了强制类型转换
关系运算符
[>] < >= <= != ==
- ==
- 如果两边是基本数据类型数据,比较的是数值的大小
- 如果两边是引用数据类型数据,比较的就是地址值
- 关系运算符得出来的结果一定是boolean类型的数据,即true/false
逻辑运算符:
& | ^ ! && || (左右两边的数据的数据类型都是boolean类型)
- &:两边只要有一个是false,结果就是false
- |:两边只要有一个是true,结果就是true
- ^:两边相同为false,两边不同为true
- &&:两边只要有一个是false,结果就是false
- ||:两边只要有一个是true,结果就是true
&和&&的区别:
&&:如果左边为false,右边就不再执行了,结果就位false
&:如果左边为false,右边依然会执行,结果就为false
|和||的区别:
||:如果左边为true,右边就不再执行了,结果就为true
|:如果左边为true,右边依然会执行,结果就为true
建议使用&&和||,会提高效率
位运算符
& | ^ ~ >> << >>> (两边都是数字,结果也是数字)
- &(与位运算):
System.out.println( 3 & 2); // 2
- |(或位运算):
- ^(异或位运算):
eg:int i = 1;int j = 2; 通过某些方式,实现i 和 j 变量的数据的调换?
方式1:定义第三方变量
int temp = i; i = j; j = temp;
方式2:i = i ^ j; j = i ^ j; i = i ^ j
- ~(按位取反):符号位也会取反
System.out.println(~3); //-4
- [>>](右移位运算): A >> N à A / 2^N
System.out.println( 3 >> 2); // 0
System.out.println(-3 >> 2); // -1
- <<(左移位运算): A << N à A * 2^N
System.out.println(3 << 2); //12
- [>>>](无符号右移):
注意:[>>]和[>>>]区别是什么?
- [>>]:如果数据是负数,最左边的符号位是1,右移之后,左边要补1
如果数据是正数,最左边的符号位是0,右移之后,左边要补0- [>>>]:不管数据是正数,还是负数,右移之后,左边都补0
三元运算符 [? :]
格式: 条件表达式 ? 表达式1 : 表达式2;
条件表达式的结果一定是boolean类型
执行流程:条件表达式 – true ,执行表达式1
条件表达式 – false , 执行表达式2
注意:1)表达式1和表达式2都必须是一个结果,不能是输出语句
3 > 2 ? System.out.println(“在吗”) :System.out.println(“约吗”) // 格式错误
2)可以强制类型转换
double d = 3 > 2 ? 1 : 2; // d = 1.0
int c = 3 > 2 ? ‘a’ : ’b’; // c = 97
选择语句:
if语句
格式一:
if(条件语句){
语句体;
}
条件表达式最终的结果只能是boolean类型,要么是true,要么是false
执行流程:如果流程执行到if语句的时候,会去看条件表达式的结果是true,还是false
如果是true,就会进入到if中,执行里面的语句
如果是false,就不会进入到if中,就不会执行里面的语句体内容
(1)由一对花括号括起来的东西,称为代码块
(2)在程序中,分号可以随意写
(3)当if语句中的语句体内容只有一句有效语句的时候,花括号是可以省略不写的
eg:
boolean b = true;
if(b = false){ // false赋值给b,b的值是false
System.out.println(“约吗”);
}
System.out.println(“在吗”);
boolean c = true;
if(c);{
System.out.println(“约吗”);
}
System.out.println(“在吗”);
格式二:
if(条件语句){
语句体;
}else{
语句体
}
条件表达式最终的结果只能是boolean类型,要么是true,要么是false
执行流程:如果流程执行到if语句的时候,会去看条件表达式的结果是true,还是false
如果是true,就会进入到if中,执行里面的语句
如果是false,就不会进入到if中,会进入到false里,执行里面的语句体内容
该格式可以使用三元运算符来代替
格式三:
if(条件表达式){
语句体;
}else if(条件表达式){
语句体;
}else if(条件表达式){
语句体;
}……
else{
语句体;
}
执行流程:如果流程执行到if语句的时候,会去看条件表达式的结果是true,还是false
如果是true,就会进入到if中执行里面的语句内容,其他语句体不会执行
如果是false,就会继续往下走,看else if 的条件表达式的结果是true还是false,
如果是true,就进入到else if中,执行里面的语句体内容
如果是false,就继续往下走
如果if和所有的elseif中的条件表达式都为false,就会执行else中的语句体内容
Switch语句:
格式:
switch(表达式){
case 取值1:
语句体;break;
case 取值2:
语句体;break;
……
default:
语句体;break;
}
-
执行流程:
- 当程序执行到switch的时候,会进入到switch,会找第一个case进行匹配,如果匹配成功,就进入到case中执行里面的语句体内容和break。
- 如果没有匹配成功,会继续向下走,找第二个case继续匹配……
- 如果所有的case都不匹配,最后执行default中的语句体内
-
1.switch中的表达式的数据的数据类型可以为哪些?
Byte, short, int, char, string, 枚举
-
2.default可以放在任意一行,但是不管是放在哪一行,都会找第一个case去匹配,如果所有的case都不匹配,才会执行default,default可以省略不写,建议写上
-
3.break可以不写,就容易造成switch的穿透现象
int a = 4;
switch(i){
default:
System.out.println(“嘿嘿”);
case 1:
System.out.println(“哈哈”);
case 2:
System.out.println(“呵呵”);
case 3:
System.out.println(“咯咯”);
}
//先匹配case,没有匹配成功,执行default,default没有break,继续往下执行
结果:
嘿嘿
哈哈
呵呵
咯咯
循环语句:
for循环语句:
格式:
for(初始化条件;判断条件;控制条件){
语句体;
}
-
初始化条件:定义一个变量,并且赋值
-
判断条件:关系运算符
-
控制语句:自增+1
-
语句体:想要重复执行的内容代码
-
执行流程:
while
初始化条件:
While(判断条件){
语句体;
控制语句;
}
do…while
格式:
do{
语句体;
控制语句;
}while(判断语句);
执行流程:
三个循环结构的区别
- do…while和for、while的区别
- do…while:语句体和控制条件至少会执行一次
- for和while:语句体和控制条件可以一次都不执行
- while和for的区别:
- while:初始化条件在while循环结束之后,依然可以继续使用
- for:初始化条件,一旦for循环结束,就用不了了
- 什么时候用for,什么时候使用while循环?
- 明确循环系数建议使用for
- 不明确循环次数建议使用while
死循环
for(;;){}
while(true){}
break和continue
break:可以使用在switch中,用来结束switch的。也可以使用在循环中,用来结束循环的(跳出循环)
continue:用在循环中,用来结束本次循环,继续下一次循环
注:在同一对花括号里,break和continue关键字下面不能有任何语句,因为永远执行不到,会编译报错的
嵌套循环
将一个循环放在另外一个循环的里面