DOS命令:计算机术语,是指DOS操作系统的命令。
命令 | 解释 | 例子 |
---|---|---|
mspaint | 打开画图 | |
calc | 打开计算器 | |
notepad | 打开记事本 | |
cls | 清屏 | |
exit | 退出 | |
盘符号: | 切换到哪个盘符 | D: |
dir | 查看该目录下所有的文件或文件夹 | |
cd 目录名 | 进入该目录 | cd Java |
cd.. | 回退至上一级目录 | |
cd../../../ | 回退多级目录 | |
cd / | 回退至根目录 | |
md 目录名 | 新建一个目录 | md Java |
rd 目录名 | 删除一个空目录 | rd Java |
rd /s 目录名 | 删除非空目录,会询问你是否删除 | rd /s Java |
rd /s /q 目录名 | 直接删除非空目录无需询问 ,注意删除后,回收站里面没有所以慎重 | rd /s /q Java |
cd /d 完整的路径名 | 进入该路径(可实现跨盘符操作) | cd /d D:\Java |
del 文件名.后缀名 | 删除指定的文件 | del a.txt |
del *.txt | 批量删除后缀名是txt的文件 | del *.txt |
getmac | 查看物理网卡的地址 | |
hostname | 查看主机名 | |
ipconfig /all | 查看ip相关的东西 | |
shutdown -s -t 0 | 立即关机 |
1995年由SUN公司詹姆斯•高斯林(James Gosling)等人正式发布第一个版本。
Java语言平台版本
jdk1.5以后,我们将其更名为: JAVASE , JAVAME , JAVAEE
Java语言特点
请解释Java语言的跨平台特性
Java的跨平台特性也被称为可移植性、平台无关性,或者一次编写处处运行。他的意思就是如果用Java语言编写一个应用,那么就可以在不同平台上运行,而不需要为不同平台单独运行开发。之所以能实现跨平台的特性。主要得益于Java虚拟机(JVM),JVM解释器在运行Java应用时根据当前平台进行解释,解释成符合当前平台规范的机器码,所以可以实现同样的应用在不同平台上都能运行。
JAVA语言是跨平台的,而JVM不是跨平台的。
JDK(Java Development Kit)
JDK是Java开发工具包,是Sun公司针对Java开发员的产品。
JDK中包含JRE(所以安装了JDK,就不用再单独安装JRE了),在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM,lib中则是JVM工作所需要的类库,而JVM+lib=JRE。
JDK是整个JAVA的核心,包括了Java运行环境JRE、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JRE(Java Runtime Environment)
是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,这些是运行Java程序的必要组件。
与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
JVM(Java Virtual Machine)
就是我们常说的Java虚拟机,它是整个Java实现跨平台的最核心的部分,所有的Java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
只有JVM还不能完成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而JRE包含lib类库。
JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
bin目录:该目录用于存放一些可执行程序。如javac.exe(java编译器)、java.exe(java运行工具),jar.exe(打包工具)和javadoc.exe(文档生成工具)等。
include目录:由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。
jre目录:"jre"是 Java Runtime Environment 的缩写,意为Java程序运行时环境。此目录是Java运行时环境的根目录,它包括Java虚拟机,运行时的类包,Java应用启动器以及一个bin目录,但不包含开发环境中的开发工具。
lib目录:lib是library的缩写,意为 Java 类库或库文件,是开发工具使用的归档包文件。
src.zip文件:src.zip为src文件夹的压缩文件,src中放置的是JDK核心类的源代码,通过该文件可以查看Java基础类的源代码。
class Hello{
public static void main(String[] args){
System.out.println("HelloWorld!");
}
}
1.什么是注释
用于解释说明程序的文字。
2.注释的作用
通过注释提高Java源程序代码的可读性;使得Java程序条理清晰,易于区分代码行与注释行。另外通常在程序开头加入作者,时间,版本,要实现的功能等内容注释,方便后来的维护以及程序员的交流。
3.注释的分类
//这是单行注释
/*
注释的文字
*/
/**
*注释的文字
*注释的文字
*/
1.为什么有数据类型
我们都知道,变量其实就是内存中的一小块区域。我们定义一个变量,其实就是开辟了一个内存空间。
如果没有数据类型,那么我们需要开辟多大的内存空间合适呢?
为了解决这种问题,java就给我们提供了不同的数据类型,那么针对不同的数据类型,在内存中分配了不同大小的内存空间。
2.Java中数据类型的分类
(1): 基本数据类型
(2): 引用数据类型: 数组 , 类 , 接口
3.基本数据类型的详细讲解
(1)数值型:
整数型 | 字节数 | 范围 |
---|---|---|
byte | 1(8bit) | -128~127 |
short | 2(16bit) | -215 ~ 215 - 1 |
int | 4(32bit) | -231 ~ 231 - 1 |
long | 8(64bit) | -263 ~ 263 - 1 |
浮点型 | 字节数 | 范围 |
---|---|---|
float | 4(32bit) | -3.403*1038 ~ 3.403*1038 |
double | 8(64bit) | -1.798*10308 ~ 1.798*10308 |
(2)字符型
字符型 | 字节数 | 范围 |
---|---|---|
char | 2(16bit) | 0 ~ 216 - 1 = 65535 |
(3)布尔型
布尔型 | 字节数 | 范围 |
---|---|---|
boolean | 1 |
4.整数默认是int类型的 , 浮点数默认是 double类型的
5.注意事项:
1. 自动类型提升
概念:byte short char任意一种类型在参与数学运算时(如加法运算),会自动提升为 int 类型,如果还有long float double类型参与运算则会相应地提升为long float double类型,布尔类型不参与数学运算,byte short char之间参与数学运算时不发生相互转换,而是转换成int再计算。
class A{
public void static main(String[] args){
byte a=10;
byte b=20;
byte r=a+b;//报错:不兼容的类型:从int转换到byte可能会有损失
System.out.println(r);
}
}
由于a和b参与运算自动转换成了int类型,因此上面的计算结果(a+b)也是int类型,不能直接赋给byte类型。
2. 隐式转换(自动类型转换)
int a=10;
int b=100;
long c=a+b;//自动类型转换
3. 强制转换
1.byte a = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
答:有问题,会报错:int类型转换为byte类型可能会有损失。可以强制转换:
class A{
public static void main(String[] args){
byte b=(byte)130;
System.out.println(b);
}
}
结果:
因为int类型的130是32位的,即00000000 00000000 00000000 10000010,强转为byte类型后为10000010,它是补码,推回原码为11111110,即-126。
2.byte b = (byte)128;
class A{
public static void main(String[] args){
byte b=(byte)128;
System.out.println(b);
}
}
结果:
为什么将128强转为byte型后结果是-128呢?
因为int类型的128是32位的,即00000000 00000000 00000000 10000000,强转为byte类型后为10000000,它是补码,表示-128,此处不需要推回去原码。详情见Java中,为什么byte类型的取值范围为-128~127?
3.byte c = 3+4;
class A{
public static void main(String[] args){
byte c = 3+4;
System.out.println(c);
}
}
结果:
为什么此处不会报错?
答:常量优化机制:多个常量相加时会先算出结果看在不在这个数据类型的范围内,若在不报错,否则报错。
4.Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。而当使用UTF-8编码方式时一个汉字占三个字节,char就存不下了。
案例
class A{
public void static main(String[] args){
System.out.println('a'+1);
}
}
结果
字符参与数学运算,对照ASCII码表值
ASCII码表常用的值:
‘0’-‘9’----48-57
‘A’-‘Z’----65-90
‘a’-‘z’----97-122
‘空格’----32
"+"不仅可以当数学运算符使用,还可以当作连接符:
当"+“号运算符两端只要任意一端是一个字符串,那么”+"就起连接符的作用。
案例
class A{
public static void main(String[] args){
System.out.println("Hello" + 'a' + 1);//HElloa1(Hello先和a形成新的字符串,再和1连接)
System.out.println('a' + 1 + "Hello");//98Hello('a'先和1相加,再和hello连接)
System.out.println("Hello"+100);//Hello100
System.out.println("Hello"+100+33);//Hello10033(Hello先和100形成字符串Hello100,此时+左边仍是字符串,再和33形成字符串)
System.out.println("Hello"+"10033");//Hello10033
System.out.println(100+"Hello");//100Hello
System.out.println(100+"Hello"+100+33);//100Hello10033
System.out.println(100+11+"Hello"+100+33);//111Hello10033(100+11时+号两边没有字符串,所以做数学运算)
System.out.println("5+5="+5+5); //5+5=55
System.out.println(5+5+"=5+5");//10=5+5
}
}
+ , - , * , / , % , ++ , --
案例演示
class A{
public static void main(String[] args){
int a=10;
int b=3;
int num=1;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);//整数相除,取的是商
System.out.println(a*1.0/b);//将a转换为double型,除b,结果为double型,保留了小数
System.out.println(a%b);//取余数
//单独使用自增、自减运算符时,运算符在前在后结果一样
num++;
++num;
num--;
--num;
//参与运算使用时,++在前,先自增,再使用;++在后,先使用,再自增
int r=num++;
System.out.println(r);
System.out.println(num);
num=1;
int sum=3+(num++)-1+(num--)+1+(++num)+2+(++num)+10;
System.out.println(sum);
System.out.println(num);
}
}
=,+=,-=,*=,/=,%=
案例演示
class A{
public static void main(String[] args) {
//赋值运算符 = += -= *= /= %=
int a=10;//把右边这个整数常量10 赋值给左边这个int类型的变量a
int b=10;
b=b+10; //等价于 b+=10; 累加;其他几个赋值运算符同理
byte num=10;
//num=num+10;会报错:不兼容的类型,byte自动类型提升为int了
num+=5;//不会报错 会判断累加完的结果,在不在这个数据类型的范围内,如果不在会自动强制类型转换
System.out.println(num);//15
}
}
注意事项:
<,>,>=,<=,==,!=,instanceof
案例演示
class A{
public static void main(String[] args) {
//比较运算符<,>,>=,<=,==,!=,instanceof
//比较运算符的运算结果是布尔类型 区分 =和 == 号
int a=10;
int b=20;
boolean flag1=a==b;
boolean flag2=a>b;
boolean flag3=a<=b;
boolean flag4=a!=b;
System.out.println(flag1);
System.out.println(flag2);
System.out.println(flag3);
System.out.println(flag4);
}
}
&(并且) , |(或者) , !(非) , ^(异或) , &&(短路与) , ||(短路或)
1.注意事项:
逻辑运算符一般用于连接boolean类型的表达式或者值。
在Java中我们要表示一个数大于3并且小于6 ,不可以写成3
2.案例演示
class A{
public static void main(String[] args) {
// 逻辑运算符的运算结果也是boolean类型
int a=10 ;
int b=20;
//& 并且 运算两端只要任意一端是false,其最终结果都是false,只有两端都为true最终结果才是true
boolean flag1=a>10&b<10;//false
boolean flag2=a==10&&b>10;//true
boolean flag3=true&&false;//false
// | 或者 运算两端只要任意一端为true,其最终结果都是true,只有两端都是false最终结果才是false
boolean flag4=a==20|b>10;//true
boolean flag5=false|false;//false
boolean flag6=a>10|b<100;//true
//! 取反 true变false false变true
System.out.println(!(a==b));
// ^(异或) 相同为false 不同为true
System.out.println(false ^ false);
System.out.println(true ^ true);
System.out.println(a>b^a<b);
System.out.println("---------------------------------------------------------");
// &(并且) , |(或者) 和 &&(短路与) , ||(短路或) 的区别
//他们在运算结果上没有区别,区别在运算效率上
boolean flag7=a<10&(b++)>10; //&两端都需要运算 &&只要左端为false 右端不需要运算,只有左端为true 右端才要运算
System.out.println(flag7);
System.out.println(b);
b=20;
boolean flag8=a<10&&(b++)>10;
System.out.println(flag8);
System.out.println(b);//b结果为20不变,因为短路右端未参与运算
boolean flag9=a==10|(b++)>10; // | 两端都需要运算,|| 只要左端为true 右端就不需要运算,只有左端为false 右端才要运算
System.out.println(flag9);
System.out.println(b);
b=20;
boolean flag10=a==10||(b++)>10; // | 两端都需要运算,|| 只要左端为true 右端就不需要运算,只有左端为false 右端才要运算
System.out.println(flag10);
System.out.println(b);//b结果为20不变,因为短路右端未参与运算
}
}
3.&与&&、|与||的区别
4.结论:
&(与),|(或),^(异或) , ~(按位取反) , <<(左移) ,>>(右移) ,>>>(无符号右移)
注意事项:位运算符是直接对二进制补码进行运算。
1.规律:
2.案例演示
class A{
public static void main(String[] args) {
System.out.println(3&4); //0
/*
00000011 补码
& 00000100 补码
--------------------------------------------
00000000 补码
*/
System.out.println(3|4); //7
System.out.println(3^4); //7
System.out.println(~3); //-4
// << : 把<<左边的数据乘以2的移动次幂 例如 10<<3 结果 10*2^3=80
// >> : 把>>左边的数据除以2的移动次幂 例如 40>>3 结果 40/2^3=5
System.out.println(3>>2); //3/2^2=0
System.out.println(3<<2); //3*2^2=12
//^ 特点 一个数被另外一个数位异或两次该数不变
System.out.println(3^4^4);//3
System.out.println(3^4^3); //4
}
}
3.面试题
请实现两个整数变量的交换。
int a=10;
int b=20;
int t;
t=a;
a=b;
b=t;
a=a^b;
b=a^b;
a=a^b;
a=a+b;
b=a-b;
a=a-b;
b=(a+b)-(a=b);
1.三元(三目)运算符的格式
(关系表达式) ? 表达式1 : 表达式2;
int a=(10>20)?30:50; a=50
2.三元运算符的执行流程
计算关系表达式的值,如果为true, 运算后的结果是表达式1;
如果为false,运算后的结果是表达式2;
3.案例演示
获取两个数中的最大值
class A{
public static void main(String[] args){
int a=10;
int b=20;
int max=a>b?a:b;
System.out.println("最大值是:"+max);
}
}
结果
获取三个数中的最大值
class A{
public static void main(String[] args) {
int a=10;
int b=20;
int c=30;
int max=a>b?a:b;
int max2=max>c?max:c;
System.out.println("最大值是"+max2);
}
}
结果