---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
学完毕向东老师的java基础视频,其中内容很多,前面的基础知识有的是学过的,有的是以前没学过或者是没有掌握的,在复习时,自己小结一下,内容比较零散,就当是随笔笔记吧!
一、java中的内存分配大致如下:
1. 寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。
2. 栈内存:保存局部变量的值,对象的引用变量。
3. 堆内存:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。
4.常量池:JVM为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括直接常量(基本类型,String)和对其他类型、方法、符号引用。池中的数据和数组一样通过索引访问。由于常量池包含了一个类型所有的对其他类型、方法、字段的符号引用,所以常量池在Java的动态链接中起了核心作用。常量池存在于堆中
5.代码段:用于存放从硬盘读取的源代码
6.静态段:用于存放static成员,包括成员变量和成员方法。
二、java的工具及环境配置
Java的三种技术架构:
JAVAEE:Java Platform Enterprise Edition 开发企业环境下的应用程序,主要针对web程序开发
JAVASE:Java Platform Standard Edition 完成桌面应用程序的开发,是其它两者的基础
JAVAME:Java Platform Micro Edition 开发电子消费产品和嵌入式设备,如手机中的程序
JDK:Java Development Kit java的开发和运行环境,java的开发工具和jre
JRE:Java Runtime Environment java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)
配置环境变量:将java jdk\bin目录下的工具所在目录告诉系统,当使用该工具时,由系统帮我们去找指定的目录,从而使得该工具可以在任意目录下运行
环境变量的配置:
1、永久配置方式:(在系统环境变量中设置)
JAVA_HOME=%安装路径%\Java\jdk
path=%JAVA_HOME%\bin
2、临时配置方式:(在DOS命令行中配置)
set path=%path%;C:\Program Files\Java\jdk\bin
特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。
classpath的配置:
1、永久配置方式:classpath=.;c:\;e:\
2、临时配置方式:set classpath=.;c:\;e:\
注意:在定义classpath环境变量时,需要注意的情况
如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;
如果指定了classpath,两种情况:
1)、如果classpath的值结尾处有分号,在具体路径中没有找到运行的类,会默认在当前目录再找一次。
2)、如果classpath的值结果出没有分号,在具体的路径中没有找到运行的类,不会再当前目录找。
(一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样可以调试程序)
二、变量互换和数组排序排序
对两个变量的数据进行互换。不需要第三方变量。
int a = 3,b = 5;-->b = 3,a = 5;
方法一:
a = a + b; a = 8;
b = a - b; b = 3;
a = a - b; a = 5;
方法二:
a = a ^ b;
b = a ^ b;//b = a ^ b ^ b = a
a = a ^ b;//a = a ^ b ^ a = b;
高效的算出 2*8
2<<3;
数组排序算法
1.冒泡排序:依次比较相邻的元素,将较大的数放在后面,这样每循环依次都可将最大数放在最后面,同时可以在
下一次排序时,减少一个元素参加排序,直到排完即可完成排序
2.直接选择排序:直接搜索寻找到最小数放在第一个位置,然后再找剩下的数的最小数放在第二个位置,直到排完
即可完成排序
3.插入排序:按大小秩序排序数组中的前两个值,然后相对于这两个值得适当位置插入数组的第三个值,然后相对
前面三个值得适当位置插入第四个值,以此类推,直到全部完成即完成排序
4.希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的
记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序
,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
*在以上排序方法中希尔排序的效率较高,所以以下代码实现希尔排序
public class Test{
public static void main(String args[]){
int[] arr = {1,4,2,7,5,9,3,7,6,8};//数组
System.out.println("the source array:");
for(int i = 0; i < arr.length ; i++){//输出原数组
System.out.print(arr[i]+ " ");
}
System.out.println();
shellSort(arr);//使用希尔排序算法进行排序
System.out.println("the new sort array:");
for(int i = 0; i < arr.length ; i++){//输出排序后的数组
System.out.print(arr[i]+ " ");
}
}
public static void shellSort(int[] arr){//进行希尔排序
int i,j,k;//定义循环变量
int temp;//定义临时变量
int dataLen=arr.length/2;//定义希尔排序算法中增量的变量,初始化值为数组长度的一半
while(dataLen>=1){//直到增量小于1后停止
for(i = 0; i <dataLen ; i++){//第一层循环,长度为一个增量的长度
for(j = i; j < arr.length-dataLen; j+=dataLen){//第二曾循环,跨度为一个增量,比较每一部分中同一位置元素的大小
k = j + dataLen;
temp = arr[k];
while(j>0 && (arr[j] > arr[k])){//当下一部分的元素较大时,进行替换,使得每一部分同一位置上后面的元素大于前面的元素
arr[k] = arr[j];
j-=dataLen;
k-=dataLen;
}
arr[k] = temp;
}
}
dataLen = dataLen/2;//缩小增量的范围,每次缩小二分之一
}
}
}
三、零散小知识
& 和 &&区别:
& :无论左边结果是什么,右边都参与运算。
&&:短路与,如果左边为false,那么右边不参数与运算。
| 和|| 区别:
|:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。
break:作用于switch ,和循环语句,用于跳出,或者称为结束。
break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。
continue:只作用于循环结构,继续循环用的。
作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。
函数其实就是一个功能,定义函数就是实现功能,定义函数的步骤:(两个明确)
1、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。
2、明确在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
重载:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。
重载的区分:当函数同名时,只看参数列表。和返回值类型没关系。
二分查找法:(前提:数组中的元素要有序。 )
public static int halfSeach_2(int[] arr,int key){
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (max+min)>>1; //(max+min)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
min = mid + 1;
}
else if(key<arr[mid])
max = mid - 1;
if(max<min)
return -1;
mid = (max+min)>>1;
}
return mid;
}
生成Java帮助文档:命令格式:javadoc –d 文件夹名 –auther –version *.java
/** //格式
*类描述
*@author 作者名
*@version 版本号
*/
/**
*方法描述
*@param 参数描述
*@return 返回值描述
*/
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------