黑马程序员——高新技术(javabean 注解 泛型 )

------- android培训java培训、期待与您交流! ----------

一.javabean

内省(IntroSpector)-->JavaBean-->特殊的java类

JavaBean这种类中方法的名字要按特定的规则来起名字。

Class Person

{

  private int x;

  public int getAge(){

  return age;

}

  public void setAge(int age);//当做javabean来看,我们说设置age属性,而不是设置x属性。

{

  this.x= age;

}

}

可以把一个javabean当做一个普通的类进行操作。

一个普通的类不一定可以当做javabean来操作(如果由get set方法就可以当做javabean来操作)。

 

如果把这个类当做javabean来看,那javabean的属性是根据get和set方法的名称推断出来的。而不是根据内部成员变量的名称推断出来的。

去掉set和get之后剩下的就是javabean属性名

Age-->如果第二个字母是小的,则把第一个字母变成小的-->age

gettime-->time

setTime-->time

getCPU-->CPU

把类按照javabean的方式来处理的方便之处。

JavaBean是一种特殊的类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

在两个模块中传递多个信息,可以将这些信息封装到一个Javabean中,这种JavaBean的实例对象通常称之为值对象(Value_Object,VO)。这些信息在类中用私有字段来存储。如果读取或者设置这些字段的值,则需要通过一些相应的方法来访问。

ReflectPoint pt1 = new ReflectPoint(3,5);

String propertyName = "x";要获取的javabean的属性的名字

PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());

Method methodGetX = pd.getReadMethod();

Object retVal = methodGetX.invoke(pt1);//get方法没有参数。不知道返回值类型,定义成Object

 

Method methodSetX = pd.getWriteMethod();

methodSetX.invoke(pt1,7);//set方法接收参数

pt1.getX();

 

将对JavaBean的属性的Set和Get抽取成方法

private static void setProperty(Object pt1, String propertyName,
   Object value) throws IntrospectionException,
   IllegalAccessException, InvocationTargetException {
  PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
  Method methodSetX = pd2.getWriteMethod();
  methodSetX.invoke(pt1,value);
 }

 private static Object getProperty(Object pt1, String propertyName)
   throws IntrospectionException, IllegalAccessException,
   InvocationTargetException {
  PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
  Method methodGetX = pd.getReadMethod();
  Object retVal = methodGetX.invoke(pt1);
  return retVal;
 }

BeanUtils工具包。

该工具包提供了设置和读取javabean属性的方法。

BeanUtils.getProperty(pt1,"x");//返回类型是字符串。

BeanUtils.setProperty(pt1,"x","9");//参数是字符串

好处1:把set和get方法的成员的类型都当做字符串来操作,完成了自动转换。

BeanUtils.setProperty(pt1,"birtyday.time","111")//Date能看成一个javabean,birtyday.time是一个复核属性。

好处2:支持属性的级联操作。

好处3:copyProperties方法把一个对象身上的属性拷贝到另一个对象身上。

可以把一个javabean的属性转换成map集合。

populate 把map集合中键值填充到javabean属性中。

Map map = {name:"zxx",age,age:18};

BeanUtils.setProperty(map,"name","lhm");//把map集合的name属性的值改为"lhx";

PropertyUtils.setProperty(pt1,"x",9);//这里的9要写x属性的本来类型。不想进行类型转换就用这个

—————————————————————————————————————————————————

2.了解注解及java提供的几个基本注解

注解相当于一种标记,在程序中加了注解就等同于为程序打上了某种标记,没加,则等于没有某种标记,以后,java编译器,开发工具和其他程序可以用反射了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

黑马程序员_高新技术之javabean <wbr>注解 <wbr>泛型

注解是个类,用这个注解就是创建这个类的实例对象。

@sSuppressWarning("deprecation")不要提示过时了。

@Deprecated 提示这个方法过时了

@override 判断是覆盖父类。在编译器判断。不是就报错

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import cn.itcast.day1.EnumTest;
import cn.itcast.day1.EnumTest.TrafficLamp;

@Retention(RetentionPolicy.RUNTIME)//注解的注解,称之为元注解。Retention这个注解指示注释类型要保留多久,如果不存在Retention注解,则保留策略默认为RetentionPolicy.CLASS。

注解可能存在的阶段java源文件,class文件,内存中的字节码。

@override在java源文件阶段。RetentionPolicy.SOURCE

@SuppressWarning在java源文件阶段RetentionPolicy.SOURCE

@Deprecated在内存中的字节码 RetentionPolicy.RUNTIME
@Target({ElementType.METHOD,ElementType.TYPE})//

指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 例如,此元注释指示该声明类型是其自身,即元注释类型。它只能用在注释类型声明上:

ANNOTATION_TYPE
          注释类型声明
CONSTRUCTOR
          构造方法声明
FIELD
          字段声明(包括枚举常量)
LOCAL_VARIABLE
          局部变量声明
METHOD
          方法声明
PACKAGE
          包声明
PARAMETER
          参数声明
TYPE
          类、接口(包括注释类型)或枚举声明

public @interface ItcastAnnotation {
 String color() default "blue";//为注释增加属性。默认是blue
 String value();
 int []arrayAttr()default {3,4,5};
 
 EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;//属性可以是枚举类对象。
 MetaAnnotation annotationAttr()default @MetaAnnotation("lhm");//属性可以是注解
}

 

if(AnnotationTest.class.isAnnotatioPresent(ItcastAnnotation.class)) //判断注解在不在的方法。

   ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);//得到注解,但是不知道得到的是哪个注解,需要进行类型转换

@ItcastAnnotation(annotationAttr = @MetaAnnotation("flx"),color = "red",value="abc",arrayAttr= 1)
public class AnnotationTest {

 
 

 @SuppressWarnings("deprecation")
 @ItcastAnnotation("xyz")//只有一个属性需要指示,可以省略属性名字。
 public static void main(String[] args)throws Exception {
  // TODO Auto-generated method stub
  System.runFinalizersOnExit(false);
  if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
   ItcastAnnotation annotation = AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
   System.out.println(annotation.color());
   System.out.println(annotation.value());
   System.out.println(annotation.arrayAttr().length);
   System.out.println(annotation.lamp().nextLamp().name());
   System.out.println(annotation.annotationAttr().value());
   
   
  }
  
 }
 @Deprecated
 public static void sayHello(){
  System.out.println("hi,传智播客");
 }
}
————————————————————————————————————————————————

3.泛型

数组中的元素不能使用参数化类型。

jdk1.5的集合类希望你在定义集合时,明确表示你要向集合中装哪种类型的数据,无法加入指定类型以外的数据

泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会除掉类型。

当从集合中获取一个对象时,编译器也可以知道这个对象的类型,不需要对对象进行强制类型转换。

Constructor constructor1 = String.class.getConstructor(StringBuffer.class);//指定是String类型的构造器。
  String str2 = constructor1.newInstance(new StringBuffer("abc"));//不需要将实例对象强行转换了。

 

跳过编译器用反射可以向带类型参数的集合中添加其他类型的元素,因为编译完的结果已经去类型化了。

Collectioncollection3 = new ArrayList();

Method methodAdd = collection3.getClass().getMethod("add",Object.class);

methodAdd.invoke(collection3,1);

泛型是给编译器看的,运行的时候没有泛型的痕迹了。

 

黑马程序员_高新技术之javabean <wbr>注解 <wbr>泛型

泛型通配符

定义一个方法打印任何类型参数集合中的数据

public static void printCollection(Collection

------- android培训java培训、期待与您交流! ----------详细请查看:http://edu.csdn.net

黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值