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
- 08-04 工厂设计模式 反射 线程 注解
- 08-04 工厂设计模式 反射 线程 注解
- java基础第九讲——反射、工厂设计模式、注解、线程、网络与线程的结合
- 反射--工厂设计模式
- .Net反射工厂设计模式
- 设计模式---抽象工厂模式+反射+配置文件
- 设计模式之反射+抽象工厂模式
- 设计模式-----基于反射工厂模式
- 设计模式之工厂模式与反射
- Dot NET设计模式—反射工厂
- Dot NET设计模式—反射工厂
- Dot NET设计模式—反射工厂
- Dot NET设计模式—反射工厂
- Dot NET设计模式—反射工厂
- Java反射机制 -工厂设计模式
- java反射机制-工厂设计模式
- Dot NET设计模式—反射工厂
- 简单工厂设计模式-反射机制
- Code Forces 451 E. Devu and Flowers(组合数学)
- 08-03 网络通信(UDP) URL XML解析器 JSON、DOM、SAX 枚举
- spring4.0.0之环境搭建
- 薛定谔的猫
- Android Fragment 切换时布局重叠
- 08-04 工厂设计模式 反射 线程 注解
- 【JLOI2014】【BZOJ3629】聪明的燕姿
- Vector Quantization(学习Free Mind知识整理)
- 验证角谷猜想
- 各种坐标系详解
- 乱侃C++
- VBScript,checkbox,选择问题
- 08-05 Server、Client可连续发送 生产者、消费者 死锁解决 Server、Client窗口实现
- Extjs表单验证的编写方法及vtypes集合