您的位置:首页 > 编程语言 > Java开发

java—基础知识小结(内容比较零散)

2014-02-19 22:18 459 查看
---------------------- <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])){//当下一部分的元素较大时,进行替换,使得每一部分同一位置上后面的元素大
4000
于前面的元素
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>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: