java基础知识
1、Dos命令:
dir:列出当前目录下所有的的文件及文件夹
md:创建目录
rd:删除目录
cd:进入指定mul
cd\:返回到根目录
cd..:退到上级目录
del:删除文件
exit:退出dos命令行
*:通配符
help:帮助命令
2、path系统变量:系统中应用程序所在的路径
临时配置的环境变量的方式:用set命令完成
set:用于查看本机中所有环境变量的信息
set 变量名:查看具体的一个环境变量的值
set 变量名=:清空变量的值
set 变量名=具体值:赋值
在原有的环境变量的基础上添加新值
set path=新值;%path%;
4、classpath:规定JVM到什么地方执行
set classpath=" 路径 ";先到指定的路径找,在到当前路径找,所以不用“;”较好。
set classpath=.,"路径" 先到当前路径找,再到指定的路径找
5、path和classpath的区别
path是为了当前路径下运行当前路径的下Java文件,执行者是windows
classpath实现的是当前路径下运行非当前路径下的class文件,执行者是JVM
6、main()
A、程序的入口
B、被JVM所调用
C、保证了一个类的独立运行(其他类中也有main()也可以运行)
注释
1、Java中特有的注释:
/** 文档注释*/
2、 作用:
A、解释说明
B、文件调试
3、注释是不经过字节码文件的,所以加注释的Java文件经编译后大小不变。
关键字
特点:
关键字所有的字母都小写
标识符
1、自己命名的地方都是标识符
组成:26个英文字母大小写、数字:0-9,_和&;
规则:数字不能开头
区分大小写
不能使用关键字
2、类/接口
大驼峰式:当有多个单词时,每个单词首字母大写
方法名/变量名
小驼峰式:当有多个单词时,第一个单词首字母小写,第二个单词首字母大写
常量
1、常量的分类:
A:字面值常量
a:整数常量
b:实数(这里专指小数)常量
12.5,-65.43
c:字符常量
‘a‘,‘A‘,‘0‘
d:字符串常量
"hello"
e:布尔常量
true,false
d:空常量:不是类型,是一个数值
null
B:自定义常量
(3)常量可以直接被输出。
进制
十进制转换成其他进制:
依次除以进制,直到商为0,到取余
其他进制转成十进制
每位上的数字*进制^权值,再相加
数据类型
1、Java提供的基本数据类型:
四类八种:
整数:byte,short,int ,long
浮点型:float,double
字符型:char
布尔型:boolean
引用数据类型:
类,接口,数组
2、各基本数据类型所占字节和表示范围
类型 | 占用的空间 | 表示范围 |
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | -2^31~2^31-1 |
long | 8字节 | -2^63~2^63-1 |
float | 4字节 | -3.403E38~3.403E38 |
double | 8字节 | -1.798E308~1.798E308 |
char | 2字节 | 0~65535 |
注:布尔数据类型带包一个比特信息,但是它的大小是不确定的,如果非要说它的大小,就说是一字节。
整数是精确数,浮点型是近似数;
类型的转换
1、当byte、short、char类型进行计算时,会自动提升为int型;整数默认是int,浮点型默认是double;
显示赋值,编译时可以直接判断是否在变量的数据范围内。如果在则编译成功。
byte b=100;//成功
byte b=200;//失败
显示赋值是浮点型,则会默认的必须为double接受。否则报错。如果要给float型赋值,则需要加f。
float f=100.0//失败;
double f=100.0//成功
float f=100.0f//成功
2、boolaen类型不能转换为其他的数据类型;
3、对于long型变量,显示赋值时,会先判断是否在int型范围内,再赋值给long。原因是整数默认int型。所以如果数据过大的话,一般会在long型变量后加l或者L。
long s=100;//成功
long s=88888888888;//失败
运算符
1、算术运算符:
+:
A、数学意义上的加法
B、指定一个数字为正数
C、可以连接字符串
两个字符串可以直接相加
一个字符串直接加上数字,是将数字类型变成字符串在连接。
一个数字可以直接加上字符串,是将数字类型变成字符串再连接。
字符串不是直接和数字连接,则看运算规则
%取模运算
符合与被除数相同(第一个数)
含有浮点型数据进行计算时,hi出现一个近似数
/整除运算:
两个整数相除得到其整数部分
含有小数相除,则为数学意义上 的除法
/和%含有浮点型运算时最好不改变数据类型
2、byte b=100;
b+=10;//成功。像+=,-=,*=.%=这样的运算符有一步隐藏的强制转换:b=(byte)(b+10);
b=b+10;//失败
3、逻辑运算符:
短路与(&&),短路或(||):在能判断出结果的情况下,就不再判断了。
4、位运算符:
对于以下四种运算符:,直接将0认为false,1认为true,计算规律与逻辑运算符的规律相同;
& 有0则0;
| 有1则1;
^ 相同取0,不同取1;
~ 所有1变0,0变1;
左移<<: 将所有的数向做移动指定的位数,相当于乘以对应的进制数
右移>>: 包含符号的移动,则前面是几,移出后空出的位就补几;相当于除以对应的进制数
无符号右移>>> : 不包含符号的移动,即无论前面是几,都补0;
5、如何将2个数的值互换,使用位移运算符
在位移运算中,当一个数异或另外一个数2次后,结果仍为这个数。
int x=10,y=20;
x=x^y;//x=x^y=10^20 y=y=20;
y=x^y;//x=10^20 y=10^20^20=10;
x=x^y;//x=10^20^10=20 y=10
程序的流程控制
1、选择结构:
if语句的多重嵌套:
要充分考虑边界值得问题;
每种情况不要有重复的部分;
switch语句:
switch语句后面括号的变量数据类型有6种:byte、short、char、int、String、枚举
switch语句中遇到break时,则跳出循环,否则,继续执行,直到switch语句结束,或者遇到break;
break放在最后是不建议省略,放在前面时,必须要有break;
case后面括号内必须使用一个值,不能使用区间,也不能使用逗号分隔;
2、循环结构:
不同循环的使用场景:
明确循环次数时,一般不使用for循环
当不确定循环次数时使用while循环;
一般不使用do-while循环,因为存在数据安全问题。
3、break和continue的区别:
break是跳出本层循环
continue是跳出当前的这次循环,进入下次循环
4、循环标号:
可以在循环出去一个标号。
格式为:
标识符:循环
使用标号,可以将内层循环的break直接跳出到外层循环。(continue同理,但较少使用)
函数
独立的一小段功能代码块。
函数与函数之间的关系是平等的,他们通常直接定义在类中,除非出现内部类,否则不定义在另一个函数内部。
函数的好处:定义函数可以将功能代码封装,提高代码的复用性
在void返回值类型的函数中,return可以省略,也可以写成”return;“形式。
函数的重载:
1、概念:
参数的个数和参数的类型不同,函数名必须相同,与返回值类型无关。
2、注意事项:
A、在调用重载函数时,会根据参数的类型进行函数的调用
如果没有精确的匹配类型会找金斯顿类型匹配。如果没有,则报错。
在寻找近似类型匹配的时候,会遵循隐式的类型转换原则:byte,short,char>long>double
B、函数的重载也在于参数的顺序是否相同。
C、在函数重载时,只有参数名不同,那不是函数的重载,他们是相同的函数。
D、判断函数是否重载,只看函数名是否相同,参数列表是否不同,与返回值类型无关。
内存结构
堆内存:
数组和对象,通过new建立的实例存放在内存中;
每个实体都有内存地址值
实体中的变量有默认的初始化值
实体不再使用时,会在不确定的时间被垃圾回收器回收。
栈内存:
在方法内定义的变量都是局部变量
局部变量均在栈内存中,使用完毕后所占的内存空间会自动的释放
数组
1、数组定义的格式:
数据类型[] 数组名={具体内容}; int[] arr={1,3,5,6};
元素类型[] 数组名=new 元素类型{元素个数或者数组}; int[] arr=new[13];
元素类型[] 数组名=new 元素类型[] {元素1,元素2,元素3}; int[] arr=new int[]{1,24,5};
2、数组的长度: arr.length;
3、多个引用指向同一个对象,即多个变量指向同一个实例对象的堆内存地址。当通过其中一个引用修改了该实例对象,则其他变量访问这个对象时相应的值也被修改了。
4、常见的数组定义方式:
A、int [] arr=new int[5];//正确,不建议
B、int arr[]=new int[5];//正确,强烈不建议
C、int[] arr=new int[3]{1,2,4}//错误。因为指定了数组的长度,再显示赋值,可能会有不同的数组长度出现。
D、int[] arr=new int[];// 错误。因为没有指定数组的长度不知道开辟多大的内存空间。
E、int[] arr;//错误,因为没有初始化。
int[] arr2=null;
System.out.println(arr2);//正确,arr2有值,只不过为空
F、int[] arr=new int[5];
System.out.println(arr[3]);//正确
G、int[] arr=new int[5];
arr=null;
System.out.println(arr);//正确
System.out.println(null);//错误
H、int[] arr=new int[5];
System.out,println(arr);//正确,结果为一个地址值
I、String[] str=new String[]{"1","2","3"};
System.out.println(arr[3]);//错误,数组角标越界异常。
J、int[] arr=new int[5];
arr=null;
System.out.println(arr[3]);//错误,空指针异常
二维数组
1、格式:
A、int[][] aarr=new int[3][2];
//3代表二维数组中有多少个一维数组,2代表一维数组的长度。
B、int[][] arr=new int[3][];
System.out.println(arr[1]);//null。
C、int[][] arr=new int{{1,3},{2,4},{5,3}};
2、注意事项:
A、为二维数组里面的一维数组赋值时,不能使用这种格式:arr[1]=new int[] {1,2};
B、使用第一种格式要求所有一维数组的长度都相同
C、使用.length同样可以查到二维数组中一维数组的长度
int[][] arr=new int{{1,3},{4,6},{9,7}};
arr.length=3;
arr[0].length=2;
D、int[] x,y[];//定义了一个一维数组x和一个二维数组y。
System.out.println(x);//报错,未初始化
System.out.println(y);//报错,未初始化
x=new int[3];
y=new int[3][];
E、int[][]arr=new int[][2];//没有指定二维数组的长度,编译不能通过。