1.JDK:java Development Kit,java的开发环境和运行环境,java的开发工具和jre。
2.JRE:Java Runtime Environment,java程序的运行环境,java运行所需的类库+JVM(java虚拟机)
3.环境配置变量:让java jdkin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。
4.环境变量的配置:打开环境变量配置窗口,
注意:如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;
如果指定了classpath,那么会在指定的目录下查找要运行的类文件。
CLASSPATH是什么?它的作用是什么?
它是javac编译器的一个环境变量。它的作用与import、package关键字有关。当写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦 :) 如果java.util这个package在c:/jdk/ 目录下,你得把c:/jdk/这个路径设置到CLASSPATH中去!当编译器面对import java.util.*这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录java/util是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!CLASSPATH有点像c/c++编译器中的INCLUDE路径的设置哦,是不是?当c/c++编译器遇到include 这样的语句,它是如何运作的?哦,其实道理都差不多!搜索INCLUDE路径,检视文件!当你自己开发一个package时,然后想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行。
PATH环境变量
PATH环境变量,作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常用到的可执行文件如javac/java/javadoc等待,设置好path变量后,就可以在任何目录下执行javac/java等工具
5.javac和java:javac负责编译,对扩展名为.java文件进行编译,生成了jvm可以识别的字节码文件,也就是.class文件,就是java运行程序
java负责运行部分,会启动jvm,加载运行时所需要的类库,并对class文件进行执行
6.一个文件需要执行,必须有一个执行的起点,起始点为main函数。
7.标识符:字母,数字,下划线,¥组成,数字不能开头,不能使用关键字。
8.变量的作用域:作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
生命周期:从定义的位置开始在内存中。
变量到达它所在的作用域的时候就在内存中消失了。
常量;在程序运行期间,固定不变的量。
9.数据类型:
1)基本数据类型:byte,short,int,long,double,float,char,boolean
byte:-127~128
自动类型转换:小容量向大容量转换进行
强制类型转换:大容量到小容量需要强制类型转换,但可能损失精度
2)运算符:+,-,*,/, ++。--。%
关系运算符: < > >= <= ==
逻辑运算符:& | !
&&(短路与):当表达式第一个结果为false时,发生短路,不执行后一个表达式
||(短路或):当表达式第一个结果为true时,发生短路,后面表达式被短路,不在执行
三目运算符: 判断表达式?表达式1:表达式2
如果判断表达式的值为true,则执行表达式1,为false,则执行表达式2
10.分支结构
if(Boolean表达式){} //如果if后面的表达式为true时,则执行大括号后面的内容
if(){}else{}
if(){
}else if(){
}else if(){
}else
switch(值(object)){
case 值1:
break;
case 值2:
break;
case 值3:
break;
}
11.循环结构:
while(boolean表达式){
循环体;
}//先判断boolean表达式的值是否为true,如果为true,则执行循环体,执行完成后再判断boolean表达式的值,如果为true继续执行循环体,若为false,则终止循环
do{
循环体;
}while(boolean表达式);//先执行循环体一次,再判断boolean表达式的值是否为true,若为true则继续执行循环体,执行完再判断boolean表达式的值是否为true,若为true则继续执行循环体,为false则终止循环
for(表达式1;循环条件;表达式2){
循环体;
}//给定初始条件为表达式1,判断循环条件是否为true,若为true则执行循环体,执行完后执行表达式2,再判断循环条件是否成立,若成立,继续执行循环体,在执行表达式2,再判断循环条件,若为false则终止循环。
break;可以终止当前循环
12.数组
1),什么是数组?
一组数据的集合(有序集合),它里面可以存储任何类型的数据,每一项之间用“,”隔开
2),怎么创建数组?创建数组的三种方式
int[] arr = new int[5];
int[] arr1 = {1,2,3,4};
int[] arr2 = new int[]{1,2,3,4,5};
3),对于一个给定长度的数组,如何添加元素?
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
4),数组的排序
一.冒泡排序:
从数组0位开始,与1位比较大小,如果1位比0位大,则不交换位置,否则交换位置,大的数到1位,小数到0位。以此类推,接着1位和2位比较大小,大的向后移,直至将集合中的元素全部比较结束,将最大的数放到最后一位,循环结束冒泡排序结束。
public class Test2 { public static void main(String[] args) { int[] arr = {324,32,3,6,4,21,1,9}; System.out.println("排序前数组"+Arrays.toString(arr)); for (int i = 1; i < arr.length; i++) { for (int k = 0; k < arr.length-i; k++) { if (arr[k]>arr[k+1]){ int tmp = arr[k]; arr[k] = arr[k+1]; arr[k+1] = tmp; } } } System.out.println("排序后数组:"+Arrays.toString(arr)); } }
代码结果:
排序前数组[324, 32, 3, 6, 4, 21, 1, 9]
排序后数组:[1, 3, 4, 6, 9, 21, 32, 324]
二.选择排序
选择排序原理:遍历集合找到最小(大)的元素的下标,将该元素与第一个元素交换位置,然后在剩余元素中找到最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序。
public class Test4 { public static void main(String[] args) { int[] arr = {2,4,1,6,43,32,17}; for (int i = 0; i <arr.length-1 ; i++) { int index = i; for (int k = i; k < arr.length; k++) { if (arr[k] < arr[index]){ index = k; } } if (index != i){ int tmp = arr[i]; arr[i] = arr[index]; arr[index] = tmp; } } System.out.println("排序后:"+ Arrays.toString(arr)); } }
执行结果:
排序后:[1, 2, 4, 6, 17, 32, 43]
5).数组的遍历
public class Test5 { public static void main(String[] args) { int[] arr = {2,4,1,6,43,32,17}; for (int i = 0; i <arr.length ; i++) { System.out.println(arr[i]); } } }
执行结果:
2
4
1
6
43
32
17
6).数组的复制
import java.util.Arrays; public class Test5 { public static void main(String[] args) { int[] arr = {2,4,1,6,43,32,17}; int b[] = Arrays.copyOf(arr,5);//复制数组的前5位 System.out.println("copyOf复制方法结果:"+Arrays.toString(b)); int c[] = Arrays.copyOfRange(arr,1,3);//复制arr数组的下标的1位到3位,包前不包后 System.out.println("copyOfRange复制方法结果:"+Arrays.toString(c)); int d[] = new int[7]; System.arraycopy(arr,3,d,2,2); System.out.println("从arr数组的下标为3的位置起,复制到数组d的下标为2的位置,总共复制2个数"+Arrays.toString(d)); } }
执行结果:
copyOf复制方法结果:[2, 4, 1, 6, 43]
copyOfRange复制方法结果:[4, 1]
从arr数组的下标为3的位置起,复制到数组d的下标为2的位置,总共复制2个数[0, 0, 6, 43, 0, 0, 0]
13.集合
java集合框架提供了一套性能优良、使用方便的接口和类,他们位于java.util包中
1)List,Set,Map都是接口,前两个继承至Collection接口,Map为独立接口
2)Set下有HashSet,LinkedHashSet,TreeSet
3)List 下有ArrayList,LinkedList,Vector
4)Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
5)Collection接口下还有个Queue接口,有PriorityQueue类
总结:
Connection接口:
-List有序,可重复
-ArrayList
优点:底层数据结构是数组,查询快,增删慢。
缺点:线程不安全,效率高
-Vector
优点:底层数据结构是数组,查询快,增删慢
缺点:线程安全,效率低