黑马程序员--Java基础--14JavaBean,注解,类加载器

----------- android培训java培训java学习型技术博客、期待与您交流! ------------

JavaBean

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

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

     JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,则不用管。如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,也不用管。去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。

简单内省:

public class ReflectField {
	public static void main(String[] args) throws Exception {
		Student stu = new Student(12, "张京辉");

		String propertyName = "age";
		// 声明PropertyDescriptor类(属性描描述类),获取信息
		PropertyDescriptor pd1 = new PropertyDescriptor(propertyName, stu
				.getClass());
		// 获取读取数据的方法
		Method readMethod = pd1.getReadMethod();
		// 读取age
		Object retVal = readMethod.invoke(stu);
		System.out.println(retVal);

		PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, stu
				.getClass());
		// 获取写入数据的方法
		Method writeMethod = pd1.getWriteMethod();
		// 设置age值
		Object value = 24;
		// 对age重新赋值
		writeMethod.invoke(stu, value);
		System.out.println(stu.getAge());
	}
}

class Student {
	private int age;
	public int score;
	public String name;
	public String grade;

	public Student(int age, String name) {
		this.age = age;
		this.name = name;
	}

	public String getGrade() {
		return grade;
	}

	public void setGrade(String grade) {
		this.grade = grade;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

注解

1、注解是Java1.5的新特性。

2、一个注解就是一个类,使用注解,就相当于创建了一个对象。

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

示例:

//加入自定义注解
@MyAnnotation
public class AnnotationTest extends Father {
	// @SuppressWarnings("deprecation"),此注解的作用就是告诉编译器,
	// 虽然我用的方法过时了,但是我还是坚持要用,你就不要再提示了。
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		// 当执行一切过时的方法时,eclipse会自动划线
		// 提示开发人员调用的方法已经过时,建议不要调用
		System.runFinalizersOnExit(true);

		String str = "过时了";
		sop(str);

		// 如果存在该元素的指定类型的注释,则返回这些注释
		if (AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)) {
			MyAnnotation itheimaAnnotation = AnnotationTest.class
					.getAnnotation(MyAnnotation.class);
			System.out.println(itheimaAnnotation);
		}

	}

	// sop方法可以通过@Deprecated注解标记为过时
	@Deprecated
	private static void sop(Object str) {
		System.out.println(str);
	}

	// 表示一个方法声明打算重写超类中的另一个方法声明
	@Override
	public void sayHello(String ss) {
		System.out.println(ss);
	}

}

class Father {
	public void sayHello(String s) {
		System.out.println(s);
	}
}

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

//自定义注解
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}

输出:

过时了

@GaoXin.MyAnnotation()


类加载器

    Java虚拟机中可以安装多个类加载器,系统默认有三个主要的类加载器,每个类加载器负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader。

类加载器也是Java类,因此java类的类加载器本身也要被其他的类加载器加载,显然必须有第一个类加载器不是java类,它就是BootStrap类加载器。


类加载器的委托机制

当Java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢?
首先当前线程的类加载器去加载线程中的第一个类。
如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B。
还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。

示例:

public class ClassLoader {
public static void main(String[] args) {
	//ClassLoader类是由AppClassLoader类加载器加载的,System类是由BootStrap类加载器加载的
	System.out.println(ClassLoader.class.getClassLoader().getClass().getName());
	System. out.println(System.class.getClassLoader());
	//AppClassLoader类加载器的父级别类加载器是ExtClassLoader类加载器
	System.out.println(ClassLoader.class.getClassLoader().getParent());
	//ExtClassLoader类加载器的父级别类加载器是BootStrap类加载器
	System.out.println(ClassLoader.class.getClassLoader().getParent().getParent());
}
}

输出结果:

sun.misc.Launcher$AppClassLoader

null

sun.misc.Launcher$ExtClassLoader@37b90b39

null


-----------  android培训 java培训 java学习型技术博客、期待与您交流! ------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值