Table of Contents:

JRE、OpenJDK和Oracle JDK之间的不同之处。

JRE(Java Runtime Environment),它是你运行一个基于Java语言应用程序的所正常需要的环境。如果你不是一个程序员的话,这些足够你的需要。
JDK代表Java开发工具包,如果你想做一些有关Java的开发(阅读程序),这正是你所需要的。
OpenJDK是Java开发工具包的开源实现,Oracle JDK是Java开发工具包的官方Oracle版本。尽管OpenJDK已经足够满足大多数的案例,但是许多程序比如Android Studio建议使用Oracle JDK,以避免UI/性能问题。

配置java环境变量
* JAVA_HOME
配置JDK的根目录,目的是为了方便引用。
第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件,比如JavaEE 最常用的服务器Tomcat.
* CLASSPATH
指定到哪里去找运行时需要用到的类代码(字节码)
* PATH
指定可执行程序的位置

windows下

PATH-----C:\Program Files (x86)\Java\jdk1.8.0_40\bin;
JAVA_HOME---C:\Program Files (x86)\Java\jdk1.8.0_40                 
CLASSPATH ---.;C:\Program Files (x86)\Java\jre1.8.0_40\lib       .是当前目录 是要加上的            找到指定文件的类库       
bin中有Javac.exe(编译器)  Java.exe(解释器) javadoc  等

linux下

/etc/profile中修改环境变量
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

使用Junit运行程序

public class Demo3 {
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("setUpBeforeClass()");
    }
    @Test
    public void test1(){
        System.out.println("test1()");
    }
    @Test
    public void test2(){
        System.out.println("test2()");
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("tearDownAfterClass()");
    }
}

集合的遍历

增强for循环只能用在数组、或实现Iterator接口的集合类上
Java没有类似C#里var或者C++11 auto这样的关键字

//增强for循环
public class Demo1 {
    @Test
    public void test2(){
        int[] is = {1,2,3,4,5};
        for(int value : is){
            System.out.print(value+"\t");
        }
    }
    @Test
    public void testSet(){
        Set<Integer> set = new HashSet<Integer>();
        set.add(100);
        set.add(200);
        set.add(300);
        Iterator<Integer> it = set.iterator();
        while(it.hasNext()){
            Integer key = it.next();
            System.out.print(key+"\t");
        }
    }
    @Test
    public void testList(){
        List<String> list = new ArrayList<String>();
        list.add("jack");
        list.add("marry");
        list.add("sisi");
        for(String name : list){
            System.out.print(name+"\t");
        }
    }
    @Test
    public void testMap1(){
        Map<Integer,String> map = new HashMap<Integer,String>();
        map.put(100,"jack");
        map.put(200,"marry");
        map.put(300,"sisi");
        Set<Integer> set = map.keySet();
        Iterator<Integer> it = set.iterator();
        while(it.hasNext()){
            Integer key = it.next();
            String value = map.get(key);
            System.out.println(key+"-"+value);
        }
    }
    @Test
    public void testMap2(){
        Map<Integer,String> map = new HashMap<Integer,String>();
        map.put(100,"jack");
        map.put(200,"marry");
        map.put(300,"sisi");
        Set<Entry<Integer,String>> set = map.entrySet();
        Iterator<Entry<Integer,String>> it = set.iterator();
        while(it.hasNext()){
            Entry<Integer,String> entry = it.next();
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"<->"+value);
        }
    }
} 

ListIterator

ListIterator是一个功能更加强大的, 它继承于Iterator接口,只能用于各种List类型的访问。

ListIterator和Iterator的区别
1)使用范围不同:Iterator能遍历set、list集合,而ListIterator只能遍历list集合。
2)遍历顺序有区别:ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
3)是否能定位当前索引位置:ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
4)是否能修改对象:都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。
5) 是否能添加对象:ListIterator有add()方法,可以向List中添加对象,而Iterator不能。

//迭代集合注意的细节
public class Demo2 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("jack");
        list.add("marry");
        list.add("sisi");
        System.out.println("list前长度"+list.size());


        //Iterator<String> it = list.iterator();
        ListIterator<String> it = list.listIterator();
        while(it.hasNext()){
            String key = it.next();
            System.out.print(key+"\t");
            //动态通知迭代器,加入了新元素,从而迭代器自动通知List集合
            it.add("qq");
        }
        System.out.println("\nlist后长度"+list.size());
        it = list.listIterator();
        while(it.hasNext()){
            String key = it.next();
            System.out.print(key+"\t");
        }
    }
}

可变参数

public class Demo1 {
    public static void show1(String[] arr) {
        for(String a :arr){
            System.out.print(a+"\t");
        }
    }
    public static void show2(String... arr) {
        for(String a :arr){
            System.out.print(a+"\t");
        }
    }
    public static void show3(String qq,String... arr) {
        System.out.println("第一个参数是:" + qq);
        for(String a :arr){
            System.out.print(a+"\t");
        }
    }
} 

json转换

Gson的应用主要为toJson与fromJson两个转换函数,而在使用这种对象转换之前需
先创建好对象的类以及其成员才能成功的将JSON字符串成功转换成相对应的对象。

class Examples {
    private int answer1 = 100;
    private String answer2 = "Hello world!";
    Examples(){
    }     // default constructor
}


// 序列化JAVA对象成JSON字符串
Examples example1 = new Examples();
Gson gson = new Gson();
String json = gson.toJson(example1);  //==> json is {"answer1":100,"answer2":"Hello world!"}


// 反序列化JSON字符串成对应的JAVA对象
Examples example2= gson.fromJson(json,Examples.class);

时间处理工具类

String dateString = "2012-12-06 "; 
try 
{ 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd "); 
    Date date = sdf.parse(dateString); 
} 
catch (ParseException e) 
{ 
    System.out.println(e.getMessage()); 
}