您的位置:首页 > 其它

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

2015-08-04 14:41 363 查看
工厂设计模式

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.Teacher

public 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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: