JAVA基础1

1、dos命令行常用命令
dir:列出当前目录下的所有文件
mkdir XX:当前目录下创建名字为XX的文件夹
rd XX:删除当前目录下名字为XX的文件夹,只能删除空的文件夹
cd abc\op:直接进入abc目录下的op目录下
del 1.txt:删除文件。同时还能删除目录(此目录不是空的)。

exit:退出dos命令行


2、JAVA语言的跨平台性
-----> Windows操作系统 -----> Win版的JVM
Java程序 -----> Linux操作系统   -----> Linux版的JVM
-----> Mac操作系统     -----> Mac版的JVM
总结:JVM虚拟机是依赖于平台的,而我们的JAVA程序却不依赖于平台,实现跨平台。


3、JRE和JDK
JRE:java运行时环境,包含java虚拟机(JVM)和java程序所需的核心类库。
JDK:java开发工具包,包含JRE和java的开发工具。这个就是提供给开发人员使用的。
所谓的开发工具类似于编译器javac.exe等。
总结:使用JDK开发完成java程序后,交给JRE里的JVM来运行程序。


4、环境变量中Path的配置
在dos命令行中输入javac,系统首先在当前目录下找javac.exe这个可执行文件,如果
有就马上执行,如果没有,系统就根据Path中配的路径去找,找到就运行,找不到就
会报此命令不是系统内部命令之类的。因此在Path中需加入 E:\jdk1.6.0_25\bin;
此时,我们在dos的任何目录下,输入javac都会找到这个命令。


5、环境变量配置小技巧
比如在环境变量中新建,变量名:JAVA_HOME 变量值:E:\jdk1.6.0_25
接着在Path中就不需要加完整的E:\jdk1.6.0_25\bin;
而应该是这样:%JAVA_HOME%\bin; 这种方式是动态获取


6、classpath的配置
当使用javac编译后会生成XX.class文件,我们只能在XX.class这个文件的目录下执行
java XX来运行java程序。假如我们想在其他的目录下执行XX.class文件,那么这个时候
就需要配置classpath了,道理和Path是一样的。Path里面的路径是让系统找到javac和
java这个可执行文件,而classpath里的路径是让系统找到某个.class文件。


如果要临时配置classpath的话,可以在dos命令窗口中输入set classpath=E:\java_pro
classpath和上面配置Path的最大区别在于,系统找class文件时是先找classpath路径下
的。还有要注意set classpath=E:\java_pro;和set classpath=E:\java_pro的区别,有
分号结束代表如果在classpath路径下找不到特定的class文件就在当前目录下找。而
没有分号的就只能在classpath指定的路径下找,找不到就报错。
其实dos窗口中执行命令java Test的真正过程是:首先在当前目录下找java.exe文件,
没有的话就去Path指定的路径中去找,找到后,就启动JVM。然后JVM就去classpath指定
路径中找Test.class文件,如果找到就成功运行,如果找不到就看classpath后面有没有
分号结束,如果没有分号结束又找不到的话就报错。如果有分号结束,就继续去当前路径
下去找,找到则运行,找不到则报错。当然,还有可能的是我们没有设置classpath,
这种情况下JVM只能在当前目录下找了。


7、标识符
由0-9数字、A-Z、a-z、$、_这五类组成,而且不能以数字开头。大小写敏感。
包名:      aaabbb
类名接口名:AaaBbb
变量名和函数名:aaaBbb
常量名:AAA_BBB


8、类型转换
整数默认是int类型,小数默认是double
boolean不能和任何类型进行转换,其值也只有true和false
byte、short、char之间不能进行转换
byte、short、char进行运算必须转为int。需不需要强转就要看进行运算中是不是至少有一个是变量

byte b = 3;
b = (byte)(b + 2); //必须强制转换才合理,因为b+2的结果是int类型

b = 3+2;//合理,3+2都是常量,值是固定的。只要其结果不超出byte范围,它们会自动强转

byte、short、char==>int==>long==>float==>double //转换的方向,double为最高级
//例如:int和float相加,那么其结果必然为float。int和int相加,结果必然为int
char c = 156;
byte b = (byte)c;  //必须强制转换,因为有可能精度丢失
System.out.println(b);  //结果为-100,156的二进制位10011100,在b看来是负数,那么首先还原是减1,10011011,取反得到01100100,再加个减号,就是-100

-6在内存中是这样的,首先换算成6--->110,取反1111 1001,加1,1111 1010。和上面的换算是反过来的。


9、关于除法和求余的问题
5/2 ==> 2   5.0/2 ==> 2.5  5/2.0 ==> 2.5  (-5)/2.0 ==> -2.5
5%2 ==> 1   5.0%2 ==> 1.0  5%2.0 ==> 1.0  (-5.0)%2 ==> -1.0
5%(-2.0) ==> 1.0   //得出结论,带负号求余的结果是看被余数,忽视余数的负号


10、字符串和任何类型相连接,结果肯定是字符串类型
System.out.println("5+5=" + 5 + 5);  //结果为 5+5=55  首先字符串和第一个5相连接
//结果为"5+5=5" 然后和第二个5相连接,最后结果就出来了。
System.out.println("5+5=" + (5 + 5)); //结果为 5+5=10  首先运算最里的括号,
//结果为10,然后再和字符串相连接


11、转义字符
\n:换行
\r:回车,Window里的按下回车实际上是两个字符\r\n
\t:制表
\b:退格
System.out.println("\"hello\""); ==> 打印出带双引号的"hello"


12、关于+=的一个小细节
short s = 5;
s = s + 5;  //运行会报错,因为右边的结果为int
s += 5;  //运行没有问题
//s = s + 5; 实际上是进行了两次运算,首先相加,其次把相加的结果赋值给s
//s += 5; 这个实际上只进行了一次的赋值运算,把相加后的结果直接赋值给s
//并且系统自带强制转换的功能,所以效率更高。


13、位运算符
&和&&的区别是,与和短路与,与是两边都运算,短路与是如果判断左边就能得到结果就不运算右边
^异或,不同的是true,相同的是false.比如true^true的结果是false
>>:有符号右移,原来的最高位是什么,往右移动后空缺的新的高位就补什么
>>>:无符号右移,补0
~取反码


14、数组的定义和初始化
(1)静态初始化
int[] arr = {1,5,3,8,6};        //以下两种方式等价
int[] arr = new int[]{1,5,3,8,6};   //[]不能写长度
(2)动态初始化
int[] arr = new int[3];  //这种方式初始化是先让系统分配内存,后自己再初始化
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
//其实无论那一种方式初始化,arr变量是分配在栈里,通过变量里的地址可以找到
//堆里的一片区域,该区域划分为3块,分别装着数字1,2,3
//堆内存里的变量都有默认初始化值


15、选择排序,思想是首先拿第一个位置,依次和后面位置进行比较。这样下来,就会把最小的或者最大的数值移到了第一个位置。紧接着从第二个位置开始,拿该位置的数值和后面的继续进行比较。

for(int i=0; i<array.length-1; i++){
for(int j=i+1; j<array.length; j++){
if(array[i] > array[j]){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}


16、冒泡排序,思想是

第一轮:拿下标为0的内容和下标为1的内容进行比较,小的往左移
接着拿下标为1的内容和下标为2的内容进行比较,小的往左移
。。。。。这一轮比较完成后,最大的值会移到最右边了
第二轮:同上,拿下标为0的内容和下标为1的内容进行比较,小的往左移
这一轮就不需要比较最后一个的了,因为已经固定了。
。。。。。这一轮比较完成后,次大的值就会移到次右边的了

for(int i=0; i<array.length-1; i++){

for(int j=0; j<array.length-1-i; j++){

temp = array[i];
array[i] = array[j];
array[j] = temp;

}

}


17、开发中常用的排序方法

Arrays.sort(array); //这样就能得到一个从小到大的排序,是JAVA自带的排序方法

要想得到一个从大到小的排序,在该结果的基础上,倒叙把内容输入到一个新的数组就可以了


18、数组查找

方式一,普通的查找,对数组无排序要求

for(int i=0; i<array.length; i++){

if(search == array[i]){

return i;

}

}

return -1;


方式二,二分法查找,数组必须是有序的。

public static int search(int[] array, int key){
int min = 0;
int max = array.length-1;
int mid = (min+max)/2;

while(true){
if(key > array[mid]){
min = mid + 1;
} else if(key < array[mid]){
max = mid - 1;
} else {
break;
}
mid = (min+max)/2;
if(array[mid] == key){
break;
} else if(min == max){
mid = -1;
break;
}
}
return mid;
}


19、二维数组

int[][] arr = new int[2][3]; //第一维必须确定,第二维可写可不写
arr.length; ==>结果是2    arr[0].length; ==>结果是3
//注意:至于二维数组的静态和动态初始化和一维的思想一致。
(1)静态初始化
int[][] arr = {{1,2},{3,4,5},{6,7}};
int[][] arr = new int[][]{{1,2},{3,4,5},{6,7}};//同样最右边的两个[]不能写数字
(2)动态初始化
int[][] arr = new int[2][]; //第二维不写的时候,初始化用下面的方式
arr[0] = new int[3];
arr[1] = new int[2];
int[][] arr = new int[2][3]; //第二维写上的时候,可以直接赋值
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
总结:动态初始化中,第二维不写的时候没办法直接赋值的原因在于,内存都还没分配好,
怎么可能直接赋值呢?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值