笔记:

/**直接 throws Exception,完美包含全部异常!
* ---------------------------
* Class:
* 首先创建一个类, 接着编译程序: javac(exe) file.java,生成.class文件,
* 之后执行程序: java(exe) file ,将此.class文件加载到内存中,就是一个运行时类,存在缓存区;
* 每一个运行时类只能加载一次!
* ------------------------
* 反射:
* 有了反射,可以通过反射创建一个类的对象,并调用其中的结构:
* //0.声明Person的class类
* //1.创建clazz对应的运行时类Person 类的对象//newInstance()表示新建一个对象
* // 2.通过反射调用运行时类的指定的属性
* 2.1调用公用属性 getField()
* 2.2调用任意属性 getField(),setAccessible(true)设置可更改,然后再set()具体值
* //3.通过反射调用运行时类的指定方法:invoke(p,...)
* ---------------------
*
*/

测试代码:

import org.junit.Test;
import java.lang.reflect.*;
import java.lang.reflect.Method; public class Test1 {
@Test
public void test3() throws Exception{
Person p=new Person();
Class clazz=p.getClass(); //通过运行时类的对象,调用其getClass()
System.out.println(clazz);
} //有了反射,可以通过反射创建一个类的对象,并调用其中的结构
@Test
public void test2() throws Exception {
//0.声明Person的class类
Class clazz = Person.class;
//1.创建clazz对应的运行时类Person 类的对象
Person p = (Person) clazz.newInstance(); //newInstance()表示新建一个对象
System.out.println(p); //Person{age=0, name='null'}
// 2.通过反射调用运行时类的指定的属性
//2.1调用公用属性 getField()
Field f1 = clazz.getField("name");
f1.set(p, "LiuDeHua");
System.out.println(p); //Person{age=0, name='LiuDeHua'}
//2.2调用任意属性 getField(),setAccessible(true)设置可更改,然后再set()具体值
Field f2 = clazz.getDeclaredField("age");
f2.setAccessible(true);
f2.set(p, 2000);
System.out.println(p); //Person{age=2000, name='LiuDeHua'} //3.通过反射调用运行时类的指定方法:invoke(p,...)
Method m1=clazz.getMethod("show");
m1.invoke(p); //空参数
Method m2=clazz.getMethod("display",String.class);
m2.invoke(p,"CHINA"); //有参数参数
}
@Test//在有反射以前,如何创建一个类的对象,并调用其中的方法/属性
public void test1(){
Person p=new Person();
p.setAge(10);
p.setName("TangWei");
System.out.println(p);
p.show();
p.display("HK");
} } class Person extends Creature<String> implements Comparable,MyInterface {
private int age;
public String name; public Person() {
}
public void show(){
System.out.println(this.getClass().getName()+"我是一个人类!");
}
public void display(String s){
System.out.print("我的国籍是:"+s);
}
public Person(int age, String name) {
this.age = age;
this.name = 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 String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
} @Override
public int compareTo(Object o) {
return 0;
}
}

输出结果:

Person{age=10, name='TangWei'}
任务222_反射.Person我是一个人类!
我的国籍是:HKPerson{age=0, name='null'}
Person{age=0, name='LiuDeHua'}
Person{age=2000, name='LiuDeHua'}
任务222_反射.Person我是一个人类!
我的国籍是:CHINAclass 任务222_反射.Person

Java基础 反射的基础应用和Class笔记的更多相关文章

  1. JAVA反射机制基础概念

    反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. J ...

  2. Java基础-反射(reflect)技术详解

    Java基础-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类加载器 1>.JVM 类加载机制  如下图所示,JVM类加载机制分为五个部分 ...

  3. Java 高级基础——反射

    Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...

  4. Java基础—反射(转载)

    转载自: JAVA反射与注解 JAVA反射 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射机制是什么 反射 ...

  5. java基础——反射机制

    反射机制是什么 反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  6. java Reflection(反射)基础知识讲解

    原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...

  7. Java的反射基础技术

    今天本人给大家讲解一下Java的反射基础技术,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 什么是反射? 反射它是根据字节码文件可以反射出类的信息.字段. ...

  8. [java 基础]反射入门

    原文 概况 使用java的反射,可以让我们检查(或者修改)类,接口,字段,方法的特性.当你在编译期不知道他们的名字的时候非常有用. 除此之外,可以使用反射来创建实例,调用方法或者get/set 字段值 ...

  9. JAVA基础-反射机制

    什么是JAVA的反射机制 Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其 ...

随机推荐

  1. 2019-11-8 Linux作业 李宗盛

    linux系统的特点:完全免费,高效,安全稳定.支持多种硬件平台.有好的用户界面.强大的网络功能.支持多任务多用户. linux一般有三个主要部分:内核.命令解释层.实用工具. 那合适系统的心脏,是运 ...

  2. 【VS开发】【miscellaneous】windows(64位)下使用curl命令

    windows(64位)下使用curl命令 Curl命令可以通过命令行的方式,执行Http请求.在Elasticsearch中有使用的场景,因此这里研究下如何在windows下执行curl命令. 工具 ...

  3. Shiro认证、角色、权限

    Apache Shiro 是 Java 的一个安全框架.Shiro 可以帮助我们完成:认证.授权.加密.会话管理.与 Web 集成.缓存等. Shiro的内置Realm:IniRealm和JdbcRe ...

  4. 前端入门系列之CSS

    CSS (Cascading Style Sheets) 是用来样式化和排版你的网页的 —— 例如更改网页内容的字体.颜色.大小和间距,将内容分割成多列或者加入动画以及别的装饰型效果. CSS是什么 ...

  5. 总结几个最近处理问题中使用http协议的代码

    demo1:几个不同的http请求方式总结: ----------------------------------------------------------------------------- ...

  6. quartz 简单定时器

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  7. 【学习笔记】RMQ-Range Minimum/Maximum Query (区间最小/最大值)

    RMQ是一类询问区间最小/最大值的问题. 这类问题一般分成两类:静态区间(无修改),动态区间(带修改). 对于动态区间查询最大/最小,我们显然可以用线段树来解决…… 那么对于静态区间查询最大/最小的问 ...

  8. Linux-BSP-驱动-面试题大全

    1. 了解Linux的那个驱动?举例讲讲. a.驱动注册过程:通过platform bus, platform_device_register和platform_driver_register时都会在 ...

  9. TZOJ2882: 美食节之感恩父母

    #include<stdio.h> int main() { ],b[],i,j,max,m,t1,t2,t3; while(scanf("%d",&m),m) ...

  10. MySQL explain功能展示的各种信息的解释

    1.id: MySQL Query Optimizer 选定的执行计划中查询的序列号. 2.select_type: 所使用的查询类型,主要有以下这几种查询类型.  DEPENDENT SUBQUER ...