JavaBean
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象。
以下是javabean内省的例子:
public class ReflectIntroSpector2{
public static void main(String args[])throws Exception{
Person person = new Person("王强",10);
//利用javabean得到一个名字
String name ="name";
Object retVal = getProperty(person,name);
System.out.println(retVal);
//利用JavaBean设置一个值
Object value = "王小强";
setProperty(person,name,value);
System.out.println(person.getName());
}
private static Object getProperty(Object obj,String name)throws Exception{
//获取传过来对象的传过来的值
//第一个参数是属性名,第二个参数是要当做JavaBean的类
PropertyDescriptor pd = new PropertyDescriptor(name,obj.getClass());
Method methodGet= pd.getReadMethod();
//调用对象的get方法
Object object = methodGet.invoke(obj, null);
//返回得到的值
return object;
}
private static void setProperty(Object obj,String name,Object value)throws Exception{
PropertyDescriptor pd =
new PropertyDescriptor(name,obj.getClass());
//得到set方法
Method methodSet = pd.getWriteMethod();
//执行set方法
methodSet.invoke(obj,value);
}
}
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=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;
}
}
注解
-
概述:注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记
-
自带的三种注解的作用
@Deprecated 声明方法已过时
@SuppressWarnings 取消编译器警告
@Override 声明方法是继承自父类
public class Test {
//提醒编译器跳过过时方法提醒。
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
}
//提醒该方法过时了
@Deprecated
public static void timeOut(){
System.out.println("timeOut");
}
//编译时提醒是否覆盖了父类方法
@Override
public String toString() {
return "nihao";
}
泛型限定集合中的输入类型,让编译器挡住源程序中的非法输入。
使用泛型集合,可以将一个集合中的元素限定为一个特定类型,集合中只能存储同一个类型的对象;
编译器也不需要对对象进行强制类型转换;
在对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型。
当一个变量被声明为泛型时,只能被实例变量、方法和内部类调用,而不能被静态变量和静态方法调用。因为静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数。
class hello<T, V> {
hello(){
}
public T getName(){
return name;
}
public void setName(T name){
this.name = name;
}
public V getAge(){
return age;
}
public void setAge(V age){
this.age = age;
}
private T name;
private V age;
public static void main(String[] args){
hello<String, Integer> he = new hello<String, Integer>();
he.setAge(10);
he.setName("Rollen Holt");
System.out.println(he.getName() + " " + he.getAge());
}
}