15/8/4反射,注解,工程设计模式,线程

反射注解

工厂设计模式

线程

反射例子

1.把所有的java文件抽象起来抽象到一个类中的方法就是反射


    public static void main(String[] args) {
//把所有的java文件抽象起来抽象到一个类中的方法就是反射
        Class<Student> clazz=Student.class;
//      Field[] field=clazz.getFields();//返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段
//      Field[] fields=clazz.getDeclaredFields();//以数组形式返回所有属性
//      for (Field field : fields) {
//          System.out.println(field.getName());//返回属性的名称
//          System.out.println(field.getModifiers());//返回修饰符的整数表示形式
//          System.out.println(field.getType().getName());//返回属性的类型名称
//      }
        Student zhangsan=new Student();//创建一个Student类对象zhangsan
        try {
            Field age=clazz.getDeclaredField("age");//得到指定名称的属性;
            age.setAccessible(true);//取消JAVA访问修饰符的检查
            age.set(zhangsan,18);//将对象张三的age属性的值更改为18
            age.setAccessible(false);//取消  取消检查
            System.out.println(zhangsan.getAge());//输出Student类对象zhangsan的age值
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
注解例子
@Target(ElementType.FIELD)//表示此注解只能用到属性上
@Retention(RetentionPolicy.RUNTIME)//表示此注解的范围是可执行的
public @interface TeacherAnnotation {
    int age() default 19;//如果注解中没有给出age的值,那么默认的值为19
    String name();
}

    @TeacherAnnotation(age=18,name="java")
    private  Teacher javaTeacher;
    @TeacherAnnotation(age=22,name="english")
    private  Teacher englishTeacher;
    @TeacherAnnotation(name="math")
    private  Teacher mathTeacher;
    public Clazz(){
        Class clazz=Clazz.class;//创建一个Class类的对象clazz
        Field[] fields=clazz.getDeclaredFields();//得到这个类中的所有属性
        for (Field field : fields) {
//          得到TeacherAnnotation的注解如果没有就返回Null
            TeacherAnnotation ta=field.getDeclaredAnnotation(TeacherAnnotation.class);
            if (ta==null) {
                continue;//跳出
            }else {
                int age=ta.age();//得到该注解的age值,如果没有就用默认值代替
                String name=ta.name();//得到该注解的name值
                Teacher teacher=new Teacher();//创建一个新的Teacher对象
                teacher.setAge(age);//将得到的age和name值放到该对象中
                teacher.setName(name);
                try {
                    field.setAccessible(true);//取消java修饰符访问
                    field.set(this, teacher);//将该Teacher对象放到此班级的对象中
                    field.setAccessible(false);//取消 取消访问
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    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 static void main(String[] args) {
        Clazz clazz=new Clazz();
        System.out.println(clazz.getEnglishTeacher().getName());
        System.out.println(clazz.getMathTeacher().getAge());
    }

工厂化设计模式例子

    public static Person creatPerson(){//静态方法
        Person person=null;
        Properties p=new Properties();//创建一个无默认值的空属性列表
        try {
            p.load(new FileInputStream("config.properties"));//从输入流中读取属性列表(键和元素对)。
            String clazzName=p.getProperty("person");//用指定的键在此属性列表中搜索属性,返回属性列表中具有指定键值得值
            Class clazz=Class.forName(clazzName);//返回与带有给定字符串名的类或接口相关联的 Class 对象
            person=(Person) clazz.newInstance();//创建此 Class 对象所表示的类的一个新实例
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return person;
    }

    public static void main(String[] args) {
        Person person=Factory.creatPerson();
        person.sleep();
    }
public class Teacher extends Person{
    private int age;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public void sleep() {
        System.out.println("老师睡觉");
    }
}


线程例子


    public static void main(String[] args) {
//      多个线程同时启动,同时运行相同数据
//      MyThread thread1=new MyThread("西西");
//      MyThread thread2=new MyThread("问问");
//      MyThread thread3=new MyThread("恩恩");
//      MyThread thread4=new MyThread("肉肉");
//      thread1.start();
//      thread2.start();
//      thread3.start();
//      thread4.start();
//      多个线程共用一个数据
//      MyRunnable runnable=new MyRunnable();
//      Thread t1=new Thread(runnable,"售票员one");
//      Thread t2=new Thread(runnable,"售票员two");
//      Thread t3=new Thread(runnable,"售票员three");
//      Thread t4=new Thread(runnable,"售票员four");
//      t1.start();
//      t2.start();
//      t3.start();
//      t4.start();
//      join用法
//      MyRunnable runnable=new MyRunnable();
//      Thread t1=new Thread(runnable,"售票员one");
//      t1.start();
//      try {
//          t1.join(1000);//直接调用join()指等待该线程结束 调用join(1000)指等待该线程执行1s
//      } catch (InterruptedException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }
//      System.out.println("程序运行结束");
        MyCount runnable=new MyCount();
        Thread t1=new Thread(runnable,"售票员one");
        Thread t2=new Thread(runnable,"售票员two");
        Thread t3=new Thread(runnable,"售票员three");
        Thread t4=new Thread(runnable,"售票员four");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
public class MyThread extends Thread{
    public MyThread(){

    }
    public MyThread(String name){
        super(name);
    }
    private int tickets=100;
    @Override
    public void run() {
        while(tickets>0){
            System.out.println(getName()+"售出了第"+tickets+"张票");
            tickets--;
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
public class MyRunnable implements Runnable{
    private int i=100;
    private String s="new";
    @Override
    public void run() {
        while(i>0){
            try {
                Thread.sleep(50);
            } 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 MyCount implements Runnable{
    private int count=1234; 
    String s="money";
    @Override
    public void run() {
        while(count>100){
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            synchronized (s) {
                if (count>100) {
                    count-=100;
                    System.out.println(Thread.currentThread().getName()+"取走了100还剩下"+count);
                }
            }
        }

    }

}
public class MyRunnable01 implements Runnable {

    @Override
    public void run() {
        String lock1 = "abc";
        String lock2 = "123";
        synchronized (lock1) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("我在等lock2");
        synchronized (lock2) {

        }


    }

}
public class MyRunnable02 implements Runnable{

    @Override
    public void run() {
        String lock1 = "abc";
        String lock2 = "123";
        synchronized (lock2) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("我在等lock1");
        synchronized (lock1) {

        }





    }

}
public class MyRunnableLockTest {
    public static void main(String[] args) {
        MyRunnable01 mr1=new MyRunnable01();
        MyRunnable02 mr2=new MyRunnable02();
        Thread t1=new Thread(mr1,"张三" );
        Thread t2=new Thread(mr2,"李四" );
        t1.start();
        t2.start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值