類的不一樣形式

1:不可變化類java

  2:單例類數組

  3:枚舉類多線程

  4:註解後面有增強ide

  5:泛型-後面有增強。spa

String[]數組類的copy與增加.net

 

1:類的不一樣形式:

      1:不可變類。線程

     當一個類已經實例化之後,就不再能修改裏面的成員變量的值的類。不可變類。orm

1:對於一個類,成員變量是私有的 對象

    class Person{繼承

      private String name;

 2 在構造方法裏,接收成員變量值。

         Public Person(String name){

           This.name=name;

         }

       3:且這個類再也沒有給出修改name的方式

         getName(){

 

         }

}

 

  2:單例類

   3:枚舉類

就是使用enum聲明的類,從單例變化而來的。

  1:聲明的成員變量只能是本身。默認的構造是私有的。

  2:擁有一些方法:valueOf(…)

  3:全部enum都是java.lang.Enum的子類。

@Test

    public void test1() {

        Gender g1 = Gender.MALE;// 從枚舉裏面獲取一個對象

        Gender g2 = Gender.MALE;

        System.err.println(g1 == g2);// true

        System.err.println(g1.equals(g2));// true

        // 獲取枚舉裏面的全部對象

        Gender[] gs = Gender.values();

        for (Gender g : gs) {

            System.err.println(g);

        }

        // 根據一個字符串,建立一個枚舉對象

        String str = "male";

        Gender g3 = Gender.valueOf(str.toUpperCase());

        System.err.println(g3);

        // 全部Enum類,都是java.lang.Enum的子類

        System.err.println(g3 instanceof Gender);// true

        System.err.println(g3 instanceof Enum);// true

        // 還能夠經過Enum

        Gender g4 = Enum.valueOf(Gender.class, str.toUpperCase());

        System.err.println(g4);

    }

}

 

class Sex {

    public static final Sex MALE = new Sex();// 靜態常量

    public static final Sex FEMALE = new Sex();

 

    private Sex() {

 

    }

}

 

enum Gender {

    MALE, FEMALE;

 

    private Gender() {

    }

 

}

 

 

  4:註解後面有增強

 

 

 在編譯時限制的做用。

1.public class Demo01 {

    @Override

    public String toString() {

        return super.toString();

    }

2:在運行時給反射使用  - 後面纔會講到 – Java高級特色。

註解:1:都是經過 @interface 聲明的類。

      2:註解在聲明時應該設置所註解的範圍。

      3:全部註解,都是java.lang.Annotation的子類。

@Target (value={ElementType.METHOD,ElementType.TYPE})

public @interface MyTest {

 

}

 

  5:泛型-後面有增強。

String[]數組類的copy與增加



不肯定返回何種類型時,就能夠使用這種類型:

 
1:
聲明在方法上的泛型

 

public class Demo03 {

 

    @Test

    public void test() {

        String ss = say("Jack");

        int a = say(3);

        double d = say(34.9);

    }

 

    public <T> T say(T obj) {

        T t = null;

        System.err.println("hello...");

        return obj;

    }

}

2:聲明在類上

class One<E> {

    public E say(E e) {

        System.err.println("Hello..");

        return e;

    }

}

 

類的變體:

   1:枚舉 enum聲明的類。

   2:註解類經過 @interface聲明的類。

 

---

泛型
  
方法上 <T>

   類上

 

--某些特另的類:

  不可變類。

 

 

Java體系的五支柱:

  IO/Socket/Thread/JDBC/Coollections

 

2:多線程

進程

   一個程序在擁有一塊鏈接的內存空間。【進程不會執行任何工做】

線程:

  線程是一個程序中執行的多個子任務,一個進程中,必需要至少擁有一個線程。

  多個線程共享同一個內存空間,但又獨立的執行。

 

package cn.demo02;

 

public class Demo04 {

    public static void main(String[] args) {

        new Thread() {

            public void run() {

                for (int i = 0; i < 100; i++) {

                    System.err.println("i is:" + i);

                }

            };

        }.start();

        new Thread() {

            public void run() {

                for (int j = 100; j > 0; j--) {

                    System.err.println("----------------------j is:" + j);

                }

            };

        }.start();

 

    }

}

 

2.1、線程類

Java裏面java.lang.Thread就是線程的類。

2.2、主線程

當運行main方法時,JVM就會會當前的Java應用程序,建立一個主線程。

 

獲取當前線程的引用:

 

package cn.demo02;

 

public class Demo05 {

    public static void main(String[] args) throws Exception {

        Thread th1 = Thread.currentThread();// 獲取當前正在執行的線程或是獲取當前執行main方法的線程

        System.err.println("1:name is:" + th1.getName());// main

        say();

        new Demo05().hello();

 

    }

 

    public static void say() {

        Thread th1 = Thread.currentThread();

        System.err.println("2:---name is:" + th1.getName());// main

    }

 

    public void hello() {

        Thread th1 = Thread.currentThread();

        System.err.println("3:---name is:" + th1.getName());//main

    }

}

 

 

 

2.3、建立線程的方式 – new Thead()

Step:

  1:開發一個類,繼承Thread類。

  2:重寫裏面的run方法,將子線程執行的方法都放到run方法裏面。

  3:實例化這個類,且調用它的start方法。啓動線程。

package cn.demo02;

 

public class Demo05 {

    public static void main(String[] args) throws Exception {

        OneThead one = new OneThead();

        one.start();

    }

 

    public static void say() {

        Thread th1 = Thread.currentThread();

        System.err.println("2:---name is:" + th1.getName());// Thread-0

    }

 

    public void hello() {

        Thread th1 = Thread.currentThread();

        System.err.println("3:---name is:" + th1.getName());// Thread-0

    }

 

    // 1:

    static class OneThead extends Thread {

        // 2:重寫run

        @Override

        public void run() {

            Thread th1 = Thread.currentThread();

            System.err.println("<><><><><><>name is:" + th1.getName());// 子線程的取名的方式Thead-0

            say();

            new Demo05().hello();

        }

    }

}

 

2.4、線程的狀態

 

1:新建立的 Thead t =  new OneThead();

2:就緒狀態 – t.start(); - > 準備搶cpu的使用權。

3:運行狀態正在執行run方法的線程。

4:阻塞狀態執行線程休眠或是在線程裏面等待用戶的輸入。

5:死亡狀態- - 運行完成了run方法。

 

package cn.demo02;

 

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class Demo06 {

    public static void main(String[] args) {

        Thread t = new Thread() {

            @Override

            public void run() {

                // 1:聲明一個時間的格式化類 2009-12-09 12:345:56

                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                while (true) {

                    String str = sdf.format(new Date());

                    System.err.println(str);

                    //執行

                    try {

                        Thread.sleep(1000);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                }

            }

        };

        t.start();

        System.err.println("啓動完成");

    }

}

 

 

 

 

 

3:線程的建立方式

  兩種:

   1:繼承 Thread類,重寫run方法。

     (略)

   2:實現一個接口: java.lang.Runnable接口。

     package cn.demo02;

 

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class Demo07 {

    public static void main(String[] args) {

       // 3:建立一個線程類

       Thread t = new Thread(new OneThread());

       // 4:依然是啓動t

       t.start();

       System.err.println("Started...");

    }

 

}

 

// 1:開發一個類,實現接口

class OneThread implements Runnable {

    // 2:必需要實現run方法

    @Override

    public void run() {

       SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

       while (true) {

           System.err.println(sdf.format(new Date()));

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

       }

    }

}

 



 

4Thread類的源代碼

 

Class Thread implements Runable{

  /* What will be run. */

    private Runnable target;

    @Override

    public void run() {

        if (target != null) {

            target.run();

        }

    }

}

 

public class Demo08 {

    public static void main(String[] args) {

 

       Runnable run = new Runnable() {

           @Override

           public void run() {

             

              System.err.println("World....");

          

           }

       };

 

       Thread t = new Thread(run) {

           @Override

           public void run() {

              System.err.println("Hello...");

              super.run();

           }

       };

       t.start();

    }

}

相關文章
相關標籤/搜索