08-04 工厂设计模式 反射 线程 注解

来源:互联网 发布:淘宝开店上传照片要求 编辑:程序博客网 时间:2024/06/06 01:25

工厂设计模式

public class Person {    public void sleep(){        System.out.println("人睡觉");    }}public class Teacher extends Person{    @Override    public void sleep() {        System.out.println("老师睡觉");         }   }public class Student extends Person{    @Override    public void sleep() {        System.out.println("学生睡觉");         }   }  config.properties     person=com.factory.Teacherpublic class Factory {    public static Person createPerson(){        Person person=null;        Properties p=new Properties();        try {            p.load(new FileInputStream("config.properties"));            String clazzName=p.getProperty("person");            Class clazz=Class.forName(clazzName);            person=(Person) clazz.newInstance();        }  catch (IOException e) {                      e.printStackTrace();        } catch (ClassNotFoundException e) {                        e.printStackTrace();        } catch (InstantiationException e) {                        e.printStackTrace();        } catch (IllegalAccessException e) {                        e.printStackTrace();        }        return person;    }   }public class FactoryTest {    public static void main(String[] args) {        Person person=Factory.createPerson();        person.sleep();    }} 

反射

public class Student {    public String clazz;    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}public class Test {    public static void main(String[] args) {        Class<Student> clazz=Student.class;//      Field[] fields=clazz.getFields();    //以数组的形式返回所有公共属性        Field[] fields=clazz.getDeclaredFields();//以数组的形式返回所有属性        for(Field field:fields){            System.out.println(field.getName());//输出属性名称            System.out.println(field.getType().getName());//输出属性类型            System.out.println(field.getModifiers());//返回属性修饰符的整数表示形式        }        Student lisi=new Student();        try {            Field age=clazz.getDeclaredField("age");//得到指定的属性名称age            age.setAccessible(true);//取消java访问修饰符检查            age.set(lisi, 18);//将对象lisi的age属性设置为18            age.setAccessible(false);//取消 取消检查            System.out.println(lisi.getAge());//输出lisi的age        } catch (NoSuchFieldException e) {                      e.printStackTrace();        } catch (SecurityException e) {                     e.printStackTrace();        } catch (IllegalArgumentException e) {                      e.printStackTrace();        } catch (IllegalAccessException e) {                        e.printStackTrace();        }           }}

线程

//**MyThread**public class MyThread extends Thread{    public MyThread(){          }    public MyThread(String name){        super(name);            }    private int ticket=200;    @Override    public void run() {        while(ticket>0){            System.out.println(getName()+"卖出了第"+ticket+"票");            ticket--;            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }}public class Test {    public static void main(String[] args) {                        MyThread t1=new MyThread("售票员甲");        MyThread t2=new MyThread("售票员乙");        MyThread t3=new MyThread("售票员丙");        t1.start();        t2.start();        t3.start();    }}//**MyRunnable**public class MyRunable implements Runnable{    private int i=100;        private String s="asd";    public void run() {        while(i>0){            try {                Thread.sleep(500);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            //锁            synchronized (s) {                if(i>0){                    System.out.println(Thread.currentThread().getName()+"卖出了第"+i+"票");                    i--;                }                           }        }public class Test {    public static void main(String[] args) {         MyRunable runable=new MyRunable();        Thread t1=new Thread(runable,"售票员1");        Thread t2=new Thread(runable,"售票员2");        Thread t3=new Thread(runable,"售票员3");        t1.start();        t2.start();        t3.start();         //**john() 用法**//      MyRunable runable=new MyRunable();//      Thread t1=new Thread(runable,"售票员1");//      t1.start();//      try {//          t1.join(1000);//          //join()是等待进程结束,join(1000)是等待该线程执行一秒//      } catch (InterruptedException e) {//          // TODO Auto-generated catch block//          e.printStackTrace();//      }//      System.out.println("程序进程结束");    }}//**死锁**public class MyRunable1 implements Runnable{    String lock1="asd";    String lock2="qwe";    @Override    public void run() {        synchronized(lock1){            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        System.out.println("我在等LOCK2");        synchronized (lock2) {                  }           }   }public class MyRunable2 implements Runnable{    String lock1="asd";    String lock2="qwe";    @Override    public void run() {        synchronized(lock2){            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        System.out.println("我在等LOCK1");        synchronized (lock1) {                  }           }}public class Test {    public static void main(String[] args) {         MyRunable1 run1=new MyRunable1();        MyRunable2 run2=new MyRunable2();        Thread t1=new Thread(run1,"张思");        Thread t2 =new Thread(run2, "李斯");        t1.start();        t2.start();     }}

注解

public class Teacher {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }   }@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface TeacherAnnotation {    int age() default 19;    String name();}public class Clazz {    @TeacherAnnotation(age=20,name="张三")    private Teacher javaTeacher;    @TeacherAnnotation(age=20,name="李斯")    private Teacher englishTeacher;    @TeacherAnnotation(name="王武")    private Teacher mathTeacher;    private int clazzNum;    private String name;    public Clazz(){        Class clazz=Clazz.class;        Field[] fields=clazz.getDeclaredFields();        //得到clazz所有的属性        for(Field field:fields){            TeacherAnnotation ta=field.getAnnotation(TeacherAnnotation.class);            //得到TeacherAnnotation注解,如果没有返回null            if(ta==null){                continue;//如果位null跳出            }else{                int age=ta.age();//得到该注解的age值,如果没写则赋默认值                String name=ta.name();//得到该注解的name值                Teacher teacher=new Teacher();                teacher.setAge(age);                teacher.setName(name);//根据注解的值创建新的对象                field.setAccessible(true);//设置为不检查属性的访问修饰符                try {                    field.set(this, teacher);//将这个Teacher对象赋给此班级对象                } catch (IllegalArgumentException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IllegalAccessException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }//this指的是Student的对象                //将Student的对象的age属性值修改为i                field.setAccessible(false);            }        }    }    public Teacher getJavaTeacher() {        return javaTeacher;    }    public void setJavaTeacher(Teacher javaTeacher) {        this.javaTeacher = javaTeacher;    }    public Teacher getEnglishTeacher() {        return englishTeacher;    }    public void setEnglishTeacher(Teacher englishTeacher) {        this.englishTeacher = englishTeacher;    }    public Teacher getMathTeacher() {        return mathTeacher;    }    public void setMathTeacher(Teacher mathTeacher) {        this.mathTeacher = mathTeacher;    }}public class Test {    public static void main(String[] args) {        Clazz clazz=new Clazz();        System.out.println(clazz.getEnglishTeacher().getName());        System.out.println(clazz.getMathTeacher().getAge());    }}
0 0
原创粉丝点击