15/8/4反射,注解,工程设计模式,线程
来源:互联网 发布:全景生成精灵源码 编辑:程序博客网 时间:2024/05/16 15:32
反射注解
工厂设计模式
线程
反射例子
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(); }}
0 0
- 15/8/4反射,注解,工程设计模式,线程
- 反射、注解、线程
- 08-04 工厂设计模式 反射 线程 注解
- 08-04 工厂设计模式 反射 线程 注解
- 工程设计
- RMI 远程对象工程设计模式
- java基础第九讲——反射、工厂设计模式、注解、线程、网络与线程的结合
- java反射8(注解)
- 反射、注解
- 反射+注解
- 反射注解
- 黑马程序员_高新技术:4) 注解、反射
- 反射、注解和线程、Thread、同步锁问题和基于多线程的Server通信(8.4)
- Java基础 :反射、注解、代理、线程池、依赖的学习和理解
- 注解与反射
- java反射注解
- 反射,注解,泛型,代理
- 注解的反射
- HDU 3720 Arranging Your Team
- 设计模式——适配器模式
- C语言编程入门——枚举与宏定义
- HDOJ 5349 MZL's simple problem 【set】
- Spring中RedirectAttributes对象重定向传参
- 15/8/4反射,注解,工程设计模式,线程
- 每日工作记录之1
- 图论:fleury算法
- Android手机用WIFI与Android studio连接,真机测试APP
- TextView设置连接的方式
- iOS界面-仿网易新闻左侧抽屉式交互
- leetcode Majority Element 寻找出现次数最多元素
- Eclipse中SVN的安装步骤(两种)和使用方法
- HDOJ 5347 MZL's chemistry 【打表】